Seminář programování pro septimány

Drobné úlohy

Povinností pro první pololetí je získat 20 bodů z 30 možných. Úlohy se odevzdávají mailem; před odevzdáním každé úlohy si ji můžete vyzkoušet na několika testovacích sadách.

Řešením úlohy má být vždycky funkce main, která dostává vstup jako svoje parametry a vrací výstupní hodnotu. Jinými slovy, nepoužívejte funkce print() a input().

  1. Počet znaků na vstupu
  2. Text a číslo, převádění datových typů
  3. Pole jako vstup i výstup
  4. Vzdálenost dvou bodů v prostoru
  5. Maximum v poli polí čísel
  6. Pořadí seznamu
  7. Odstraňte záporná čísla ze seznamu
  8. Minimum nebo maximum
  9. Kde je Waldo
  1. Všechny nejdelší řetězce ze seznamu
  2. Zaokrouhlení na zlomek z desetinného čísla
  3. Prohozené dvojice v seznamu
  4. Souvislé úseky celých čísel
  1. Had poskládaný v mřížce
  2. Řešení neřešitelné rovnice

Úlohy z loňska

Tenhle seznam sdílím pro váš přehled o obtížnosti zadání (a taky, abych ho sám neztratil). Vloni jsme pracovali v Javascriptu.

  1. Počet znaků na vstupu
  2. Text a číslo, převádění datových typů
  3. Pole jako vstup i výstup
  4. Pole pozpátku
  5. Vzdálenost dvou bodů v prostoru
  6. Hvězdičky v daném počtu
  7. Maximum v poli polí čísel
  8. Společný překryv dvou řetězců
  9. Rovnost dvou polí
  1. Všechny nejdelší řetězce z pole
  2. Zarovnání na střed, jedno slovo na řádek
  3. Zaokrouhlení na zlomek z desetinného čísla
  4. Nejbližší body ve 3d prostoru
  5. Nejmenší absolutní hodnota v poli
  6. Zalomení textu na danou maximální šířku
  7. Nejbližší dvojice z pole čísel
  8. Najdi h, ale ne ch
  9. Špičky v grafu vyjádřeném jako pole čísel
  10. Melodie zapsaná jako stoupání a klesání
  1. Kdy cvaknout jízdenku, pokud víme, kdy chodí revizor
  2. Pauza mezi oslavami narozenin
  3. Identický model ve formátu .obj
  4. Největší obdélník z jedniček
  5. Plánování, kdy mají všichni volno
  6. Šikmá věž s danou délkou úhlopříčky
  7. Klouzavý průměr veledůležité veličiny
  8. Intervaly splněných úloh
  9. Dlaždičky na obdélníkové podlaze
  10. Měsíce a dvojité zatmění
  11. Adventní kalendář pro gurmány

A jako bonus tady jsou i ukázková řešení:

