Diskuze k úloze číslo 13

Toto fórum slouží výhradně k diskuzím o úloze číslo 13. Během hry je zakázáno diskutovat o zadání i řešení této úlohy kdekoliv jinde, než zde. K diskuzi o ostatních úlohách prosíme využijte jim příslušná fóra. Prosíme, nekažte hru ostatním!
Re: Diskuze k úloze číslo 13 tomi (6. 12. 2010 - 12:38) Sbalit(2)
Hele je možný, že by ten cron posílal mejl v pondělí, a správnou odpovědí byla neděle? Je teda samozřejmě možný, že jsem ten cron naprogramoval blbě, ale tak nějak mi to vycházelo :-)
Re: Diskuze k úloze číslo 13 Michal Kubeček (6. 12. 2010 - 13:52) Sbalit(1)
On Mon, Dec 06, 2010 at 12:38:49PM +0100, tomi wrote:
> Hele je možný, že by ten cron posílal mejl v pondělí, a správnou
> odpovědí byla neděle? Je teda samozřejmě možný, že jsem ten cron
> naprogramoval blbě, ale tak nějak mi to vycházelo :-)

Já měl podobný problém, ale podařilo se mi sebe sama přesvědčit, že to
byla moje chyba (na začátku jsem ve svém C++ simulátoru kvůli testování
přesunul jeden příkaz ze začátku na konec a pak jsem to zapomněl vrátit).
Ale až bude čas, ještě to zkontroluju, jestli byla chyba opravdu na mé
straně.

Re: Diskuze k úloze číslo 13 fox (6. 12. 2010 - 16:51) Sbalit(6)
Ja mam simulatory dva a oba vracely pondeli. Az podle napovedy jsem poslal nedeli.
Re: Diskuze k úloze číslo 13 Michal Kubeček (6. 12. 2010 - 17:55) Sbalit(5)
On Mon, Dec 06, 2010 at 04:51:06PM +0100, fox wrote:
> Ja mam simulatory dva a oba vracely pondeli. Az podle napovedy jsem
> poslal nedeli.

Já to zkusil z čirého zoufalství ve chvíli, kdy jsem z rozeslaného mailu
o chybě ve skriptu (50 místo 14) pochopil, že heslo má být opravdu
%Y%m%d. Tak jsem s ohledem na to, že všechny webové zdroje a algoritmy a
skripty na webech počítají neděli, zkusil ze zvědavosti poslat výsledek
pro neděli a fungovalo to. Ona tak ta úloha dávala i lepší smysl,
protože s pondělím vyšel správný výsledek (2160) i bez opravy, takže by
člověk ani nemusel poznat, co se to vlastně počítá. Ale vzhledem k tomu,
jak dlouho na té úloze všichni viseli, se schválně ještě jednou podívám,
na čí straně byla chyba.

Re: Diskuze k úloze číslo 13 Martin Mares (org) (6. 12. 2010 - 21:39) Sbalit(4)
Převelice se omlouvám, chyba tentokrát opravdu byla na naší straně. I když
jsem si napsal dva různé simulátory, povedlo se mi v nich udělat tutéž
chybu. Skákal jsem totiž po hodinách a nevšiml si přitom, že se ve 12 hodin
vykonávají dvě různá pravidla, a to v jiném pořadí, než jak jsou napsány
v crontabu. Jejich prohození z toho překvapivě udělalo korektní algoritmus
na výpočet velikonočního pondělí.

Správně by bylo, kdyby se 2. pravidlo spouštělo ve 12:00, zatímco 11. pravidlo
ve 12:12. Pak by vycházela velikonoční neděle, jak jsme očekávali.

Takže se skláním před vaší schopností vyřešit mnohem záludnější úlohu, než
jsme plánovali, a zpívám si k tomu slavnou mantru "ójaó selúša týsem".

(A dávám tímto ve známost, že tým Po drátě na příští rok shání další testery :-) )

Re: Diskuze k úloze číslo 13 Bilbo (7. 12. 2010 - 13:05) Sbalit(2)
Taky jsem napsal dva simulátory, nejdřív jeden v perlu a když to nevedlo k řešení, tak jsem další simulátor udělal tím, že jsem vzal zdrojáky přímo vixie crontabu a na pár místech tam do toho trochu šťouchnul (čímž bych měl získat "referenční" implementaci). Já to teda nezjednodušoval po hodinách a šel jsem přesně po minutách

