From 92caa0f5c4525f5dd5001ac07835586b47173c4a 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 | 140 +++++++ 03/part1.c | 71 ++++ 03/part2.c | 91 +++++ 03/test.txt | 10 + 15 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 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 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..