From bfbfc177a7a2bfc5055555bf92ec52e429f461d3 Mon Sep 17 00:00:00 2001 From: Dory Date: Sun, 3 Dec 2023 01:12:13 -0800 Subject: [PATCH] committing everything squashed --- 01/input.txt | 1000 +++++++++++++++++++++++++++++++++++++++++++++ 01/main.c | 63 +++ 01/main1.c | 20 + 01/part1.sed | 12 + 01/test.txt | 7 + 02/input.txt | 100 +++++ 02/part1.c | 29 ++ 02/part1.py | 7 + 02/part2.c | 28 ++ 02/part2.py | 4 + 02/test.txt | 5 + 03/.input.txt.swp | Bin 0 -> 36864 bytes 03/.part1.c.swp | Bin 0 -> 12288 bytes 03/.part2.c.swp | Bin 0 -> 12288 bytes 03/.test.txt.swp | Bin 0 -> 12288 bytes 03/input.txt | 140 +++++++ 03/part1.c | 71 ++++ 03/part2.c | 91 +++++ 03/test.txt | 10 + 19 files changed, 1587 insertions(+) create mode 100644 01/input.txt create mode 100644 01/main.c create mode 100644 01/main1.c create mode 100644 01/part1.sed create mode 100644 01/test.txt create mode 100644 02/input.txt create mode 100644 02/part1.c create mode 100644 02/part1.py create mode 100644 02/part2.c create mode 100644 02/part2.py create mode 100644 02/test.txt create mode 100644 03/.input.txt.swp create mode 100644 03/.part1.c.swp create mode 100644 03/.part2.c.swp create mode 100644 03/.test.txt.swp create mode 100644 03/input.txt create mode 100644 03/part1.c create mode 100644 03/part2.c create mode 100644 03/test.txt diff --git a/01/input.txt b/01/input.txt new file mode 100644 index 0000000..3c83528 --- /dev/null +++ b/01/input.txt @@ -0,0 +1,1000 @@ +rhqrpdxsqhgxzknr2foursnrcfthree +2bmckl +four95qvkvveight5 +2tqbxgrrpmxqfglsqjkqthree6nhjvbxpflhr1eightwohr +7two68 +nine7twoslseven4sfoursix +fivemnjxbrnsvl3 +3qcfxgzsevenone1rv +9four6dk7gvv +nine91threepdcthjkmrthreeeightwonsg +fivetglzqdfthreergnseight2lpphhbd +fourtwohldlr6294 +qkvc7pvsv6rvsxlqzpjdjkd1eightthree +onefourm5qpfvdnbs +ql8jbzzjpsdgmrjtngrkfdmcsix6eightsix +8nl2 +5lfzqhgeightnine +three313eight2zcjnnmtnh +4three77dgjzfj4five +ntr5sixfourznnljvqdr5one +threedlmnd98nineeighteight7 +pzcnnbjjthreefmlf9znfnkdrjs +flbdjkseven7338qxzbcsx6 +six43fourthree2 +one24hndgmz37mjqqm1 +4fiverlgtbr +7hqtlxgngd15qkfl2three +mtcztwo46one +3onefivechmlkgp87clrmmhseven +tvsctqdlns1hhhctpn34cztkqzztpcgtzhgrtt +four8flptk +6zkb +7eight9fivesix75hclgfphhvv +ct53qdjpnkdpxdhvpqqcx8 +144six +kbjtmgfrx3mpmjhncfl78nine +7sgnlbdfivecxz +oneqrbbnrdxgbbfl3 +8ndmrfggfz1six87 +hjkfb8vhrhnlmbhbl59rxplvmgzspfour +3sixjhdn4hckqsnvseven +zmkgmlpfsixxhmv25bqlgm5 +three48eighttwo +rgfzfourbmpxzrh6dfjcdkhqhcdkpfpk +bpccbcqmlstwos8threenineeightg8 +nbcpd2prckbshrbvsmrmlhxdkq +6flfsxv +84xqeightseven +1xf8five8rgplhdvteightseven9 +frtwone34btgz4bxlqbf +three5eight +8xtcsggc +9gtrcffqmxpvccjpsfqsixlcmdfkfgjqc +5svskptp1twothreersjrlnfdbxttzrkkqz +tsdtcfsj5sixfivesxvxxsgxhkhngzl +dgfcrtck2twosxkdq +fivektlxgmeighttwo1 +9661ldh +twobqcfnxbgnd68 +pbsnjqtqhzfrjjtkninexqjbsvrcnnine983 +bfcndjjsqseight81 +rgvxddcs82one62 +oneeightcgseven7 +fivexhvmhjhmzscjpxjgnxpd37 +onefourdxsgvbkttj2zcpvnrcbpnbfonesix9 +four65mrbfjsix +tgbgnqcdrsixone2hsznmgtgtp +3five3 +3vzg7 +five94eight1xrbcgnnq7rknvvfnrgv +mjsmnineone7phrfqseven7 +njtk1one895 +jrpbp7n62zgnrnxlzdvtlt8vqm +135sslqzn +9ninenineeightsix4ljnj1twoner +6nine44mgmvrfhvh4four3 +gvqxreight6 +sqrfkncdk3 +5nine7qkjsdscrvsevenfive +qbxmone9twoninesljzz +qhss364lsscxxdk96six +35bxgcfive8x +eightcmzzdxc853sixsixprnnjknfp +one23pxdgrsbsonegfive8 +41three4 +eightkzpscshdstmnklzthreeqzkftmng46 +2two66 +threeeightninefvmbcfjf2xjsixlrpr +2269qhvrrfp +527 +2onevb +nine7ninefour7threeqsblhrgxvjtwonelg +fourvjdqxnn84szdc +kbgtfcrr6twotwoeightthreeone +5cjlvqhbfivetwo49 +knzgl5cnftwovmffkrgblnjmhhb +6glbpbn7 +fiverfourfivefive1three +121 +eight3one +gxlvnmkpkksixfour6 +k8pmlfgsixninetwo +ldlhsix56one +h1 +5vlcktk +139nine9gtgqkddsixeightcgqv +fivesixsixeight3nsnhcqcfoursix +pfdksfpmonejrbbninethreeqsjsfrv8njfdh +nzltgfsbqpbzcrgvpj5 +eighthtfive5gzmqxhbcdmseven7 +nxfvdgxhxninethreegfqlzqmlc4three6 +hfs524zfive +5fourtflone +4threenndghtkh41 +54bkrhrt2rrptrvcszrskc97 +spfone69nlpgftmslthlqdf +qgtf2pz1seven53nfscpnrf +r4fivehkpthtn +gvd2qshbjjsevenone +47397 +gtzqvvsntvqnhrkxqb6twonebt +3sixninefivekjkgpjvtcqcsix +six7ninefourseventwosix7eight +6fivemgdj +dvbbjrbfjsxffnjlhfdqthree51oneighttsp +seven784mxkxr219lf +6ddjspgcmtkqd4752 +7xlvdtztq +8sevencjsfivethreefour +8rqzng +ninejttfnfzrffnzzbtrbzhsix9fivesix +jhgtblzxbs9klzzztwoxlpsfbvhcl +9ninetwohnvpkkbzklh8 +7threen2zfkphngfkjhvkkz +gqldlljv5 +nineskmdqcqxj16 +9pgbdlfcmbonesixthreep8s1 +4dbjktxcbqh8cvxsnrkdgvjrghcfhx +sevensixsevenhtbhnpcpnqjtpfsix686 +5hkvjlrjbgtsevenhrlone7sfrztpcqjpdn +52nine7ninethree +three1251 +1ghlmpvmmseven1threeghgfrsch +3sixseven7fsdssixdckfvhzrvq8 +jtwoninesevenfour73tspxfxcd +2lxlsninelvnzjvd +nine1zfx +gsmfnbkzqqkczkpgg522 +zoneightone9zlxxrtbxzrh73sixthreesix +twotwoztxzhrlbnlhtqmlzph6g4eight2 +fkqrmjrhmjjnthdt281sevenfour +twodzpjpvx1eightmmkhxtlrfzsevenrnhthree +one72ptwoljccvmmkscflxqv +9nine9kbmlcvn +3ninefivevgvcssvfqhrfvxc6hhlmcllsxpzp +1four7 +vhvlxg5six +sgcdxjqvkrfive3three +sixfivesixvgtrtxs5 +4zsevenfour2 +2onenqjkjxjxcknc52fivethree8 +sixzqtgtdkqm1sksnfgbhtwoseven33seven +4twobq2 +twocxxl6htqlcrlsdskmone6 +731 +5sevendfrgsdjhdnrhvdp11fgpxknxvfvv +pdktwo2eight824tlpmsmflg1 +71sxtsjtff +ninesixeight5 +eightsix3xzrhclnl +twotwo6tmslnxnfdfbdvffgt668 +four54xclbszc +tt6fourzlbcldmffour +fourvnxqfngsz7zkh74fourtwo +twoeightl8five1scfnnbh +one4bjzzckgseven +kcb9five +7five6lgdlmjqblvtfprrfht2 +4fivetwopcnlntseventhreenqrdgrjg +twobkbfkmzdlkcjbrfvnl65onesix5three +73eight7 +nine52jrlrthreez +six8tmxhjxgjm6six3 +635jksvjvndtxbkksznrbnine +zncthreeninefive4seven4pdckvp +one1four +xndfpkzeight5 +7msxkdfzvtkrsdtqz +4onejglhdmnjx5 +1seven1three2 +4nvkv +hd3 +9zbgttprszjmpv +fourzcxeightthree6 +dkkvxvzzktr5vrztgv1 +797cqxvfhtlthdbhvcmrktwo6 +four383twoeighttwo +1lnkzjrlzdtfvgckczfour +onefivesix3ncll3hcrpsdmtpxvnine +3fiversgksrncxh46mzvpzv94 +4eightmzsgftrxjsix637pdjhsds +gz4tgghpmtseveneighteightsix +9sevenmfourfkfscq +hjmbkzznjflhtd3one +eighttwoone5gfzxmptfivemlkfzpnxr +one4txtzkrtzmqtfbzdgnfouronenkcmqdtdgfnjvhc +kljssprljm5nine +z5 +lrmgjltmfive79lhqj9 +vdgvlvhptpprbx16fourgph5one3 +fivenine9two3 +ninemglpslone6 +988seven3seven +twonine6zjhhxsdlglsmpmvmvvztbhhxklzponeeight +3ghmsrggblfngvtt +gdftwone1six +sixxtxkgzqvldsixzzqtfq5bvhlxkxrthreeoneeight +3oneseven +4three6one19five +sixfourseventwo2threetwoseven7 +1fiverltmfpdkkj3nine5 +6mzrdnpnfivebfgbbvtmmj4rqssl +vxjncmpg3twoeightone +fivefiveztghmbgd1 +6sevenljbnlsfjgpsix38 +threeskseven1rqtfrmkkxkkkkbqrqknsfsrfoursix +jh5one +3145hsxsrthree56 +hdxxdz6threenpq68zpqhvrt +qbfxrcfpeight5lqpcfd +seven4hldkmhfbeightonenine +seven9threeeightwocvb +qtdp6grfdn +fourhqp93 +three1tmgpxlqjninenine +mtbvfjkmxr941bct +one61one +ninesqtf872six526 +ncdfhxmgsjseventhree3xvpq8 +1sevenjjnvfjzd1twovpkrsvrdbninestsgzdjfgmfxnc +36sixmxnhfkneightwov +threeeight5sixfive241four +four76nine +oneddcxxggx7tvg +7gstvsclkjsixtwoseveng6four1 +vttsixsrqgmkptdsqbnhvdmhmzxcstxtx3eight +5qckzltb5 +nine943four +hdgbvjtjkc3onetwo238 +q97gghxdgcqdkeight3onethree +sixrsdrdvqlht2sixonexn216 +4nxkbsvninenineqjphghzjqnjqfvhnine +21fivejpqsgktsjczkdps79three +onesixst8 +5ctxhzsvllbseventwo91zhznxqeightrlblc +1178fzjfsevenseven9 +2j5dp +cpxeightwoonethreehgnldljndt8onetwo +thltnonefive8twoeight +cfsthmmztroneqmtwo6 +threethreesixcsfvf7 +dnsskccxfour3 +bdgcdzdvbjninefourhgtwoone1nine +6sixeightfive24 +sixcgkfour5 +ninekbtkninefsbmjgppfive2 +96cgstvtnsix +4two4qqflzdeight4 +1pctd7zmpndjhljt +78two +hjfbdjggrkjbxjtlmcnnfngrgmfsevendtqjsmqx2 +58eightkpxlqmneight +eightninefoursix44txgslt2vvp +5fivefive1one6qskqbldeight +1six3threenine +5fourqzjhzsgbqkczhvhrvr2two +7seventhreeeighttwo4lmkdgkftftwofour +threeeight21fjfxvrcnfive +vkzgjvdjzdpdxdsfiverbgeight3 +878 +9zcthreerhvxsp +hninepjjvvzmfns1pjtbtkoneonenine +lbjxxthreehkcbjv7 +1682seven +3xhbltveightfivethreeln +vdtktf9threesix544 +81sixfournineqshtzqhcp +ninetwomdvdkfm815 +6eight7ninetwosszxkvqmjpdcz9 +twofive3 +ninetwo1vdhjdjd +qpkgszmrndvgn11seventwo +crspcbvbone8h +48one27754seven +5dcfivedrpmdlcbvlbjdthree634 +1fivefour21mxfzlkbjft +7btfbb9twokldmpeighteight +98qpzgfourfivefivefive9 +eight2sixfmsxhvcshrqhpmxj +threetwosix126 +fourfivesix1foursgbzzfnggoneighttbk +2twojnine5ktbjbcgbsdfivefour +njbxmqkn3tdthreeeight58 +4zltkpphfiveqmlteightjbklpkmgbhmzt +fourxx3 +qkgs3eightgnzvnhcdjzjflfsczdonejqbnine6 +3twogqdhbgvqsfour +618 +plknlddeightjhpmhfleightsnszjmsixczhzq6nlrk +onesix1sggfxdtxvlnpjllm21 +91mfcztmvnqrrxqftwoeight7five +2xdthsq +9vlvsrmdsevensix5sxxn8 +jprfqddhp97tbvbtt +jzdpqqrhsmnhtfhbrjdp2 +225ln +three18eight99three +rjsbbkts5zftbxzttrl1 +1hvvhtbgvm95gtcprjgvxcf4 +8sjmrkxxbht +dgcgzff9fivethree9 +8sixkgtfhppcvp562 +kptdxhmdlfrlfml2 +2lkssldqgt +grfkn89ptp36two +sixfhddpztzntwofive3 +kxxcmtseven2 +1lbdhrzdnd89qphjhxqntxnine +grqgmqzfhvksrxgqkb25rjmbllsvzk +eight4fivefivesix1zkbcmhsql16 +dhdpvclbmnine2sixeightchcz +6ninetwonine +onepjonehbzsclh83 +4xxzjsqddfxbc29four +zhdrrgdqkx9hns7three +1zqfkdhhninebstlhseven +5zxnn9eight1fourvjqsvpn +one2kdmrrbjhxddxfjqjlxr3one +nqjghpdmssjbv47zdgbm7 +bvktwonetwothreefive97skqmlv +nd4onedlvthnsrxfxm8 +eight6pcntqp2oneeight79eight +6vjzqcnvksn91khthreesixtwo +kxncx932mmmfqf +93546ctxfbhpgxxnlnx +five52 +ninevtxblcsbqfzqdqz921 +2lqkgmkpcjhsvtnj +v2sixmjktdbtpqgbkcbhvm +rxhvtwo2sixfive +3one7dffhm9 +1twofoureighteightjczpmtfpmxf1tfpm +123 +16eightshkfbchsvrrqhjpj +sevenfoursevennvxthree49tworzzxtvghkn +one1qzskdmrc +two86cqnhvpnsfourtwo1one +lhxcbcqbrnqvjdlt3znmcbjlfh6 +six8289 +three9onetjzqjzdck1jkfive +eight15jrdrjrs5xtdvm +two9fourcnjlvxeightvflxm7eight +pd3nine +746twoshbngs +eight28 +pjztfhmvtsixmbbjxfvmpstfpttfive1 +fivevnncxmbfbtkdqrnmdpdxsqbzprsx2seven +oneljtwo5fivefivethreefour3 +hhzoneightsevenfour5seven9sv +xkhjlkrr6zcnchhmrjh6hngjjzhgq4eightqdpqf +3pxcvxkzxlttpsgpk4six +lpfhfhjshfive96six3 +6rkpkhgjjxrkgldqzvhxmkmfivenine1eight +9djnfrqzcldeightoneightkxn +7fourone +threethreefourr1four +2gcmft +37four8 +7eightbshnvzbzpxeighteight2three +two48pfkmcrkvtfpnine62 +qsix8rfmnine425 +dhssxzlonesixsevennine9three +eightzxdpbdjzfx4pseven6 +threesxgsncfmthreetwos867 +four6lkgjqpvqtvvlkmg +8fiveseven +threevhlkdd3 +twofdgdlhmglf2gjrrnhhhfxpkqjxhspclbh +fivecjcgbdct4 +3mlnbbcgpnvscmg61csix5 +nksxgppxsixsvzxhrqzs9threesix +kghb787jdzpjr68 +ninegpbqfq6ninethreeeightsixseven +3eightblxrqctk1llv +llqzqvmr4dcqtv26threethreeseven5 +6nhzbxeight971fivezmvkvnspj +gvhvninefiveseventwo1bfnvzdc +tz3lhtpftvlgkr7zxqjczcblqcxnbxbvp8 +eightppnmdmnlvcqsmlsvvvhk9onetwo5 +48fourthreesevenbjj1eight8 +5ghflmtwo +nineninethreecprnvsvg3dhxhk +sevenqmmlpdplcmgjtseight5 +sevenksdpnqxfn7vzqg11ninefrrtmncl +162hsvvpjlg76ksbbrxpqnoneightk +2733 +vlhzdjxd55 +three48nine +6mtkftqtmbf +4three3eight3eight4one3 +1glmnzhgzzvfn235four +5seven4hqsjsft9cdfhfccfmbfhteight +bv7eight1skmkdtbx +524blmgfivesixhhpv +57eight79fpmznfjjdckxkjqvk8one +six3ttcnzvqhkltbnrrjm +dpttv5nine4one +three3threejpcpzshhrr31one2njhjb +hlhlclcjnnjfourtgxqsxqtgrprvcslsm2 +6seven257eight +8ksixfflvxzvhmfninepgq3five +lncgmjnx14fourrnpfhfmhqkgkr5five +sixsixseven1seventhreegkjfkznkqhlhk +sevenzbcpkjkcjq2 +smsdpfourgpxnine8five +fxhdt3deight +7htrrjvtworninebtgkdnbt2five +qphmdxgzfiveonemxkx3 +1drgktkjcq7mnnxnsixkfhkrf +two7c +43eighttdcnpqldvd +4onevnfd +fltqvxksjrn7 +six4p5nvfsjdxbfszpxmttcqgqghcczmlz +8twojseven4 +7mcgkthree4nvqqnjkzcqjt +nine5onepjmghlc3one7sixone +4hdone2onezrpnt6 +qcdttnqdtdt6 +tkrztgn1four4eight66 +djvbrczzqj9nine7vfcctvjqdnmsixkeight +44htbnmgvxtznzlzfhtwo93 +3xpmx4 +6sixnine +5hqqspvrzrxqr2eight +ninemgkhcdtfpz2 +3threetwofive4 +6njcmnlkrcf +gnfxzcxhvbxpc4 +pd41seven +91jvrhxgzrzq4fxcqsixdtnnr +fivehspkhfour4threefourseven +8fiveninegcgkpkone4 +6jrk +4one7sevennrtrdltwo +thhsjklkq81eightthreeseven +ltzdlltggeight5eightzrbvrh +sixninem48onespjtjrszk +7hrnvkdslhb +76sixvfcdjhgqpccsksfour2hfjccbplzthree +437ndgtxtwo +5xv5eight +npsmnhzghsrpkrm7 +9four94 +sixpcgj2nine1frhfn8 +51 +sdq8cgphzvqffsljtxlxlc5txqnsfdrmn +ninelxdnzqlsevenj8sixtpxrpfive +7hcczrfthqkthr39six +fivesixdkqdnfq9 +5n9threertlbqxtj +5threeseven +mqdptrrhxz9threefour +two2two6 +vlkzqbztvnbprdc94one4one9 +xxcfhgkbss94four3nineseven +jlnhmvgczmninefives8 +eightoneeightjsixfhkxphlj57 +vpg3fourtwo1 +lnineone31jsmeight +45srsljgdfivezvrdmntmb +three6onelrnmnmqpcn4 +twozcjvvcdv7xdql993 +71fourtwonejpm +one4one56bnhf +twohssdrcsklone8six +7tcjkcchbpggpk1rddpdgvpgzm5 +7eight7fmqpzrjlcctjvhrdcjgm2mgkqrbdcmzlzngbkqlj1 +fvb4four +rvqhqhb7kdsrmcc +pdklstjsevenfive6 +gsglqtpj5lmbcfxchmjnbvhpcvbssx +hgjlmklngdk4zpkfbhmzcmzcjsmfkghdttfb +586ninesixsixvfbveight +hrvthreeninesix58 +pxmg4threevhrrsbfrck654 +1p5eightonesixhbjbxgjb +four6eight2sevenbtgfkkzcm8lxstnvfbz +c4bqc +12mmrlfnsxtpfncc3 +five7eightkvdghfvcrgsevenfivenngqmzh4 +5onefourtwopgnhsfrpfourtwonineqfhrz +sixzpzk1 +five45 +gjfpvjvqhpfrrjpddqfbvdpjj8twoqfvkfkvpqzcjvrqn +czqxtqbxpjt9fourqdcdcfourseven2six +8gmgfsktkxmfourqfshsqvqjx +qjdfggfhtfnine38sevenrvslgljqrpeight +7five6pxhrxcvzsixmcqvjp31nine +drvdnptcltnmxxtjvslq98 +fiveqttmkpkrxzngddzsncjlsevenone6 +crlldnmx9rpx3 +8tqcfour2vbznhzzzl +9vdtxfbgrqzsix16 +7sixrjpcfdv9twothree9dqjlgkbmb +eightfourvzxckjqbm6tdbthhsnjr +9bnqfmkxlkj4 +62tskjsixtwonine +foureight6gqkdstfivef +seventhreesevencqj12 +rqfq6rtcvjjqnmk9gvvttbpnbgvjcmmph8 +5zngdplj93seventqlknninesix +fourgnqdcrgsznk8xknsrmd8qpxxm +vgslbcnlpk74dfskqgsp +qmbnjllvvs1fbjslc4onegthree +z82sdgvgktzfive +fourdmxcqmstvj7jgzjkfxjntt5cxhchtglmfive9 +npnfivep2three1tlcctmfp +mptzvjmfourfive4three +onelkcmzninefbmgnfghsix3cgpzd +jbshqrc5nbjhktdqmtwotwoxpffrlzxbsix3 +9threefive1threenclhfgrzxl9mnlmcckvnd +4231 +1366 +one9blcprdq +two9two2tdmhtcq13gspmmkrb +eighteightfiveeightjthjbgjm5hpqtbtrfour7 +jsjninevmtdscxftwolzfqpbx2gdnflhpvlvtt +fivegjxkbzdtj6four5 +3oneone +8gkmzrfhvchfs78jxbtbvgj4 +5two89fzrvnkmkgt +53four884seven +five5hbxqmfccfivefourfourfour3 +onepbsevenbsgvmgf78875 +4fivempxjjpjdgzfkqhqdrrz +7vqj +twovnnknngstnine8 +four7twofourqddvxkzvvgzrrvlthreekflqh +vcbmfspdq1jone2two1 +eightsixjgfjrsszgmvbdnbqrpzpps6 +6eightwomm +hgjjltvnsd39nbxdgfpgjl +jfour16xmrdzq +1jgrkhmjbeight +lhsdll94kccmdhtwozxlfkrmpxksixthreetwo +zmtdfour8 +9eightqcpmp8threesevenfive +sftwonenrzbrvmqjp6br3 +tgqoneighteightsevenonethreesevennpk4qsffx +dkhqbdnchvfiveeighttwo2fourfthgrgl +brfivefive1mlfxznfourfourfive +dlpqtdpgsevenvzkzljds4three +tzcvrf1srrjxlhszsixsix89l +blbnntbjzsixthree44one +rmppdzntgjtdone1shsevenfive +dpfdbjtv8 +two19nhtbktfk +4hbkvbrnpxsevensix +jccqhkonetwo6twotlmbfmvbz +4fouronegbx9 +6xhfxfnmmoneightp +lnmmkfntxdsghsxzxkf279 +xjdg92ninethreepglp221 +seventhree4xmzxp21bdssnzqnrthreefive +196 +rgd4 +vlmfjrrmpd2two7sevenqrzcrhhvgpvksqh85 +71sixfour +sixnine5jfconesevenfournine +5fourfour96hqphnjrmfhsix +nshzgrhveight8oneightrhg +two5c9 +dgkvzfzd1 +888ninedvdslkfkf +fxmd1qfjnpbhrkhptrp +lnmh48sevenfiveclptstdd5 +zgjbxpgpnlseven6ffjcjjfck +seven2rmcdrsix +jggjjpj4eightczcngxm3nineone +tworrgbm31mbhkfhndvb +szkfqfbknv54fiveninesixsevenseven +three3six27 +rf376 +7clbr1999 +xlmfbvseven71nhddnq +nmpgsvzq2jkfoureight6fourhzhzxkseven +5344two1bkxdtwo +six8dnql4zjd641 +4fourmngrflsix2two +2tthglxfourfivenpvrqcsrzkfkcqq +njrfive4 +633qdvsmlsv2 +seven79oneceightljnkxdsvxrgg +onefourzlrvctmc663 +27jznqcz861 +sixone6twoeight +9fivethree75ffldxglvtone +68onesxzcksgm6 +rpphzspvq8zznrthcdsmvmfbgninefour6six +5drvndprrvh178 +5threeone3eightthreedmtkpjtmq +two9fzfxseveneightthree +6xbqvhlbeightsgsjbtqcg +seven9twofiveseven +sixtwo87pnltrpkndfttxthpkhjninetxqtcdfxkg +fivethree2five4688seven +2fqmcqdbdzfzjn8sixfournrclzsseven6 +9sevensevenxbpljmfsevenone +five98seven3 +threexpnxsveightone5nqqcd +27eight8 +eight1six2one2htb +twoeight4bhlvvksqqgqone2eight +lbroneightthree3ninefournine +4ctwo7 +fhjpvtwo981foureight +pjffszkdkdg3sevencbh4twothreenine +12vljtwo +bldmronetwo33four +jjmcmjmf9fbffcpnp9ptxfptz6vjmbrx +snine9kxkxpkk2two +4eightfive1ftqzsfqgmdcnmrdpthreefivevsdfjt +lfjnvmm9 +ninethpqntwothreeeight4 +8qcplzvqzrlzlznjlvltcbslthree +eighttgqrvm5twoksr37nine +2fourprchr53three +qnmkxnhm5ninetwotwoksbnvtqs +fourdngcgnnfiveonethree8four9 +two3kzmrhsdqtfivefourns48eight +grclfxj4nblzccrfrcctwo83 +llvcskkmhzrbzvfd1five +8sixnine3 +16kpsgmcffhdmrqpnmthree +1qkkpbptccqg5fivethree99 +four5zslbrzjfvcl9trcnkfdkvrthree +kv2 +5pxtjhltvxmczx25dtktone +rsjxvln27cvkk +five88three2fourbhmpcthreehxk +one8six +sevensix5sixlqthreenzsphnxbjtksk +lmq8fivefiveseven8fvt +lrshhmlgcxdtq87 +fivexmgsixsix282 +4sczfdpsix54four +2vxonehqfcvdvxrr +9seven7five +27xkkmp5qone3four +jdjjdjr6lgpgszz +two87sevensixtwofive7qktfvch +86fiveninetwo37 +zjxlcjthree3ninefive76fiveeight +9rczvmthplvpxhxt1vgf2fzgg +4nineplxfourtwoseven1lzh6 +twothreelmvmhkndcrlvggsqfq2xzksfhgsix1 +njfknspt14hfpsxdpninerdzklfg8 +qsbeightwolczzd9vblksgxrxdseven9two +8fourseven8five6cnfrcvpnhvttq +nlstwonevgqvzg3fdllsqktqf7cgsvfjhzmfffntvkln +glvmzeightonesix85xrfvt2 +5cmlnbrtwo +one6mp82twoeightfour3 +six11nqvlrrpxhr +hj95dtrpdkgsevencccfxqlxfour +7frxlq4two4seven6 +four6cpkgghfxgfour9fivefour +lsix1sixthreeeight1cxnnqqhxxk +zkntsdftthreejk16 +nine2c +9czbtsl +5jqxkskkkzdvznine +7two9 +lfssrfourv363vtbjnxj +9fourdpcrxtxnvklltlnsheighttwoqzhnrgheight +twotwo2jh4431nine +57nine19xj11 +8sevencone5seven +xz4sixtnnklcvjfdq +15nine +kqtsqznbctwo7vhzfsf987six +6fournine6rsbdsp2qrrnnvqreight2 +4fr +hpfllcmjjbbtbfive2sevenmgfvrgbhxmjbxrh +8nrsix +mxrgrhtsfvtzxqlt8vspfive9fourgpkpnhsj7 +f6892fourzjgk7three +xzxnlvgbgninenine49two +eightzjtdkvnmnvone2fzhkqzzthree6 +six259mtjninerfourkmlg +sixthreepflrvthree5dsrppdzgb +one882three +mtmb8ninenpxtfkchcztwompfcjkmnh +128sevenbeightsixphngd +qx2 +1flktj7 +six4nine76kcc68one +48lvjfsfmgnine +fmkmvmrrcgeight32three535dl +one7one +5jlscrmvnvtwonine +3ls +eight86 +xphtwonefourspczfive9seven6 +four9g +tmjtfgrddj9seveneightsixninekzqtwo7 +sxvgv3 +qvrsvlfvpg99 +22qztqxlbjtznfdgcngprx3eight +2fiveseven +76jbmlnine1fourtwohsptzfour +p6ffvh6vzqdglghnfgpdd +sixone9 +five6grzlghcztrtjqpncr3lpjstpmcvfvxpnthree +8zkgnine +onedlnmzkzh46sixsix +hcmqknkmzrfnchs5vrjbdqvshvtwonev +twoqnzpmzbgxm6 +89nmgdvvzgmvsfxpbc155six7 +dhqnjmtzh6bhjnrktjh +one4sdcnk +qkrsblxng61fzqfcjrjnfndzg +8fsklvmcsixgdqvkgcqd +onefiveeightpt2 +395lqvmp1 +7htxhxzxkonesixdlpvnfbcrrgmx4lzpnjxj +xdf8seven3223 +cmsfivebtn9vtwojmcsix +92mntfpfseven +2sixdsdlgvrzbseightqzmdghdvc6 +fourgkncjh8onethreemzpnpx +five9pfmbbffcfc9threepdkjxtone +2lrpmpfzceightzrglddshdfour +xhgxmvclgvone2 +dlcrxnsix9onesixszqbqbxqfgjgsgsix +939one4ppp +5onessszzgf9hpzmpjctql +9ninesix79 +szbrmlbzxp8cqsgkqnz2four +vbddlztfkqzb8fivethreeone9 +7four5 +2zccllppptfour6 +2twotwosevennine6fbccsix +7txcxone4onercgzkskvhlfffive +six4ninexzlnfivekgqggbmkcmqeight +27fourone +12ljvnmlzbgfkccmqmgkrlccfgk +twovgvzxzcfxjdrxbj96bbxvnnnine +363 +six1vkcbcpmxtvlksxxjz2btzscsct +5ninetdrhxk6qgfive7 +srlvrshx8one +2oneightg +pvflfr73eighteightprthree +nmeightwo6 +3three858rvdfxvrmpxhn +five8fourtwonineseventnjgmnrjdj +two9ffcstwo5pq9nine3 +79onecscxpbrfoursix5five +fivemlfbzxczbsixkjgrxjxfourtwo6 +nmtqf7onescmbq +jflnldgfknsxhmmvmtvmgprsbrdglmpxsdn5 +hnb4lxnineeightoneeight +ttshkjxgsdqzjvsvq2fivertgmqplkone +bvknfivethree4ninemztfvcszdhdghgc +91sbfbpxhkkndhnhdjsevenonehxglqqfxdkjp3 +qzbqpxvtwo5eight +frcgeight5onefivesix78xltkhzx +248sbtpeighttwozncmmp1vtmndj +mczxcone918ninetwo1two +nvhmdc1prjgfknkc5five +7seven9mdbcjbgx +5fivephqnc +seven1gthg +9xbzmrth +xxhzgnmtv891two2npv +eight171 +9rnjvzmsix3rkjbmdv +93oneightxtk +mkmbfour8 +twoxbnonefiverx6mjkkfktdxx +ninehrvrcpxfxbzvrtwo1zhbzone +three8tps19mqcmchone +m466zcczxcghqzqlshhzhbkxkm6 +vroneight4eight9seven4two46 +seven5sevensixtwoseveneighttwo +snxjjttqxkcs6jvlb +5six8 +pcqpzp6six51 +six2twothree4zjgcsgmjhjsix +tcks16 +4jgprfrphdhp52nssrhkfgzhzbvddbtctk9xv +fivesix8one +6onermrhxdqbbcdh +jst7ldbfkdkzkvzpqbtxvvcfvkzsrf9eight6 +nine3three9 +krmjjfrsixsixfqp2 +7gkdlgbdln9jqvzfjq +eighthfslbhxgcbqbldxn9 +1fivesevenj9 +9trldgsznqlkthreetdmfbxbzhdcskv6kbfour +556qvdmncnkfccnqnkxlslmv +shc27 +knmhrbkpseventhree715vtnrnpmrnb +tsnlnmxg5cnxshnmffive +4fourllsqvbfive254 +stfivezzjhltsfsix83nineq +six4five +four13 +89qcgfqtsdcmktmctwo2seven9tqlbffgrjg +8five6 +4three3 +59twosplbcrzmgtdrjmrhmhthreetwo4 +dlm538nine +pgsixtdtxsrteightnine9fjcvpnxzgfcjggjgmr +9rksix3seven4twoeight +7bzvgmkr5fivezrhpknpkdfournine +cbsdlrqsixtwofour1twonffm +59ndhbj +gblgkrdtffkcsdthreejbbggninesevenzkrsnm5 +kftmd5 +fourdnvkx84clrnbpftqj6rkdvt +fournine76bzf59 +threevhrkzrvbqkfqn26 +one9sevensix32bbpvvvt +8zhnptsl16vkv +vslkvkffs2fdcvtngkgtdvzzgplvs11 +twoqmtnnnftnhqb2sixzqzqfmbrqj6 +nineoneggqtf1l72 +7264eightsrjdmhhlfthmglmvgpthree +eightsixsevenone3 +9rlkvhq1threevnqzkpfive4 +16three +cksqzvzct63fvbcqtr +xlq4three6vfxn8eightwoq +seven3fbhrdgft23onesixpffgmptzxj +fiveone9fmkgxz6thb2 +5vsksrdnrtzqzxkhjxfcsnine +eightfivesix77tnlktpb +threeeight11lhc6fivex +1seven36 +ljhbgqdb9cmpjzzct +sevensdnfvp1 +bzvfsgdhg7p +8z8fivefivefrlfeighttwo +fivelqkmsjstqn93foursnkqthreetwo +bjbnjkpr83 +5sixseven +843lxtfgzrg +19xzqmptgslgfxdlvone8 +qvs9ninetwotfivetwofivefour +3two7177gchxqndqb2 +pclgmslngmhninegktmlrvmvbrb1five +twosix7fivekcstvdpksn6 +one8lgrcj987sixthree5 +3fnjpnhxh +ninefive8slfz4 +threetwonnxdmnpftn9cjkglxp97 +4one5two8 +8h672smmqm6nine +qsddxqjbxvjlrmlsfxqjptp8twofourkddx +eightxdlqtltjbccnqkcsgvbcpvrltjfourone8nine +zvhfiveeightpxmhfsixmfjnsrfncl1 +891 +twospnzhxsix5twopsgxhcpgkdthree8 +twosix4vvznbz34xbglgczpcd3 +bkhgn2 +kggbsfour2kcrfbxcscd9lgmthree2 +sixxbzmknzt7fourhmhnmgfivezclrhtgshtwo +8txhbgvfjfhsjfivegxshndv3nine1 +jeightwosix46splstbtjtthree +55tmflknjjqmrvjtwo +oneqmsxzx8threenine72 +1three8zjdpnclmfive +mvqeight93one1one +qqxvlr5fourthreeeight2 +six82seven +seveneightseven5one3 +4nine59onefivetwonep +fourghdmclp7 +11nineeight +3qx74fxsxdpd +8rlvfhchthree68 +hbtwone2vgxlzdfsthreesixdxmxrhcone +ssgfcpxgmtwoeightzmtqlhqfive15 +sixtwonpgvtn9ninemq +nine3one524 +smleightwoccnpgzqxg2qzvzmnineseven1sshrbzzqmt9 +vzbbxr9fivetwolkzqp +642fivepkkpljsmtwo +2qhvjljhxlxlg8plckhqhpbc +fivesix8xqzfhrkfvqr1eight +eight2onekmfjqzhgthree +sixfiveeight7 +fournine6hhxtwotwo +bncgbbfrfktzrhjkfltn9fourtwonercp +twosixtwojqtcnznfoureight5 +kphpbmlgvxhcqctksjvkrcfsbthree9gfhtkbs +eightvfkbm3pvtwotworjqxrx8 +2kgfcrvtfive1sgk2nbz8six +6zgdkmzfr44 +x7qvmtdnhclnn68foursdkdcvrfrfour +lsrbdckq1 +one7xzmhknhgbfks +hnmkmltwonine729hdf1 +j2fivehttgmfhgzstrcdnvdspxzcxkt +7fourvhrhqtconefive +sevensixfour2ccprddhlxdvxtzshnbqtgmp38 +9twolpshzrpgqonercvlqjglchfour +rcbqcxzlgjlprbcqmjrfourldkgxhsnlb74 +sixtwo6mdrfflbkrone +rxcsh1 +mcnine4sixrloneightspv +qkdpnztwoxjcrfnsmhj4eight1gzzzgkcznine +mkglfvb2vmvrnrfourklnj76onethree +nrqxpfxcgg2fiveceight6 +6three4xsknpdhgchq6hdgblxszbpnnt +xvmnsdvqfrgkb1pmqtjfgdsix +78threexvllvmdgjpck4 +threermvn16nineone5seven +sixjkxjmfl4 +fdvhjb16gvpz +9hnqsix2eight5fiveeight +szxzqzkhbf9lgxfzvnsxjfhhgc +qxlbhrtjlkvsixbhvqdvd91 +6sixfour3 +6two2c528ldpscl9 +6rgceight7five931 +2gkprbninefgn +9vbzhldtxsgmcbst +dbmqtfkst4eight76 +2sevenoneqkhrxdhbkhcbxbhnjxzsevennine +foureight2nine +five9ninethreeseven +one8threefourthreexrrhnpdqcf +mgvq6vrsprdcvjs +vronedb876four53 +2cpv4tbk +jbvrn2 +81blgc8five295 +4threefour7eighteightdcmrckqxqmnpf +nxcbtwo5four66 +5seven3 +hlcrfjjkjqrvsevenbtdkvzqvxgrjdcmhggcqrr7fiveeight +dcjszvn3phczz34qdgfive +fivefourgrkthree2three1 +three28nine8 +eightt4 +sixfour8 +cptkxpzxk138five1sevenone +gsxjbkkg3foursix78fnkvhsddqvxs6 +htkvspn4fourfourtwo +52rlnsspjhrgfnckg +9six27sdgmz +g6ninezrnine +four6eightnjzpmninetkfxqgcqnb +2five8ffgdtrhzqntjzjssckdggqcvbskpdsrclv +3sixninecxghbrnpcx3vj3 +9hpm4qtdjpdnbqknine4 +9twosevenlnjfz +5prpkmbkfq6 +bsltmrpklzhrldlvpj1eightkbnxnfrlc71three +z8 +2sevenlzxone +9l5pxeight6 +ninexhskkhdkgjgvjhrqhrfj9bnrfbtxpp +sixsixsix3twosevenfivekjdkpxch +jkpvm1567seven +dvjdfnqgbsixeightsixqdkfpbc3lcjz +7twonineninetwo +zjtsjvhfldplt33qpgnlflhj +eight9mkqpbddonejtc78eight6 +797ninetwotwo +dfjnzxtlnine9five +gmjknnzrnrpcbcngzqgseven8 +vqplmsqninenbsjvctjfk8one29zrqb +3ljdlfldqtlqxrmxone4 +qbsixfour6six89pqxspnr8 +6vxhzrmcbvthree +four563pllcfonebvnbltn +dxbtmg2three21 +xtfzzr73 +fivessix4 +sixone485pvzxbd +18cfour +xjtctnllkp57seven2jgbjmjbxnpfgone +eight5gmbzbqtxrr27dtgfdbmtc7 +twoggvcnfmtrseven4dx +ssevenhcltwoseven2cxrmxxcr diff --git a/01/main.c b/01/main.c new file mode 100644 index 0000000..f57b048 --- /dev/null +++ b/01/main.c @@ -0,0 +1,63 @@ +#include + +#define MAX_LENGTH 52 + +int convert(char* c) { + switch (*c) { + case 'z': + return (c[1] == 'e' && c[2] == 'r' && c[3] == 'o') ? 0 : -1; + case 'o': + return (c[1] == 'n' && c[2] == 'e') ? 1 : -1; + case 't': + if (c[1] == 'w' && c[2] == 'o') + return 2; + else if (c[1] == 'h' && c[2] == 'r' && c[3] == 'e' && c[4] == 'e') + return 3; + else + return -1; + case 'f': + if (c[1] == 'o' && c[2] == 'u' && c[3] == 'r') + return 4; + else if (c[1] == 'i' && c[2] == 'v' && c[3] == 'e') + return 5; + else + return -1; + case 's': + if (c[1] == 'i' && c[2] == 'x') + return 6; + else if (c[1] == 'e' && c[2] == 'v' && c[3] == 'e' && c[4] == 'n') + return 7; + else + return -1; + case 'e': + return (c[1] == 'i' && c[2] == 'g' && c[3] == 'h' && c[4] == 't') ? 8 : -1; + case 'n': + return (c[1] == 'i' && c[2] == 'n' && c[3] == 'e') ? 9 : -1; + } + return -1; +} + +int main(void) { + int num1, num2, sum, word_num; + char buf[MAX_LENGTH]; + + num1 = 0; + num2 = 0; + sum = 0; + while (fgets(buf, MAX_LENGTH, stdin)) { + for (char* c = buf; *c != '\n'; c++) { + if (*c >= '0' && *c <= '9') { + num1 = num1 == 0 ? *c - '0' : num1; + num2 = *c - '0'; + } else if ((word_num = convert(c)) >= 0) { + num1 = num1 == 0 ? word_num : num1; + num2 = word_num; + } + } + sum += num1*10 + num2; + num1 = 0; + } + printf("%d\n", sum); + return 0; +} + diff --git a/01/main1.c b/01/main1.c new file mode 100644 index 0000000..16b4349 --- /dev/null +++ b/01/main1.c @@ -0,0 +1,20 @@ +#include + +int main(void) { + int c, num1, num2, sum; + num1 = 0; + num2 = 0; + sum = 0; + while ((c = fgetc(stdin)) != EOF) { + if (c >= '0' && c <= '9') { + num1 = num1 == 0 ? c - '0' : num1; + num2 = c - '0'; + } else if (c == '\n') { + sum += num1*10 + num2; + num1 = 0; + } + } + printf("%d\n", sum); + return 0; +} + diff --git a/01/part1.sed b/01/part1.sed new file mode 100644 index 0000000..49c68af --- /dev/null +++ b/01/part1.sed @@ -0,0 +1,12 @@ +s/one/o1e/g +s/two/t2o/g +s/three/t3e/g +s/four/4/g +s/five/5e/g +s/six/6/g +s/seven/7n/g +s/eight/e8t/g +s/nine/n9e/g +s/[^0-9]//g +s/^(.).*(.)$/\1\2/g +s/^(.)$/\1\1/g diff --git a/01/test.txt b/01/test.txt new file mode 100644 index 0000000..41aa89c --- /dev/null +++ b/01/test.txt @@ -0,0 +1,7 @@ +two1nine +eightwothree +abcone2threexyz +xtwone3four +4nineeightseven2 +zoneight234 +7pqrstsixteen diff --git a/02/input.txt b/02/input.txt new file mode 100644 index 0000000..9a555e0 --- /dev/null +++ b/02/input.txt @@ -0,0 +1,100 @@ +Game 1: 4 blue, 7 red, 5 green; 3 blue, 4 red, 16 green; 3 red, 11 green +Game 2: 20 blue, 8 red, 1 green; 1 blue, 2 green, 8 red; 9 red, 4 green, 18 blue; 2 green, 7 red, 2 blue; 10 blue, 2 red, 5 green +Game 3: 2 red, 5 green, 1 blue; 3 blue, 5 green; 8 blue, 13 green, 2 red; 9 green, 3 blue; 12 green, 13 blue; 3 green, 3 blue, 1 red +Game 4: 1 red, 6 green, 4 blue; 3 green, 1 blue, 1 red; 7 blue, 1 red, 2 green +Game 5: 2 green, 9 blue, 1 red; 3 green, 1 blue, 3 red; 1 red, 4 blue, 9 green +Game 6: 2 blue, 5 red, 7 green; 5 blue, 8 red, 3 green; 2 red, 9 blue, 2 green +Game 7: 7 green, 7 blue, 2 red; 2 red, 7 green, 16 blue; 17 blue, 3 green, 3 red; 2 blue, 5 green, 3 red +Game 8: 4 red, 3 green; 9 green, 2 red, 2 blue; 1 red, 3 blue, 6 green +Game 9: 5 red, 3 green, 13 blue; 11 red, 15 blue, 1 green; 7 red, 2 blue +Game 10: 15 red, 3 green; 7 green, 4 blue, 11 red; 13 red, 13 blue; 2 blue, 5 green, 8 red +Game 11: 7 red, 3 green; 7 blue, 16 red, 4 green; 6 green, 6 blue, 12 red; 11 red, 4 green, 4 blue; 10 red, 6 blue, 2 green; 3 green, 7 red, 6 blue +Game 12: 1 blue, 2 red; 2 green, 15 blue; 6 green, 5 blue; 6 blue, 4 green; 5 blue, 3 green; 3 red, 3 blue, 10 green +Game 13: 10 red, 4 green; 9 red, 2 blue, 3 green; 6 red, 7 green, 1 blue; 9 red, 7 green, 1 blue; 3 blue; 3 blue, 3 red, 8 green +Game 14: 12 blue, 3 red, 4 green; 3 green, 1 red; 6 green, 16 blue +Game 15: 2 green, 3 red, 2 blue; 14 blue, 1 red, 17 green; 13 blue, 11 green, 10 red; 5 green, 7 red, 5 blue; 2 green, 3 blue, 6 red; 9 green, 2 blue, 5 red +Game 16: 2 blue, 1 red; 1 red, 2 green, 3 blue; 4 green, 9 blue, 3 red; 1 green, 4 red, 8 blue; 7 blue, 11 red, 1 green +Game 17: 9 green, 8 blue, 6 red; 8 red, 18 green, 1 blue; 18 red, 19 green, 1 blue +Game 18: 1 green, 4 red, 5 blue; 10 green, 8 blue; 12 green, 10 blue +Game 19: 3 red, 11 green, 12 blue; 16 green, 1 red, 20 blue; 9 green, 2 red, 14 blue; 5 blue, 2 green, 2 red; 20 blue, 3 red, 10 green; 4 green, 3 blue +Game 20: 17 red, 3 blue, 9 green; 6 green, 1 red, 7 blue; 6 red, 2 blue; 1 blue, 4 green, 5 red; 6 green, 5 red; 10 blue, 11 green, 2 red +Game 21: 9 red, 4 blue, 6 green; 14 red, 9 green; 1 red, 1 blue, 12 green +Game 22: 5 green, 4 red; 1 green, 1 red, 2 blue; 5 red, 4 green, 4 blue; 2 green, 2 blue, 5 red; 8 green, 4 blue, 16 red; 15 red, 3 green +Game 23: 5 green, 14 red; 6 blue, 2 green, 14 red; 4 blue, 8 red, 4 green; 4 blue, 9 red, 8 green; 9 blue, 3 green +Game 24: 13 blue, 9 green, 13 red; 11 blue, 14 red, 10 green; 12 green, 5 blue, 14 red +Game 25: 11 green, 1 blue; 12 red, 8 green, 5 blue; 1 blue, 8 green, 6 red +Game 26: 4 blue, 1 green; 1 green, 5 red, 6 blue; 8 green, 5 blue, 6 red; 2 blue, 2 red, 8 green; 8 green, 2 red, 4 blue; 7 red, 2 blue, 7 green +Game 27: 8 red, 1 blue, 8 green; 5 red, 2 green; 2 blue, 9 green, 9 red; 2 blue +Game 28: 2 green, 1 blue; 2 green; 1 blue; 1 blue, 1 red; 1 blue; 1 green +Game 29: 12 red, 8 green, 13 blue; 13 green, 15 red; 12 red, 18 green, 10 blue; 7 green, 20 red, 5 blue; 20 red, 7 green, 10 blue; 9 green, 13 blue +Game 30: 5 red, 3 blue; 2 red; 2 green, 6 blue, 7 red; 5 red +Game 31: 14 red, 7 blue, 2 green; 1 green, 11 red, 9 blue; 3 red, 2 green, 5 blue; 1 green, 9 blue, 8 red; 8 blue, 8 red, 1 green +Game 32: 2 green, 6 blue, 2 red; 2 blue, 4 red; 1 green, 9 blue, 1 red; 3 red, 13 blue, 1 green +Game 33: 6 green, 8 blue, 7 red; 3 blue, 1 green, 8 red; 6 red, 11 blue; 10 blue, 3 red, 7 green; 1 blue, 3 red, 6 green +Game 34: 1 red, 1 blue, 8 green; 5 blue, 10 red, 11 green; 2 green, 10 red, 2 blue +Game 35: 2 blue, 15 green; 3 red, 3 blue, 6 green; 13 green, 17 red, 3 blue; 18 green, 1 blue, 18 red; 16 green, 3 blue; 11 green, 15 red +Game 36: 16 red, 4 green, 1 blue; 8 red, 2 blue, 5 green; 5 green, 2 blue, 9 red +Game 37: 3 green, 7 blue; 8 blue, 5 red, 6 green; 5 blue, 1 red, 13 green +Game 38: 6 green, 6 blue; 11 blue, 8 green, 1 red; 5 blue, 16 green +Game 39: 2 red, 4 blue, 5 green; 1 red, 2 green, 8 blue; 16 green, 15 blue, 2 red; 6 green, 16 blue, 1 red; 16 green, 18 blue, 1 red +Game 40: 3 green, 6 blue, 7 red; 1 blue, 17 red; 4 green, 6 red; 13 red +Game 41: 6 red, 5 green, 6 blue; 4 green, 2 blue; 6 red, 1 blue, 4 green; 4 blue, 13 green; 3 blue, 2 red; 2 blue, 5 red, 3 green +Game 42: 8 red, 5 blue; 15 blue, 13 red, 3 green; 6 red, 18 blue, 4 green +Game 43: 5 red, 1 green, 1 blue; 2 red, 2 green, 3 blue; 4 blue, 3 red, 1 green +Game 44: 6 blue, 12 green; 7 blue, 12 red, 11 green; 12 green, 2 blue, 13 red; 8 green, 8 blue, 12 red +Game 45: 18 blue, 15 red, 8 green; 17 red, 3 blue; 1 green, 2 red, 15 blue +Game 46: 3 blue, 2 green, 5 red; 11 blue, 2 green, 19 red; 3 green, 19 red, 13 blue +Game 47: 9 green, 2 red; 7 red, 10 green; 2 blue, 9 green, 1 red; 5 blue +Game 48: 8 blue, 8 green; 1 red, 17 green; 9 green, 6 red, 8 blue; 13 green, 3 red, 1 blue +Game 49: 17 blue, 2 red, 1 green; 12 blue, 1 green, 4 red; 1 green, 2 red, 13 blue +Game 50: 4 red, 2 blue, 9 green; 8 green, 2 blue, 6 red; 9 green, 2 blue, 14 red +Game 51: 6 red, 3 green, 8 blue; 5 green, 16 blue, 1 red; 2 green, 13 red, 14 blue; 14 red, 12 green, 19 blue; 19 blue, 13 green, 9 red; 6 red, 15 blue, 7 green +Game 52: 18 blue, 2 red, 5 green; 2 green, 5 red; 6 red, 10 green, 3 blue; 3 green, 6 blue, 6 red +Game 53: 11 red, 4 green; 2 blue, 3 red; 3 blue, 13 red, 11 green; 11 blue, 8 red, 5 green +Game 54: 4 green, 1 red, 7 blue; 4 green, 8 red, 8 blue; 4 red, 5 green; 8 blue, 4 green, 2 red; 4 green, 3 blue; 3 blue, 3 green, 3 red +Game 55: 9 red, 1 green, 1 blue; 1 green, 8 red; 4 red; 7 blue, 7 green; 6 blue, 5 green, 6 red; 5 blue, 8 red, 4 green +Game 56: 1 blue; 3 red, 2 blue; 1 red, 2 green +Game 57: 7 green, 2 red, 5 blue; 6 green, 1 red; 1 green, 6 red; 1 red, 20 green; 1 green, 4 red, 2 blue; 15 green, 7 red +Game 58: 3 green, 8 red, 5 blue; 2 red, 3 green; 2 blue, 2 green, 12 red; 1 blue, 3 green, 16 red; 4 blue, 9 red, 3 green +Game 59: 2 red, 5 blue, 1 green; 2 red, 3 green; 12 red, 5 blue; 7 green, 3 blue, 4 red; 1 green, 5 blue, 14 red; 8 red, 11 green, 2 blue +Game 60: 12 blue, 3 red, 2 green; 2 green, 6 blue, 1 red; 1 blue, 2 red, 3 green; 7 green, 1 blue, 2 red +Game 61: 6 blue, 6 red, 7 green; 2 green, 5 red, 5 blue; 1 blue, 3 green, 15 red; 6 blue, 8 green, 14 red +Game 62: 1 blue, 6 red, 2 green; 5 green, 5 red, 11 blue; 5 red, 6 green, 8 blue; 2 green, 17 blue; 2 red, 7 green, 5 blue; 3 blue, 5 green, 8 red +Game 63: 6 red, 1 green, 9 blue; 7 red, 1 green, 11 blue; 3 green, 4 red; 4 green, 10 blue, 7 red; 13 blue, 11 green, 5 red; 14 green +Game 64: 13 green, 11 red, 1 blue; 1 red, 2 green; 3 blue, 9 green, 19 red +Game 65: 2 blue, 11 red, 3 green; 5 green, 6 red; 2 blue, 9 green, 9 red; 1 green, 5 blue, 3 red; 4 red, 4 blue, 6 green; 2 blue, 7 green, 1 red +Game 66: 4 red, 7 blue, 3 green; 1 green, 6 blue, 7 red; 1 green, 1 red, 1 blue +Game 67: 1 green, 8 red; 4 green, 1 blue, 3 red; 8 red, 3 green +Game 68: 3 blue, 4 red; 1 blue, 1 green; 2 blue, 6 red, 3 green; 1 blue, 1 green, 3 red; 7 red, 1 blue, 4 green; 1 green, 2 red, 3 blue +Game 69: 6 green, 2 blue, 3 red; 3 blue, 3 red; 1 green; 1 blue, 2 red, 8 green; 1 green, 1 red +Game 70: 7 blue, 15 green, 3 red; 8 green, 6 blue, 5 red; 7 blue, 1 red, 3 green +Game 71: 4 green, 3 blue, 7 red; 6 red, 6 green, 10 blue; 3 red, 9 green; 7 blue, 1 red, 13 green; 3 blue, 5 red, 11 green; 8 blue, 8 red, 5 green +Game 72: 10 green, 4 blue; 4 blue, 8 green, 2 red; 2 red, 6 green, 6 blue; 1 red, 5 blue; 13 green, 5 blue; 8 green, 3 blue, 2 red +Game 73: 9 blue, 1 red, 13 green; 2 red, 16 green, 6 blue; 1 red, 8 blue, 17 green; 7 green, 1 blue; 8 blue, 1 green, 1 red +Game 74: 2 green, 2 red; 1 red, 5 blue; 7 blue, 3 green; 7 blue, 3 green, 7 red +Game 75: 3 green, 5 blue; 2 green, 1 red, 9 blue; 17 green, 13 blue, 3 red; 3 blue, 2 red, 8 green; 7 green, 2 red, 8 blue; 1 green, 14 blue +Game 76: 19 red; 2 blue, 20 red; 3 blue, 3 red; 20 red, 3 blue; 6 red, 4 blue, 1 green +Game 77: 2 red, 5 green; 2 red, 2 green; 4 green; 4 green, 3 red, 3 blue; 2 red +Game 78: 4 green, 16 red; 5 green, 2 red, 2 blue; 4 green, 2 blue, 11 red; 1 blue, 1 green, 6 red; 2 blue, 7 red +Game 79: 8 blue, 2 green; 3 red, 3 green; 3 red, 9 blue, 4 green; 1 red, 2 blue, 4 green; 8 green, 6 red, 9 blue; 2 red, 10 blue, 9 green +Game 80: 9 red, 17 blue, 2 green; 5 red, 1 green, 6 blue; 2 red, 20 blue; 6 red, 12 blue +Game 81: 5 red, 4 blue, 1 green; 15 green, 8 blue, 2 red; 5 blue, 2 red, 9 green; 11 green, 1 blue, 3 red; 15 green, 1 red, 3 blue +Game 82: 2 blue, 12 green; 12 blue, 12 green, 14 red; 4 blue, 16 green, 7 red +Game 83: 6 blue, 7 red, 11 green; 2 red, 6 green, 4 blue; 6 blue, 1 red; 7 blue, 12 red, 13 green; 10 green, 6 blue, 10 red; 6 red, 4 green +Game 84: 2 green, 5 red, 1 blue; 4 green, 3 blue, 2 red; 2 green, 1 red, 1 blue; 5 red, 4 blue, 4 green +Game 85: 1 blue; 1 green, 2 red; 3 red, 11 green; 6 green, 14 red, 1 blue +Game 86: 3 green, 1 blue, 3 red; 3 red, 6 blue, 2 green; 4 blue, 1 red; 5 blue, 4 green, 3 red; 2 blue, 3 red, 4 green; 7 blue, 2 green, 3 red +Game 87: 1 green, 5 red, 5 blue; 6 red, 4 green, 1 blue; 2 green, 4 red, 1 blue; 7 red, 4 green, 5 blue; 3 green, 4 red, 1 blue +Game 88: 3 blue, 18 red, 14 green; 11 red, 14 green; 2 blue, 10 red, 4 green +Game 89: 5 red, 4 green; 3 red, 2 blue, 1 green; 2 blue, 4 green, 3 red; 2 green, 2 blue, 2 red +Game 90: 14 blue, 10 red, 2 green; 11 blue, 3 red, 1 green; 5 blue, 2 green, 14 red +Game 91: 9 blue, 4 red, 4 green; 4 red, 1 blue; 3 blue, 20 red +Game 92: 3 red, 2 green, 7 blue; 2 green, 10 red, 8 blue; 9 red, 5 blue, 5 green; 1 blue, 2 green, 3 red; 10 red, 13 blue, 9 green; 11 blue, 7 red +Game 93: 9 red, 2 blue, 1 green; 6 red, 2 blue, 11 green; 1 green, 1 blue, 10 red; 9 red, 8 green +Game 94: 18 green, 3 red; 2 blue, 4 green, 12 red; 5 red, 1 blue, 13 green; 2 blue, 15 green, 7 red +Game 95: 12 green; 1 red, 3 green, 1 blue; 13 green, 2 red, 1 blue; 9 green; 2 green, 1 blue; 1 blue, 4 green, 1 red +Game 96: 5 red, 4 green, 2 blue; 10 red, 3 blue, 5 green; 14 blue, 11 green, 4 red; 14 green, 7 blue, 13 red; 17 red, 9 green, 6 blue; 8 red, 4 blue, 13 green +Game 97: 3 green, 7 blue; 7 red, 4 blue; 5 blue, 6 red, 2 green +Game 98: 9 green; 8 green, 4 blue; 6 blue, 2 red, 1 green; 4 green, 1 blue; 5 blue, 2 green, 2 red +Game 99: 3 red, 1 green, 5 blue; 1 red; 3 blue, 4 red; 3 blue, 1 green, 5 red +Game 100: 3 red, 3 blue, 10 green; 3 green, 1 blue, 6 red; 5 red, 4 green, 7 blue diff --git a/02/part1.c b/02/part1.c new file mode 100644 index 0000000..d0de944 --- /dev/null +++ b/02/part1.c @@ -0,0 +1,29 @@ +#include +#include +#define MAX_LENGTH 165 + +int main(void) { + char buf[MAX_LENGTH]; + int game_num, cubes, sum; + + sum = 0; + while (fgets(buf, MAX_LENGTH, stdin)) { + char* c = buf; + game_num = strtol(c + 5, &c, 10); // +5 skips the "Game " + + while (*c != '\n') { + cubes = strtol(c + 2, &c, 10); // +2 skips ": ", ", ", or "; " + c++; // +1 skips the space + if ((*c == 'r' && cubes > 12) || + (*c == 'g' && cubes > 13) || + (*c == 'b' && cubes > 14)) { + game_num = 0; + } + for (; *c >= 'a' && *c <= 'z'; c++); + } + sum += game_num; + } + printf("%d\n", sum); + return 0; +} + diff --git a/02/part1.py b/02/part1.py new file mode 100644 index 0000000..204af81 --- /dev/null +++ b/02/part1.py @@ -0,0 +1,7 @@ +import re, sys +print(sum( + int(re.search("[0-9]+", line).group()) + for line in sys.stdin.readlines() + if all(int(r) <= 12 for r in re.findall(r"[0-9]+(?= red)", line)) + and all(int(g) <= 13 for g in re.findall(r"[0-9]+(?= green)", line)) + and all(int(b) <= 14 for b in re.findall(r"[0-9]+(?= blue)", line)))) diff --git a/02/part2.c b/02/part2.c new file mode 100644 index 0000000..eab104b --- /dev/null +++ b/02/part2.c @@ -0,0 +1,28 @@ +#include +#include +#define MAX_LENGTH 165 + +int main(void) { + char buf[MAX_LENGTH]; + int color_num, sum, max_r, max_g, max_b; + + sum = 0; + while (fgets(buf, MAX_LENGTH, stdin)) { + char* c = buf + 5; // +5 skips the "Game " + for (; *c != ':'; c++); + + max_r = max_g = max_b = 0; + while (*c != '\n') { + color_num = strtol(c + 2, &c, 10); // +2 skips ": ", ", " or "; " + c++; // +1 skips the space + max_r = (*c == 'r' && color_num > max_r) ? color_num : max_r; + max_g = (*c == 'g' && color_num > max_g) ? color_num : max_g; + max_b = (*c == 'b' && color_num > max_b) ? color_num : max_b; + for (; *c >= 'a' && *c <= 'z'; c++); + } + sum += max_r * max_g * max_b; + } + printf("%d\n", sum); + return 0; +} + diff --git a/02/part2.py b/02/part2.py new file mode 100644 index 0000000..7214df3 --- /dev/null +++ b/02/part2.py @@ -0,0 +1,4 @@ +import math, re, sys +print(sum(math.prod(max(int(n) for n in re.findall(f"[0-9]+(?= {color})", line)) + for color in ("red", "green", "blue")) + for line in open("input.txt", "rt").readlines())) diff --git a/02/test.txt b/02/test.txt new file mode 100644 index 0000000..295c36d --- /dev/null +++ b/02/test.txt @@ -0,0 +1,5 @@ +Game 1: 3 blue, 4 red; 1 red, 2 green, 6 blue; 2 green +Game 2: 1 blue, 2 green; 3 green, 4 blue, 1 red; 1 green, 1 blue +Game 3: 8 green, 6 blue, 20 red; 5 blue, 4 red, 13 green; 5 green, 1 red +Game 4: 1 green, 3 red, 6 blue; 3 green, 6 red; 3 green, 15 blue, 14 red +Game 5: 6 red, 1 blue, 3 green; 2 blue, 1 red, 2 green diff --git a/03/.input.txt.swp b/03/.input.txt.swp new file mode 100644 index 0000000000000000000000000000000000000000..7c41c7ac1f9dd9cbb6c3dab1e70c225a98b6ca04 GIT binary patch literal 36864 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 literal 0 HcmV?d00001 diff --git a/03/.part2.c.swp b/03/.part2.c.swp new file mode 100644 index 0000000000000000000000000000000000000000..b49e380c07012a6bd261b20a709754a0e3cf0cc9 GIT binary patch literal 12288 zcmeI2-)|IE6vr>1h(AzN9(_1%1N)=P?(D8c%CZ=QwKUd^DTQE`Qm4DK?Z9@n&dh>H ziiwGTfj&s$qi<^TL4!sU9}F*=km#Ex>Ju1a6piu8#P~gTW_EsbDW&y=I(N>w zbME(^b7osQryZYoj>htuz_CM!4}z zKq;UUPzopolmbctrGQf4j#9u~+9X~@#GC!78~%Ay;_P3llTtt_pcGIFC=z{B9*`-J!bd;`7)Ux81-+h7@-0%Kq&*aH5(SBO8rRq!4#Knsk3U$+VI zJ~#))z(4n3P2d7}68yClT7Wa)IM@erU>FR6KkpXeGH`$a8i2qx==&4+5nKV6!N-7g ze+_7$0Ip&$-UaV~Q(!0f7QdW%6PyK3@Qa!|FxP^Rm$5B^aM*_1vn|pp@@mO8Ew`N> z-nIJO)=6tPM^0}sQ-QQNyt(+hMPt!1Hs zD939LB2Sx{nH*^l+I+?6wu3vj*tuKn&7ddTe$2P;!O4L`=EtBI605|{@%l5!FzFX} zEy}GOBv5!K>Kf)JPZq!85u`GWRwz6*jq_-J=+N~7TDG*zisp}AhWzb=?o==A7lhAwy|#t!ko<5zs&!ZNBdZHi{mHj?@l4J9~8c;8Yq9&r!X0Vj3&VA)-+#=4AN(sg&dC6YJ)=R+(eZ zdgtK6-Dn(Sylq`$p6)QIa?nBk!WgKmlE8YWvnh_%uYW!tU42w@w4v^>f= zIP18&YapZgv&FrnH`m*u{_-qWD$2Y#1N+oTEw$1#VOjDltpS#PR>C32MVLdHcn?T) z5Z;lY_PpUbT!Y>_Cosk59=By$ygxz)>VM%VH2LU!CyuF3@b)bi7N1k|VD|ed%FY$kLSe zfnRs2W9W`cW#Sg-RH$v*xYVr{b$DEk%1iGC&+3qF8-&I#J8QNe1V11Qrk`mt(kez2NPj2Ng%f;JL!@Me6M`fd+Tf6)s=&p z9?50|5I_I{1Q0*~0R#}3F9CbeGPiowh+ literal 0 HcmV?d00001 diff --git a/03/input.txt b/03/input.txt new file mode 100644 index 0000000..5bd7d6e --- /dev/null +++ b/03/input.txt @@ -0,0 +1,140 @@ +............................................411.....................363..134.........463.775..........................506................... +......429...836..$............../..960........*.............+..........*...=....381.....*........67......426.....=..../...304............... +.........*...&...641..........924..*.........855....492..495.......476.927.......*.........680...../.&....*.....713......*.................. +.........900......................239.325..............*.............*.....953%.771...........#......808...329..........214........846%..... +.............707...233...................*.....*........774...445.....107.........................................@927......775............. +........721........*...17................790...670.............$..........893.93&../...129$.651.696.......131*99.............=......446*781. +...........*717.868...+.............252....................................*......461.........*......................350.................... +....911..................*...454.............161.........875........209....695..............926.983.........758.592....*..........$.562..... +...*............569#..496........888.............227......*..67......*..................877........*...#.......*.......716......975....@.... +...730........................$...#..112............*..509..*.......858..710.......@567..%..610..821...918.................................. +.........794.....701@..456-...505.....*............884.....298...............................&...............742=.....95.................... +............+........................891.165.......................=.............175...............$..693.............+...........127....... +....*..........554...855.................*...............505.262.110..764............953@...+.....343.../..............................817.. +..449.464.148.........*.............1=.853.......232.356*....../.......&....................217................992..935.527............*.... +..........*........931...44.........................................&..........553*..............*....945......$.......*............655..... +........735..718............16.....650.....944...................525.....*........................491.+...662..................27.......397. +...273........*.........563...+.......*418.%.......-.....#265..........43.92.....791*211..+................*..&...507@....84...*..543....... +..............562...=...........................627....*.....................*............492..*86......456..837............*........*181... +.....829.233.........454..................351.......232..........47........44.401.............8....876...........965*151..284............... +........*....................647..........*.....$.................#................................*....+788...*.....................-...... +...49.....588........174......*....111....604....358......863..61.........................663.......549......442.271&.................493... +...........+..446.......*...638.......*..........................*..881................#.*....*.........................720....168%......... +.....504.........*..43..245........975.................91........28..*.....966......600..18...245.......480............*.................... +.......*....+...57..*....................@412......812...*............729......61...................268*.............706...#................ +.......307..107......937.108..................453......50......778........&......*440....................4......361.........888.=256........ +..........................*..889*....89............675..........%.......29..427...................508..&........&...641..................455 +..........897...960......403.....971...*......806.....@.363................*......9+..............*.....464...................586....282*... +.....316...*...............................9...#........./.............317..614........362..905..27................670.............$........ +......*...606....................+...........................-............*........292.*.....@..........%.........=.......164.470.902..549.. +..473.603.........733..482*423....276...419...../166.........297........401.......$....313......306/.353.....................*..........*... +...*....................................%...............291......997.........385..............................617%..470...............618... +....577...*903...%.-343.....790.................143.....*.........*...30........*................/759..$.....................@.............. +...............387.........*.......$.............*.....210....417.482..........86.....760...............626........503.+990..299..137..-.... +....*14....896.....=...922..937...188........553..63....................*150..........*........*...208...............@................338... +.........#....*..774..*.......................*......................987..........737.959......665.#....329...+.../....#.....966............ +.......221....8........629...........521.94....706.....356...+............636........................=...*..253.655..505..............613... +............................649............................270....468.......*.....................420...848..................846.....-...... +....43..718..678.............=.....*906....593.-26.....268...................810...401......+.........$.........842.........@..........&.... +826*...*......*...430+..572.....436..........*.................954.....732........*.......391..999..348.662......*.....................771.. +.....61.....535............*........977.......34....672.......*.........*.........693............*.............=.860.....*790.....611....... +........930.......&................*................=.......596.........590....*................903.....985.639.......984...........@....... +.......*.......691...379.......226..971.....549*............................438.466........./.......307.*.........75......151..594....631... +........761..........*..........................236....................534..........611......835..%...............&.........*.*.........*... +...275.........58.970............660-..605..........689.191...32...+..*....287$......%...........160........*625..........413......*133.885. +....*..................................*...........*......*.......873........................./............................................. +.....388..518.........313*820...666/.321.520...392..12....455.................165=...+.#....345........557..........293............+........ +.............*.........................../......*..................................267..841...........@........49......*762.863...123....... +.............41......301.....247*37..........836........631*32..241&..........999.................+.....476&.....*.896.........*............ +.../..................*..................794...........................950...*.....................436.......$.240.+.........108............ +.917....$..+........72.....&....333.8*2...-.............35...809..416..-...654...750...166.................419.......=................884... +.....442..537...........865..................927*114.$........*...=...............*....*...725.....................228......385...214*...... +..................@.........701.501..204.............320................/.......+..820.514....*.......520...../............................. +................121....$....*...+......@...725...@.....................305....698..........287..877......*....7................$.%.......... +....920..790........468.......=............*.....584..........-546...............................*.....870............954....811.407........ +....*.....*....................405..........724...............................143.................256.......668............................. +..877......381..........=.................................4.........../...........=495......617..................519........................ +..................855....59..............$63..............*............73..773.=...........*.......595.......353*....937.......226.......... +.....456.............@............966..........990....282..19.749....=....../..273.......860.......$...233..........*....+........*.464..... +......*..........*.......206..131.$...110.861.*........*...........159....................................&............624......566......... +...181...349......198....................*.....484.....989.....181............457........................................................... +........*...............942@..345....................+........................*......142..86..............282...........73.................. +.....319..804*656.............*....................330..261......236.......263......*.............158.......*...........*........551..314... +...................343.......957.175=.....492.245*.....*............*306.......745.90.........165*..........910.......818..201..*........... +.............%....-.........................*.....186.188......306........*96..+......................837.......945.........@..129.......... +..............742..........+.....619.........889..............#...................465.....542%..44....*.../418...*.......................... +..................753-....973....*...$575.................883...../.....*....242..&.............*....63...........72..........*732....702... +.........640....................724.........63*844...........*...234.690.48....*.....+........612..............*.......483.............$.... +...225.......@......................452..89........435.....754.................886....514...................209.282...*..................... +.....*.....346........................=.*..........................................................357*88............473...........712..+... +...84..&.......%.....616.......605&......380.....773..865.254.433......*...1*..-............33+.............283...................$......538 +........416.....408.......744......................&.....*....*......595........586.....428..........523......*..............901............ +.820@.......59*...................%625.....................560..........................*......705....*.....713..../.745........&........... +.......%.......849...$.......................*...........*.....574.....#526..............304......@..241.........241..../..........975..635. +....754.............269........327$..906/.133.33........400.....*...-.........540.........................299..................451*.....=... +...........409............589.......................533.........564.211........*.....592.....%..............*............................... +.............*...............*..915......321.........+......................938......#....809............756..396.......980.403..813.725*200 +...916=.%223.354...227....488...*...........%.....@.....907.659...192.$866.......874.............737.........*...............*....*......... +.....................*...........966.257.......515.........*......*..........645....*..169......#.....*792...369......909....36..172.%119... +..779.................669............$...318......../.309+.....546..........*....817......*........755............634*...................... +......441........%..........*40....6.............514.......323............464............501.84........*379....*........+.....339......$.... +............641...735....355........&................14...*...........*.............53.......$..............386.577....697..............520. +................................................929+....288........408................*..417...192...............................899$....... +.....871..................736............749*.......................................24......*.*.....$67...............616.765.........@783.. +......*........24........*.....$.............147...258*605.65*807......253.............450.....912......454.895.............*..#............ +...612....957.*........245..790.....................................@.....*............*............@....@...=..91*..554....60.15........... +..........@....229..........................481.......542*650....779................520..........139..................*..................... +....*304.............815....................*...................................16.................................@.772......*506....%..... +.975........+....794.#........773*.......292..........708*......475............-............*100................600........862........439... +.........500......................884...............#.....477...........+...........*894.368.....480..-..552*............................... +.......................912..=............../......227............199..822........478.............*...742.....572.......625.................. +.117.........*146..529...*.718.........121..974.....................*....................201.....47........+..............*.500............. +.......296.97......@...345................*......................976.......-..............%................851..........196.*....383....$... +...182......................39.....#600...973....*606.................950...448...............&.....&9.215...................849........303. +.......824...864*973.....%....................973......................*...........581...772..167.......+.......598......................... +..829+....*..............953.............................764..424......200....788....*....@........169......280....*..........373...711..... +.......147.........348.......#..744.730........355*..............=...............*..183.&...............808..*......147..........-.*........ +....*........836...*......807..*....$...815........235.172/...............640..93........900..............=...291...................249..... +.452.213........*....698......569......%.......................320.......-.........%................................./...................... +..........522....406.*............959...........383.......533.......706....47&......33.960......960....&...241.....620.......-764....906#... +..........*..........932............*..594.......*...711.&.....+794....................-..............487...............285................. +..139...737.....*541......658.248.79...........589.....-...460...........................-..145............696.........+......645.....=640.. +.....*........24..........*....+......971*.................................397..&86.....95..*.................*..................*.......... +...55...75.............258..4.....+.......183..........349.....&...169=....@................207..187.....929..601.746.....$...269...-....... +........*.......%577.........*543..149.71........337....*.....40.....................434..........%.........+......-.....277......43...638.. +...230%..609......................................./.580.......................+.......*....+...........640............................*.... +..............269..999................618...636..............311....109...314.586.....162...747..........*........56..967...............291. +...../...........#.=......217............*......................*..*........*......%......................596........%......629..901$....... +....103...................*....157.......427.................101..686..134.909....550...@.........911........./..579....167.............*... +.............181......-.822.......*................623...................*.............39..644.......*.....841.........&.............562.45. +.....+469...........89.........190...653...939.89..*......................898..............*......660..........272..@........%..614......... +............&.......................*.........*...563....215....................612*882..740.&................*......173...834....$....182.. +......437...856........626..159...266.299...............*.............830$...................268.......467-.738............................. +.........%............*................$....@...........891..291................649.................................387...938.850*.......... +...............922.610....*....676...........494.161%............%.................*154..741....*............326.....*............88........ +....702.................223........+......$.......................224.......133.............@....648..890....../..540..745*............573.. +.........&842....$..849........513..210.288............35.....758........../........................./................................./.... +..............135..+............*...........607.........*........*...............790..#.....552/.............374......*496.....253.......... +..........*..............804/.369....419..............22..576.....335..723.686........347..............-327...*....180...................... +.......685.829.790@...................*....437............................*....................392.............352...............599........ +.......................944..........667....*...321..764@.746.665.......+......890.......104................./..........746..668.-........... +96.+....=.............#.................662....*..........*...@..961...877...*.....942+..*......290...655.303.....467.....*..*........57.... +....927.857........+................791........545..67......................152...........345..*.....*...............*...541..846........... +................325....966....480..................@...............462..468.....352.............96.371...............593................220. +........=.970.........*......*..........943.....+......*875..362.%....*....*...-.......................550*25...%191.........462............ +.....984...+......&..618.39.493.289..21....*....379.600...........16.642..162....256........................................*....403........ +...............168........*........*...*....326...............*...............*...+..............413.*.....+293.769*620....674.............. +647.................949..........502...748..............692...208.......271..903..................=..132.........................506$..832.. +..............&.........983....+................503....#.........................*350..239.....................581.......372...........*.... +.....45........693.........*...192.....7./......+.............774.............338....................@81...337*...................249..105.. +.........................598.......905....899......#..........*......-.............*31..........+......................751#......*.......... +...../...............56..............*..............110....594.....517..300.679.150.......64.919......287.........................5...801... +....783....498..321.&...297.514.......8.......+18..........................*...............*....../.....*.....&............................. +..............$..*......*....-....................*................=...961.....534*791......526....499.648.....349..&....................... +........767......48....40.............524.28...369.417..432.......421..$...........................................748......40.............. +..........%..........+............820....*.................#...................707.....378.........801.................52..*.....102%....... +..............822...364.551/......./.................118&.....922.....785........./.......*610........$..........%268..=...529.............. +........820..*.........................../......753.......................................................499...................435......... +..232......&.676...738....#......839....876.45........866...555...664......+..68.......941.........51*585..............937.......*...917*691 +.........@........*.......8...31*...........+.....577*.........*....*...399....*.=....@......./...................................59........ +.......740.......781..........................................105.353........791.579...........900.463..............909..................... diff --git a/03/part1.c b/03/part1.c new file mode 100644 index 0000000..05e8594 --- /dev/null +++ b/03/part1.c @@ -0,0 +1,71 @@ +#include +#include +#include +#include + +#define LINELENGTH 150 +#define NEXT(X) ((X + 3 + 1) % 3) +#define PREV(X) ((X + 3 - 1) % 3) + +/* I wish I had python generator or Go coroutine... */ +#define STATE_BEGIN 0 +#define STATE_READING 1 +#define STATE_END 2 +int read_state = STATE_BEGIN; + +/* Return at least 3 lines; first and last lines and first chars are all '.' */ +char* readline(char* buf, int max_size) { + switch (read_state) { + case STATE_BEGIN: + memset(buf, '.', max_size); + buf[max_size - 2] = '\n'; + buf[max_size - 1] = '\0'; + read_state = STATE_READING; + return buf; + case STATE_READING: + buf[0] = '.'; + if (!fgets(buf + 1, max_size, stdin)) { + memset(buf, '.', max_size); + buf[max_size - 2] = '\n'; + buf[max_size - 1] = '\0'; + read_state = STATE_END; + } + return buf; + case STATE_END: + return NULL; + } +} + +#define IS_SYMBOL(X) ((X < '0' || X > '9') && X != '.' && X != '\n') +#define IS_ADJACENT_SYMBOL(buf, i, j) ( \ + IS_SYMBOL(buf[i][j - 1]) || IS_SYMBOL(buf[i][j + 1]) || \ + IS_SYMBOL(buf[PREV(i)][j]) || IS_SYMBOL(buf[NEXT(i)][j]) || \ + IS_SYMBOL(buf[PREV(i)][j - 1]) || IS_SYMBOL(buf[PREV(i)][j + 1]) || \ + IS_SYMBOL(buf[NEXT(i)][j - 1]) || IS_SYMBOL(buf[NEXT(i)][j + 1])) + +int main(void) { + char buf[3][LINELENGTH]; + int sum = 0; + + readline(buf[0], LINELENGTH); + readline(buf[1], LINELENGTH); + for (int i = 1; readline(buf[NEXT(i)], LINELENGTH); i = NEXT(i)) { + bool is_part = false; + int num = 0; + + for (int j = 1; buf[i][j]; j++) { // j = 0 is '.' guard + if (buf[i][j] >= '0' && buf[i][j] <= '9') { + num = num * 10 + (buf[i][j] - '0'); + is_part = is_part || IS_ADJACENT_SYMBOL(buf, i, j); + } else { + sum += is_part ? num : 0; + is_part = false; + num = 0; + } + } + } + + printf("%d\n", sum); + return 0; +} + diff --git a/03/part2.c b/03/part2.c new file mode 100644 index 0000000..7b26349 --- /dev/null +++ b/03/part2.c @@ -0,0 +1,91 @@ +#include +#include +#include +#include + +#define LINELENGTH 150 +#define NEXT(X) ((X + 3 + 1) % 3) +#define PREV(X) ((X + 3 - 1) % 3) + +/* I wish I had python generator or Go coroutine... */ +#define STATE_BEGIN 0 +#define STATE_READING 1 +#define STATE_END 2 +int read_state = STATE_BEGIN; + +/* Return at least 3 lines; first and last lines and first chars are all '.' */ +char* readline(char* buf, int max_size) { + switch (read_state) { + case STATE_BEGIN: + memset(buf, '.', max_size); + buf[max_size - 2] = '\n'; + buf[max_size - 1] = '\0'; + read_state = STATE_READING; + return buf; + case STATE_READING: + buf[0] = '.'; + if (!fgets(buf + 1, max_size, stdin)) { + memset(buf, '.', max_size); + buf[max_size - 2] = '\n'; + buf[max_size - 1] = '\0'; + read_state = STATE_END; + } + return buf; + case STATE_END: + return NULL; + } +} + +#define IS_STAR(buf, i, j) (buf[i][j] == '*') +#define CHECK_STAR(buf, i, j, gear1, gear2, num) \ + if (IS_STAR(buf, i, j)) { \ + if (gear1[i][j] && gear1[i][j] != num) { \ + gear2[i][j] = num; \ + } else { \ + gear1[i][j] = num; \ + } \ + } + +int main(void) { + char buf[3][LINELENGTH]; + int* gear1[3][LINELENGTH]; + int* gear2[3][LINELENGTH]; + memset(gear1, 0, sizeof(gear1)); + memset(gear2, 0, sizeof(gear2)); + int sum = 0; + int* num; + + readline(buf[0], LINELENGTH); + readline(buf[1], LINELENGTH); + for (int i = 1; readline(buf[NEXT(i)], LINELENGTH); i = NEXT(i)) { + + for (int j = 1; buf[i][j]; j++) { // j = 0 is '.' guard + if (buf[i][j] >= '0' && buf[i][j] <= '9') { + num = num ? num : (int*) malloc(sizeof(int)); + *num = *num * 10 + (buf[i][j] - '0'); + CHECK_STAR(buf, i, j - 1, gear1, gear2, num); + CHECK_STAR(buf, i, j + 1, gear1, gear2, num); + CHECK_STAR(buf, PREV(i), j, gear1, gear2, num); + CHECK_STAR(buf, NEXT(i), j, gear1, gear2, num); + CHECK_STAR(buf, PREV(i), j - 1, gear1, gear2, num); + CHECK_STAR(buf, PREV(i), j + 1, gear1, gear2, num); + CHECK_STAR(buf, NEXT(i), j - 1, gear1, gear2, num); + CHECK_STAR(buf, NEXT(i), j + 1, gear1, gear2, num); + } else { + num = NULL; + } + } + + for (int j = 1; buf[PREV(i)][j]; j++) { + if (gear1[PREV(i)][j] && gear2[PREV(i)][j]) { + sum += (*gear1[PREV(i)][j]) * (*gear2[PREV(i)][j]); + } + } + memset(gear1[PREV(i)], 0, sizeof(gear1[PREV(i)])); + memset(gear2[PREV(i)], 0, sizeof(gear2[PREV(i)])); + } + + printf("%d\n", sum); + return 0; +} + diff --git a/03/test.txt b/03/test.txt new file mode 100644 index 0000000..b20187f --- /dev/null +++ b/03/test.txt @@ -0,0 +1,10 @@ +467..114.. +...*...... +..35..633. +......#... +617*...... +.....+.58. +..592..... +......755. +...$.*.... +.664.598..