Uvažoval jsem i to, že je tam definovaná vyjímka při přesunu z letního času na zimní a zpět, kdy se ty pravidla počítají trochu jinak (i když jsem po přečtení pravidel zjistitl, že to nebude mít na výpočet vliv)

Jinak oba simulátory počítaly velikonoční pondělí a bylo to přesné (=sedělo s ostatními kalendáři) i po roce 2099. 2008 jakožto první neprošlo, 2160 taky ne .... nakonec jsem to dal s nápovědou. Ale zatím je tohle moje rekordní úloha co do počtu odeslaných špatných pokusů (asi 12 nebo 13 :)

Když přišla nápověda a mrknutím do výsledků jsem zjistil že to posílám o den vedle, tak jsem nezkoumal proč, našel na webu správné datum ... a bylo to :)
Re: Diskuze k úloze číslo 13 Michal Kubeček (7. 12. 2010 - 15:07) Sbalit(1)
On Tue, Dec 07, 2010 at 01:05:40PM +0100, Bilbo wrote:
> Jinak oba simulátory počítaly velikonoční pondělí a bylo to přesné
> (=sedělo s ostatními kalendáři) i po roce 2099. 2008 jakožto první
> neprošlo, 2160 taky ne .... nakonec jsem to dal s nápovědou.

To není tak úplně pravda. Rok 2160 sice vyšel správně, ale už
v 22. století byly IIRC dva roky špatně (to pravidlo 2049|2176 by bylo
potřeba nahradit obecným nebo rozšířit seznam výjimek) a po roce 2200 by
se to rozjelo úplně.

Re: Diskuze k úloze číslo 13 Martin "Marble" Beránek (8. 12. 2010 - 1:47) Sbalit(1)
Hurá, alespoň zas mohu věřit tomu, že umím počítat. :) Ale v kombinaci s 50: a mojí chybou na začátku jsem už byl ochotný zkoušet poslat skoro cokoliv. Nejlepší nápovědou bylo asi fakt to, že pro neděli je těch velikonoc výrazně málo. Ale v mezičase už jsem analyzoval i to, co se stane, když se zanedbají řádky s % (přinejměnším některé implementace cronu ukončí procentem příkaz) a hledal v tom zákeřnost na vyšší úrovni.
Re: Diskuze k úloze číslo 13 thefox (7. 12. 2010 - 22:25) Sbalit(3)
Tiež som písal simulátor a tiež mi vracal deň mimo (v roku 2001 dokonca o dva dni mimo). Nakoniec som ale tak nejak sedliackym rozumom/skusmo "uhádol", tiež mi to zabralo pár pokusov.

Chybné zadanie (subject 50:) vo mne vyvolávalo mnohé pochybnosti a kvôli tomu som nešiel po presnom dátume, napadlo ma napr., že nám orgovia vymysleli niečo na spôsob mailového port-knockingu, kedy by po niekoľkých rokoch a správnej sekvencii dátumov prišiel mail s ďalšími inštrukciami (úloha na to bola pomerne pokročilá :-) ). Nakoniec som ale uzavrel, že v simulátore mám niekde chybu, našiel hodnotu v nejakom online kalendári a trafil.

Pri riešení úlohy ma napadol jeden spôsob riešenia, ktorý by som ale nevedel realizovať - preháčkovať "niečo" "niekde" v systéme (pravdepodobne časť kernelu, ktorá sa stará o "plynutie" času), aby čas bežal rýchlejšie. Ideu posúvať čas po minúte a manuálne spúšťať/cron som totiž zavrhol (cronu dlho trvá, kým sa po spustení uvedomí), háčkovať jeho zdrojáky sa mi tiež moc nechcelo. Myslíte niekto, že takýto spôsob riešenia by bol možný?

Ale inak úloha masakerná, ďalšia z tých, kedy ma tvorcovia udivili, v čom sa tí magori nenaučili programovať :-).
Re: Diskuze k úloze číslo 13 tomi (7. 12. 2010 - 22:28) Sbalit(2)
Kde se vzalo to „50“:? Já na nic takového nenarazil. V taru, co jsem dostal, bylo „14:“.
Re: Diskuze k úloze číslo 13 thefox (7. 12. 2010 - 22:31) Sbalit(1)
Závisí asi od toho, kedy si dostal zadanie, organizátori to po čase opravili (bez opravy to stihol úspešne vyriešiť tuším jeden človek?).