Programování

Adventní kalendář pro nerdy nabízí místo čokolád a bonbónů programovací kvízy

Do Vánoc nám zbývá už jen pár týdnů, a tak si můžete po večerech opět luštit adventní kalendář pro programátory – Advent of Code.

Každý den na vás čeká zadání pro dva úkoly, které musíte vyřešit a napsat správnou odpověď, za kterou dostanete hvězdičku.

Kouzlo spočívá v tom, že je pouze na vás, jak se doberete řešení. Můžete použít čtvrtku papíru, kalkulačku, anebo si napíšete jednoduchý skript ve svém oblíbeném programovacím jazyku.

Klepněte pro větší obrázek
Adventní kalendář pro programátory a nerdy všeho druhu

Advent of Code tak může být i zajímavým cvičením pro začátečníky, kterým obecně často chybí motivace k tomu, proč se vlastně učit programovat. Třeba právě k tomu, abyste vyřešili adventní kalendář pro kodéry!

První úkol

Pojďme si to ukázat na prvním úkolu zkraje prosince.

Mějme elfy, kteří nesou v pytli pamlsky s různou hodnotou kalorií a my hledáme elfa, kterých jich nese zdaleka nejvíce. Naštěstí máme seznam ve formě textového souboru, kde je pytel každého elfa oddělený prázdným řádkem.

Takže kdyby seznam vypadal takto:

1000
2000
1500

250
500
250
10000

Víme, že nejvíce pamlsků nese druhý elf, protože jejich kalorická suma činí 11 000 cal.

Soubor pro hádanku obsahuje tisíce řádků

Vstupní soubor první zkoušky nicméně čítá několik tisíc podobných řádků, takže s kalkulačkou by to bylo složité. Soubor, který si stáhnete po přihlášení skrze GitHub, Google a další služby, ale můžete na pár řádcích kódu zpracovat třeba v Pythonu a spočítat, jak velký je pytel s pamlsky toho nejštědřejšího elfa.

Klepněte pro větší obrázek
Toto se vám na kalkulačce nebude chtít počítat

V kódu níže nejprve otevřu textový soubor stažený z Advent of Code, budu z něj číst řádek po řádku a sčítat numerické hodnoty kalorií. Pokud ale narazím na prázdný řádek, jedná se o konec výpisu pro pytel s pamlsky aktuálního elfa.

with open("zadani.txt", "r") as soubor:
    radek = soubor.readline()
    obsahPytle = 0
    pocetPytlu = 0
    zacatekPytle = 0
    nejvetsiPytel = 0
    zacatekNejvetsihoPytle = 0
    konecNejvetsihoPytle = 0
    radky = 1
    while radek:
        if radek.strip() == "":
            if obsahPytle > nejvetsiPytel:
                nejvetsiPytel = obsahPytle
                zacatekNejvetsihoPytle = zacatekPytle
                konecNejvetsihoPytle = radky - 1
            if obsahPytle > 0:
                pocetPytlu += 1
            obsahPytle = 0
            zacatekPytle = radky + 1
        else:
            obsahPytle += int(radek)
        radky += 1
        radek = soubor.readline()

    print(f"Prosel jsem {radky} radku")
    print(f"Nasel jsem v nich {pocetPytlu} pytlu")
    print(f"Pytel nejbohatsiho elfa na radcich {zacatekNejvetsihoPytle}-{konecNejvetsihoPytle} obsahoval pamlsky s hodnotou {nejvetsiPytel} kalorii")

Jelikož hledám ten největší pytel, porovnám součet s aktuálním maximem. Pokud je pytel větší, aktualizuji maximum, anuluji součet a pokračuji dalším řádkem, pokud je k dispozici (tedy pokud už nejsem na konci souboru).

Klepněte pro větší obrázek
Největší pytel má hodnotu 70 296 kalorií
Klepněte pro větší obrázek
A protože jsme si spočítali i pozici největšího pytle v souboru, můžeme si to s kalkulačkou v ruce ověřit na surových datech