Číslohezké řešenínejkratší řešení
01 function main(arg) { return arg.length; } main=a=>a.length (16 znaků)
02 function main(arg) { if (typeof arg === "string") { return Number(arg); } else { return String(arg); } } main=a=>a[0]?+a:""+a (20 znaků)
03 function main(arg) { var vysledek = []; for (var x of arg) { vysledek.push(x.length); } return vysledek; } main=a=>a.map(x=>x.length) (26 znaků)
04 function main(arg) { var vysledek = []; for (var i=arg.length - 1; i>=0; i--) { vysledek.push(arg[i]); } return vysledek; } main=a=>a.reverse() (19 znaků)
05 function square(x) { return x * x; } function main(a, b) { var vysledek = 0; for (var i=0; i<3; i++) { vysledek += square(a[i] - b[i]); } return Math.sqrt(vysledek); } main=(a,b)=>a.reduce((r,x,i)=>r+(x-b[i])**2,0)**.5 (50 znaků)
06 function main(arg) { var vysledek = ""; for (var i=0; i<arg; i++) { vysledek += "*"; } return vysledek; } main=a=>"*".repeat(a) (21 znaků)
07 function main(arg) { var vysledek = 0; for (var pole of arg) { for (var x of pole) { if (x > vysledek) { vysledek = x; } } } return vysledek; } main=a=>Math.max(...a.flat()) (29 znaků)
08 function main(a, b) { for (var i = 0; i <= a.length; i++) { var part = a.substring(i); if (b.startsWith(part)) { return part; } } } main=(a,b)=> [...b+" "] .map((x,i)=>b.slice(0,i)) .filter(x=>a.endsWith(x)) .pop() (78 znaků)
09 function main(a, b) { if (a.length != b.length) { return false; } for (var i = 0; i < a.length; i++) { if (a[i] !== b[i]) { return false; } } return true; } main=(a,b,c=JSON.stringify)=>c(a)==c(b) (39 znaků)
10 function main(arg) { var delka = 0; for (var slovo of arg) { if (slovo.length > delka) { delka = slovo.length; } } var vysledek = []; for (var slovo of arg) { if (slovo.length == delka) { vysledek.push(slovo); } } return vysledek; } main=a=> a.filter(x=> x.length==Math.max( ...a.map(y=>y.length))) (62 znaků)
11 function main(arg) { var delka = 0; for (var slovo of arg) { if (slovo.length > delka) { delka = slovo.length; } } var vysledek = []; for (var slovo of arg) { var prebytek = delka - slovo.length; var vlevo = " ".repeat(prebytek / 2); var vpravo = " ".repeat((prebytek + 1) / 2); vysledek.push(vlevo + slovo + vpravo); } return vysledek; } main=a=>( w=Math.max(...a.map(y=>y.length)), a.map(x=> (" ".repeat((w-x.length)/2)+x) .padEnd(w))) (94 znaků)
12 function main(arg) { var [a, b] = [0, 1]; for (var i = 1; i <= 12; i++) { var j = Math.round(arg * i); if (Math.abs(j/i - arg) < Math.abs(a/b - arg)) { [a, b] = [j, i]; } } return [a, b]; } main=a=>( v=Math.abs, [1,2,3,4,5,6,7,8,9,10,11,12] .reduce( ([b,c],d)=> (n=Math.round(a*d), v(n/d-a)<v(b/c-a)? [n,d]: [b,c]), [0,1])) (124 znaků)
13 function main(arg) { var vysledek; for (var i = 0; i < arg.length; i++) { for (var j = 0; j < i; j++) { var vzdalenost = 0; for (var k = 0; k < 3; k++) { vzdalenost += (arg[i][k] - arg[j][k])**2; } if (vysledek === undefined || vzdalenost < vysledek) { vysledek = vzdalenost; } } } return Math.sqrt(vysledek); } main=a=> Math.sqrt( Math.min( ...a.map((x,i)=> a.map((y,j)=> i==j? 1/0: x.reduce((r,z,k)=> r+(z-y[k])**2,0))) .flat())) (110 znaků)
14 function main(arg) { var vysledek = 1 / 0; for (var x of arg) { if (Math.abs(x) < Math.abs(vysledek)) { vysledek = x; } } return vysledek; } main=(a,v=Math.abs)=> a.reduce((r,x)=> v(r)<v(x)?r:x) (51 znaků)
15 function main(arg) { var vysledek = [arg.shift()]; var pocet = 0; for (var slovo of arg) { if ((vysledek[pocet] + slovo).length < 20) { vysledek[pocet] += " " + slovo; } else { pocet = vysledek.push(slovo) - 1; } } return vysledek; } main=a=>( v=[], v.push( a.reduce((r,x)=> (r+x).length<20? r+" "+x: (v.push(r), x))), v) (79 znaků)
16 function main(arg) { arg.sort(); var vysledek = 1 / 0; for (var i = 1; i < arg.length; i++) { vysledek = Math.min(vysledek, arg[i] - arg[i-1]); } } main=a=>( c=0, d=1/0, a.sort((x,y)=>x-y) .reduce((r,x)=> (x-r<d-c&&([c,d]=[r,x]), x)), [c,d]) (86 znaků)
17 function main(arg) { return arg .replaceAll("ch", "") .includes("h"); } main=a=>/(?<!c)h/.test(a) (25 znaků)
18 function main(arg) { var vysledek = []; for (var i = 0; i < arg.length; i++) { if ((i == 0 || arg[i-1] < arg[i]) && (i == arg.length - 1 || arg[i+1] < arg[i])) { vysledek.push(i); } } return vysledek; } main=a=> a.map((x,i)=>i) .filter(i=> !(a[i-1]>=a[i]||a[i+1]>=a[i])) (64 znaků)
19 function main(arg) { var vysledek = ""; for (var i = 1; i < arg.length; i++) { var a = arg[i-1]; var b = arg[i]; vysledek += (a < b) ? "+" : (a > b) ? "-" : "="; } return vysledek; } main=a=>( v="", [...a].reduce((r,x)=> (v+=x>r? "+": x<r? "-": "=", x)), v) (65 znaků)
20 main=(d,e)=>(c=1,d.sort((a,b)=>a-b).reduce((p,x)=>x-p>e?(++c,x):p),c) (69 znaků)
21 main=a=>a.sort((b,c)=>b-c).map((x,i)=>a[i+1]-x).reduce((b,c)=>Math.max(b,c)||b) (79 znaků)
22 main=(a,b,c=[a,b].map(x=>(v=[],f=[],x.split("\n").map(x=>x[0]=="v"?v.push(x):f.push(x.split(" ").map(i=>v[+i-1]).sort().join(""))),""+f.sort())))=>c[0]==c[1] (157 znaků)
23 main=(b,w=b[0].length,a=b.flat(),m=Math.max)=>m(...a.map((x,i)=>x&&m(...a.map((y,j)=>(+(y&&j>=i&&j%w>=i%w)&&a.reduce((r,z,k)=>r&&(k<i||k>j||k%w<i%w||k%w>j%w||z),1)*(1+j%w-i%w)*~~(1+(j-i)/w)))))) (194 znaků)
24 main=(b,a=Object.values(b),c=a.length,v=[])=>{for([x,i] of a.flat(2).map((x,i)=>[x,2*(i%2)-1]).sort((x,y)=>x[0]-y[0])){if(c==0&&x>p)v.push([p,x]);c+=i;p=x}return v} (164 znaků)
25 main=(a,b=Array(a).fill().map((x,i)=>i))=>b.map(x=>b.map(y=>b.map(z=>[x,y,z]))).flat(2).find(([x,y,z])=>x&&x*x+y*y+z*z==a*a) (124 znaků)
26 main=(c,b,s=0,a=c.map(x=>s+=x))=>a.map((x,i)=>(x-(a[i-b]||0))/Math.min(i+1,b)) (78 znaků)
27 main=(a,b=a.map(x=>(""+x).padStart(2,0)).sort(),c=b.map((x,i)=>[x,2*(b[i-1]!=+x-1)+(b[i+1]!=+x+1)]).filter(x=>x[1]))=>c.map(([x,i])=>i==2?`${x}-`:x).join(",").replace(/-,/g,"-") (177 znaků)
28 main=g=(a,b)=>b?g(b,a%b):a (26 znaků)
29 main=(a,b,g=(a,b)=>b?g(b,a%b):a)=>a*b/g(a,b) (44 znaků)
30 main=a=>!Array(a).fill().every((x,i)=>i<2||a%i) (47 znaků)

 

Odkazy, cvičení

Třídění pole čísel

Plán na septimu

Hodnocení

Maturitní otázky

Počítá se s tím, že podstatná část účastníků bude z programování maturovat. Otázky budou vycházet z loňské a předloňské verze, ale budou upravené na míru tomu, co opravdu probereme.