diff --git a/2015/5/input b/2015/5/input new file mode 100644 index 0000000..a9b6e77 --- /dev/null +++ b/2015/5/input @@ -0,0 +1,1000 @@ +sszojmmrrkwuftyv +isaljhemltsdzlum +fujcyucsrxgatisb +qiqqlmcgnhzparyg +oijbmduquhfactbc +jqzuvtggpdqcekgk +zwqadogmpjmmxijf +uilzxjythsqhwndh +gtssqejjknzkkpvw +wrggegukhhatygfi +vhtcgqzerxonhsye +tedlwzdjfppbmtdx +iuvrelxiapllaxbg +feybgiimfthtplui +qxmmcnirvkzfrjwd +vfarmltinsriqxpu +oanqfyqirkraesfq +xilodxfuxphuiiii +yukhnchvjkfwcbiq +bdaibcbzeuxqplop +ivegnnpbiyxqsion +ybahkbzpditgwdgt +dmebdomwabxgtctu +ibtvimgfaeonknoh +jsqraroxudetmfyw +dqdbcwtpintfcvuz +tiyphjunlxddenpj +fgqwjgntxagidhah +nwenhxmakxqkeehg +zdoheaxqpcnlhnen +tfetfqojqcdzlpbm +qpnxkuldeiituggg +xwttlbdwxohahwar +hjkwzadmtrkegzye +koksqrqcfwcaxeof +wulwmrptktliyxeq +gyufbedqhhyqgqzj +txpunzodohikzlmj +jloqfuejfkemcrvu +amnflshcheuddqtc +pdvcsduggcogbiia +yrioavgfmeafjpcz +uyhbtmbutozzqfvq +mwhgfwsgyuwcdzik +auqylgxhmullxpaa +lgelzivplaeoivzh +uyvcepielfcmswoa +qhirixgwkkccuzlp +zoonniyosmkeejfg +iayfetpixkedyana +ictqeyzyqswdskiy +ejsgqteafvmorwxe +lhaiqrlqqwfbrqdx +ydjyboqwhfpqfydc +dwhttezyanrnbybv +edgzkqeqkyojowvr +rmjfdwsqamjqehdq +ozminkgnkwqctrxz +bztjhxpjthchhfcd +vrtioawyxkivrpiq +dpbcsznkpkaaclyy +vpoypksymdwttpvz +hhdlruwclartkyap +bqkrcbrksbzcggbo +jerbbbnxlwfvlaiw +dwkasufidwjrjfbf +kkfxtjhbnmqbmfwf +vmnfziwqxmioukmj +rqxvcultipkecdtu +fhmfdibhtjzkiqsd +hdpjbuzzbyafqrpd +emszboysjuvwwvts +msyigmwcuybfiooq +druyksfnbluvnwoh +fvgstvynnfbvxhsx +bmzalvducnqtuune +lzwkzfzttsvpllei +olmplpvjamynfyfd +padcwfkhystsvyfb +wjhbvxkwtbfqdilb +hruaqjwphonnterf +bufjobjtvxtzjpmj +oiedrjvmlbtwyyuy +sgiemafwfztwsyju +nsoqqfudrtwszyqf +vonbxquiiwxnazyl +yvnmjxtptujwqudn +rrnybqhvrcgwvrkq +taktoxzgotzxntfu +quffzywzpxyaepxa +rfvjebfiddcfgmwv +iaeozntougqwnzoh +scdqyrhoqmljhoil +bfmqticltmfhxwld +brbuktbyqlyfpsdl +oidnyhjkeqenjlhd +kujsaiqojopvrygg +vebzobmdbzvjnjtk +uunoygzqjopwgmbg +piljqxgicjzgifso +ikgptwcjzywswqnw +pujqsixoisvhdvwi +trtuxbgigogfsbbk +mplstsqclhhdyaqk +gzcwflvmstogdpvo +tfjywbkmimyyqcjd +gijutvhruqcsiznq +ibxkhjvzzxgavkha +btnxeqvznkxjsgmq +tjgofgauxaelmjoq +sokshvyhlkxerjrv +ltogbivktqmtezta +uduwytzvqvfluyuf +msuckpthtgzhdxan +fqmcglidvhvpirzr +gwztkqpcwnutvfga +bsjfgsrntdhlpqbx +xloczbqybxmiopwt +orvevzyjliomkkgu +mzjbhmfjjvaziget +tlsdxuhwdmghdyjb +atoecyjhwmznaewi +pyxpyvvipbqibiox +ajbfmpqqobfsmesj +siknbzefjblnohgd +eqfhgewbblwdfkmc +opylbscrotckkrbk +lbwxbofgjkzdxkle +ceixfjstaptdomvm +hnkrqxifjmmjktie +aqykzeuzvvetoygd +fouahjimfcisxima +prkzhutbqsyrhjzx +qqwliakathnsbzne +sayhgqtlcqqidqhj +ygduolbysehdudra +zricvxhdzznuxuce +ucvzakslykpgsixd +udirhgcttmyspgsb +yuwzppjzfsjhhdzi +gtqergjiuwookwre +xvxexbjyjkxovvwf +mlpaqhnnkqxrmwmm +ezuqbrjozwuqafhb +mcarusdthcbsonoq +weeguqeheeiigrue +pngtfugozxofaqxv +copphvbjcmfspenv +jiyahihykjjkdaya +gdqnmesvptuyrfwp +vbdscfywqmfxbohh +crtrfuxyjypzubrg +seihvevtxywxhflp +fvvpmgttnapklwou +qmqaqsajmqwhetpk +zetxvrgjmblxvakr +kpvwblrizaabmnhz +mwpvvzaaicntrkcp +clqyjiegtdsswqfm +ymrcnqgcpldgfwtm +nzyqpdenetncgnwq +cmkzevgacnmdkqro +kzfdsnamjqbeirhi +kpxrvgvvxapqlued +rzskbnfobevzrtqu +vjoahbfwtydugzap +ykbbldkoijlvicbl +mfdmroiztsgjlasb +quoigfyxwtwprmdr +ekxjqafwudgwfqjm +obtvyjkiycxfcdpb +lhoihfnbuqelthof +eydwzitgxryktddt +rxsihfybacnpoyny +bsncccxlplqgygtw +rvmlaudsifnzhcqh +huxwsyjyebckcsnn +gtuqzyihwhqvjtes +zreeyomtngvztveq +nwddzjingsarhkxb +nuqxqtctpoldrlsh +wkvnrwqgjooovhpf +kwgueyiyffudtbyg +tpkzapnjxefqnmew +ludwccvkihagvxal +lfdtzhfadvabghna +njqmlsnrkcfhtvbb +cajzbqleghhnlgap +vmitdcozzvqvzatp +eelzefwqwjiywbcz +uyztcuptfqvymjpi +aorhnrpkjqqtgnfo +lfrxfdrduoeqmwwp +vszpjvbctblplinh +zexhadgpqfifcqrz +ueirfnshekpemqua +qfremlntihbwabtb +nwznunammfexltjc +zkyieokaaogjehwt +vlrxgkpclzeslqkq +xrqrwfsuacywczhs +olghlnfjdiwgdbqc +difnlxnedpqcsrdf +dgpuhiisybjpidsj +vlwmwrikmitmoxbt +sazpcmcnviynoktm +pratafauetiknhln +ilgteekhzwlsfwcn +ywvwhrwhkaubvkbl +qlaxivzwxyhvrxcf +hbtlwjdriizqvjfb +nrmsononytuwslsa +mpxqgdthpoipyhjc +mcdiwmiqeidwcglk +vfbaeavmjjemfrmo +qzcbzmisnynzibrc +shzmpgxhehhcejhb +wirtjadsqzydtyxd +qjlrnjfokkqvnpue +dxawdvjntlbxtuqc +wttfmnrievfestog +eamjfvsjhvzzaobg +pbvfcwzjgxahlrag +omvmjkqqnobvnzkn +lcwmeibxhhlxnkzv +uiaeroqfbvlazegs +twniyldyuonfyzqw +wgjkmsbwgfotdabi +hnomamxoxvrzvtew +ycrcfavikkrxxfgw +isieyodknagzhaxy +mgzdqwikzullzyco +mumezgtxjrrejtrs +nwmwjcgrqiwgfqel +wjgxmebfmyjnxyyp +durpspyljdykvzxf +zuslbrpooyetgafh +kuzrhcjwbdouhyme +wyxuvbciodscbvfm +kbnpvuqwmxwfqtqe +zddzercqogdpxmft +sigrdchxtgavzzjh +lznjolnorbuddgcs +ycnqabxlcajagwbt +bnaudeaexahdgxsj +rlnykxvoctfwanms +jngyetkoplrstfzt +tdpxknwacksotdub +yutqgssfoptvizgr +lzmqnxeqjfnsxmsa +iqpgfsfmukovsdgu +qywreehbidowtjyz +iozamtgusdctvnkw +ielmujhtmynlwcfd +hzxnhtbnmmejlkyf +ftbslbzmiqkzebtd +bcwdqgiiizmohack +dqhfkzeddjzbdlxu +mxopokqffisxosci +vciatxhtuechbylk +khtkhcvelidjdena +blatarwzfqcapkdt +elamngegnczctcck +xeicefdbwrxhuxuf +sawvdhjoeahlgcdr +kmdcimzsfkdfpnir +axjayzqlosrduajb +mfhzreuzzumvoggr +iqlbkbhrkptquldb +xcvztvlshiefuhgb +pkvwyqmyoazocrio +ajsxkdnerbmhyxaj +tudibgsbnpnizvsi +cxuiydkgdccrqvkh +cyztpjesdzmbcpot +nnazphxpanegwitx +uphymczbmjalmsct +yyxiwnlrogyzwqmg +gmqwnahjvvdyhnfa +utolskxpuoheugyl +mseszdhyzoyavepd +ycqknvbuvcjfgmlc +sknrxhxbfpvpeorn +zqxqjetooqcodwml +sesylkpvbndrdhsy +fryuxvjnsvnjrxlw +mfxusewqurscujnu +mbitdjjtgzchvkfv +ozwlyxtaalxofovd +wdqcduaykxbunpie +rlnhykxiraileysk +wgoqfrygttlamobg +kflxzgxvcblkpsbz +tmkisflhativzhde +owsdrfgkaamogjzd +gaupjkvkzavhfnes +wknkurddcknbdleg +lltviwincmbtduap +qwzvspgbcksyzzmb +ydzzkumecryfjgnk +jzvmwgjutxoysaam +icrwpyhxllbardkr +jdopyntshmvltrve +afgkigxcuvmdbqou +mfzzudntmvuyhjzt +duxhgtwafcgrpihc +tsnhrkvponudumeb +sqtvnbeiigdzbjgv +eczmkqwvnsrracuo +mhehsgqwiczaiaxv +kaudmfvifovrimpd +lupikgivechdbwfr +mwaaysrndiutuiqx +aacuiiwgaannunmm +tjqjbftaqitukwzp +lrcqyskykbjpaekn +lirrvofbcqpjzxmr +jurorvzpplyelfml +qonbllojmloykjqe +sllkzqujfnbauuqp +auexjwsvphvikali +usuelbssqmbrkxyc +wyuokkfjexikptvv +wmfedauwjgbrgytl +sfwvtlzzebxzmuvw +rdhqxuechjsjcvaf +kpavhqkukugocsxu +ovnjtumxowbxduts +zgerpjufauptxgat +pevvnzjfwhjxdoxq +pmmfwxajgfziszcs +difmeqvaghuitjhs +icpwjbzcmlcterwm +ngqpvhajttxuegyh +mosjlqswdngwqsmi +frlvgpxrjolgodlu +eazwgrpcxjgoszeg +bbtsthgkjrpkiiyk +tjonoglufuvsvabe +xhkbcrofytmbzrtk +kqftfzdmpbxjynps +kmeqpocbnikdtfyv +qjjymgqxhnjwxxhp +dmgicrhgbngdtmjt +zdxrhdhbdutlawnc +afvoekuhdboxghvx +hiipezngkqcnihty +bbmqgheidenweeov +suprgwxgxwfsgjnx +adeagikyamgqphrj +zzifqinoeqaorjxg +adhgppljizpaxzld +lvxyieypvvuqjiyc +nljoakatwwwoovzn +fcrkfxclcacshhmx +ownnxqtdhqbgthch +lmfylrcdmdkgpwnj +hlwjfbvlswbzpbjr +mkofhdtljdetcyvp +synyxhifbetzarpo +agnggugngadrcxoc +uhttadmdmhidpyjw +ohfwjfhunalbubpr +pzkkkkwrlvxiuysn +kmidbxmyzkjrwjhu +egtitdydwjxmajnw +civoeoiuwtwgbqqs +dfptsguzfinqoslk +tdfvkreormspprer +zvnvbrmthatzztwi +ffkyddccrrfikjde +hrrmraevdnztiwff +qaeygykcpbtjwjbr +purwhitkmrtybslh +qzziznlswjaussel +dfcxkvdpqccdqqxj +tuotforulrrytgyn +gmtgfofgucjywkev +wkyoxudvdkbgpwhd +qbvktvfvipftztnn +otckgmojziezmojb +inxhvzbtgkjxflay +qvxapbiatuudseno +krpvqosbesnjntut +oqeukkgjsfuqkjbb +prcjnyymnqwqksiz +vuortvjxgckresko +orqlyobvkuwgathr +qnpyxlnazyfuijox +zwlblfkoklqmqzkw +hmwurwtpwnrcsanl +jzvxohuakopuzgpf +sfcpnxrviphhvxmx +qtwdeadudtqhbely +dbmkmloasqphnlgj +olylnjtkxgrubmtk +nxsdbqjuvwrrdbpq +wbabpirnpcsmpipw +hjnkyiuxpqrlvims +enzpntcjnxdpuqch +vvvqhlstzcizyimn +triozhqndbttglhv +fukvgteitwaagpzx +uhcvukfbmrvskpen +tizcyupztftzxdmt +vtkpnbpdzsaluczz +wodfoyhoekidxttm +otqocljrmwfqbxzu +linfbsnfvixlwykn +vxsluutrwskslnye +zbshygtwugixjvsi +zdcqwxvwytmzhvoo +wrseozkkcyctrmei +fblgtvogvkpqzxiy +opueqnuyngegbtnf +qxbovietpacqqxok +zacrdrrkohfygddn +gbnnvjqmkdupwzpq +qgrgmsxeotozvcak +hnppukzvzfmlokid +dzbheurndscrrtcl +wbgdkadtszebbrcw +fdmzppzphhpzyuiz +bukomunhrjrypohj +ohodhelegxootqbj +rsplgzarlrknqjyh +punjjwpsxnhpzgvu +djdfahypfjvpvibm +mlgrqsmhaozatsvy +xwktrgyuhqiquxgn +wvfaoolwtkbrisvf +plttjdmguxjwmeqr +zlvvbwvlhauyjykw +cigwkbyjhmepikej +masmylenrusgtyxs +hviqzufwyetyznze +nzqfuhrooswxxhus +pdbdetaqcrqzzwxf +oehmvziiqwkzhzib +icgpyrukiokmytoy +ooixfvwtiafnwkce +rvnmgqggpjopkihs +wywualssrmaqigqk +pdbvflnwfswsrirl +jeaezptokkccpbuj +mbdwjntysntsaaby +ldlgcawkzcwuxzpz +lwktbgrzswbsweht +ecspepmzarzmgpjm +qmfyvulkmkxjncai +izftypvwngiukrns +zgmnyjfeqffbooww +nyrkhggnprhedows +yykzzrjmlevgffah +mavaemfxhlfejfki +cmegmfjbkvpncqwf +zxidlodrezztcrij +fseasudpgvgnysjv +fupcimjupywzpqzp +iqhgokavirrcvyys +wjmkcareucnmfhui +nftflsqnkgjaexhq +mgklahzlcbapntgw +kfbmeavfxtppnrxn +nuhyvhknlufdynvn +nviogjxbluwrcoec +tyozixxxaqiuvoys +kgwlvmvgtsvxojpr +moeektyhyonfdhrb +kahvevmmfsmiiqex +xcywnqzcdqtvhiwd +fnievhiyltbvtvem +jlmndqufirwgtdxd +muypbfttoeelsnbs +rypxzbnujitfwkou +ubmmjbznskildeoj +ofnmizdeicrmkjxp +rekvectjbmdnfcib +yohrojuvdexbctdh +gwfnfdeibynzjmhz +jfznhfcqdwlpjull +scrinzycfhwkmmso +mskutzossrwoqqsi +rygoebkzgyzushhr +jpjqiycflqkexemx +arbufysjqmgaapnl +dbjerflevtgweeoj +snybnnjlmwjvhois +fszuzplntraprmbj +mkvaatolvuggikvg +zpuzuqygoxesnuyc +wnpxvmxvllxalulm +eivuuafkvudeouwy +rvzckdyixetfuehr +qgmnicdoqhveahyx +miawwngyymshjmpj +pvckyoncpqeqkbmx +llninfenrfjqxurv +kzbjnlgsqjfuzqtp +rveqcmxomvpjcwte +bzotkawzbopkosnx +ktqvpiribpypaymu +wvlzkivbukhnvram +uohntlcoguvjqqdo +ajlsiksjrcnzepkt +xsqatbldqcykwusd +ihbivgzrwpmowkop +vfayesfojmibkjpb +uaqbnijtrhvqxjtb +hhovshsfmvkvymba +jerwmyxrfeyvxcgg +hncafjwrlvdcupma +qyvigggxfylbbrzt +hiiixcyohmvnkpgk +mmitpwopgxuftdfu +iaxderqpceboixoa +zodfmjhuzhnsqfcb +sthtcbadrclrazsi +bkkkkcwegvypbrio +wmpcofuvzemunlhj +gqwebiifvqoeynro +juupusqdsvxcpsgv +rbhdfhthxelolyse +kjimpwnjfrqlqhhz +rcuigrjzarzpjgfq +htxcejfyzhydinks +sxucpdxhvqjxxjwf +omsznfcimbcwaxal +gufmtdlhgrsvcosb +bssshaqujtmluerz +uukotwjkstgwijtr +kbqkneobbrdogrxk +ljqopjcjmelgrakz +rwtfnvnzryujwkfb +dedjjbrndqnilbeh +nzinsxnpptzagwlb +lwqanydfirhnhkxy +hrjuzfumbvfccxno +okismsadkbseumnp +sfkmiaiwlktxqvwa +hauwpjjwowbunbjj +nowkofejwvutcnui +bqzzppwoslaeixro +urpfgufwbtzenkpj +xgeszvuqwxeykhef +yxoldvkyuikwqyeq +onbbhxrnmohzskgg +qcikuxakrqeugpoa +lnudcqbtyzhlpers +nxduvwfrgzaailgl +xniuwvxufzxjjrwz +ljwithcqmgvntjdj +awkftfagrfzywkhs +uedtpzxyubeveuek +bhcqdwidbjkqqhzl +iyneqjdmlhowwzxx +kvshzltcrrururty +zgfpiwajegwezupo +tkrvyanujjwmyyri +ercsefuihcmoaiep +ienjrxpmetinvbos +jnwfutjbgenlipzq +bgohjmrptfuamzbz +rtsyamajrhxbcncw +tfjdssnmztvbnscs +bgaychdlmchngqlp +kfjljiobynhwfkjo +owtdxzcpqleftbvn +ltjtimxwstvzwzjj +wbrvjjjajuombokf +zblpbpuaqbkvsxye +gwgdtbpnlhyqspdi +abipqjihjqfofmkx +nlqymnuvjpvvgova +avngotmhodpoufzn +qmdyivtzitnrjuae +xfwjmqtqdljuerxi +csuellnlcyqaaamq +slqyrcurcyuoxquo +dcjmxyzbzpohzprl +uqfnmjwniyqgsowb +rbmxpqoblyxdocqc +ebjclrdbqjhladem +ainnfhxnsgwqnmyo +eyytjjwhvodtzquf +iabjgmbbhilrcyyp +pqfnehkivuelyccc +xgjbyhfgmtseiimt +jwxyqhdbjiqqqeyy +gxsbrncqkmvaryln +vhjisxjkinaejytk +seexagcdmaedpcvh +lvudfgrcpjxzdpvd +fxtegyrqjzhmqean +dnoiseraqcoossmc +nwrhmwwbykvwmgep +udmzskejvizmtlce +hbzvqhvudfdlegaa +cghmlfqejbxewskv +bntcmjqfwomtbwsb +qezhowyopjdyhzng +todzsocdkgfxanbz +zgjkssrjlwxuhwbk +eibzljqsieriyrzr +wamxvzqyycrxotjp +epzvfkispwqynadu +dwlpfhtrafrxlyie +qhgzujhgdruowoug +girstvkahaemmxvh +baitcrqmxhazyhbl +xyanqcchbhkajdmc +gfvjmmcgfhvgnfdq +tdfdbslwncbnkzyz +jojuselkpmnnbcbb +hatdslkgxtqpmavj +dvelfeddvgjcyxkj +gnsofhkfepgwltse +mdngnobasfpewlno +qssnbcyjgmkyuoga +glvcmmjytmprqwvn +gwrixumjbcdffsdl +lozravlzvfqtsuiq +sicaflbqdxbmdlch +inwfjkyyqbwpmqlq +cuvszfotxywuzhzi +igfxyoaacoarlvay +ucjfhgdmnjvgvuni +rvvkzjsytqgiposh +jduinhjjntrmqroz +yparkxbgsfnueyll +lyeqqeisxzfsqzuj +woncskbibjnumydm +lltucklragtjmxtl +ubiyvmyhlesfxotj +uecjseeicldqrqww +xxlxkbcthufnjbnm +lhqijovvhlffpxga +fzdgqpzijitlogjz +efzzjqvwphomxdpd +jvgzvuyzobeazssc +hejfycgxywfjgbfw +yhjjmvkqfbnbliks +sffvfyywtlntsdsz +dwmxqudvxqdenrur +asnukgppdemxrzaz +nwqfnumblwvdpphx +kqsmkkspqvxzuket +cpnraovljzqiquaz +qrzgrdlyyzbyykhg +opoahcbiydyhsmqe +hjknnfdauidjeydr +hczdjjlygoezadow +rtflowzqycimllfv +sfsrgrerzlnychhq +bpahuvlblcolpjmj +albgnjkgmcrlaicl +pijyqdhfxpaxzdex +eeymiddvcwkpbpux +rqwkqoabywgggnln +vckbollyhgbgmgwh +ylzlgvnuvpynybkm +hpmbxtpfosbsjixt +ocebeihnhvkhjfqz +tvctyxoujdgwayze +efvhwxtuhapqxjen +rusksgefyidldmpo +nkmtjvddfmhirmzz +whvtsuadwofzmvrt +iiwjqvsdxudhdzzk +gucirgxaxgcassyo +rmhfasfzexeykwmr +hynlxcvsbgosjbis +huregszrcaocueen +pifezpoolrnbdqtv +unatnixzvdbqeyox +xtawlpduxgacchfe +bdvdbflqfphndduf +xtdsnjnmzccfptyt +nkhsdkhqtzqbphhg +aqcubmfkczlaxiyb +moziflxpsfubucmv +srdgnnjtfehiimqx +pwfalehdfyykrohf +sysxssmvewyfjrve +brsemdzosgqvvlxe +bimbjoshuvflkiat +hkgjasmljkpkwwku +sbnmwjvodygobpqc +bbbqycejueruihhd +corawswvlvneipyc +gcyhknmwsczcxedh +kppakbffdhntmcqp +ynulzwkfaemkcefp +pyroowjekeurlbii +iwksighrswdcnmxf +glokrdmugreygnsg +xkmvvumnfzckryop +aesviofpufygschi +csloawlirnegsssq +fkqdqqmlzuxbkzbc +uzlhzcfenxdfjdzp +poaaidrktteusvyf +zrlyfzmjzfvivcfr +qwjulskbniitgqtx +gjeszjksbfsuejki +vczdejdbfixbduaq +knjdrjthitjxluth +jweydeginrnicirl +bottrfgccqhyycsl +eiquffofoadmbuhk +lbqfutmzoksscswf +xfmdvnvfcnzjprba +uvugkjbkhlaoxmyx +wadlgtpczgvcaqqv +inzrszbtossflsxk +dbzbtashaartczrj +qbjiqpccefcfkvod +hluujmokjywotvzy +thwlliksfztcmwzh +arahybspdaqdexrq +nuojrmsgyipdvwyx +hnajdwjwmzattvst +sulcgaxezkprjbgu +rjowuugwdpkjtypw +oeugzwuhnrgiaqga +wvxnyymwftfoswij +pqxklzkjpcqscvde +tuymjzknntekglqj +odteewktugcwlhln +exsptotlfecmgehc +eeswfcijtvzgrqel +vjhrkiwmunuiwqau +zhlixepkeijoemne +pavfsmwesuvebzdd +jzovbklnngfdmyws +nbajyohtzfeoiixz +ciozmhrsjzrwxvhz +gwucrxieqbaqfjuv +uayrxrltnohexawc +flmrbhwsfbcquffm +gjyabmngkitawlxc +rwwtggvaygfbovhg +xquiegaisynictjq +oudzwuhexrwwdbyy +lengxmguyrwhrebb +uklxpglldbgqsjls +dbmvlfeyguydfsxq +zspdwdqcrmtmdtsc +mqfnzwbfqlauvrgc +amcrkzptgacywvhv +ndxmskrwrqysrndf +mwjyhsufeqhwisju +srlrukoaenyevykt +tnpjtpwawrxbikct +geczalxmgxejulcv +tvkcbqdhmuwcxqci +tiovluvwezwwgaox +zrjhtbgajkjqzmfo +vcrywduwsklepirs +lofequdigsszuioy +wxsdzomkjqymlzat +iabaczqtrfbmypuy +ibdlmudbajikcncr +rqcvkzsbwmavdwnv +ypxoyjelhllhbeog +fdnszbkezyjbttbg +uxnhrldastpdjkdz +xfrjbehtxnlyzcka +omjyfhbibqwgcpbv +eguucnoxaoprszmp +xfpypldgcmcllyzz +aypnmgqjxjqceelv +mgzharymejlafvgf +tzowgwsubbaigdok +ilsehjqpcjwmylxc +pfmouwntfhfnmrwk +csgokybgdqwnduwp +eaxwvxvvwbrovypz +nmluqvobbbmdiwwb +lnkminvfjjzqbmio +mjiiqzycqdhfietz +towlrzriicyraevq +obiloewdvbrsfwjo +lmeooaajlthsfltw +ichygipzpykkesrw +gfysloxmqdsfskvt +saqzntehjldvwtsx +pqddoemaufpfcaew +mjrxvbvwcreaybwe +ngfbrwfqnxqosoai +nesyewxreiqvhald +kqhqdlquywotcyfy +liliptyoqujensfi +nsahsaxvaepzneqq +zaickulfjajhctye +gxjzahtgbgbabtht +koxbuopaqhlsyhrp +jhzejdjidqqtjnwe +dekrkdvprfqpcqki +linwlombdqtdeyop +dvckqqbnigdcmwmx +yaxygbjpzkvnnebv +rlzkdkgaagmcpxah +cfzuyxivtknirqvt +obivkajhsjnrxxhn +lmjhayymgpseuynn +bbjyewkwadaipyju +lmzyhwomfypoftuu +gtzhqlgltvatxack +jfflcfaqqkrrltgq +txoummmnzfrlrmcg +ohemsbfuqqpucups +imsfvowcbieotlok +tcnsnccdszxfcyde +qkcdtkwuaquajazz +arcfnhmdjezdbqku +srnocgyqrlcvlhkb +mppbzvfmcdirbyfw +xiuarktilpldwgwd +ypufwmhrvzqmexpc +itpdnsfkwgrdujmj +cmpxnodtsswkyxkr +wayyxtjklfrmvbfp +mfaxphcnjczhbbwy +sjxhgwdnqcofbdra +pnxmujuylqccjvjm +ivamtjbvairwjqwl +deijtmzgpfxrclss +bzkqcaqagsynlaer +tycefobvxcvwaulz +ctbhnywezxkdsswf +urrxxebxrthtjvib +fpfelcigwqwdjucv +ngfcyyqpqulwcphb +rltkzsiipkpzlgpw +qfdsymzwhqqdkykc +balrhhxipoqzmihj +rnwalxgigswxomga +ghqnxeogckshphgr +lyyaentdizaumnla +exriodwfzosbeoib +speswfggibijfejk +yxmxgfhvmshqszrq +hcqhngvahzgawjga +qmhlsrfpesmeksur +eviafjejygakodla +kvcfeiqhynqadbzv +fusvyhowslfzqttg +girqmvwmcvntrwau +yuavizroykfkdekz +jmcwohvmzvowrhxf +kzimlcpavapynfue +wjudcdtrewfabppq +yqpteuxqgbmqfgxh +xdgiszbuhdognniu +jsguxfwhpftlcjoh +whakkvspssgjzxre +ggvnvjurlyhhijgm +krvbhjybnpemeptr +pqedgfojyjybfbzr +jzhcrsgmnkwwtpdo +yyscxoxwofslncmp +gzjhnxytmyntzths +iteigbnqbtpvqumi +zjevfzusnjukqpfw +xippcyhkfuounxqk +mcnhrcfonfdgpkyh +pinkcyuhjkexbmzj +lotxrswlxbxlxufs +fmqajrtoabpckbnu +wfkwsgmcffdgaqxg +qfrsiwnohoyfbidr +czfqbsbmiuyusaqs +ieknnjeecucghpoo +cevdgqnugupvmsge +gjkajcyjnxdrtuvr +udzhrargnujxiclq +zqqrhhmjwermjssg +ggdivtmgoqajydzz +wnpfsgtxowkjiivl +afbhqawjbotxnqpd +xjpkifkhfjeqifdn +oyfggzsstfhvticp +kercaetahymeawxy +khphblhcgmbupmzt +iggoqtqpvaebtiol +ofknifysuasshoya +qxuewroccsbogrbv +apsbnbkiopopytgu +zyahfroovfjlythh +bxhjwfgeuxlviydq +uvbhdtvaypasaswa +qamcjzrmesqgqdiz +hjnjyzrxntiycyel +wkcrwqwniczwdxgq +hibxlvkqakusswkx +mzjyuenepwdgrkty +tvywsoqslfsulses +jqwcwuuisrclircv +xanwaoebfrzhurct +ykriratovsvxxasf +qyebvtqqxbjuuwuo +telrvlwvriylnder +acksrrptgnhkeiaa +yemwfjhiqlzsvdxf +banrornfkcymmkcc +ytbhxvaeiigjpcgm +crepyazgxquposkn +xlqwdrytzwnxzwzv +xtrbfbwopxscftps +kwbytzukgseeyjla +qtfdvavvjogybxjg +ytbmvmrcxwfkgvzw +nbscbdskdeocnfzr +sqquwjbdxsxhcseg +ewqxhigqcgszfsuw +cvkyfcyfmubzwsee +dcoawetekigxgygd +ohgqnqhfimyuqhvi +otisopzzpvnhctte +bauieohjejamzien +ewnnopzkujbvhwce +aeyqlskpaehagdiv +pncudvivwnnqspxy +ytugesilgveokxcg +zoidxeelqdjesxpr +ducjccsuaygfchzj +smhgllqqqcjfubfc +nlbyyywergronmir +prdawpbjhrzsbsvj +nmgzhnjhlpcplmui +eflaogtjghdjmxxz +qolvpngucbkprrdc +ixywxcienveltgho +mwnpqtocagenkxut +iskrfbwxonkguywx +ouhtbvcaczqzmpua +srewprgddfgmdbao +dyufrltacelchlvu +czmzcbrkecixuwzz +dtbeojcztzauofuk +prrgoehpqhngfgmw +baolzvfrrevxsyke +zqadgxshwiarkzwh +vsackherluvurqqj +surbpxdulvcvgjbd +wqxytarcxzgxhvtx +vbcubqvejcfsgrac +zqnjfeapshjowzja +hekvbhtainkvbynx +knnugxoktxpvoxnh +knoaalcefpgtvlwm +qoakaunowmsuvkus +ypkvlzcduzlezqcb +ujhcagawtyepyogh +wsilcrxncnffaxjf +gbbycjuscquaycrk +aduojapeaqwivnly +ceafyxrakviagcjy +nntajnghicgnrlst +vdodpeherjmmvbje +wyyhrnegblwvdobn +xlfurpghkpbzhhif +xyppnjiljvirmqjo +kglzqahipnddanpi +omjateouxikwxowr +ocifnoopfglmndcx +emudcukfbadyijev +ooktviixetfddfmh +wtvrhloyjewdeycg +cgjncqykgutfjhvb +nkwvpswppeffmwad +hqbcmfhzkxmnrivg +mdskbvzguxvieilr +anjcvqpavhdloaqh +erksespdevjylenq +fadxwbmisazyegup +iyuiffjmcaahowhj +ygkdezmynmltodbv +fytneukxqkjattvh +woerxfadbfrvdcnz +iwsljvkyfastccoa +movylhjranlorofe +drdmicdaiwukemep +knfgtsmuhfcvvshg +ibstpbevqmdlhajn +tstwsswswrxlzrqs +estyydmzothggudf +jezogwvymvikszwa +izmqcwdyggibliet +nzpxbegurwnwrnca +kzkojelnvkwfublh +xqcssgozuxfqtiwi +tcdoigumjrgvczfv +ikcjyubjmylkwlwq +kqfivwystpqzvhan +bzukgvyoqewniivj +iduapzclhhyfladn +fbpyzxdfmkrtfaeg +yzsmlbnftftgwadz diff --git a/2015/5/sol.hs b/2015/5/sol.hs new file mode 100755 index 0000000..808bcdc --- /dev/null +++ b/2015/5/sol.hs @@ -0,0 +1,102 @@ +#! /usr/bin/env nix-shell +#! nix-shell -p "haskellPackages.ghcWithPackages (p: [ ])" +#! nix-shell -i runghc + +-- imports + +import Data.Map (Map) +import qualified Data.Map as M + +import Data.List (isInfixOf, nub) + +import Control.Monad (liftM2) + +-- solution composition + +main :: IO () +-- main = print =<< sol2 +main = print $ (\l -> not . any (liftM2 (==) head last) $ windows 2 [0..length (windows 2 l) - 1]) $ "aaa" + +fileContent :: IO String +fileContent = readFile "./input" + +sol :: (LineData -> Bool) -> IO Int +sol isnice = pure . length . (filter isnice) . M.elems . parseInput =<< fileContent + +sol1 :: IO Int +sol1 = sol isNice + +sol2 :: IO Int +sol2 = sol isNice' + +-- input parsing + +type FileData = Map String LineData +data LineData = LineData { content :: String + , vowels :: [Char] + , vowelCount :: Int + , consonants :: [Char] + , consonantCount :: Int + } deriving Show + +parseInput :: String -> FileData +parseInput s = M.fromList $ zip ls $ map parseLine ls + where ls = lines s + +parseLine :: String -> LineData +parseLine l = LineData { content = l + , vowels = vs + , vowelCount = length vs + , consonants = cs + , consonantCount = length cs + } where + vs = filter (`elem`"aoeui") l + cs = filter (`notElem`"aoeui") l + +-- helper functions + +rotate :: Int -> [a] -> [a] +rotate _ [] = [] +rotate n xs = zipWith const (drop n (cycle xs)) xs + +windows :: Int -> [a] -> [[a]] +windows n xs = take (l-n+1) $ map (take n) rots + where + l = length xs + rots = map (`rotate` xs) [0..l-1] + +isPalindrome :: Eq a => [a] -> Bool +isPalindrome xs = firstHalf == secondHalf + where + firstHalf = take half xs + secondHalf = reverse $ take half $ reverse xs + half = (length xs) `div` 2 + +occurenceCount :: (Ord a, Eq a) => [a] -> [Int] +occurenceCount xs = rec xs M.empty + where + rec [] _ = [] + rec (x:xs) mem = case M.lookup x mem of + Just i -> i : rec xs (M.adjust (+1) x mem) + Nothing -> 0 : rec xs (M.insert x 1 mem) + +-- problem solution algorithms + +isNice :: LineData -> Bool +isNice ld = atLeastThreeVowels && atLeastOneDoubleLetter && noIllegalSubstrings + where + atLeastThreeVowels = vc >= 3 + atLeastOneDoubleLetter = or $ drop 1 $ reverse $ zipWith (==) (rotate 1 l) l + noIllegalSubstrings = null $ filter (`isInfixOf` l) illegalSubstrings + illegalSubstrings = ["ab", "cd", "pq", "xy"] + l = content ld + vc = vowelCount ld + +isNice' :: LineData -> Bool +isNice' ld = containsPairWithoutOverlapping && containsThreeLetterSandwich + where + containsPairWithoutOverlapping = containsPair && notOverlapping + containsPair = any (/=0) $ occurenceCount $ windows 2 l + notOverlapping = not . any (liftM2 (==) head last) $ windows 2 [0..length (windows 2 l) - 1] + containsThreeLetterSandwich = not . null $ filter isPalindrome $ windows 3 l + l = content ld diff --git a/2021/3/input b/2021/3/input new file mode 100644 index 0000000..29fa12f --- /dev/null +++ b/2021/3/input @@ -0,0 +1,1000 @@ +011110111101 +110010010001 +111011111111 +110011010100 +111100000011 +010101001001 +010101000010 +100111101000 +110110101110 +001001101000 +101100100110 +101001100110 +101110000110 +011111111100 +110010000101 +000011111001 +101000110001 +100111011101 +011011011011 +111100000100 +010100101100 +110010000110 +101000001101 +010100110011 +111101101100 +100101000011 +101000100111 +111010010000 +011111000110 +110100101010 +011010000000 +101110100111 +010000001000 +001111001010 +001011101011 +100001110010 +001100100100 +111110011110 +000011101011 +101100111011 +000000101011 +101000000100 +001000101011 +110101000111 +011010111011 +100011101011 +110101011000 +001110110010 +100011101110 +001101011001 +000101100100 +010000101100 +100010001100 +100101001010 +011010110001 +111001110110 +111101111101 +000010011000 +110100111000 +011010000100 +000000010110 +100000001001 +110101101001 +111010100001 +101011110000 +110100101111 +010000010110 +111010110100 +011110010110 +001100001111 +001110001110 +111001110101 +010111000110 +101111001101 +010011010011 +000001110101 +101100010001 +111101110011 +101000010101 +100110011001 +010101011101 +111111101110 +010011010010 +110000101111 +100101111001 +011110100110 +111100110000 +100000111000 +011010011111 +101001101110 +110001110111 +101011001111 +010101110010 +000110001100 +101110011011 +000111111100 +001001011110 +010000100101 +110110111101 +001000011001 +011011110101 +100000001011 +010110000011 +110011001100 +110000110010 +111000110111 +110000001000 +011110101001 +001111101010 +001111000111 +100010100010 +001001010100 +001101101001 +000011000011 +101010101101 +101101011000 +000010001000 +011101110101 +000001011110 +001000101001 +000110000000 +100010111011 +001111111111 +001101110101 +001101100100 +101000011110 +010001010101 +111011010000 +000011011101 +101101001010 +010000110001 +111110011000 +110011100111 +000110111100 +010110001101 +010100010100 +101010100001 +011010111001 +010001100100 +010100111011 +010010010111 +011100011011 +101110110111 +011111101000 +101110001101 +001001100111 +101100101010 +100001010101 +100101000101 +101000000011 +110000101110 +001000111000 +011100000000 +101100111110 +000100101001 +010100111111 +000101110000 +101111100010 +110011101110 +011001000100 +111001001000 +000001111010 +100100010011 +101010101001 +010110010000 +110011110111 +101000010000 +100000101010 +110010011010 +001001001111 +001011011000 +011101100110 +100101101010 +110010111100 +110000100100 +010010001100 +010011010101 +110011000010 +101111110010 +001011010001 +001011001010 +100000001010 +000110010010 +000111101111 +110011101100 +110100110010 +100100010100 +010001100010 +001101101111 +111110110001 +111101000101 +000101101111 +000100110100 +001000111011 +011000111000 +101000011001 +110110110000 +111111111010 +000000001010 +000010101010 +001000001001 +101001100101 +001001000101 +101111110111 +101101001100 +001110111011 +101000111101 +010100000000 +110011011011 +000110100001 +100110111010 +000011100001 +010000010111 +110111011100 +111100001011 +001111011001 +000011011100 +111110011011 +010110000010 +001000010100 +011110011110 +111100001101 +110011100101 +011111110000 +100111011010 +000000111011 +111111001010 +010100111100 +000101111000 +110010011111 +110111101001 +100011000001 +111001100010 +100101000001 +010111111101 +110010110001 +001101001001 +100101101001 +011000110101 +101110011001 +101111101010 +100111010001 +011100111000 +001100000111 +001110011110 +010010000101 +010010110001 +111010001101 +000010110001 +010110101110 +011111111000 +100000101001 +111101011101 +000001010100 +000011001011 +110000011100 +000011001110 +110101010110 +011000110011 +000111111000 +100000110000 +001010101010 +001001101001 +011101011011 +100011110000 +111011011000 +111101110100 +000001010110 +100011110100 +101101000010 +000011011011 +101011110110 +100001101011 +010111100000 +000011000010 +000111001111 +011001100100 +110110010010 +000011110111 +101001001011 +010110110101 +001100000110 +000111101110 +110011010011 +101001010010 +010011110100 +110101011010 +101100101011 +101110010110 +010000000011 +010001101001 +101010011110 +010101100001 +100100000110 +000010010111 +101100101110 +000111000001 +110100111111 +010011100000 +011101110000 +011111011110 +101011011110 +100011110010 +001100011100 +011010010111 +101010011001 +110100100110 +001011100111 +001001101110 +010001001000 +101111100100 +101011010001 +100101100001 +010000101001 +000100000011 +101011101000 +000001100101 +110001101111 +001110000111 +010010000110 +101001101101 +100110011000 +100110000110 +000000110010 +000111100001 +001000101110 +110000000111 +110011101111 +101110010010 +110010001110 +101111011010 +000001000000 +110010100111 +100111010111 +001100101111 +001110111001 +111100011100 +011000010100 +100101101101 +100001001110 +111110100011 +101111001000 +010111000100 +110001110010 +001110101111 +101000000111 +010001010111 +000000000111 +010001111100 +011100000110 +010100010000 +101000010001 +101110000100 +111111110001 +110000001101 +111001111111 +000100011111 +111001101000 +001011111111 +110100001011 +111011000001 +001111101101 +101011110100 +101010110010 +101111110011 +011100100100 +001101011110 +000100001011 +100001011101 +101000010110 +001011110111 +110101000101 +011011011110 +001010000001 +000111000010 +100101001001 +000001110010 +110100010011 +111100101101 +100111011001 +000110101111 +101010000100 +011101011000 +001110000010 +001000111101 +110000011000 +010010010110 +100101011000 +000010010100 +110001101010 +101010000110 +111111010010 +001111001000 +110100101001 +010001000001 +001111110010 +110001011011 +111100000001 +011011110111 +111001001111 +110010000100 +100101111011 +001000111001 +111010001010 +101100100100 +101000111110 +000100101110 +111000101001 +001001010110 +100100101101 +111111011100 +111001110011 +011111001100 +101010101100 +000011010001 +110111001110 +010100000111 +110011100000 +101001000010 +000111101001 +010100011111 +011101001001 +100110010010 +100110101010 +010001110010 +011101000101 +001111100010 +011010111111 +110110001110 +010010010000 +101100110011 +111111011101 +000011000101 +100000111100 +111101010011 +100111010011 +110010011011 +000011111100 +011110011000 +101100000101 +111110000011 +100100001011 +000010011001 +111000011101 +111000110101 +110010100010 +101001010100 +010001110011 +001101001011 +010000101111 +111011100000 +000110000111 +000011100000 +000101011101 +000101100001 +011100100000 +011100001011 +011110111011 +111110010010 +111000010110 +000110001110 +111100011001 +010110000110 +000001010111 +100001111001 +100111100001 +011000111011 +111111101001 +001000000001 +001101100011 +111101010100 +001101110001 +110100111011 +000111011010 +000111110100 +010100000011 +010001110101 +101100000011 +110011111000 +010010101001 +101111011100 +101101101101 +111110000100 +001011000000 +010100001110 +001001011011 +011000011101 +110111110101 +101010010111 +110101000010 +111111000000 +101010101110 +101100110101 +100110001011 +011010110010 +000010110010 +000101001001 +000011110011 +101010111111 +011000101101 +111001100101 +000110101001 +110100000001 +110010000001 +111011011110 +101110110101 +000001111001 +100100011011 +011111111001 +100111101110 +101010010011 +000010110000 +011110111010 +000011110100 +101010010001 +110000011001 +100100110010 +100110100110 +110000110001 +100111010100 +000111011100 +110001000100 +011000010010 +101111111110 +011100011100 +000001001110 +111101101000 +110011001011 +010001000110 +000111000000 +000001001001 +100100011100 +101111011101 +000111001001 +010001011111 +001100100101 +011101000100 +011001110101 +100111100110 +010110000100 +111011100011 +110000011010 +011000101111 +100010100011 +111101001111 +000111010110 +011001110000 +101101011011 +010011000111 +110001101100 +000100001110 +110101111000 +111100001110 +100101011110 +111011101110 +110010101111 +110111101101 +110100011001 +000111111111 +011001101110 +001100010000 +110011110000 +011010110101 +011110111100 +100001110000 +110101101110 +000010001100 +011001101100 +100000110110 +100111110111 +101110001100 +010101000011 +110001110001 +011001011001 +011001111001 +111010011001 +110011011010 +001011011110 +111000000100 +101110111001 +110000111010 +101010110101 +110001011111 +011001011111 +101110010101 +010110110111 +010101100101 +010111111000 +010000011101 +100111010000 +100001111101 +001101111010 +001000000011 +010110111011 +010001110111 +000011001000 +110001111010 +111101001001 +110000000100 +111100001000 +111010000110 +000100011110 +110101101011 +001011110100 +011101011001 +110101010100 +110010011001 +100101001111 +100110110100 +000101001101 +001011101110 +101000001010 +001100101010 +100010011011 +100011100001 +000101011111 +111001100110 +101110101011 +111101111100 +001000001010 +001100010100 +111010100111 +000101110001 +001010100001 +001111110110 +110110101000 +110110000110 +011110111110 +100111110001 +011000001110 +110101010011 +010110001110 +111110010001 +100101111000 +001111100101 +110011001010 +111101010010 +111111000011 +001100101011 +100001101100 +100001110110 +110000000001 +000101001011 +111111110111 +000100010000 +101010110011 +111001101011 +010111100010 +001000011011 +010010110011 +001010111101 +010011011011 +011110000001 +010101011111 +001011101100 +010000010000 +111001100111 +111001010011 +111000111010 +001100011110 +010111011101 +010110000111 +010101100010 +011110011100 +100101000111 +011010000111 +000101010111 +100101001100 +011010110011 +011000011110 +010011110101 +111000101111 +111010101111 +101111010110 +100100101000 +101011111100 +100001001000 +000100010101 +001001100000 +110100100001 +100011110001 +101110110110 +110011000100 +011001000101 +111001110111 +111011010110 +101110110010 +100110111001 +110101011011 +110110000011 +000111101101 +100011010010 +111000100101 +010001100000 +010011111001 +010101010101 +110011110101 +100000100110 +110010101000 +000100110101 +010010110111 +111000001001 +001011111011 +010000111001 +111011001110 +011101110110 +010001111001 +111001111110 +101010101111 +101111111101 +110011101010 +010011000110 +101001111010 +101110000101 +000010000110 +111110000111 +001010111011 +010110011111 +001011101101 +011101011110 +000010000010 +101011010011 +011100011000 +111000100011 +011111011111 +110000001010 +000100000100 +101010111101 +110000111000 +001100110000 +111111011010 +110100110000 +000000000000 +101001000000 +110010110101 +011011001100 +101101101110 +010110100011 +101111000000 +111011100101 +110100100010 +010111000001 +110110011000 +011101111110 +000010110110 +111000000011 +001101110010 +100000110011 +000110000011 +100111110000 +011110110011 +111010101010 +010010001011 +101111000110 +001010000011 +101111010000 +011000111001 +001001111101 +010100011001 +000000010011 +001111001001 +011000010000 +011001111111 +100010101001 +010000100011 +111111101101 +011011001000 +011001010011 +111011011001 +010001110110 +110010110000 +000000000011 +110110000000 +011101001101 +011010000101 +101011100110 +001101010010 +100000000100 +100100010001 +100110011111 +111100001010 +001100011111 +000100000110 +011011010010 +011010001100 +011111101011 +011010101001 +110111000110 +110000110110 +011110110000 +010011011101 +010011100100 +000110111001 +111011111001 +101111010010 +011000111100 +101111111010 +110011000001 +000100011000 +110101110100 +011001101010 +100011011101 +001011110011 +110010111110 +000110001101 +111011101001 +100110100001 +101011011010 +001000101010 +101011100111 +110110000001 +100100000010 +101100010011 +111001010101 +011100000101 +100010111100 +010110100010 +100100110001 +100111001001 +011101010010 +101101111000 +111100100111 +111011001000 +100111011111 +111001100001 +010001111011 +011110100100 +111111010101 +101011111110 +110101101100 +000100101111 +011110001000 +101101001110 +001111111010 +110011100110 +110110011100 +111111100000 +000000010001 +100100001101 +101000101110 +100001011010 +100011000100 +110011110110 +000000110100 +010110001010 +101000110000 +110110001001 +000001000101 +011111100111 +000011110101 +101111010101 +010101001111 +110111001111 +101001110010 +011001010111 +101000101010 +100100000111 +100011001011 +110010000000 +001000110001 +100010001101 +010001000010 +101101111111 +111001001011 +101001011100 +000100111100 +110000000101 +101010011101 +000101000111 +111000101100 +001100000100 +010010100101 +011010100010 +111000100110 +001001111010 +101001001111 +011000100011 +011000001100 +011110101111 +111011111110 +101001001010 +010000001111 +000000000101 +000111001010 +100001000111 +111101010001 +010011001111 +001110010000 +101101001001 +000110110111 +001101011011 +111100100010 +101010001000 +001001101100 +011110001101 +000101000011 +111101100111 +100110000010 +111010100101 +011010011110 +000000101000 +001011001000 +001001011010 +011100000100 +000011010101 +111110011100 +001101110110 +100011101111 +011001110010 +011100100111 +010101001100 +000101010000 +101001101001 +100101110111 +101101100110 +000101100010 +111011000011 +010010010011 +000111111110 +010101100011 +000001010010 +111100110010 +101011001010 +010110011110 +011001101111 +011100001010 +001111001100 +000110100011 +101011101010 +011111111110 +100011011011 +101010011111 +010001110001 +100010101101 +010101010011 +100001010001 +111010011000 +011110100010 +001111000101 +111101101010 +011110100000 +111110001101 +110010010100 +000001010011 +000100101100 +111000111111 +011111000011 +010000011001 +000110001011 +111100101110 +001000110101 +001011111100 +001111010001 +101000100101 +000101001100 +000110101010 +010010011111 +111101001000 +101110110011 +111100100110 +101010101011 +101010101010 +100000111001 +000101000001 +100010010101 +011000101000 +100100001111 +110111100011 +101100000000 +001011110001 +110011001111 +000001000011 +001100111011 +101100010000 +001111000001 +111100000101 +101010111011 +011111110010 +011111010001 +101011010100 +000111111011 +110000100110 +110111110000 +100101101110 +001011000001 +101100001101 +011100010010 +000110100110 +010101110111 +111100101011 +101101001101 +011011111110 +011100011001 +110010011100 +000001011100 +101110100110 +010001011100 +011111001010 +100111100101 +111111000010 diff --git a/2023/11/input b/2023/11/input new file mode 100644 index 0000000..761a2ee --- /dev/null +++ b/2023/11/input @@ -0,0 +1,140 @@ +.......................................................................................#........................................#..........# +..........#.....#.........................#..................................#..............#............................................... +.......................#.........................#.....#......#....................................#.......................#................ +............................................................................................................................................ +........................................................................#................................................................... +.................................#...............................................#.............#...............#.......................#.... +..#.............................................................#........................................................................... +..........................................#.......#........................................................#................................ +....................................................................#...............................#....................#.................. +......#......................#.............................................................................................................. +...........................................................#....................................................................#........... +#................#...........................................................#......#.....#.....#....................#...................... +.......................#.............#...............#..................#................................................................... +..........#....................#..............................................................................#............#............#... +.............................................#.....................................................................................#........ +......#............................................................................................................#........................ +...................................#................................#......................#................................................ +..#..........#......#....................................................................................................................... +.......................................................#.....#..................................#....................................#...... +.................................................#......................................#.............#.........................#........... +.......................................#...................................#...................................#............................ +....#...............................................................................................................#......#...............# +...........#.........................................#.............................#........................................................ +................................#...........................................................................#............................... +.......#.............................#........................#...............................#.........................................#... +..............#..........#.................#............#.....................#............................................................. +...#..............................................................#.....................................................#................... +............................................................................................................................................ +................................................#................................#............................................#............. +..........#.....................................................................................................#........................... +......................#.................................................#................................#.........................#........ +......#..........................#......................................................................................................#... +..........................#...............#..........#.....................................#................................................ +..............................................................................#.................#........................................... +....................#................#.......................#.......#....................................................#................# +....#.............................................................................#.................................#....................... +................#.......................................#.............................................#......#.............................. +........#...................................................................#............................................................... +..........................................#.......#.........................................................................#............... +....................................................................#...........................#.....................#..................... +.#.................#.....#............#........................#.................................................................#......#... +.............................................#........#...................#........#........................................................ +...............#........................................................................#................................................... +....#............................................#......................................................#...........................#....... +...........#.........#............#..........................#.................#................................#.........#................. +.............................#.............#......................#.........................#...................................#........... +#.....................................#..................................................................................................... +...................................................................................#..............#....................#..................#. +..........................#...........................................#...................................#................................. +............................................................................................................................................ +......................................................#.......................#.......#..................................................... +....................................#.......#....................#.......................................................................... +...#................#.......................................................................#................#.................#............ +.............................#........................................................................#...................#............#.... +..........#..............................#.......#.....................#........#...............#........................................... +..............................................................#...................................................................#......... +...........................................................................................................#.................#.............. +.................#......#...........#.................#............#..................#............................#........................ +.....#...............................................................................................#...................................... +............#..................................................................................................#.......#...............#.... +................................#.........#.................................#............................................................... +................................................#..........#.......................#........................................................ +.#.................#.............................................................................#..................#.............#......... +........................#............#..................................#................#.................................................. +......#...............................................................................................#......#...........................#.. +.....................................................................................#..................................#................... +..........#..........................................#...........#............................................................#............. +.............................................................................................#....................#......................... +.......................................................................................................................................#.... +....#................#.................#........#...........................................................#..............#................ +............................................................................................................................................ +............................................................................................................................................ +..............#.........#............................................................#.................................#.................... +.............................#................................#....................................#........................................ +.......................................................#...................................#.................#.............................. +.....................#..................................................................................................................#... +...#.................................#.............#................................................................#........#.............. +............................................................#............................................................................... +.......#.................................................................................................................................... +.............................#.........................................................................................#..........#.......#. +.....................................................#...........................................#.......................................... +..........................................#...........................#.........#........................................................... +..................#...................................................................#......................#.............................. +.......................#.......................#...................................................................#......#................. +#............#..................#...........................................#........................#...................................... +.....................................#............................#......................................................................... +............................................................................................#............#.....#..................#......... +..........................................#...................#....................#........................................#............... +..................................................#......................................................................................... +.....#............#...............................................................................................#....................#.... +......................................................#.......................................#............................................. +..............................#..............#.............................................................................................. +......................................#................................#.................................#............#........#...........# +...#..........#.....#...........................................................#........................................................... +.....................................................................................#.....#......#........................#................ +.......................................................#...........#..............................................................#......... +............................................#..............................#.............................................................#.. +................#..........#.................................................................................#.............................. +......................................#..............................................................#...................................... +#.......#...............................................................#.............................................#...............#..... +..........................................#....................................................#............................................ +....#.................#................................................................#.................................................... +...............#.............#..................................................................................#.........#..............#.. +....................................#..............................................................#...............................#........ +............................................................................................................................................ +......#.............#.............................................#.............#........................................................... +...........................#............................................................................#.........#......................... +#......................................#....................................................#...........................#..............#.... +...............................................#.....#...................................................................................... +.............#.........#......#....................................................................................................#........ +..............................................................#.....#............#.......................................................... +.........#...............................................................................................................................#.. +......................................#.....#...............................#...........#....................#.............................. +.....................................................................................................#..............#....................... +....#.......................#.....#.................................................#....................................................... +...........................................................................................................................#.....#.......... +.................#........................#......................................................................#.......................... +.#.................................................................#..........#..........#..............#................................... +.......................................................#.....#.............................................................................. +.........#.....................................#...................................................#.........#.............................. +.................................#...............................................#.....................................#.............#.....# +.........................#.................................................................................................................. +....................#.................................................#.....#...................................#...............#........... +...................................................#...........#.............................#.............................................. +....................................................................................#..................#.................................... +....#...........#......................#...............#.................................................................................... +.........#........................................................................................#...................#...................#. +......................#......#.............................................................#................................................ +#..............................................................................#............................................................ +..............#....................#.........................................................................................#......#....... +.................................................#...................#...............................#...................................... +....................#......#..................................#...........#.......#....................................#.................... +..........#.....................................................................................................#........................... +.....#...................................................#.....................................................................#............ +........................#.......#......#......#..................#........................................................................#. +.............................................................................#.............................#................................ +..............#........................................................................#.................................................... +.....................#.............#...................#.........................#..........#............................................... +.............................#............#....................#.........#.......................#..................................#....... +........................................................................................................#................................... diff --git a/2024/1/odin/example.txt b/2024/1/odin/example.txt new file mode 100644 index 0000000..b8af9ad --- /dev/null +++ b/2024/1/odin/example.txt @@ -0,0 +1,6 @@ +3 4 +4 3 +2 5 +1 3 +3 9 +3 3 diff --git a/2024/1/odin/input.txt b/2024/1/odin/input.txt new file mode 100644 index 0000000..cf109b6 --- /dev/null +++ b/2024/1/odin/input.txt @@ -0,0 +1,1000 @@ +80421 40193 +69841 31045 +47850 64065 +63141 52072 +32908 83033 +33395 25559 +78513 59127 +91270 76329 +65508 34159 +27139 15788 +13228 50396 +43186 29116 +55392 52441 +19309 68909 +72798 54258 +31590 11220 +32125 81946 +58099 50396 +16614 76682 +60604 12184 +21251 26105 +56053 96112 +47903 13396 +72956 11681 +66315 11220 +54499 96112 +38390 83884 +69211 52732 +69235 52441 +83831 49092 +25782 75523 +35417 15162 +45889 82918 +76191 97182 +95942 49643 +30121 83884 +86470 16217 +23572 11220 +69703 80739 +45792 21543 +76682 70230 +79585 83884 +64501 69361 +55546 92076 +43632 87826 +93309 17223 +73996 69071 +83466 42385 +73963 19398 +36643 98070 +43789 15788 +54302 70897 +83362 50227 +60881 66983 +61881 17864 +81520 52171 +99147 41180 +63427 16217 +50290 40193 +19315 20520 +84997 27666 +45495 40509 +81512 76682 +93459 11220 +28126 72353 +38227 11681 +49613 27677 +26858 40193 +16759 51946 +42145 90200 +64421 88733 +97361 16019 +32616 75596 +30875 90149 +82019 50759 +90554 83033 +42030 75763 +64459 32394 +45152 83884 +51375 48768 +71487 93793 +69694 84439 +97213 70998 +65471 90900 +69237 48307 +50672 58376 +61500 58064 +22831 76682 +63626 90356 +43195 87826 +67468 11770 +59753 97698 +34386 97698 +84851 23296 +96001 69910 +41418 13027 +82815 27666 +37012 17864 +45122 57830 +81552 44943 +18717 33011 +28726 87826 +29453 52441 +82398 24963 +47384 87826 +24205 50966 +80001 43568 +17033 21145 +74890 54233 +59065 58047 +33505 96112 +96403 34213 +35992 94345 +74353 27666 +59539 37101 +90355 71860 +86007 11220 +50733 76682 +75113 94664 +56735 87038 +27654 16492 +39478 47633 +70998 95331 +19885 38941 +47463 26105 +74771 28343 +56762 87773 +89980 35218 +35434 71473 +97275 53382 +97389 28343 +55060 11220 +83189 74164 +65464 75140 +15091 58376 +49752 94345 +55978 50227 +13991 40193 +58778 69071 +99285 16217 +37693 40193 +61282 71473 +34624 87374 +53881 13912 +67666 58376 +51235 52441 +80739 99593 +40193 97698 +94214 83205 +13145 72473 +88888 40193 +46957 96567 +92406 59738 +85389 13942 +55969 52441 +91426 46497 +92608 63775 +71473 24823 +51744 50396 +77645 42696 +34121 96112 +99775 96112 +89480 98660 +42647 95861 +35131 98522 +22031 76805 +10282 43806 +82323 65743 +79408 89179 +50692 85420 +89878 70998 +46431 17223 +99643 52441 +61276 68075 +14058 83884 +94292 17411 +92506 40193 +91012 17223 +51557 55254 +50846 96567 +20336 84821 +71617 81946 +40314 84439 +42990 89703 +62455 27446 +65790 94345 +57568 65105 +13052 79090 +30028 96128 +42028 58852 +47372 87826 +44459 90200 +67988 66776 +28313 84439 +52545 94345 +17108 37412 +16113 11681 +56064 54165 +60025 37314 +85545 11681 +68437 25575 +46677 20626 +53308 28343 +79483 70998 +54308 55727 +26755 69337 +73791 50227 +33565 83884 +35359 17223 +47840 26266 +50109 75074 +88842 39316 +84439 97698 +86029 96112 +39964 79122 +37828 69071 +73120 96567 +67688 50227 +61996 70230 +62643 82883 +99604 28343 +18054 76682 +52441 97698 +45131 58376 +32102 53380 +60963 53418 +73803 41652 +56361 70998 +74041 77517 +14940 84439 +80439 26105 +79199 83033 +41700 83033 +35229 65677 +64958 84439 +51246 78550 +23506 31244 +26237 40038 +49105 27712 +62117 37779 +76884 94345 +56414 62009 +88424 80739 +97192 15788 +70374 59226 +53515 76682 +85931 28343 +50925 38390 +51959 96567 +98082 28525 +37588 29342 +52624 37871 +28331 16217 +73762 94345 +73815 38390 +38573 25210 +88916 97698 +66917 28343 +47055 73500 +97902 34391 +16580 82128 +18015 91780 +77218 14792 +22251 37702 +62344 94345 +49811 73150 +43220 58572 +93889 76682 +70259 90173 +16985 26105 +93371 50227 +93434 49229 +97412 55737 +69071 39598 +70682 90271 +31536 30421 +81650 96112 +66094 70998 +94447 83052 +70230 87681 +69613 93387 +50227 85660 +32751 83903 +12441 41367 +64171 79090 +88431 75578 +33033 96567 +96305 79090 +17193 52441 +42766 27666 +30798 50396 +18160 14792 +86048 69517 +26894 10883 +72243 38390 +48910 96875 +80507 90612 +77344 83033 +11713 96112 +36810 50227 +91347 11220 +20755 76682 +50353 95421 +63754 63013 +22119 25388 +35010 38390 +39083 90678 +16379 13640 +47651 67154 +50798 71473 +64108 83884 +62368 85420 +87732 54461 +44496 74078 +50396 16217 +32142 94345 +12969 50227 +63851 24208 +59124 89844 +24929 21174 +55229 84439 +78807 15788 +58298 50396 +16926 96567 +83884 50396 +63542 49739 +76625 41626 +97382 32976 +40464 38390 +14575 10840 +63334 71473 +25579 40921 +71524 96567 +50616 93389 +81504 17864 +10618 32838 +65653 11681 +74217 76682 +17739 45245 +12975 56728 +92629 12987 +13610 68591 +24487 83033 +12475 81946 +31651 39134 +32359 81946 +41174 79359 +63548 65603 +55031 50396 +59183 58376 +74036 69252 +33977 71473 +39977 40407 +32033 40193 +90147 83033 +23940 30137 +67597 33156 +64295 99755 +72689 96112 +92379 83884 +59904 17864 +59250 54829 +31693 34134 +88853 97698 +46754 31254 +58208 11220 +98626 11220 +46741 70998 +36408 63013 +18581 87826 +63114 28343 +97394 81946 +93270 97698 +80744 59372 +97689 57651 +87482 58376 +11896 75807 +65025 96196 +15892 54686 +68939 24270 +16022 53606 +36023 85420 +95998 43637 +61265 38390 +79090 11220 +81946 99814 +63895 78782 +83527 90200 +51915 62980 +22548 20223 +58376 26608 +81705 24971 +99116 26106 +92178 77949 +98976 38390 +81016 28343 +52646 79090 +29911 88246 +23834 92181 +46484 89669 +68488 44503 +74484 29808 +89780 86262 +96112 75203 +51392 42994 +19800 23307 +49890 41317 +98098 94345 +57894 69730 +59120 93793 +86825 83884 +41981 84710 +69860 70998 +25576 35489 +42850 23083 +34439 85430 +91153 35450 +59806 16217 +87651 74318 +15466 76682 +94237 22001 +45392 47159 +35295 95111 +86122 88173 +28631 50396 +34798 26613 +61839 13468 +61723 96112 +14034 96112 +30006 16217 +14649 26145 +86294 80739 +32258 11681 +92857 50396 +86334 58376 +10895 84439 +63194 85936 +76887 96027 +68733 26105 +41207 63013 +28365 88512 +24732 38390 +67548 49710 +81155 48747 +41815 96112 +51642 69071 +62718 81572 +59606 98715 +74964 13588 +64466 17223 +96982 46340 +84527 94623 +69698 11220 +11144 23375 +57947 97698 +41007 80545 +11681 32334 +94807 43967 +54555 94345 +16363 93419 +65623 45980 +42388 45727 +48482 79090 +85324 81581 +59768 37611 +62042 11681 +90240 19425 +66983 24278 +98892 42679 +35839 35139 +17825 39236 +74183 28343 +94347 48434 +82766 84797 +12488 62200 +11529 58265 +82862 27666 +63390 87826 +87638 60767 +69964 71473 +94668 76682 +58958 52441 +75722 97743 +68139 11220 +58242 75810 +92586 40193 +29680 94345 +33347 73583 +74149 73747 +88092 94345 +82865 45901 +88894 38390 +40872 97309 +85420 93793 +80641 69071 +57680 79788 +50575 63583 +45838 28855 +77834 63196 +36094 58852 +93487 19648 +98316 79122 +89283 97494 +81283 78824 +78086 84439 +70708 27959 +64643 44369 +39933 56445 +68663 28343 +97698 10803 +79122 51608 +35053 96112 +88445 87826 +59362 81946 +58091 67264 +48218 93793 +64495 16994 +38395 71473 +61884 50396 +84809 84439 +90363 78607 +39707 76682 +66866 83033 +76807 80277 +98492 83033 +65436 84059 +69199 68798 +62230 83884 +51938 18013 +99036 22915 +20508 84439 +41393 50396 +47979 58852 +74140 70998 +42029 88646 +43056 14163 +96145 39532 +80632 64382 +56985 85420 +63903 41993 +11220 93712 +94345 15788 +43760 56901 +93453 58852 +35914 74746 +73054 44762 +45629 40193 +77231 55896 +77041 38390 +96658 74157 +46466 17606 +88020 77476 +51115 61806 +24234 81946 +17382 79090 +38939 78416 +55399 95124 +74933 97972 +17223 11832 +20126 25792 +84054 91443 +84057 96112 +88765 83033 +27933 54577 +48695 78824 +90200 51999 +74599 38503 +61441 90200 +66742 38390 +23353 26105 +37362 82425 +38602 44514 +41407 71473 +51001 62633 +98321 40630 +75078 11681 +68245 24288 +49051 14363 +36869 25312 +17659 47253 +74211 69071 +41285 22997 +89913 71473 +35951 34861 +67158 50396 +43938 15553 +72373 24972 +40926 97698 +63013 85420 +19477 71473 +79722 19841 +28842 83920 +14541 55730 +31500 75763 +51488 32218 +18889 96567 +57241 17864 +51819 47021 +21973 30568 +13743 10104 +87695 43875 +90862 27666 +16780 65150 +24792 58376 +28715 69071 +40287 78011 +59897 84439 +16124 83884 +34237 44208 +80709 83186 +12989 55204 +96071 63816 +78189 63337 +37586 98216 +19413 51370 +64986 70521 +93855 48927 +57998 25233 +42676 58360 +93905 29575 +18012 58243 +28846 54313 +97083 50396 +59982 20815 +95409 88260 +57482 70230 +69515 83884 +78295 69071 +72645 71473 +71966 28343 +98274 84439 +34068 28343 +96135 40193 +65836 15788 +23264 84439 +19621 51691 +75945 40091 +29573 47799 +14879 79090 +28207 38390 +11483 15774 +32877 80739 +36254 96567 +65116 27258 +14250 93650 +23902 96112 +89984 35958 +82242 33004 +12762 62900 +81194 99347 +72193 37712 +71644 74162 +46588 52441 +27739 70311 +35648 70998 +44410 87233 +46656 27666 +31914 71473 +90034 78824 +61968 83033 +36567 29131 +78387 67697 +33453 57266 +24915 40540 +70857 52975 +28343 81423 +92106 87378 +56025 82509 +32851 98692 +51436 97147 +70601 71473 +70452 33153 +39288 15788 +17976 11220 +15788 58376 +40113 53779 +25192 88120 +31980 98924 +80317 91384 +67936 10228 +14839 75691 +55689 75265 +28107 90207 +49283 17864 +27666 52539 +26105 26025 +71897 10363 +65171 58095 +87061 76361 +58586 84439 +90319 17223 +12401 11681 +60665 21206 +66454 77367 +58801 69471 +12007 11220 +59620 71043 +14269 33941 +84020 34182 +21849 61119 +19934 93793 +49226 64719 +59477 58376 +67180 38390 +69143 84212 +29611 69071 +74186 73216 +44892 47027 +88341 63662 +93425 27666 +58009 40217 +61426 88678 +14176 17223 +19374 19815 +15924 63644 +31338 90200 +20061 96567 +77739 17223 +39213 79090 +86112 44465 +59347 96112 +52900 88643 +49030 41964 +79160 96112 +60822 33345 +87682 46340 +92223 67780 +75763 68868 +58470 38390 +22344 11681 +60094 70230 +53703 65992 +60348 41120 +14792 81993 +53271 21427 +67055 17864 +64402 49401 +46340 71473 +67425 80739 +33676 91364 +20261 93934 +33464 45079 +47333 87047 +99552 33828 +46700 29241 +34066 38390 +63635 81946 +64943 90200 +93222 70855 +39852 27666 +54215 27846 +91837 81435 +13206 92486 +34097 89083 +67571 63013 +65552 28794 +93206 16217 +57258 46746 +12355 95783 +45193 39825 +78824 41374 +79640 28343 +33304 46968 +52405 53684 +80165 79090 +63764 98552 +50867 62235 +55169 67322 +17385 63412 +93847 84439 +86220 96567 +56922 26105 +93793 70998 +46061 15119 +60608 50227 +53721 82034 +37048 97113 +78634 17392 +16149 11220 +96567 17864 +67761 15242 +43531 45273 +28649 81808 +16807 11681 +35016 38390 +36328 15788 +47350 87826 +83703 76682 +96035 68596 +89445 40193 +39175 22115 +46972 69071 +86512 64757 +70145 30941 +92472 94345 +28607 84439 +97839 80739 +46293 22854 +39471 56487 +40895 81224 +79054 15540 +19112 99099 +87456 97698 +64947 93293 +46868 17223 +61194 51103 +94011 51317 +93446 67760 +51603 79090 +98462 32618 +87627 14792 +50434 28343 +80823 87826 +85968 11220 +70582 94611 +69082 69071 +82872 75587 +66992 93001 +16652 81390 +45397 67124 +48288 12534 +16683 60958 +28845 17300 +73108 85770 +10887 14000 +86564 58432 +73753 15788 +58200 60971 +14724 10521 +22429 86503 +15636 73714 +42007 50396 +83033 28343 +11018 17864 +84668 59520 +34407 50227 +21979 66729 +20788 97698 +88249 71473 +29698 76682 +18861 90200 +33097 18831 +84374 38460 +42337 49469 +96184 11220 +93246 50708 +59059 17223 +94799 11681 +94592 90061 +16217 87826 +15119 39287 +98585 71473 +96536 42853 +70453 24363 +98772 69071 +86608 28722 +96532 50396 +29434 83821 +45190 18432 +39085 52441 +14544 27666 +98167 83884 +40247 35796 +58852 95208 +63594 94345 +37166 70696 +37060 97185 +78269 17223 +31684 50764 +17864 52599 +24791 33385 +88009 94208 +44960 66939 +94307 25038 +97941 92450 +84015 83884 +18910 52086 +65496 17223 +40031 34551 +85606 91632 +61769 76682 +16593 90387 +18746 84938 +37661 78508 +74488 71473 +10696 57789 +73457 33795 +36702 93793 +50523 40193 +54560 97491 +31840 38390 +76940 40193 +16870 11681 +59273 30259 +87826 11069 +42351 47872 +46704 17864 +60979 83884 +13487 66385 +89414 94345 +95781 78824 +81388 50396 +76147 16961 +47912 27666 +38794 15498 +42095 60345 +50754 85082 +47680 11681 +74650 63013 +79979 27666 +93963 91067 +12526 51125 +15421 50227 +14489 17864 +19890 71473 +39148 69071 +35061 43580 +13873 78824 +65002 84439 +44196 70230 +91160 27666 +66243 17864 +68520 52987 +57313 11001 +97451 71232 +45491 88748 +72806 28343 +10935 96112 +26571 50227 +36588 11220 +97082 47405 +74083 76682 +13709 28343 +71565 60347 +67060 89690 +89812 68984 +64357 18200 +13576 86923 +17785 52441 +90523 87826 +48169 84439 +49404 96112 +38548 93793 +10365 50396 +85079 97698 +87583 95586 +63995 97698 +37765 62288 +96507 26105 +74440 19405 +96601 94432 +37066 38390 +42143 11552 +33431 27666 +77502 63356 +33810 52441 +14847 36105 +21823 66983 +57868 71473 +84231 27666 +87717 52441 +53162 97698 +35374 65715 +34570 26105 +20224 36282 +71791 40193 +18833 48330 +12194 83762 +92449 38390 +18772 71473 +59035 57762 +60408 76682 +62373 63013 +79934 40193 +82312 59106 +22944 72620 +15001 50192 +42041 93793 +27226 80739 +68012 30136 +22148 34448 +15624 94345 +79255 39850 +80907 18558 +92896 15318 +25411 94345 +33580 81946 +71575 70650 +47700 79090 +75865 16217 +48756 81946 +98547 75763 +23220 38390 +15241 79090 +18586 33917 +22280 40494 +35998 69327 +60853 95280 +38251 50396 +52525 87826 diff --git a/2024/1/odin/main b/2024/1/odin/main new file mode 100755 index 0000000..6f38e59 Binary files /dev/null and b/2024/1/odin/main differ diff --git a/2024/1/odin/main.odin b/2024/1/odin/main.odin new file mode 100644 index 0000000..566ba73 --- /dev/null +++ b/2024/1/odin/main.odin @@ -0,0 +1,31 @@ +package aoc2024day1 + +import "core:fmt" +import "core:os" +import "core:strconv" +import "core:strings" + +main :: proc() { + fmt.println("hello world") + fmt.println("timmy's first odin") + + buf: [15000]byte + num_bytes, _ := os.read(os.stdin, buf[:]) + + dyn := make([dynamic]byte) + for i := 0; i < num_bytes; i += 1 do append(&dyn, buf[i]) + + s := strings.to_string({dyn}) + lines, _ := strings.split_lines(s) + + for l in lines { + if l == "" do break + + t, _ := strings.split(l, " ") + l, r := t[0], t[1] + a, _ := strconv.parse_int(l) + b, _ := strconv.parse_int(r) + + fmt.println(a, b) + } +} diff --git a/2024/day_1/uiua/README.md b/2024/1/uiua/README.md similarity index 100% rename from 2024/day_1/uiua/README.md rename to 2024/1/uiua/README.md diff --git a/2024/day_2/uiua/README.md b/2024/2/uiua/README.md similarity index 100% rename from 2024/day_2/uiua/README.md rename to 2024/2/uiua/README.md diff --git a/2024/day_3/uiua/README.md b/2024/3/uiua/README.md similarity index 100% rename from 2024/day_3/uiua/README.md rename to 2024/3/uiua/README.md diff --git a/2024/day_4/uiua/README.md b/2024/4/uiua/README.md similarity index 100% rename from 2024/day_4/uiua/README.md rename to 2024/4/uiua/README.md