Nakonec se dopídím, že největší pytel obsahoval pamlsky se souhrnnou kalorickou hodnotou 70 296 cal, což je nakonec i správná odpověď první hádanky a já dostanu svoji první hvězdičku.

Pokud si tedy chcete zábavně procvičit svůj oblíbený programovací jazyk, směle do toho a sbírejte hvězdičky v Advent of Code.

Klepněte pro větší obrázek
Vyplnil jsem odpověď
Klepněte pro větší obrázek
A získal svoji první hvězdičku
Diskuze (2) Další článek: Sedmdesát let od Velkého londýnského smogu. Počasí a uhlí na několik dnů zastavily Londýn, tisíce lidí zemřely

Témata článku: Google, Programování, Python, Soubor, GitHub, Čokoláda, Pamlsek, Řádek, Adventní kalendář, Pytel, Nerdy, Pro, Bonbón, Elf



Stavíme chytrou ventilaci ložnice. Legrační větráčky z počítače jsme vyměnili za turbo

Stavíme chytrou ventilaci ložnice. Legrační větráčky z počítače jsme vyměnili za turbo

** Loni v létě jsme zkusili větrat ložnici chladičem z počítače ** Fungovalo to, ale trvalo to celou noc ** Proto do boje povoláváme 12V turboventilátor

Jakub Čížek
Chytrá domácnostPojďme programovat elektroniku
Podrobný návod, jak zrušit SIPO. Nejsnazší je převedení plateb jinam

Podrobný návod, jak zrušit SIPO. Nejsnazší je převedení plateb jinam

**Než zrušíte SIPO, musíte platby převést jinam. **Neplatí to nutně pro poplatky veřejnoprávním médiím. **SIPO zrušíte osobně, elektronicky nebo se zruší automaticky.

Petr Urban
Česká poštaNávody
Záškodníci už objevili ChatGPT. Snaží se generovat natvrdlé viry, což je ale možná ještě horší

Záškodníci už objevili ChatGPT. Snaží se generovat natvrdlé viry, což je ale možná ještě horší

** Jen co se na scéně objevil ChatGPT, začala si s ním hrát i šedá zóna ** Automat sice generuje funkční, ale také naivní „útoky“ ** Když ale budou masivní a automatizované, škodí úplně stejně

Jakub Čížek
MalwareUmělá inteligenceBezpečnost
Nejlepší weby na stahování modelů pro 3D tiskárny. Thingiverse zná každý, ale jsou tu i lepší alternativy

Nejlepší weby na stahování modelů pro 3D tiskárny. Thingiverse zná každý, ale jsou tu i lepší alternativy

** Cokoliv od skládací lopaty na sníh po komiksové figurky ** Printables má věrnostní program, kde lze získat filament (a další) zdarma ** Modely pro FFF/FDM i SLA tiskárny

David Caba
3D tisk
Vyzkoušeli jsme Tapo P300. Proč kupovat chytrou zásuvku, když můžete mít rovnou prodlužku

Vyzkoušeli jsme Tapo P300. Proč kupovat chytrou zásuvku, když můžete mít rovnou prodlužku

** Prodlužovací kabel Tapo P300 od TP-Linku má tři zásuvky ** Vedle 230V nabízí i USB QC 3.0 a 18W PD na USB-C ** Zapojíme také P110/P115 s wattmetrem a ovládneme je v Pythonu

Jakub Čížek
TP-LinkChytrá domácnost
Zakázané názvy. Tyhle složky ve Windows nevytvoříte a můžou za to 70. léta

Zakázané názvy. Tyhle složky ve Windows nevytvoříte a můžou za to 70. léta

**Složky ve Windows si nepojmenujete libovolně. **Seznam rezervovaných názvů existuje kvůli kompatibilitě. **Kořeny této záležitosti sahají až do 70. let.

Petr Urban
Operační systémyWindows