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()
.
- Počet znaků na vstupu
- Text a číslo, převádění datových typů
- Pole jako vstup i výstup
- Vzdálenost dvou bodů v prostoru
- Maximum v poli polí čísel
- Pořadí seznamu
- Odstraňte záporná čísla ze seznamu
- Minimum nebo maximum
- Kde je Waldo
- Počet x
- Všechny nejdelší řetězce ze seznamu
- Zaokrouhlení na zlomek z desetinného čísla
- Prohozené dvojice v seznamu
- Souvislé úseky celých čísel
- Rotace seznamu
- Nejčastější písmeno
- Různá slova
- Nejkrásnější pobřeží
- Tic Tac Toe, čili piškvorky 3×3
- Cenzurujte zakázaná slova
- Had poskládaný v mřížce
- Řešení neřešitelné rovnice
- Sloupce v Excelu
- Park
- Scrabble
- Piškvorky
- Go
- Pole naruby
Ú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.
- Počet znaků na vstupu
- Text a číslo, převádění datových typů
- Pole jako vstup i výstup
- Pole pozpátku
- Vzdálenost dvou bodů v prostoru
- Hvězdičky v daném počtu
- Maximum v poli polí čísel
- Společný překryv dvou řetězců
- Rovnost dvou polí
- Všechny nejdelší řetězce z pole
- Zarovnání na střed, jedno slovo na řádek
- Zaokrouhlení na zlomek z desetinného čísla
- Nejbližší body ve 3d prostoru
- Nejmenší absolutní hodnota v poli
- Zalomení textu na danou maximální šířku
- Nejbližší dvojice z pole čísel
- Najdi h, ale ne ch
- Špičky v grafu vyjádřeném jako pole čísel
- Melodie zapsaná jako stoupání a klesání
- Kdy cvaknout jízdenku, pokud víme, kdy chodí revizor
- Pauza mezi oslavami narozenin
- Identický model ve formátu .obj
- Největší obdélník z jedniček
- Plánování, kdy mají všichni volno
- Šikmá věž s danou délkou úhlopříčky
- Klouzavý průměr veledůležité veličiny
- Intervaly splněných úloh
- Dlaždičky na obdélníkové podlaze
- Měsíce a dvojité zatmění
- Adventní kalendář pro gurmány
A jako bonus tady jsou i ukázková řešení:
Číslo | hezké ř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 číselPlán na septimu
- drobné úlohy z programování, algoritmizace, matematického modelování a vůbec;
- malý samostatný program, návrh, dokumentace;
- rozšíření existujícího cizího projektu, nástroje pro spolupráci;
- zadání pro maturitní práci.
Hodnocení
- Drobné úlohy jsou na body a musíte jich za pololetí nasbírat dost.
- Projekty jsou povinné a je potřeba je nějakým způsobem splnit všechny tři.
- Maturita se známkuje.
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.