aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorSebastiano Tronto <sebastiano@tronto.net>2023-12-11 15:14:47 +0100
committerSebastiano Tronto <sebastiano@tronto.net>2023-12-11 15:14:47 +0100
commit554ad47f09974f0131df285fda8ea50a1fdad8f5 (patch)
treed23caeb85e7fce6290664a0ebf3c96f513efbe94
downloadaoc-554ad47f09974f0131df285fda8ea50a1fdad8f5.tar.gz
aoc-554ad47f09974f0131df285fda8ea50a1fdad8f5.zip
Initial commit, some solutions
-rw-r--r--.gitignore1
-rw-r--r--2023/01/1a.c21
-rw-r--r--2023/01/1b.c28
-rw-r--r--2023/01/in.txt1000
-rw-r--r--2023/02/2a.c33
-rw-r--r--2023/02/2b.c33
-rw-r--r--2023/02/in.txt100
-rw-r--r--2023/03/3a.c51
-rw-r--r--2023/03/3b.c66
-rw-r--r--2023/03/extra.txt3
-rw-r--r--2023/03/in.txt140
-rw-r--r--2023/04/4a.c43
-rw-r--r--2023/04/4b.c45
-rw-r--r--2023/04/in.txt212
-rw-r--r--2023/05/5a.c45
-rw-r--r--2023/05/5b.c71
-rw-r--r--2023/05/example.txt33
-rw-r--r--2023/05/in.txt258
-rw-r--r--2023/06/6a.c44
-rw-r--r--2023/06/6b.txt1
-rw-r--r--2023/06/in.txt2
-rw-r--r--2023/06/in2.txt2
-rw-r--r--2023/07/7a.c58
-rw-r--r--2023/07/7b.c58
-rw-r--r--2023/07/in.txt1000
-rw-r--r--2023/08/8a.c35
-rw-r--r--2023/08/8b.c96
-rw-r--r--2023/08/ex2.txt10
-rw-r--r--2023/08/in.txt752
-rw-r--r--2023/09/9a.c46
-rw-r--r--2023/09/9b.c46
-rw-r--r--2023/09/in.txt200
-rw-r--r--2023/10/10a.c76
-rw-r--r--2023/10/10b.c156
-rw-r--r--2023/10/in.txt140
-rw-r--r--2023/11/11a.c39
-rw-r--r--2023/11/11b.c39
-rw-r--r--2023/11/in.txt140
-rw-r--r--2023/README.md18
-rw-r--r--README.md3
40 files changed, 5144 insertions, 0 deletions
diff --git a/.gitignore b/.gitignore
new file mode 100644
index 0000000..c773971
--- /dev/null
+++ b/.gitignore
@@ -0,0 +1 @@
*/*/a.out
diff --git a/2023/01/1a.c b/2023/01/1a.c
new file mode 100644
index 0000000..0983236
--- /dev/null
+++ b/2023/01/1a.c
@@ -0,0 +1,21 @@
1#include <stdio.h>
2
3#define N 10000
4
5int main() {
6 char *buf, line[N];
7 int first, last, sum;
8
9 sum = 0;
10 while ((buf = fgets(line, N, stdin)) != NULL) {
11 for (first = -1; *buf; buf++) {
12 if (*buf < '0' || *buf > '9')
13 continue;
14 first = first == -1 ? *buf - '0' : first;
15 last = *buf - '0';
16 }
17 sum += 10 * first + last;
18 }
19 printf("%d\n", sum);
20 return 0;
21}
diff --git a/2023/01/1b.c b/2023/01/1b.c
new file mode 100644
index 0000000..adc3da8
--- /dev/null
+++ b/2023/01/1b.c
@@ -0,0 +1,28 @@
1#include <stdio.h>
2#include <string.h>
3
4#define N 10000
5
6char *nums[10] = { "zero (unused)", "one", "two", "three", "four", "five",
7 "six", "seven", "eight", "nine" };
8
9int main() {
10 char *buf, line[N];
11 int j, first, last, sum;
12
13 sum = 0;
14 while ((buf = fgets(line, N, stdin)) != NULL) {
15 for (first = -1; *buf; buf++) {
16 for (j = 1; j < 10; j++)
17 if (!strncmp(buf, nums[j], strlen(nums[j])))
18 *buf = j + '0';
19 if (*buf < '0' || *buf > '9')
20 continue;
21 first = first == -1 ? *buf - '0' : first;
22 last = *buf - '0';
23 }
24 sum += 10 * first + last;
25 }
26 printf("%d\n", sum);
27 return 0;
28}
diff --git a/2023/01/in.txt b/2023/01/in.txt
new file mode 100644
index 0000000..495c9b2
--- /dev/null
+++ b/2023/01/in.txt
@@ -0,0 +1,1000 @@
1four82nine74
2hlpqrdh3
3eightsevenhrsseven988
4324pzonenine
5fglpbone79fourvrgcmgklbmthree
6fmbbkvthdcdmcjxzclk42six4
7four22xcqsnvktnpfshtmm
8qmfsccxsixfivelnmpjqjcsc1sixpfpmeight
9eight1nine5nine9six
10s4r91seven
116pspkslrnxpplkhgqlcqfour
12sixeightnzrzgjvsrnmtqgx5
13sixtwo1
14h6
15five8pbcsllrbvg787
16dpfhfeight28onefourtwo
17vxqbtkxjtwoz3seven
188ksrcjrcmpbq9rtvtvrbgljzqvbnxddnzt
19mpftpsgp6fourvdmltwojd9
202fivetwosix
213qqx2
22jsbdh16snnllpvvgnggfive5nhjpgdzh
234fmgmmbonegtsnqfdqt1pm
242onendvlmcrvzsnpr83nine
258ninelfhkhnqtdfour
268reight
2784gnprjhr3eightsixsix
281nc7two
293zcgkgrnd1d4
30nmfqfivervqkxmkdpnine51
311fdtrptkb3
32nineone7kks
33ninelzgncpeight966427
34eightrsniner9
35nine7two4
36253slq
37lkhthreetwo982rrc
38fivegdsfnfour64sixtqfour
39dkfdtgnine9
401six15ninebgnzhtbmlxpnrqoneightfhp
4132fivefivexjvckfourseven5seven
42onexxzvptxkn42eightvsdgszdjgp
43three6sevennine
44mvsrflqjsix22lhd2twodkltkmsk
45threetnbfsfxxhseven51cjvmkvzkdhr2
4611twoxjszm93
47trr62fivedvktlheight19
484hxthreepqptvkkzmfsevenfourxeight
495shqhrjtdgsninepblpjprtqptz
50ptwone9kzvjhhfive7qjsblztmfvthreeqrhhmbgjpqrgqhcgzntmvskhh
51xltqzgqxbkq7krgnthtqbm3636
52nvvxfxbgldrb2seven7twokxzbfkvptflnhlqjrthreeoneights
537fcvckqszbj
54eight1ninethreeninenbmcsqtrl7
55zkqmlqmtszrbvnjnvsevennine9sevenqjrlxqjlql
56428
578seven16nineeight
5824bkfzsrxjtbzbknqqxtfftzlnrkeight
59two372eightnine
60skxf5zpnmzqgvzjv9sixtwo
611fivedsghrseven4
628hmb75twotwo
632hsnpfourthree3h88cz
646qkqxszvghrdslpckhfivedlx
65pnxvtbflleightjpfzlqxhr22ckjrnzhnbvdnj1xnfhmb
66cdscn4xksngscvnseven
6765oneightpln
68ninesix11six41seven5twonesl
69f411d
70sixonedqppgfdfbthree1sj1sevenqhdjlg
71eightsixhzshtg5oneone
72tbhdgzphkkvbbclmhgvb3three
73dpsxdfmzstpd7rzf3
74kzpctbr3oneninevgcxcvsconeightgk
75blmpjv6ltxfqsqfjnjgxtseven82
7699four
77onexsxs3sixdnfqlffjnnrfive
784sevenzdjvrqjlx33
79brtbqvzcdtlkn83sevenmmtwo
805bnlmjtmeight
81twotwofive2fqbfvqhp65eight
82dstwoneninekfourphth4lrfjjrh
83mqsndqcxt3
845mbfxskgnh1twoqbxfbcjkzf
856fourzdcmdl78pvxxjrplmtmvhh
863mzgttvpt8gvzoneseven21
878253fgfhpmponef8
88nineninelhntskjvd25
891czbccmrlch27three
90one4l5four
91sixmcnsxf5two
92onethree2five7vzhctscktrcx
9314szp5fqtqfzcd
946cgpzjprtsjd8five4vjzfhgkbbf9
957gt
964lzx
97fonexgjsnine8
981twomvdvdrrneight8fivenine
9959eightthreesevenctwon5
1002dxfivenqflqppm3bmtmblbkltwomc
10136mplfgblgff6
102threeseven8gf9sevennine85
103hfssbghbnonesvdm7onekssjbthxjjvnqmcgmrcx
104eightfrbrstlh8
105eight34sevendlhvhszcnvdlvctkdzsgq
106seven2eightmtsmflrx2three44rsk
107fg6
108mbf44
1095926386nine
11048vqvcffsq2eight7zktszfour
111djstrfnqsixone8oneightc
1125seventwoqtr3eight5
113dttwo88three
1148rdxmnrtmt
115r2tzcbr867onetwo
1162v489four2
117vsmfszr5
11884nxrm48
1195cp4five51three
120four3six3
1214zglqmdngeight1sqb
1223twosrlvbzfh6nkrhmnjqeightseven
123eightgjhs276five
124j15one683
125hnnonefvhnxggtwoz2five
126threeseven2fourkltqmthree
127bmksn4
12811ntrt
1295tctbxqjcngdhffqqrjfive
130vcstnf1
13198tgzlvtwobjpxj6
132one6j5hqgbvhtmsjkbt7mglhvjjxmtwo
1331sixq
134three8lbqdd38ljfourtwoccntjgnmv
135two5msdsntdrjl4six15tdpnknrxnine
136sevenzkbfmqxb2sixsevenbvnbxtxvfournine
1371nzdfninednkhghlscsc
138onefive3gvjsqqgx7seventhree
1398dglgts4slg5sixninevzsj
140dxdmkshgssevenfour967ninetwo
1414ninevrhsbqnjtwo
142358fiveseven
143two8sixzt2
14493ninefztjqrhdlxxsjnnflczbsjqpkrmsixtngxqk
145ltpnkxtwoeightcfpjhthree5brzhffour
146four3five6q645qxn
147fourjxqghk6
1488dznl428nine
1491djftqndtmkcbptxs22
15027one
151543
152qgtbvgnl4tzfgch7zqtmpsix
153fourxfgqcsgxbg741922nine
154two4sixmkvkftwo5one
155lrlnnbdzr82g58fkgvfninezmqv
1562xbkhjbrlztnphmcsfcln
1572xlxksqkb
158rcnzsrtfive9scnnvqx6kmkvgmxlpqtkmbjtvsfmvseven
1596oneninekfpnbngn2
1602nnxlthmxqc9eighttcznxdchdthree
161dznqtbkgtwo5zpthvsnone
1627nxjjzhfhpshccknpbpttrjhqkxmmssvtlxtmbxlhvtjczone5twonecf
16396eight
1647qvckkdtvzjd
16514nine1two
166eight87one8ncdzkptqrgtfclsevenc
1678fourfive
168jjqbpmp42589stwosix
169vtrbqpv9sevenone1qlvmzkthnnsevenseven
170pxnxptttxh6fourmbpcldrlfnjtcxtwoonefour
1718njghfrsix82
172gvns197fsgtwo
1739sljnsix8
174rnine7ninethreenjxnrqgzbxbtvrltbss
1754stzbqg44f
1763ninesevennvvdmgkxzmttcxfbsvjrg
177eightsix3twofmnvs
178one2fmzxnhhrnvlttxnhbrjsgjsqkvfn5
179qz9ptnxfngfrh65bvvbhtsrsntczgj
180qfvqfpb2txnxxd2fiventvznljcqj
181fiveqvmzqlgzdbvqzjbllzeight5bgt
182qggflvv753clcqqjqmngdm6onefour
1833fourfiveeightbbgcgtwo857
184one5nineeightg44
1856zmqxcl16twofivedjxhzmhffive
186jnnsixsixtwo2bgsnbrzlnlltb
187six63oneightgdg
188pftmhdnqdgfive1three42four
1898hkcjlskh82
19084
1911ninefour9sxmppxjqqxpn
192ndrgrhsp1gxcrfgxctv
193fiverzmcmbqd78gqm
194fiveeight4
195vxktmrcdlsfiveoneftvqnnvjfour8sixlmldnrceight
196hpfprllctdjtwo9ksszn8eightcfdbzz
197nine5fourfbgf8one7t
1988sqxm5
1996fxcxhn
2002prktdcvnine1
2012vqrlpffvjlfourktdhxxgvonedvnsvlld
202qk7294fl
203sevenfivesevensevensn4
204rnpqmrgczhllzszvkfzmcljzpthree8
205fdcqknlctq74
2061xnvpvfgsbslkkktxxhn
207one5eight3zrldkdj
208nlvgbz71fourk33
209sixfourfour6three2three
2107lszpqqq795nzdfxbzsqlsix
211one8nkqdtctsjj
2127xfphzjzndr1
213keightwo25hmqthbeight
2142sixdm
215l4eight1fourfour
2162ldzseven3eightmdmsgkrrfivetwobbzz
217mtwoneonezdfour22two6
2187fnjbjqdxvkntlfkhkvnzt
219dhqsqnslccxgdd63x
220nine6fourthree
2217qzbrpplm9
222pqbdbxxxggn9fivebfttnine
22358h152eightjmjqlzjjp
2248vjrtblqzsx
2257sevenonesevenhqkvxxsvrsix
226four6hcxdtwozjnpsdtpzxxninevzvsxffxpctcjbtmlm
2273xznljnjz4ms3seven
2288892
2293jrzlmpnxhfivefivetwoseven7
230onethreetjpmpvpr6threethreeone
231one5thcfourndbphpxszjmt7eightwof
232r5s
233fmjzjqlnhxqhvbdvdfbdnb4
234nine9mrqdgnkc
235nm5jxpjgsm31stkvxjseven5
236hplgpfrtlb8dgsbbljfdgknfvqbonexbcddflz
2374bmfrjvj81vvnztchfrjfive
238xvvb2nfqxdmpzjvrbmvvtmc16
239txrfivecjq6hlgjbvzp3threefourone
240sixlthreeeightn9hqmxhxfjrb15
241six6eightone3
2429six7
243nineoneseven2eightbr5nine
244sixqqdsdmtkgkfq9
2453fivefiveffive
2468eightfive2six
2477rnlhrhlfive
248kvkrxgkk6one2ninermqtpbbnmpdpjxc
249nhltwonesix3five3two45sixk
250eightsmjnzfzjk8
251sixhxsprkfour5b9
252vkvhvhrvbnvz7rg944
253ccvzjppvjtthreetwoqdc4eight
254threefive9qlg3hkhvrbdxzdthree11
255onesevenczvffoureight28
256three39jddkzzjninetwo5
25763nine3sixlqnbtrq7jctmgdmk
258zxsqngxxfd9rvjjt14978five
2599983eight
260sevenddfpzjp3skz
261bzdpg73eight71ppzkeight3
262onevphctjs4
263twofive2jxsthree8sixqeightwozrv
2646klpdhhsdng
265thxtwonefive57rpseven2
266qtcdgdfj77sixrhtczdcbp3
267seventhree47
268threekjqqht883
269two3jfgsdnqbxcbzjtteight
2705zcpgcgsixdskfszmmq9hxtknineqmhg8
271snjs1lxkpbk5
272seventwo7bknk9
273rstbvlzlk1tpqjsjmhgdcvpfdqzl2bcbtn
2743eight4six2
275twonine8xkqp3eightgheightxplcqbvppj
276ninevkrvzvseven6eightcmmvgzb
27777n7fourthreecrcq
278xlvszfhhffhmvxfour8skpvl
2799nine3kfhgngkd1
280sevenfivesxdxhtkmeight4
28128four92
282mjzm465qffive9
283dqlghfxbkfourfivegfkmgmdgzxtm1
284six13lrc
2858qbvnhbplbl6
28613lmgbfsgnxone1
287ttdznnjsgjtwo5
288eightfourtwotwoltjxfourone3
2898threethreeeighthbbxfbmpj611
290ninekpjcrvlqbmsixseven5four
2918jmgspsevenfour7
2926nineone5hthbrbsjrhbnn2
293ninezzdlfiveseven4
294fhrxvsevenlvnztq4one
295cvmlmzz8njtfztfzfoneonejbckeight6
296ninexdgtgjjnrb1hrhjvchm
29763gqjvjtmzgkpbfthreesix
298fkstfchxcbrkfivemzhfdhsffd4mnbbmgprxcgmsl
29987rslqkvbzncfxddt
3007fiveeightxqjhdkbbgdjksn
301four375
302sixftdrnbzq84688three
303eightseven8kqdcbgtmvlsvxx24fqrfp
304four7vprrmq91
305six85ndzvnplxhkmrjftsixeight
3065twofourzfdxbffive
3074jbvmpnqcpbdfrkzone9ndcxtgsfive
308nine3jzpsrhb
309nine6cpqsfour
31078kzczxbcthreesixxtdkflhzfour5
31114sixsevennzgfnmppnmcddd9six
312fourncvgmhfl2fivefnlndmj
313rzgqvdgksz6six
31423seven2rhlv5
3159xlnnvnvccj
3163fivethreembplpfdjnineseven2
317jk1
3183threevgklhnnnccrmone2
319threefourfive4
320qtpbdrsix67threekslkmqt
321five3ghvqnrhtbqnvtmdlnine
32284lvnfx9nine
323nine7onethree46
324vtshvtcch5kxkzgkfourrtmbq
3255czsbzl3threeeighttwo
32638nine
327twovcxn9sixklflgptlkt
328fcjpjrxdleight87
329cfn6
330sixfourtpzpnsvghlqp3ssptlls
331trsjxmzvhxgvtzrhxqbb66nfp1knf
332twosevenmdmmcjjgxj96qxrqqteight
333sfcpfs9dpkvxrmjfiveseven
3346dblskzfsrpcnszqtwo9rgrdkjshb5three
3355fourfsblzr3onesix
336gcxsc9
337txjtwone12
338twovpgthxxrpsevenqxpmlbrr3three5
339csqkgmzl93xrxjs64gptsix
34033qjjzgjtrsflgpr6
341twoeightseven6zdtdltvzsxvlgsevensixpmxlfrb
342gjnvdxbveightone8two
34324vjdfhninezfvlgrdvsh8
344ninehn1685nineone
345twoonegsix4threeninezrsnvrltqlms
3465cdfdldjxddrjhncxtsndl8
3471mqg3nspfxnkfoursix9nine
3481tfcrfpqmk1stfrrnrz
349721dgsmsixjtxcxmj4jhkdsfj
3509plbxnrnlgsvtshfgzbkfive5qfbzgrxzk
351fourgjdt2
352ninethreeqqxrjjgskm1fourseven6
353rbrr1
354threekrslrrqngjtwo6
355llkbxgqp2cmnmgdfgrcshlmseightgjzs
35666sixeightthree
35764vdnrrqfxonespgfhzdcdrbrqone
358threervnhkgdg7oneeight
359nkbrvsvlzkonermsvxh65dlvxbxvlnq8
360twozbkclqppd9txxzbvfppz3
361two9nine
3627vnlqfgxlmninek2two
363qjzggvqj1ninefourrc2szbmczr
364seven6kfkkm7
365nqlgfzmdfsevenshvcnxdjvxveightfour9
366seventdrqkrxkeight75qjfbb44
367four3cxhlvthree3tcvrzk
368six5seven2
3693ninehcsjfstwo5xsgmkz6
3703fourlnthree1fourseven
371lsxzsskbsqmeightcrddxvxk93fivevfshztv
372nxqxrsevenl3eight
373239fourjcrffkeightfivezmfsvqvpz2
374hprcp6
375rklbzvhll4nstdjb7fourthreeonefour
3769jlnthv
37765six4dvtftwo
378nine5five3kqvrs183
379sixrgtckzc7nmczdx8three2
3804six61pzjhnhpbnmsq
3811fivembsixsevenddmrlkfour1
382qhgxrbnfc8one2vxc
383rdsttzt1sixonefive
384lsdoneight5pmlztbkvzffourfour7
3857g3
3863sevenlnjfvms9two
387dclkonefour5
388tskeightwo9one25ddmdmkqrpffoureight2
389rmkqgbh1slrtshgkgbdsftvbgm4
390qkhxmpfzf51
391648
392three4gfnxzrs2
393hmcskdltfourllp7sixfiveszgnfbpjt
394hf27ninep1fqdbglxngkf7
395seven6bfhtdztzvqhqnj2xfxchxpfc9
3968vfksvbfive9lxjhcfive
397626txvseventwo
3981bgzkmzx1
399nineeightlzv2l
4008ninetwo68twohhntdvjpzfone
401jsjfive535fdfnj3
402fnzrsevenhcgzccslt92twonine71
4034twothreemx
4046vbtgjssfoneqpsrdfrbcgmrfckfourpzdlb
40591svfsxrseight
406nzmnpbdqjdh2four
407blqjhjxplrxsevenonefive13
408fivef11gtdpgbdrxnbtrfqxfb7r
409l5fivethreenine
410oneffcdpqmvpcdcn6six944
4114mmfjltf7
41229threenine26
4138zrthtv56
414c21hxksz
415nqcbjkb7
416fourxtkrn7bvpbqtcg78
417qjvmvzbkxlseven756
4186g31dk1mnsgxhbdvndjgvsjr
41973eight
42061jlzgrrpkvgdpjzbbqkxp
4213368nineeightwodzl
4229tlqcrxsix7
423cmrrnf8five1
4244three72
425hhcghmtvznine6nineseventwo
42622tvjnfvzshdtpxzxrnzvtwo
4278threeqlkxrkfsevenfivegxmbhqg
4285mzzsldbk7ninefourjfjv
429rloneightcjhxsstwotwombktzlkdxtwo8
430three92nine1sixeightwof
431drxgb14twoone
4327one7seven258nineoneighthkd
4334four4sixninem
434fivejkjpdbfpsttjnpkv4one8phckjllc
4355bmeighteightgkjfkjthree
43698lkzpdnvs7chnmkxzql
437twosix2two15xzkpmctwo
438951
439four481six
4403tdvlonefiveone
44188fourgktxksmhninecfpljsix
442cphlzlx45fourxjphtthree
4436eight4gfjjdvslqv1six1kxlmn2eightwof
4445vxrzxgdpg7vrsrxrrhncfour
4455threethreemrzfbjq
446ninecsg9lseven828bjttzx
4475kqnine
448fivetdhxq39
449rcvlsix6pqzsggz59
45047fnrs
451724onesixtwo
452tdbb7
453sevenseven4
454two7mlzgdqthree
4552gxzbnlrglnvmqmzbznfngxfeightnrcrqsjnftfourone
456fivetwovsbvrfour2ndmltmprsqkbbztwo
457j3twoc6mmzt
458six47nine6tkpjleightwopzf
459sevenmshrczkdqfiverkmhlqjzqqhgppbsm58
460pkbgvlvzckvone26rfqbmtwo6
461sr9qsxjnine9zbc6three
462eight4qxlmtwo27threesix6
463fourone417oneone
4646fpvfbrrtwoeight
46579rj4eight88
4666vhfivevrj
4677tmqhchfive6jxgmqcfmq59eight
468threeone3xqcrjzszhseven2csbflgnds
4691qsxxxmsknhseven3nine
470fivemqxjlggcnsngflb5qtshllseven1onefive
4717476qfcmqqbfhvrvksfztskmzgvjjsrsc
472twosxlbrgdtptwo16
473kffmtjnjjk2fourtgv6rvsrzcvdrklplndseven
474eightzhrfgpjfqgccn2khrfdzfour28
475ninetwoxvnhfdjsxslone4four
47692nine48b
477ptwonefourclthree56
478hshqjfknineeightlkdxvxcsljfptlbb6kt
479fxjbr1four
480nine36gqbt6
481nsbcvzninebvlpvlx1three
4821ltlxzlmzxhjlfvtnrrpdk
4833jpqgspseven5qm
484553npbeightxf
485fourbspjfbxk4
486238
487xjrsdsvgncxddpmj3tlqone89
48868bkvsslntwo
489dxcmpjfprnthree98sbh
490reightwoeightseven76xqfhvbkfouronegkrfvdzzdx
4919lfpjff
492gcvs5
493hnctpgpxdlvklfsdfour2hnvtklhgqxhjpzknine
494ceightwoninefivetwo9plndfive4
495pjnzdrhtddjgllbf9f25eightb
496fpsdpfl8cnhkjtzhfbhdftkvm
4973cqqkflmjmpfmkk79lvkjljd71
498bfpfmkjpnkgspsz7nine
499threethreetmpntmpg3lfzzsrzr36plfvxv
500nvssix83
501dznrcvvgb8
502csrffxrtvmpfgbkcmmdlzxneightzvfgxdpljpcnrcn5
5039sixtxxthree
504seveneight2kpzpvvtzq8
505jbmmeighttwo12seven96bcvcs
506b68pvjcsnine8
5074vphtk7
508mxmjvnbqseven2
5093two2foureightxvvtxpcdmsdzvkg2mthmx
510cxslpdtnnx5five65
51197mp3qbkxmhl5dkphzgmpg5
5127f11sixcnrqone
5138fxjdjxc6drjxnhptdeightseven1six
514sixffvgcsfourhmnrf8
515qtpjrmlgnlkbbbr7sjcpm91five3
5165pqv69one
517eightnine8
5181three8
51939cspknxbsjhtfourpcbqsvlgz
5205nine15
521zgjgjfcdphnqqv4eightsixsevenkv
5226ggfxblx47nine2onenine
5231twoone2xfxfcr5
524sjvpxd7ncpclnc57one1
5254sixdgone
52689ptctqvnpg
527threefour1four4
5288seven5pfeightfive8hclpxjgftc3
529mznfsbmdtltwoqlf9
530425
531n51891
532one5l
5338ninefive2jhhbnjsvdqtlmsjgshvlvlh
53458ggdlkpcmkgeight2vcprcttwo
535twoseven3eightfivesevend
536krrzfivexrmvdtbr1zvqpmthreeonenqnmx
5372sixhjpxptnthreezkfsix
538jchkkkgrdmkvdgksevensevenfour8five6
5391tzbzthree
540xkone7zvgtv5qvln
5416fivetwohjblzsixnine
542onelpgkpggl9nsdxtgh4tgjfgpcsn3
543bjdxc7krrt16xbgvl
544sevenrpftshchmkkflxseven4eightsix
545groneightfftfvk6
546hrcshqtxpqgxeightsix1xxxrczpcr
547foureightthree9sdffivebdtrng
548ninefourthree9eighttwonine7xjrsm
549fivefour64
55051onefivetkcdbbslzmeighttwo8
5514rssgjpzgnczqtdrfivesix7bjxslhzthreefive
5525kgkv7ninethree
55384ninepsbvzkgrvqpzmtqgmcxpvgfbffns
554fourrvdzsntddfoursevenqq54lgdrtdcq
5554nineeightfdh
5569twoonefour2kmnb9
557qcvmnq13tsptksgmqj8
558113twonine4zjsbtjkpbdsix
559sevencvnineq6jvnshmg
560pjhmbnjqflvp452sevenfive69
5612three1sixninekmfcsbsevenfive3oneightg
562six3six62onevrhtsskzrhtthree
5635bxcmdnrf1szdgfournine
564fourxdxmk6
5653lsnfgffnlrqboneeight
5669sfsv4gqhpbqg86
567two17567fournqkmh
5687threesevenzgxvkhf
569vlmz7sevenfourfour8bqzdrdktklfivefq
570xxsvcqqeight6flrffzxpfourkzfstj9
571fourlzpdxg3knxgl
572msb246fourlc1crhlbjgdgr6
5731q1cmrmqponeightd
574twoeightncz513
575nine1nine
5768sixonesixnine
577193sixthree2rgthk
578tvhqp44hmjhzvmhgrbprgttgrt
57952bdszlvsvgzonefiveeight
580sdxnpkllmnninethree5jxsgkdbmknfrfvthree2
581six23hdzmppf67threeseven
582eight5nine76vbggdlp
5834onevrxnnbszk
5849ninezhdsfbfive12
585sixnine5xqmkmthz
586fiveskklnrr13sevenfour3nqs1
587sixqcxqnjxxzqmdlqtwo83
5888eight7
5899psvqdzpchr
590492jseven1
591xrccslcthreetsnfoursixsixsix1
592gskqmvnclfgxbtcq9hsix
5935two4twofive
594sqqhrvtszzjs1vfskhsdsvvhlskn
595nineseveneightcjcgnb9three3xfkst8
596ktwone4one73
597five6xncdddspkcbgklzlzn687
598xgnlvnskgklcpdqvks2
599zscmhb7mrrshccm
600five8hplscnineeight
6012hrgc86dsgjbvsrv9
6028lncmqrxcnm9ctpxjxlz8
603jdqt39336
6041gntnqbstzrnine5cqlrrtfllb13kfleight
6053jscjlvvkd89
6065nineseven66nine6twoonetwonek
607sevenxrqj4bfivesix1
6088msix8
609six6ninesevenfourbttvtt66
6104cmvvdfdgqphjzleight
61155mltlnxc4dmcrhjsjc8seven
61226197jtlvpsixcmzkslvzh
613rjzn2
614krlvgxone54hdddkspmfkpnzcbtbz
615four2two2
616one5vjjs3one6six
6176cmt88three
618reightwo7lrjqxbmgjj3seven2
619ntrkndgqzpfkjrone9
6205dvktjpseightxxmbtrm
621four6seven9936six7
622fourhqstnjbbdscjngp5fpxmg
62377five
624qrzg9five1qqcsonekgvckmmpfx6mpxd
625qzjqstcll7donekkpmkgpdthkjclrpth
62614seven
627bpbfnnq4rpppcjfeightsfcsqzg
6282one7eighttwo2vhzhjpgg9xhsdvlgxf
629eightonepn38ztcqzbthjz8
630lnsix7eightskqhrbx
631sixvnpkpsdzsbjgjkbxreight8five4
632vfrvkmnvnhk5one
633eight9nine7
634oneone5
6357584zprfmjtwo1
6364szpqtwoflcr9bhtthreeeight5
637385
638ninekdqknptxhsevenmrmjzqjvnppsrgbkv9jeight7
6395fs1sixeightthree
640sevenxkvxzqhckfourninetwo3eight
6419eightgfjvv
642xh8
643brbs3fiverzrtwo4jtdsvrljxone
644qcvfnlvfivetwofourgsdlcmkb5
645klnsqmblkffsq4threetwo6
646nine4eightx8eightwohrk
647c1
648sevennine55eightttlbshbfive3
6496ssmtjnxsixthreengrlndcb3
650vgpq8sixsix
65196xhrnine9
652grpsjz1zqzthreeone2four
653r6twosevenrdmczdz
654jdjz4ninefour
655one88
656ninerzdfc8rxnfbpndznctqd4tlb
657cshoneightnbdfmpdh2fnvjtxtshseven
658gtpljthree1six
65963eightfournncq
660twoonegsdpfkfqdf7
661xccnnscfivexbqmxfouroneeightgvndxgnine3
662mktvsff76bfqkq9fivetwo8lv
6633four5
664qhdgmcninethreevssbxqbsd35
665one6mprksdcz6hpxhrdznfpkmp
666six55ninernnmmlgmblttbgph8pqrjtjhtdj
667jnpbmnbqonemjcsgbg1
6689eightfourmkknzgmqh7two
6697five9
6702eight44skdlfbhfsshpvhgfseven
6712cqrzrhbfn
672three8419two7
673rvpblkzgkmxkghsbfn3one
674nine58
67574spkcfzsdmkf2six1
6762threeseven
677sf84qnthree5bmxnrmqff3seven
678oneonecxxv96
679gpdbgxgjqzdzlxgqphdr63twofourkspvxmvrfx
680fivesflg9fivesixonexfb1
6818pc56fourqpqmfour2eight
6823qvgqqldcr8
683tssixfourlbqstcmj1
684pf2sixpzxcpmxtp7twoseven
6855429
686drtlhzlqltwosevenfivetwo29
687eightlqtfronebqhdh1nineonembxnbpgg
688vlvnzcpbpqeightjspbbqqeight6
689sixkkmgcnhdfldplzk3five
69093ninekcmgjm8ckqjdz
6913dmskrqjd9
692five5threefivesix
693lgvbpdnp8oneeight7eight
694seven37
6952onesixtgbqbnn9eight
6965ndhfjrvt5fivetrhzsmqtwo
697bdcrhzdr33ninefive9
698cgsdzcninetwofive6one
699fiveljbtcqcqdglvjnd8onefour
700two2b5lzbjsqx7
701three593sevenfivetwovptpnmxffrkbsp
702sixonesixthree8btmzlnkvxt
7032jf59
704eightfivethreenine57qpdkcfr
705eightsix31threeeight512
706fourseven2twoninenineeightone
707pqtnqdtsix1
7083zpnvhlsjcmcdvzzlqp5
709sixvnmhckrzxfmjglc964nine
710mftxdnhdzmfnrgvvz59nlhhvr7spjrh
711eightls148mmvsjjldzlmvxjd
7123five5mlfhszsevensixthree
7134zpllkssevenfourtgbhdkltwoc
714ffourhnjhmtxxfjg511
71563jddsfqsmjdmgxnthree3four
716eight3onetwotwo7
717fmfour9tvfourfourtwonef
718qseven91two2fgnzcjnm
719rpzmsseven1jcxvxgnvthreeeight
720onefourrflrntpkskseven1kthreetwo
7215lpmhn1six
722ttvdgvf67btpqbslt
7233twovkbrhqsmv2lzggdlbfvgonenine
724rstknqvqtwo55sixjpzmgjsm
725nkgfnrxzj7jszsixfiveeightsixfourflqlzmhl
726sevenbbbmdgbv9oneightqg
727mzmksix42oneonexxmndklncn3bqj
7283xxcsfonefour
7291threeeightnine46zzscxblntplpd
7306four77sneight
731pcjxrxtwoseven71threethree
7325spmqztljvbtthreefivenineonesl
7336zlkxrbhlgf6
734228
7352seventhreesixfoursrhxxrcd
736vhkkr33
737twokzcchqdmpf3
738qrz9
7398lfkxtknx
74076n
741dpxthreeqgtjsqs33pzjxgrmtck
7421xhhdhqv6sixlcgfour
743four9chmvmrqmfq
744one5cvxtvjc96three3
745one6eight
746sevenxdncpgzqqv6five9
747fnlrctrph4mpdninetwo4threedm
748one3nine5two
7498prrdscmtgfivecsnxjrpssix56
750foursclkcvrkvkhrbnnchlsbllfive6djnprhmkxfnine
751five2twojknineddzszxsgxxgzfour
7529532chktx5
753two47
75442sscxflsevenjssjmzn3xgzpvfsneight
7557fltzgtkmqkgjj
7561one5six
7576gstggspddlninezrzcl5eightqdvjlgz
758eight2stxftmtsbn
759vqpqvbjvgklxrtvnkgsvlljgxlpxthkeight8fp
760sixpjhzscgthree8eight
761vgxfxhssbsixfivehxllx9
762nrszzljfrthree8
763dvthfklrvtworxtvhljnsqnbcnpj5eight53
76476threeqclnine
765eightvdc7one2four
76646five1threeeight3six
767five52k557sixxctdrb
768hk2twoggmfchleightxnshxrcvncbxvrzhone7
76921rpnnttwo4fivefivedvtpfmnbmg
770onetkgkv14sixdjfznpdrvl
771onezctthreemfnqcczxpffz2six5
772kzeightwovrtjp94vhn9mjlrxqm9xdzbvgqfqt
77334one17hl
7749332r
775zeightwottpsrgnljcmnglbfsxdkgffrlgm6jnzvkxn9
776pmzdljpgsix7
777zmhxkpskqzgrkptwofour4
778pkoneightsix7
7799695tfivexmspcgz
780ninerrlfckbs7vcmbhkninelbhfclninesevenbppk
78178k2qhvkzgkgkskhfiveone8
782ndxnqczhlkdvd97threeseven
783jmmdfvftbeightone8eight1twosevenseven
784five9six98grthvvqdjbrkxn1
7854qxvqfrkgnfcxkkdm1mnczs
786n3b
787three9bzfour57
7888threexkglxf2
789onedxfivedxvgxjmzkone3kbmplxbkdnpknjzrbmt
790nine3two9fivefrmjgxkrtrmzh
791tlgpkzfdlnine9fivezdl
7929fourtsnhlf5ljxrhflckjrrzfjbndhlcbv
7933tthree6zqrhbpqczsixrgvlcpm5
794twosixnzqtvhhnm8
795five6one6
7964fournine946nine7
797one8rzlnlcvdseven4seven
798tnmkgnbrzg5nmlqsevenone7oneeight
799eight985sjrfjdhtkrbd
8004threexlm6twoone5mthree
801four8fiveghddxqlp
8021kjtrpktpkq
8032grqpqfsclsgdzmkglxbzxcshrs811one
8049seven94ffkfdmvxr
8058tvnnbpj7bjmvlnnj
806sixthreeflggjxmlk54
8076five6ninecjdmkggsixnine
808sfjlhbbx6onexxjsix4z
8099bbnhtpgbntzlxct85
8102bltznvqgs8sixsix
811nms7vst8
812eight9vnrqbv
813two663
8141h6prckcqdqn
8152ninesevensixtwogkvtjrp6rbgc
816sbsncmpsixhfvttwo27fsb
817fourtwoshvjffjdeight83knlxbdjphsn
818bkbhjcgkjbcgjsix1
819cfkpjctlnztlsgjonehrmvtl7vksr
8208eightphhd
8216eighttwosix5one
8228dtnqgtrddjfqmlrptphfxkcgoneeight7
82332eightjfgtqjllmxtf6s
824twovqnctjcvsdfjbhtnzccd2gshchnhrpx
825twovqqpbrf9
826four4onelkjf15psdspgvvdfcvmnkhmfive
827xdpg4ninetsbrmpqfive
828fiveonefive19
82946qtppz
830twoseveneighteight72
831fivefourthreesevenbxtpqctslbkeight2qmvgth
832355ncxjffxt
833eight4zslht5six
834sdnsrghmbxxjhjqd1njqjcghsspmggzd2
835vcthxnqqkvqsjrkxrs71onetwo
836fivexcjvm9
8373kddthreehfhjmq9ninesix6
838rclqzddvxtm2nineninethreefour
839vlfgxbkdgnxrsprd386onethreetwo
8405sixjscbvzkxtl5fourone
841317dnqnqntwo65jnthjbxnfive
842mxtwonethreetwo2ninefour35lnhczqfpt4
843nlctnjrr9twopthreefmxgjeightwofqh
844nz8threefourbhcjvssgcnine
845sevensixzspvzjseven9
846six6onetwocnvmjfour4eightone
8477xfd5qlmtzhhgr
8488twonesch
849nineqvlsrfpdn2
850ptrfgdnine7gpxsix
851pfx4sixfoursix4fivesix
85268lqzp
853nine53jmtsxjptgmzpfoureight31
854two1msjf8
855gpgrpptthreetwomfrmkszrv8
8563five4
857threelqgs2kjvlsbmjkf
8584fourzgqkfhqhvhpgfkt
859jnlbcbgrp7
860onecdcmbrqxxlpbd1rthree
86199mbfdcgbhv
862nine6cvmfourfivesixhcsqfpxkdk
863eighthjbqsbz6ndpkdlnpmpxqvpmsrbvksnnleightnzxmjg
864gvvpnfzbb7zxfschnrteight6two5tnp
865sixrctqxdpkxpfdkglvthreenine47rzs
866jtwonefour8rkmtclhlf97fqpjmggtztwo
867slmfjkfgbjt6
8688lbh
869eightnqtfvvm2
870vseven31
871one54qrnzfrbdqfive
8728twokfivel9
873vfcsqvxkdxfiveqdvgqdmstn5
8745l63
875two8fourzskrqbcszfzbchlh9ldcp6
876hqhszsgmqzlksq5
877sb6fivefourpmtptjtkzhbxjjnqsixkt9
878twohrktppz5sevenhppmnjzlrkdqddsgs
879two37ninefive
880fourllczb9
881sixfourone83two
882ktgpc7
883fjsnkdj6sixsixtworlhgnbqlbm
88451zscxpk6onesevenjxxzcp6hqrtjmhqpk
885dmxfcfmfsbfpjfive4
886one47
8879jdlkcpzsevengfddvzxdnfkxf8
888fourdxnine3four39
889nine1one7fjcjjckngthreec
8905dlqjlbpt
891twooneeight9gf6zvtsqvrlnf
892three3six7
8933jnhfivethree
8941pzdqvjftwofive348
895four7kcrqkf9
8969cxglsdg
897twobgmghbrqdngthreervxjbmp7xvrskhfcf
898cpvhhkgmftttdtwoqfncthree1tzlbqcr5
899kmxqkfmlgtmztzpr74ninebqgcjkksljrphc
900mrsmtdhpsixslxg9five7
90153two
902xpfzv3
903twosdjhone551twozgqc4
90489fourfournfhc
905five7chqddxtwo1tjmlhqsix
906dkrnxgh5xqzcnjzrhg
907lcvfqpglmntwo1sixthreevdndckjgpkzpsp
908foursixnineseven1llbdvckff
9096four15fivettfivefive
910684cfnqfxkxgeightnfgqqmthreelbfxxdsmn
911fourdcxxseven28hxqqfhxtd
9121threegjffmjrfxppnsqthree
9133khnfmcmtj33
9149ninejvdl88
9153four9seven8fourmpjpkn7
916tmfourkc1sixfournglfl
91724xgscdtfxhttglvhczrstpfcjvnine2fiveone
918psqoneight4twojxkcvgdteight1rhcgmkmmjbbnzdhqj
919sfrgqk1two
920fiverzjbzssone4nineninefive
921twonineonergqsg2eight7eightwolf
922rztthree6sixsixxsxtvjthree
92378fourcvthree
92417hjphkdthree
925tdprffbgqseven7
92658eightbchzffmkhh8twofivethree
927zpbfstbb71hgldfkrvfourthreeonesixfour
928fiveseven1eightnine
929four8nine4vxpfpgxtlfhcrndscfgn4seven
930pgtznpnqvm1one1dfsix16
931ddffoureightpmqkznnseven75two
9326lklqx1sevenzhfdb1
933mq113scstpnnveightfive3nine
934threetwox79
935284mrsixthreefour
9361seven7zk4lldz2
937271nine2fourfive9
938fourthree37xxkvlgsixzpkblnine
939xbbnj2eight33
940seven5sevenonekzpnhzx
941247xgmlnntrcsixbstnine
9423ninezxtbqbfgtdjpgmjv
943tvxkssrfthree3
944fourfoureight12
945onefdszsvrzt2fdeightzkbmz
946cqrqkfgb3sevenqtqntxxhqlvrcthreefour
9472one5ptslgxsp4six4two6
948rskmbsfglone913vlmqtmpvfsevenp
9497c
950nkzrdb66crhk
951onevdttzljsmzvvhlf1tzqsqnnchdxbmngtlzzjdszvlvfzhx
952eightbtstrjzmfmzvcgsbgfxfour4one1
953pttthttfftkp41
954two9rlqrxvsevenfive
955v2four4
956two2one
957rdvhthhzrmeight5jtgf
958flshgbbtztkjfive8
9597sfc181fivefive
960fivenine1bfnchprbsix
961six2zpqshtndsgsevenone3one4
962fq8
963seven4eightvzfq7kthqh
9644vxtllmlnine8gsqkngfdzeight
965vhfzmbgseven5
966skqfzlconefivertzchfkvthreeeightfive22
96772oneeightone
9687ccs8vjx7vvszsn
969xrtmgqk95five849
970threebqeight8hg
971drdhjjtdrdxonenineninefourfkzrrggvz97
9728xxldtmdctllqssgdqp83
973dfqrjzv9rqbtn6
9743ninenhgqkglfvjbmgcdrsbhfournine
975five821
97654foursix7pv2qsix
9777197threescjkqhpqvzgjthpmcgtzrcd
978ltpzstwo78fivefourstwox
979mcqcmxxzcmpzrz4ntgnsgqbqjmkzpqvxtvsixrzzr3seven
980foursixfourzrnxsixgpx7eight
98141448sevenhxjpbvhvlmqrpjsvhblts
9821geightgtxlzdmpprjvg856five
9832tgrll648four
9843pkcd6eight948
98594sfznqjqlkvfjgczm
986twockgseven4seven6bp
987sixsix6eightsixeight
988nine3threenpsmshnchm
989threemqfptponesevendbjs17
9902ninehnsnnvj21fkeightwodmz
991jcptspngbc38nvtnrmvqtwo1
9926qsmcvfoursmlsevensix4lkpxxcnk
993xmtjrsrkjd5
9947psvffqn4
9953sh
996jdklghtbz1eightrhvfmnlknlghg77
99762tbtjfkltkdrxsxhhxpvbfvpnrpflh
998fpctmmvvnbftv2
999nkxmdshm5twoseven672
100088788jnscmpqr66sxcjx
diff --git a/2023/02/2a.c b/2023/02/2a.c
new file mode 100644
index 0000000..f3ddfc8
--- /dev/null
+++ b/2023/02/2a.c
@@ -0,0 +1,33 @@
1#include <stdbool.h>
2#include <stdio.h>
3#include <stdlib.h>
4#include <string.h>
5
6#define N 10000
7
8#define MAX(x, y) ((x)>(y) ? (x) : (y))
9
10int color[26] = { ['r'-'a'] = 0, ['g'-'a'] = 1, ['b'-'a'] = 2 };
11
12int main() {
13 char *buf, line[N];
14 int i, sum, x, maxc[3];
15
16 for (i = 1, sum = 0; (buf = fgets(line, N, stdin)) != NULL; i++) {
17 maxc[0] = maxc[1] = maxc[2] = 0;
18 while (*buf++ != ':');
19 while (*buf++) {
20 if (*buf < '0' || *buf > '9')
21 continue;
22 x = atoi(buf);
23 while (*buf < 'a' || *buf > 'z')
24 buf++;
25 maxc[color[*buf-'a']] = MAX(maxc[color[*buf-'a']], x);
26 }
27 if (maxc[0] <= 12 && maxc[1] <= 13 && maxc[2] <= 14)
28 sum += i;
29 }
30
31 printf("%d\n", sum);
32 return 0;
33}
diff --git a/2023/02/2b.c b/2023/02/2b.c
new file mode 100644
index 0000000..1b30114
--- /dev/null
+++ b/2023/02/2b.c
@@ -0,0 +1,33 @@
1#include <stdbool.h>
2#include <stdio.h>
3#include <stdlib.h>
4#include <string.h>
5
6#define N 10000
7
8#define MAX(x, y) ((x)>(y) ? (x) : (y))
9
10int color[26] = { ['r'-'a'] = 0, ['g'-'a'] = 1, ['b'-'a'] = 2 };
11
12int main() {
13 char *buf, line[N];
14 int sum, x, maxc[3];
15
16 sum = 0;
17 while ((buf = fgets(line, N, stdin)) != NULL) {
18 maxc[0] = maxc[1] = maxc[2] = 0;
19 while (*buf++ != ':');
20 while (*buf++) {
21 if (*buf < '0' || *buf > '9')
22 continue;
23 x = atoi(buf);
24 while (*buf < 'a' || *buf > 'z')
25 buf++;
26 maxc[color[*buf-'a']] = MAX(maxc[color[*buf-'a']], x);
27 }
28 sum += maxc[0] * maxc[1] * maxc[2];
29 }
30
31 printf("%d\n", sum);
32 return 0;
33}
diff --git a/2023/02/in.txt b/2023/02/in.txt
new file mode 100644
index 0000000..f970b1a
--- /dev/null
+++ b/2023/02/in.txt
@@ -0,0 +1,100 @@
1Game 1: 1 red, 10 blue, 5 green; 11 blue, 6 green; 6 green; 1 green, 1 red, 12 blue; 3 blue; 3 blue, 4 green, 1 red
2Game 2: 3 red, 5 green; 5 green, 7 red; 1 blue, 7 red, 3 green; 3 red, 2 blue; 5 green, 4 red
3Game 3: 4 blue, 4 green; 2 green, 2 blue; 8 green, 2 red, 3 blue
4Game 4: 3 blue, 15 green; 16 green; 2 red, 7 green; 2 blue, 14 green
5Game 5: 8 green, 6 red, 16 blue; 8 red, 12 green; 1 red, 9 green, 16 blue; 8 red, 3 green; 2 blue, 5 red, 10 green; 15 red, 4 blue, 8 green
6Game 6: 5 blue, 2 green; 6 red, 3 green; 4 green, 4 blue, 2 red; 14 blue, 2 red
7Game 7: 2 green, 6 blue, 1 red; 2 blue, 1 red; 8 blue; 5 blue, 1 green; 6 blue, 1 red; 2 blue
8Game 8: 1 red, 10 blue, 1 green; 6 blue, 1 red; 3 blue, 2 green; 1 red, 1 blue, 3 green; 13 blue; 10 blue, 3 green, 3 red
9Game 9: 2 blue; 8 green, 3 blue; 4 green; 14 green, 1 red, 2 blue; 3 blue, 1 red, 12 green
10Game 10: 1 blue, 7 green; 1 red, 3 green, 5 blue; 1 blue, 5 green, 1 red; 13 green, 5 blue, 2 red
11Game 11: 1 green, 10 red, 6 blue; 15 red, 12 blue; 18 red, 1 green, 1 blue
12Game 12: 16 red, 8 blue, 1 green; 15 red, 3 blue, 1 green; 5 red
13Game 13: 6 red, 7 blue, 7 green; 3 blue, 4 red, 13 green; 1 blue, 6 red, 11 green; 2 red, 1 blue, 14 green; 8 green, 5 blue, 2 red; 4 blue, 18 green, 4 red
14Game 14: 16 red, 3 blue, 1 green; 7 green, 3 red; 16 red, 15 green, 3 blue; 3 blue, 13 red, 10 green
15Game 15: 1 blue, 1 red; 3 blue, 2 green; 1 red; 2 red, 2 green, 3 blue; 3 blue, 1 red, 3 green
16Game 16: 9 red, 3 blue; 13 red, 9 blue; 9 blue, 10 red; 5 red, 10 blue, 1 green; 2 red, 6 green, 8 blue; 6 green, 13 red, 5 blue
17Game 17: 15 red, 17 green, 8 blue; 18 red, 16 blue, 15 green; 8 blue, 17 green, 10 red; 5 green, 3 red, 12 blue
18Game 18: 2 blue, 11 red, 2 green; 1 green, 11 red, 11 blue; 1 red, 4 blue; 10 blue, 9 red; 1 blue, 7 red
19Game 19: 2 blue, 3 green, 5 red; 8 blue, 16 green; 12 red, 7 blue, 8 green; 9 green, 1 blue; 3 red, 16 green, 10 blue
20Game 20: 3 blue, 5 green, 6 red; 2 red, 8 blue, 7 green; 7 green, 3 blue; 2 red, 11 blue; 1 green, 6 red, 3 blue
21Game 21: 16 red, 3 blue, 8 green; 10 red, 15 blue, 3 green; 6 green, 13 red, 15 blue; 11 green, 13 blue, 10 red
22Game 22: 8 green, 1 blue; 2 blue, 9 green, 3 red; 2 red, 2 blue; 1 red, 3 blue, 8 green; 2 blue, 1 green; 1 green, 2 blue
23Game 23: 2 blue, 8 red, 5 green; 9 green, 2 blue; 10 red, 2 green; 12 red, 1 blue; 11 green, 2 blue, 13 red; 7 green
24Game 24: 6 red; 13 green, 7 red, 10 blue; 7 green, 9 red, 1 blue; 3 blue, 2 green, 2 red
25Game 25: 7 green, 1 red, 2 blue; 8 green, 2 blue, 5 red; 5 blue, 8 green, 4 red; 5 blue, 2 green, 1 red; 5 green, 3 red, 7 blue; 3 blue, 6 green, 1 red
26Game 26: 6 green, 3 red; 1 blue, 2 green, 2 red; 2 green, 2 red, 3 blue; 4 blue, 8 red, 2 green; 1 red, 1 green, 1 blue; 6 red, 5 blue
27Game 27: 4 green, 13 blue, 2 red; 2 red, 7 green, 10 blue; 14 blue, 11 green, 1 red; 10 blue, 15 green
28Game 28: 4 green, 13 red, 7 blue; 2 red, 5 blue; 5 blue, 4 green
29Game 29: 6 green, 15 red; 1 blue, 6 red, 8 green; 6 green, 1 blue; 12 red; 1 green, 7 red, 1 blue
30Game 30: 4 blue, 4 green, 2 red; 6 blue, 9 red, 20 green; 9 blue, 4 red, 2 green; 8 red, 8 blue, 1 green; 6 green, 12 blue, 2 red; 8 green, 8 red
31Game 31: 9 blue; 1 red, 2 blue, 5 green; 2 blue, 2 red, 9 green; 2 blue, 1 red, 8 green; 11 green, 2 red, 3 blue; 7 green, 5 blue
32Game 32: 15 red, 5 green; 4 green, 2 blue, 3 red; 1 blue, 9 red; 1 blue, 15 red; 4 blue, 2 red, 8 green; 3 green, 3 blue
33Game 33: 13 blue, 1 red, 1 green; 8 blue, 6 red; 4 blue, 2 red
34Game 34: 5 blue, 9 red, 7 green; 8 red, 6 green, 5 blue; 2 blue, 7 green, 12 red
35Game 35: 4 blue, 15 red; 1 green, 10 blue, 7 red; 9 red, 3 green, 1 blue; 13 red, 9 blue; 3 blue, 2 red
36Game 36: 4 blue, 18 green, 2 red; 5 green, 6 blue, 11 red; 6 red, 12 blue, 14 green; 19 green, 10 blue, 7 red; 7 red, 8 green, 9 blue
37Game 37: 16 blue, 5 green, 18 red; 3 blue, 14 green, 1 red; 4 blue, 3 green, 14 red; 12 green, 7 red, 15 blue; 15 green, 11 blue, 2 red; 8 blue, 13 green, 6 red
38Game 38: 6 red, 4 blue, 12 green; 3 red, 11 blue; 16 green, 2 blue, 8 red; 4 blue, 11 red, 4 green; 17 green, 7 red, 10 blue; 9 blue, 15 green, 1 red
39Game 39: 1 green, 1 red, 10 blue; 1 red, 5 blue, 2 green; 4 red, 7 blue; 9 red, 6 green, 5 blue; 1 green, 2 blue, 9 red
40Game 40: 13 blue, 11 red, 12 green; 8 green, 11 red, 4 blue; 2 blue, 2 green, 12 red; 2 green, 3 red, 13 blue; 13 blue, 6 red, 2 green; 4 green, 6 red, 8 blue
41Game 41: 12 red, 4 green, 13 blue; 4 red, 7 blue, 10 green; 17 green, 17 red, 11 blue
42Game 42: 1 red, 1 green; 1 red, 4 green; 1 blue, 4 red, 4 green; 3 red; 1 blue, 3 green, 1 red
43Game 43: 7 blue, 10 green; 5 blue, 2 green; 2 blue, 1 green, 4 red; 14 red, 6 green, 7 blue; 4 green, 14 red, 8 blue; 4 green, 6 red
44Game 44: 9 green, 4 red; 4 red, 6 green; 5 red, 2 blue, 7 green; 9 blue, 1 green, 14 red
45Game 45: 20 blue, 4 red, 6 green; 3 blue, 1 green, 6 red; 8 blue, 8 green, 11 red
46Game 46: 1 green, 6 red; 6 red, 3 blue, 3 green; 6 red, 3 blue, 4 green; 1 blue, 5 red; 1 green, 4 red, 1 blue; 2 green, 4 red
47Game 47: 12 green, 8 red, 4 blue; 7 green, 6 red, 11 blue; 4 red, 11 blue, 12 green
48Game 48: 1 green, 3 blue; 13 green, 3 red, 11 blue; 7 blue, 1 green, 2 red; 7 red, 15 green, 4 blue; 4 red, 8 blue, 10 green; 15 green, 8 blue, 6 red
49Game 49: 2 red; 2 red, 9 blue; 4 blue, 1 green
50Game 50: 10 blue, 1 green, 18 red; 13 red, 1 green, 7 blue; 4 red, 2 green, 9 blue; 2 green, 4 red, 10 blue; 7 blue, 3 red; 19 red, 9 blue
51Game 51: 2 green, 2 red, 5 blue; 9 red, 5 blue; 3 red, 10 blue; 9 blue, 6 red, 7 green; 2 red, 5 blue
52Game 52: 6 blue, 3 green; 5 green, 3 blue, 5 red; 1 blue, 2 green, 2 red
53Game 53: 2 blue, 9 green, 15 red; 18 red, 1 blue; 13 red, 12 green; 7 green, 2 blue, 9 red
54Game 54: 18 green; 2 red, 6 green; 6 red, 9 green, 1 blue; 1 blue, 4 green, 5 red; 3 red; 3 green, 4 red
55Game 55: 5 red, 2 blue, 5 green; 10 blue, 4 green, 8 red; 15 green, 9 blue, 9 red; 1 green, 9 blue
56Game 56: 8 green, 11 blue, 1 red; 1 blue, 1 red, 4 green; 8 blue
57Game 57: 5 green, 4 blue; 1 blue, 4 green; 1 red, 1 green, 3 blue; 1 red, 2 blue, 6 green
58Game 58: 8 green, 10 red, 10 blue; 8 blue, 6 green, 12 red; 9 green, 11 blue, 1 red; 12 red, 5 green, 11 blue; 7 red, 2 green, 8 blue
59Game 59: 10 red, 1 green, 3 blue; 16 red, 1 green, 4 blue; 9 red, 2 blue; 1 red
60Game 60: 11 blue, 13 green, 10 red; 15 red, 12 blue; 3 blue, 9 green, 6 red; 12 blue, 5 green
61Game 61: 2 blue, 7 red; 3 green, 14 blue, 11 red; 7 red, 10 blue; 6 blue, 3 green, 4 red; 10 blue
62Game 62: 1 blue, 7 green; 6 red, 12 green, 1 blue; 8 red
63Game 63: 1 blue, 3 green, 1 red; 8 green, 10 red, 1 blue; 8 green, 11 red; 1 blue, 11 green, 5 red; 8 green, 11 red, 2 blue; 2 blue, 10 red, 6 green
64Game 64: 17 green, 2 blue; 12 blue, 8 green; 11 green, 3 red, 4 blue; 5 red, 9 green, 14 blue
65Game 65: 7 blue, 12 green, 5 red; 13 green, 5 blue, 4 red; 4 blue, 8 green, 1 red; 5 red, 10 green, 10 blue; 5 red, 5 blue, 15 green; 4 red, 9 green, 10 blue
66Game 66: 8 green, 2 red; 8 red, 4 green; 5 red, 2 blue, 7 green
67Game 67: 10 green, 7 blue, 2 red; 15 blue, 1 green, 9 red; 2 red, 7 green, 18 blue; 3 green, 5 blue, 8 red; 10 green, 11 blue, 1 red; 10 green, 4 red, 17 blue
68Game 68: 13 green, 10 blue, 7 red; 1 red, 15 green, 7 blue; 17 green, 14 red, 3 blue; 6 green, 8 blue, 6 red; 4 red, 3 blue, 5 green
69Game 69: 1 red, 6 green, 3 blue; 3 red, 4 blue, 6 green; 2 blue, 2 red, 1 green; 6 blue, 9 green, 2 red; 5 green, 6 blue
70Game 70: 1 green, 1 red, 3 blue; 2 green, 4 blue, 8 red; 5 red, 2 green, 3 blue; 3 green, 1 red, 3 blue; 3 green, 4 blue
71Game 71: 11 blue, 13 green; 1 red, 11 green, 3 blue; 6 blue, 14 green, 1 red; 5 blue, 17 green
72Game 72: 3 blue, 10 green, 4 red; 2 green, 6 red, 13 blue; 1 green, 1 blue, 6 red; 5 red, 1 blue, 1 green; 2 green, 5 red, 5 blue; 9 blue, 10 green, 6 red
73Game 73: 6 red, 4 green, 1 blue; 1 blue, 5 red, 3 green; 2 red, 11 green, 3 blue
74Game 74: 13 green, 2 red, 2 blue; 5 blue, 6 green; 12 green, 3 red, 4 blue; 2 green
75Game 75: 9 red, 10 blue, 6 green; 12 blue, 9 red; 11 red, 6 green; 12 blue, 2 red, 1 green
76Game 76: 1 green, 2 blue, 5 red; 2 blue, 1 green; 1 blue, 2 green, 1 red; 2 blue, 1 red; 3 green, 3 red
77Game 77: 5 green, 12 blue, 3 red; 11 blue, 9 green, 13 red; 8 blue, 13 green, 13 red
78Game 78: 2 red, 3 blue, 1 green; 1 green, 19 blue, 1 red; 7 blue, 2 green, 2 red
79Game 79: 5 red, 1 blue, 4 green; 1 blue, 9 green, 10 red; 13 red, 1 green; 1 blue, 1 red, 5 green
80Game 80: 13 green, 2 blue; 1 red, 4 blue, 13 green; 5 red, 7 green, 4 blue
81Game 81: 3 red, 4 blue, 12 green; 16 green, 5 red, 1 blue; 4 blue, 2 red, 2 green; 4 blue, 5 red, 13 green; 8 red, 4 blue, 13 green; 16 green, 3 red
82Game 82: 6 red, 3 green, 2 blue; 1 green, 6 red, 2 blue; 3 blue, 8 green, 9 red
83Game 83: 3 green, 3 red, 1 blue; 3 blue, 4 green, 3 red; 3 blue, 4 green, 1 red; 2 red, 8 green, 2 blue
84Game 84: 5 red, 6 blue, 3 green; 1 blue, 2 green; 3 green, 2 blue, 2 red; 1 red, 3 green, 6 blue; 12 red, 2 green; 4 blue, 2 green, 4 red
85Game 85: 11 green, 4 blue, 9 red; 13 red, 1 blue, 11 green; 7 green, 8 blue, 7 red; 1 red, 4 blue
86Game 86: 3 blue, 19 green, 7 red; 19 green, 1 red, 1 blue; 9 green, 2 red; 7 red, 6 green, 1 blue
87Game 87: 1 blue, 1 green, 4 red; 1 green, 6 red; 6 red, 2 blue; 8 red, 3 blue
88Game 88: 9 red, 6 blue; 4 red, 1 blue, 2 green; 1 green, 10 blue, 6 red; 2 blue, 1 green, 10 red; 7 red, 9 blue
89Game 89: 3 blue, 15 green, 1 red; 1 red, 13 green, 3 blue; 4 blue, 14 green, 4 red; 10 green, 1 blue
90Game 90: 1 red, 13 green; 3 green, 1 red, 5 blue; 5 blue, 6 green; 14 green, 4 blue; 3 blue, 10 green; 13 green, 1 red
91Game 91: 13 green, 11 red, 4 blue; 14 red, 1 green, 10 blue; 4 red, 2 green, 3 blue
92Game 92: 2 red, 3 blue, 6 green; 2 red, 2 blue, 8 green; 14 blue, 1 red, 1 green
93Game 93: 15 blue, 2 red, 13 green; 8 green, 2 red, 8 blue; 6 blue, 1 red, 2 green
94Game 94: 5 red, 4 green, 9 blue; 1 red, 5 green, 4 blue; 11 blue, 4 green, 2 red
95Game 95: 9 blue, 3 green; 2 green, 12 blue; 10 green, 3 blue; 1 green, 1 red, 10 blue
96Game 96: 4 blue, 2 red; 3 green, 10 blue, 7 red; 2 blue, 7 green, 1 red; 13 blue, 9 green; 10 blue, 4 green, 1 red
97Game 97: 6 red, 4 green; 1 blue, 13 red; 3 green, 13 red
98Game 98: 1 red, 13 blue, 1 green; 7 green, 5 blue, 3 red; 15 blue, 6 green; 4 blue, 5 green; 13 blue, 2 green, 1 red; 4 blue, 3 red, 2 green
99Game 99: 1 red, 2 green; 2 red, 2 blue, 1 green; 3 green, 1 blue, 6 red; 3 red, 4 green; 5 red, 1 blue, 4 green; 1 blue, 2 red, 1 green
100Game 100: 9 green, 2 blue, 12 red; 2 blue, 14 red, 2 green; 14 red, 12 green
diff --git a/2023/03/3a.c b/2023/03/3a.c
new file mode 100644
index 0000000..13c8c8d
--- /dev/null
+++ b/2023/03/3a.c
@@ -0,0 +1,51 @@
1#include <stdbool.h>
2#include <stdio.h>
3#include <stdlib.h>
4#include <string.h>
5
6#define N 1000
7
8bool isnum(char c) { return c >= '0' && c <= '9'; }
9bool issymbol(char c) { return c != '.' && c != 0 && c != '\n' && !isnum(c); }
10
11int grab(char *buf) {
12 int x;
13
14 if (!isnum(*buf))
15 return 0;
16
17 while (isnum(*buf)) buf--;
18 buf++;
19 x = atoi(buf);
20 while (isnum(*buf)) *buf++ = '.';
21
22 return x;
23}
24
25int main() {
26 char line[N], prev[N];
27 bool l, c, r, ul, uc, ur;
28 int i, sum;
29
30 sum = 0;
31 memset(line, '.', N);
32 memset(prev, '.', N);
33 while (fgets(&line[1], N-1, stdin) != NULL) {
34 for (i = 1; line[i]; i++) {
35 l = issymbol(line[i-1]);
36 c = issymbol(line[i]);
37 r = issymbol(line[i+1]);
38 ul = issymbol(prev[i-1]);
39 uc = issymbol(prev[i]);
40 ur = issymbol(prev[i+1]);
41 if (l || r || ul || uc || ur)
42 sum += grab(&line[i]);
43 if (l || c || r)
44 sum += grab(&prev[i]);
45 }
46 memcpy(prev, line, N);
47 }
48
49 printf("%d\n", sum);
50 return 0;
51}
diff --git a/2023/03/3b.c b/2023/03/3b.c
new file mode 100644
index 0000000..27b5b7c
--- /dev/null
+++ b/2023/03/3b.c
@@ -0,0 +1,66 @@
1#include <stdbool.h>
2#include <stdio.h>
3#include <stdlib.h>
4#include <string.h>
5
6#define N 1000
7
8bool isnum(char c) { return c >= '0' && c <= '9'; }
9
10int grab(char *buf) {
11 int x;
12
13 if (!isnum(*buf))
14 return 0;
15
16 while (isnum(*buf)) buf--;
17 buf++;
18 x = atoi(buf);
19 while (isnum(*buf)) *buf++ = '.';
20
21 return x;
22}
23
24void push(int *j, int *g, char *buf) {
25 g[*j] = grab(buf);
26 if (g[*j] > 0) (*j)++;
27}
28
29int main() {
30 char *cont, line[N], prev[N], next[N], backup[3][N];
31 int i, sum, j, g[9];
32
33 sum = 0;
34 memset(line, '.', N);
35 memset(prev, '.', N);
36 memset(next, '.', N);
37 cont = fgets(&next[1], N-1, stdin);
38 while (cont != NULL) {
39 memcpy(line, next, N);
40 cont = fgets(&next[1], N-1, stdin);
41 for (i = 1; line[i]; i++) {
42 if (line[i] == '*') {
43 memcpy(backup[0], prev, N);
44 memcpy(backup[1], line, N);
45 memcpy(backup[2], next, N);
46 j = 0;
47 push(&j, g, &prev[i-1]);
48 push(&j, g, &prev[i]);
49 push(&j, g, &prev[i+1]);
50 push(&j, g, &line[i-1]);
51 push(&j, g, &line[i+1]);
52 push(&j, g, &next[i-1]);
53 push(&j, g, &next[i]);
54 push(&j, g, &next[i+1]);
55 if (j == 2) sum += g[0] * g[1];
56 memcpy(prev, backup[0], N);
57 memcpy(line, backup[1], N);
58 memcpy(next, backup[2], N);
59 }
60 }
61 memcpy(prev, line, N);
62 }
63
64 printf("%d\n", sum);
65 return 0;
66}
diff --git a/2023/03/extra.txt b/2023/03/extra.txt
new file mode 100644
index 0000000..9cddc62
--- /dev/null
+++ b/2023/03/extra.txt
@@ -0,0 +1,3 @@
11*.
2.*.
31..
diff --git a/2023/03/in.txt b/2023/03/in.txt
new file mode 100644
index 0000000..7b6cf4d
--- /dev/null
+++ b/2023/03/in.txt
@@ -0,0 +1,140 @@
1.........398.............551.....................452..................712.996.................646.40...1.....875..958.553...................
2..................................661..-844......*.../781...835..#163....*.......698.239.........*.....*.............*............*57.......
3.....................&...............*......+..139..................................*.........-.......282......................301..........
4........518..........918..-....472..172....776......207............38........................860..............274..945.....162..............
5........@..........#.....845..*........................*.............*....896...+.....153................@......*...*.......#.........441...
6..................740.21.....303...744.........190......173.395...729...-....&..925....@..5..............172...566..193...........#.........
7...598...967*.........*...........*.......164.=......91......*...........192................292...........................414=.215..........
8.............238.......661.....-.149.....&..........*........299...@644.................919*......*661..760....@.110*.......................
9.............................742.............$...125...+......................696..............523.......@..166......496..............#462..
10.588-.........#867.........................945.......457..505........%875......./.....+.........................965.........190.671.........
11........24.........278........934....*569................*..........................180............................=...........*............
12....988...*....151..@.........@............&...........242.................409................807..900#...417.886...........................
13...........330..#.......................729........&.........105......482..........679.........#...........*....$......752...749............
14...=............................../.............995...........*..689.....*.....-....#..............*604..696.......489..........+...193.&336
15..287.........17..737.......468....869.+.....................673...*......480...860........23...435............-..%.........................
16..............*............./..........552.............529.......271.+864..............848..#................771.......216........588...@...
17...........262.................185.........688....848.....*56...............%....$.......*...............362..............-..............250
18..507..............812.........*......................112.....556........754......841....959.........2..*...........248......232.527........
19....$....................478.627....175..........960.....+.....*......................#........790...=........503.....*.....$......*...%....
20..........................%........*........694.....*.......930...451+....248.......20..........*...........$...$..285..203......904..184...
21........531......30..969........435..772.........234..542.................*...............706....351.......571..........*...................
22.........#.......*...................*....&.8.........*.......313....+...807..398...........=.........540.........+....867............#.....
23............34...231.......934*....802..120........965........*.....424......*.........@.................@......974...........53......619...
24.....504....*........640.......127.............................671......316...538....151.......498........................914*..............
25......./.562........*...............504.....................................*.................+.....=..........835...................500....
26..787.........*122..149...$.................*....227.335....863*396......941.230.................847...215.......%..49..982..73.....*.......
27...-.......843..........240...932....@...352.830....*....*........................950........11...........*..........*........+.....819.....
28......354...........-...............66............&...501...................*.........39......*............513.651...482....................
29.....................160.........................437......&..797....551..337.383..735...*...546.............................................
30.......=........184......./.......67........476.........336....#......=...........*....426..........972..../960.....981......684*...........
312...473....#....%......449........*......=.....%...........................877..890........+..../...................................834.....
32...........498..............926..887......147..................%.260...+..................965...939..../................894.....659*........
33....163...........*237................409......858...........184.*....33.......705...993*.............139..791....955.....@.639......668.455
34.......*.................128.....................-................677...........&........899...@....%......*.........*.........$.......*....
35613&.208..975......./837.-........772.554...........635#...927...........392....................761.300.....42.......68.................969.
36................389......................*.@...851.........*....344........*...90.....@231......................+...................182.....
37...-.286.296...&.......424...313......656..758....*.../..294...............722.#.......................689.......853.................%......
38546..+......*.................*...698...........664..190.....637.10...122........-758.........&753.827*.................#..@.....777....177.
39........490....$.............961.*....31..@................&..+..@.........781.........................................690.285.....*........
40...........*...421................720.*..133.=............298.......933.....&..=......805.461....531.......888.....................965......
41.....923*..310........219.302.................107.....457.....186#.*............691......*........*....89..*.....*..%695.946$...............
42........................#..........867.87...........................9......................623.432....*....678.819................+670......
43....673.......#809.68................*..$...127......422.......954........516*291.685..661..........163........................=............
44.....*....................648.....325........-......*....308..*....................-.....=.709&.366.........................219.............
45..132...439......$.......*.............134...........188.....134...257*38.300.77=...............................707.....................357.
46...........*..298........602..............%......940.......................*...........986@......438........710*...........594.....919......
47.....667..77................................305..*.......................941.....126...............*...............637......*..549*....116..
48......................876+..#516...........*....467.....981.....................*.......726.737.....434..149......%......776................
49.......@474..%..............................506........*........58............92.../37...*.....*633........+.........605.....239*72.........
50...148.......262......729....430.....................748...&...*...995...925........................*................*......................
51......=............................*....655..............254.566..*.....................*628.-356..769.............805......................
52.........229.................48@.251......*.......................733...521..........593..................148..............59%..632.........
53............*....69......................758........477........-......+......654.............................*173....................543....
54..........624.....#..480......@.................959....*......124..980...233*..........278........799/.260*........130......../741......*...
55............................373...=........265........436..%......................552.....*.........................*..423...............733
56316..93.............205............606....................994.316........824.#654...*..860.........947.956..470...550.+.............*682....
57......%....*487............185.........955..-...................$.364....-.........874......#865......*....../...................756........
58...........................*....512....*.....702.852....595.........*........942.......357........620....=......814..107....................
59....#275..650....204..840.......%......57.........*....#...........71.540/.........616....&.......*......899....=.....%....627.....435...849
60.....................*....../.....483.............363........................832..=............&..855.............-..........%.....@........
61..697..+..........661......36......-...*........%.........644...49......245..@...............434...............237...=................=.....
62.......398....773.............*131...248.300....627..............*.......=..........261....................422........621....780&..599......
63...............*......855@.517.....&......*..............592.721.714...........195.....%...........701.612..................................
64....855......943................182.......726..................*........274.6.....%.......799.........*........584..............972.........
65.....*............92.....637....................648............781.......*...-.............*............513...........542*.......@..........
66..249....834........+.........190....................216...........123...263.........................72.........413.......829...............
67............*...773.....*510....*.211=.................%...988......................488-.......214...#...........*....................315...
68.........+..508...&..144.....873........403....484../........@..606.533........918=...............*...........421.............230.528.......
69......650................34................-...%...74..........*......-..............*119.......25..749.....%............828.*....@....68...
70379.............&275..../.....768*805...................112.....237.......*855.....20........................773.....987.*....814.....*.....
71.........$.929.......&....................436..669.........@...........363...................278.....229.........402*................646....
72......897...*.......528............662@..........$.....#..........789.......&....436..282.............*.....................863.=...........
73..........311...........902..819....................118..679..710.......$...314...*......*181..345.530..$..388*......791....*...347.....#...
74.279................74*....$.................237...........#.*.........900......604............&.......455.....485.....*.548.........477....
75............928........734..............440.@.........................................989..........902...............431.................896
76........279........949.....659.....952....*....797.795...$...............4*..............*........*..........960*568........491.....236.....
77..........@.549.....*........$.670*.....254....*...*......184......&42.....129..........121.....486..................*.........&............
78...486......*.....846.......................757..................%.............................................699..829.....................
79....*..88..321...........4......535....594.......=...........=.511..167....-......*............853...............*.......87...........763...
80.303..$...................=.....*.........#..265..697.....462.......&...360....163.528.........*......774...127...770....@........891./.....
81........31......731..+278......667.....#........=...........................................328...591..*............................*...31..
82...................*.......927........420.650.......21.......918.......464.685.451..@................*..317....471*47.384...217..83.15..*...
83....234..219....303..700........#348........#.....%...@.......=...+..................403......419...82................&..........&.......798
84....*....*..........+..................738......857.....203*.....746...........................*..................*.........#...............
85...768.527.....77..................%........................623......393............643.......832........647+..773.421...402...29.370.......
86.................*175.......352.564.....237...*.+681.............=...*......&37...........832......../..........................*../..%.....
87......187..............218...................46......817.......893.139.............*..253*........436............../....619*.772.....532....
88.....*........165...+..................910......647.$..................@.511....143...................784..416...373........................
89..442...834...*....566....+876...34-..+........*...........507.......348.*............*..................*....%........590..................
90.........*..157.....................................344.......@..........988.......745.867............526..+...........*.....109.331.254-...
91.....456.............%..375*...........*.......199.+.........................846............=...............656.................*...........
92....*.......266...893.......441.....686.2...............455*748.............*..../980........726..................384................76.....
93....59......&..............................389..../.............427......645...............-......551..167..............130........*...*....
94.................=......10.....642........*.......536.29*........=...566........72*904..935...155*.......+...$360...703..*..252..870...739..
95.......252.......158......*......*.........695...........949............*............................................*.........*............
96.......*................830.......758...........................917...377......*519..622*439..../802..........665....481....231.............
97.......823..563.....................................167........*............334...................................................../.......
98..............*.................&.418/.&49......209*.......495..783..............185...%.............418/..........470.............289..831.
99.............60.559..........599............247......@.......$......170....884..*.......387..........................*......................
100.................*......*61.......................954...........216..*....*............................@.331....695.958.891*............351.
101......$...396........947.......234*....................994.981.......85....819.....435......./......594.....-...../.........592.............
102......605..*........................16....$.....907%....*..*...629.............958*....950.321...................................671........
103..........867.....821........987.....*...928.........275..687..*...904...300............*........864...................960.111.....*.148.19.
104..494.............*......410...#...517..........700...........714...*................988...........*.............445..*....*....473....-....
105.....*138............221*..............970......#....717...........26......$.....749..........253..330....214....*.........293..............
106.................%..........636..#........-.............*............./....180......&.532........*........*...403...........................
107............*..684......242...*...653..............374...822..........575...............*.....133...#...440...............322..780..........
108.........685..............*..658.......224...-.................%..........*118.........322........615.......981..........................806
109.337..............856..843............*....816....448..83=...824.839...568........989.........562......594.....*..........*21...833.........
110.....708...........*.......355.........437.......*..................*......*........-.944....../..185.....*...286..723..........+....552.652
111........-..73.......230....*......................927.%137.......754....490....782.......-...........*945.682......$...+............*.......
112............*.616=......*.595.......*...842..........................84.......*..................+....................80.........383..1.....
113..........357.........492...........771........68..........927*363..*.......262......69*224.......882.785..&313.............................
114...............................%391..............*....865............947.........583........*120........*..............449..../.../557......
115.........................634........8.....610..240.......*......508..............*.......875............297...717.941..*.......92...........
116.....874*180...&107.100......................*............453.......561....738.758..168.......................*....*....835........260..97..
117.650.....................230..................980.....................*....=...........*...605..396..........753..642..........537..........
118...*...........149.......&..........797.219............./743...................=.......333..*......*....882.................40*.............
119....103...348....%...............86..$.....*..99....................&...........25...........749..950..*.........................&..........
120.........@..............719.175.........652.....*............/......565.191.575.........................583........#./...........223........
121...........................*................295..358.806..520.............*..-...................%....+.....118..632.709...901...........790
122..562....221........735...........338..........*......+..........980....315............682....630.....762......*............................
123...............761....*......408.%.......971..246.................*................307......................949...............553...........
124.................*....194...*...............+...../.....$....$...301..............*.....857..........752#..........680.188..................
125..............551..........689.......*29...........345.75...898..................625....-......#732................&..../....876........576.
126..................................487......326*71......................143..................%........#.=.......................=............
127..42*....563......./..........976.......................496..233..224.....................270.....540..114....972.208....*...*.......950....
128.....667........915...283.....*........161*.......*764.........-....#.178...634+......569....................+........945...340.$.....*.....
129.........550............*.....973.694......209.228.....................*.................#..+..179@....832.......@..............67.448......
130............*...337..284..656......*..433............126.............860...857....*........411.........@.....=...977.....................726
131...815...896.....*.......*......993.....*.....309.....-..........735........./...985...*.....................797......842........$93........
132.....*.........424.......348........94...82.....*..........#25..*.....46*380...#......618.902.142.......972......$906...-....%96........482.
133.....12.............................../.......340...46.756.....327..=.........897...........@....*435...*..........................*546.....
134.................................185.....654........*.....*........772..+959............................581...13...918..388/....895.........
135.90............915.......758.664*........../.......885...564../160................830.869...........474.......*.......#.....................
136...*.....510....@........$..........$..............................813..795..........*....210........%......438..........786.......778.77...
137....984.....%...............+..712...83..*....130..................+....*...545.............*......+.............../.727./....826......*....
138................490......519../...........16....%...42.822..486......214..../...............985.480..............798....................249.
139........369*........317*.........632...#.............=...*.$........................-703.............+341............88.....*659...@........
140............595.........566.............847............456...................................182.........................791........533.....
diff --git a/2023/04/4a.c b/2023/04/4a.c
new file mode 100644
index 0000000..a1f6a9e
--- /dev/null
+++ b/2023/04/4a.c
@@ -0,0 +1,43 @@
1#include <stdbool.h>
2#include <stdio.h>
3#include <stdlib.h>
4#include <string.h>
5
6#define N 1000
7
8bool isnum(char c) { return c >= '0' && c <= '9'; }
9
10int main() {
11 char *buf, line[N];
12 int i, j, x, sum, nw, nr, w[100], r[100];
13
14 sum = 0;
15 while ((buf = fgets(line, N, stdin)) != NULL) {
16 nr = nw = 0;
17 while (*buf != ':') buf++;
18 while (*buf != '|') {
19 buf++;
20 if (!isnum(*buf)) continue;
21 w[nw++] = atoi(buf);
22 while (isnum(*buf)) buf++;
23 }
24 while (*buf != '\n') {
25 buf++;
26 if (!isnum(*buf)) continue;
27 r[nr++] = atoi(buf);
28 while (isnum(*buf)) buf++;
29 }
30 for (x = 0, i = 0; i < nr; i++) {
31 for (j = 0; j < nw; j++) {
32 if (r[i] == w[j]) {
33 x++;
34 break;
35 }
36 }
37 }
38 sum += 1 << (x-1);
39 }
40
41 printf("%d\n", sum);
42 return 0;
43}
diff --git a/2023/04/4b.c b/2023/04/4b.c
new file mode 100644
index 0000000..c122f8b
--- /dev/null
+++ b/2023/04/4b.c
@@ -0,0 +1,45 @@
1#include <stdbool.h>
2#include <stdio.h>
3#include <stdlib.h>
4#include <string.h>
5
6#define N 1000
7
8bool isnum(char c) { return c >= '0' && c <= '9'; }
9
10int main() {
11 char *buf, line[N];
12 int c, i, j, x, sum, nw, nr, w[100], r[100], sc[N];
13
14 sum = c = 0;
15 memset(sc, 0, N * sizeof(int));
16 while ((buf = fgets(line, N, stdin)) != NULL) {
17 nr = nw = 0;
18 sc[++c]++;
19 while (*buf != ':') buf++;
20 while (*buf != '|') {
21 buf++;
22 if (!isnum(*buf)) continue;
23 w[nw++] = atoi(buf);
24 while (isnum(*buf)) buf++;
25 }
26 while (*buf != '\n') {
27 buf++;
28 if (!isnum(*buf)) continue;
29 r[nr++] = atoi(buf);
30 while (isnum(*buf)) buf++;
31 }
32 for (x = 0, i = 0; i < nr; i++) {
33 for (j = 0; j < nw; j++) {
34 if (r[i] == w[j]) {
35 sc[(++x) + c] += sc[c];
36 break;
37 }
38 }
39 }
40 sum += sc[c];
41 }
42
43 printf("%d\n", sum);
44 return 0;
45}
diff --git a/2023/04/in.txt b/2023/04/in.txt
new file mode 100644
index 0000000..fa75953
--- /dev/null
+++ b/2023/04/in.txt
@@ -0,0 +1,212 @@
1Card 1: 69 12 75 19 83 56 73 53 52 91 | 83 63 56 30 77 94 12 81 42 69 52 70 6 97 20 43 61 22 75 19 73 32 74 53 91
2Card 2: 23 55 24 84 90 10 87 73 74 45 | 20 66 51 78 9 76 86 96 72 70 84 35 74 90 56 55 23 38 58 45 87 2 80 8 10
3Card 3: 70 32 38 23 86 54 26 16 9 1 | 67 50 39 70 59 77 63 30 3 45 23 16 72 1 86 7 9 32 26 68 38 54 65 34 64
4Card 4: 33 50 19 63 92 1 58 34 84 8 | 35 61 49 86 40 20 22 71 84 51 64 62 33 85 45 3 54 83 1 29 82 19 92 8 11
5Card 5: 74 9 54 83 22 15 81 64 47 70 | 21 74 59 85 17 36 5 79 87 7 13 23 47 45 96 29 68 65 3 22 4 34 46 90 40
6Card 6: 29 55 56 13 58 71 36 30 15 11 | 99 17 90 29 22 68 61 55 11 13 37 94 30 60 56 92 44 71 42 31 8 26 14 51 35
7Card 7: 92 70 97 62 33 45 85 59 82 73 | 92 35 11 49 88 14 85 42 40 41 69 51 82 73 5 87 60 62 33 97 70 16 59 13 45
8Card 8: 5 22 64 46 32 90 57 83 37 38 | 87 47 91 35 39 64 73 83 71 22 10 45 1 76 37 13 20 66 67 21 86 92 38 12 52
9Card 9: 7 49 62 79 37 91 3 58 74 19 | 17 7 58 2 53 95 52 62 83 41 42 36 4 94 64 97 20 32 3 73 81 22 57 37 9
10Card 10: 84 33 81 45 99 96 76 97 40 2 | 81 26 11 34 83 25 45 76 2 85 33 64 57 99 93 75 96 8 84 44 79 87 97 40 70
11Card 11: 37 41 20 56 16 42 43 11 55 4 | 4 16 71 31 45 53 73 55 6 83 69 2 94 18 58 88 20 41 46 56 11 19 37 43 22
12Card 12: 9 81 46 38 55 60 39 43 42 93 | 94 39 38 21 60 97 24 33 34 59 82 55 43 12 88 81 46 9 83 93 22 30 41 98 42
13Card 13: 15 89 14 33 57 55 75 53 80 34 | 59 53 36 57 11 80 75 2 73 15 56 89 33 97 48 77 74 41 14 28 31 35 95 55 34
14Card 14: 85 50 16 90 98 55 13 71 20 9 | 16 44 4 98 45 50 77 64 55 5 78 90 54 95 48 12 8 28 94 83 9 27 88 85 13
15Card 15: 41 85 80 55 27 32 26 68 57 77 | 78 39 9 22 31 86 48 18 16 98 15 51 44 21 28 54 87 82 13 36 47 12 55 75 30
16Card 16: 30 86 48 11 24 68 95 82 44 45 | 68 91 65 86 42 44 82 56 58 18 77 20 95 54 21 90 22 14 24 33 6 63 40 36 28
17Card 17: 81 84 89 44 27 49 36 8 70 22 | 75 47 8 2 36 10 34 44 71 48 31 82 70 42 92 93 81 72 94 22 51 91 73 67 78
18Card 18: 95 62 99 37 38 52 88 92 79 54 | 65 87 72 84 10 1 24 94 59 16 15 64 49 92 78 17 28 69 55 67 6 91 96 58 60
19Card 19: 89 92 19 42 96 33 44 1 76 36 | 77 11 55 81 43 20 90 14 54 52 34 10 4 74 12 99 83 17 51 5 21 56 91 37 61
20Card 20: 7 4 51 9 16 56 3 81 85 21 | 31 78 15 17 35 55 83 33 48 12 60 77 92 65 30 72 43 39 64 62 63 1 14 58 5
21Card 21: 95 47 9 72 82 48 84 37 23 65 | 89 61 26 7 99 77 11 50 71 12 55 54 31 49 81 32 33 74 52 97 79 3 91 76 37
22Card 22: 58 37 93 89 50 61 52 95 36 3 | 66 71 42 29 82 73 9 72 54 19 46 24 23 59 64 5 41 48 55 53 25 62 74 34 78
23Card 23: 92 82 9 63 64 65 48 93 19 7 | 35 24 41 95 87 67 10 91 57 40 80 17 47 98 77 79 25 1 32 53 11 3 14 42 73
24Card 24: 62 60 83 65 7 43 18 53 91 4 | 20 34 93 41 36 25 44 97 30 5 32 42 75 71 84 23 76 89 33 26 65 52 78 81 70
25Card 25: 90 68 7 51 3 89 62 67 18 23 | 74 6 13 70 15 80 59 32 35 42 44 50 49 73 63 4 82 27 68 31 92 29 98 11 85
26Card 26: 22 28 52 16 49 54 55 51 89 20 | 99 51 82 24 18 65 55 72 85 36 86 95 71 61 77 38 12 4 96 89 7 97 40 66 91
27Card 27: 64 40 71 56 94 62 60 72 22 55 | 3 27 22 64 74 31 55 70 78 40 94 13 42 93 9 28 45 98 57 33 1 16 21 92 24
28Card 28: 59 21 57 48 64 98 34 84 95 52 | 14 65 50 8 74 29 62 64 59 60 88 23 7 36 12 52 34 58 97 35 70 86 79 73 31
29Card 29: 81 89 72 63 67 2 97 19 58 70 | 25 72 10 81 70 58 1 37 62 67 96 21 35 26 20 97 14 39 74 29 12 57 18 91 42
30Card 30: 74 61 1 98 5 68 20 47 81 78 | 76 47 32 58 16 19 41 17 18 82 70 68 27 7 55 1 24 11 59 94 30 90 85 26 53
31Card 31: 37 24 52 75 26 62 71 8 59 92 | 39 58 75 3 9 86 84 91 88 42 14 83 18 52 50 37 63 24 5 71 23 62 94 61 92
32Card 32: 66 87 81 58 95 41 47 76 20 12 | 83 96 14 38 27 35 68 13 91 84 48 99 29 23 52 31 9 17 79 89 3 51 81 6 56
33Card 33: 78 15 62 95 50 63 29 61 12 25 | 86 2 50 27 46 48 74 55 36 81 54 42 47 18 98 91 4 76 33 21 49 26 56 35 68
34Card 34: 15 2 1 97 6 42 96 67 17 86 | 28 45 73 8 56 52 53 97 5 35 86 3 54 4 32 88 23 60 1 47 95 74 10 49 39
35Card 35: 89 99 6 27 26 8 68 57 36 97 | 12 36 35 28 38 86 8 89 46 52 4 39 93 63 20 91 50 11 27 83 74 92 67 79 18
36Card 36: 49 27 7 26 25 78 74 32 59 55 | 83 15 44 67 85 28 41 42 58 3 16 51 34 37 66 5 9 82 73 96 27 65 33 29 92
37Card 37: 68 79 22 61 9 78 29 17 1 83 | 76 94 25 60 90 1 49 88 11 72 37 45 93 97 53 77 27 63 31 74 46 95 40 26 12
38Card 38: 44 96 29 49 85 92 98 40 83 80 | 11 58 2 79 32 48 56 4 24 76 66 94 1 17 47 63 38 9 75 82 99 53 91 33 88
39Card 39: 53 13 83 11 12 39 30 77 37 87 | 51 62 47 76 93 34 98 45 6 95 89 41 21 40 88 19 26 43 99 14 67 29 73 59 42
40Card 40: 23 63 92 24 4 35 93 36 73 88 | 74 42 70 10 4 50 88 92 73 41 76 45 11 36 23 35 24 78 18 59 8 63 72 83 93
41Card 41: 12 94 49 20 27 52 98 66 99 92 | 20 11 63 14 77 39 38 12 49 94 92 36 55 93 74 30 96 95 66 51 99 27 86 52 90
42Card 42: 30 27 40 59 75 19 90 81 61 31 | 95 81 45 27 59 19 38 18 30 91 85 89 75 82 4 77 34 61 46 98 40 31 86 90 21
43Card 43: 80 31 91 49 76 14 72 62 26 51 | 13 4 52 90 31 11 76 34 58 91 49 80 29 55 14 98 22 51 72 83 26 57 92 62 85
44Card 44: 24 43 54 74 83 21 57 8 19 84 | 57 19 88 15 24 31 74 12 43 95 83 21 10 67 54 76 8 59 52 9 71 92 25 84 55
45Card 45: 80 50 79 31 57 43 19 36 61 14 | 94 76 21 26 67 80 72 39 14 82 34 85 18 43 10 65 20 64 23 47 89 69 55 17 98
46Card 46: 52 26 71 96 24 93 64 38 80 29 | 52 36 72 62 64 81 86 16 63 29 15 8 23 46 38 31 33 73 88 93 24 74 21 96 26
47Card 47: 31 96 28 34 83 59 91 19 40 62 | 21 28 97 6 96 54 66 33 19 93 74 91 25 80 67 31 34 17 27 37 60 62 92 4 98
48Card 48: 51 27 11 76 40 10 80 12 9 37 | 78 4 35 30 14 29 96 51 20 56 18 22 93 76 94 46 74 26 75 28 3 59 39 9 31
49Card 49: 41 77 24 13 3 6 14 1 51 9 | 14 93 10 17 61 40 73 6 41 95 13 62 71 98 56 29 75 24 51 26 88 7 85 84 94
50Card 50: 59 38 20 44 13 84 74 98 31 15 | 40 10 8 25 20 3 38 80 32 77 26 29 61 31 1 35 98 9 63 62 84 4 88 39 73
51Card 51: 24 63 74 81 52 1 65 22 13 85 | 95 58 64 76 73 90 72 28 91 26 39 27 83 37 77 70 79 55 78 43 42 69 11 88 86
52Card 52: 42 46 68 26 43 2 38 23 81 67 | 71 88 3 29 63 14 81 64 9 12 13 76 32 62 53 90 99 37 80 61 87 50 75 79 17
53Card 53: 1 26 8 25 54 65 53 56 99 73 | 42 46 51 32 9 55 63 91 66 69 33 34 79 11 67 27 92 21 83 77 35 38 98 74 59
54Card 54: 75 47 66 55 72 60 38 53 62 21 | 71 40 89 51 75 31 93 45 53 13 92 11 98 68 44 87 74 61 8 39 30 63 1 7 76
55Card 55: 54 71 4 44 61 59 64 50 73 47 | 20 7 31 66 69 37 30 42 86 43 83 34 70 78 56 15 3 50 41 67 88 17 46 81 96
56Card 56: 90 32 94 66 80 55 96 47 11 51 | 46 69 89 30 50 65 16 83 17 44 88 70 12 91 74 67 86 63 15 29 26 60 57 14 23
57Card 57: 87 98 51 22 7 28 33 12 17 70 | 4 47 38 40 95 74 97 58 53 43 21 54 35 27 46 85 16 10 14 94 3 36 66 86 5
58Card 58: 88 63 18 90 57 37 62 58 72 28 | 74 5 7 24 73 85 3 77 22 19 32 44 25 69 93 86 98 46 56 26 34 50 79 23 55
59Card 59: 40 77 65 18 14 43 94 95 45 10 | 39 28 14 2 95 70 44 45 34 83 18 65 94 74 40 33 73 78 87 72 64 77 10 43 50
60Card 60: 34 55 62 11 10 76 53 25 7 35 | 88 79 26 19 38 90 78 53 46 52 17 15 83 56 69 75 99 62 10 35 6 36 7 45 28
61Card 61: 36 39 79 7 83 22 10 74 86 85 | 74 72 51 10 55 84 22 36 54 71 39 34 83 57 75 60 86 94 53 85 37 97 9 65 42
62Card 62: 91 20 88 6 48 82 11 10 95 40 | 6 88 60 44 89 18 81 68 58 71 76 20 85 40 11 59 10 92 82 66 91 54 48 95 30
63Card 63: 44 80 81 49 32 24 40 41 77 94 | 56 54 99 69 58 10 49 74 11 21 68 16 87 98 1 84 83 81 78 41 76 60 63 13 22
64Card 64: 81 32 24 86 14 28 10 21 92 70 | 74 87 58 24 96 12 92 14 33 68 76 99 85 70 69 19 13 3 94 21 48 97 32 1 20
65Card 65: 18 20 67 41 90 98 61 52 11 42 | 89 90 34 87 57 88 6 62 96 13 28 11 61 40 77 67 2 66 81 36 42 18 91 52 56
66Card 66: 26 28 58 35 42 73 29 23 77 95 | 84 98 34 95 15 63 36 92 48 28 35 83 39 93 16 6 23 81 59 42 52 62 57 22 70
67Card 67: 22 63 17 14 53 95 13 20 40 16 | 60 31 90 27 49 86 32 95 87 65 74 98 43 33 67 28 61 63 17 82 9 50 21 75 85
68Card 68: 93 69 87 27 83 7 73 81 88 14 | 81 97 83 73 87 1 10 55 88 41 14 26 56 63 44 71 27 7 64 69 37 11 42 93 61
69Card 69: 15 42 34 80 13 97 21 26 20 65 | 16 28 38 12 43 56 11 4 79 39 93 40 8 34 23 19 53 67 29 77 68 27 30 94 46
70Card 70: 18 7 31 15 28 1 78 41 58 48 | 42 56 25 1 92 97 84 63 26 95 12 50 53 48 14 78 13 28 22 37 71 77 91 41 38
71Card 71: 5 70 37 60 66 16 81 11 47 43 | 38 1 83 8 75 23 70 60 11 39 4 81 74 14 79 53 51 13 32 78 58 66 24 80 92
72Card 72: 40 51 21 14 88 48 31 20 39 76 | 5 19 68 18 92 35 77 32 86 84 37 42 28 13 78 71 75 98 87 29 94 16 30 67 89
73Card 73: 47 29 76 34 14 96 15 43 69 74 | 83 61 59 89 11 60 98 28 22 6 66 53 71 13 68 67 58 56 46 96 76 50 20 33 97
74Card 74: 96 21 62 93 84 51 60 98 28 35 | 21 8 57 98 63 93 78 12 56 43 24 33 11 26 54 4 3 47 17 96 66 64 81 85 16
75Card 75: 55 16 42 20 26 84 76 39 29 51 | 64 30 44 8 58 22 78 39 40 15 38 54 85 20 57 82 4 67 86 72 37 51 96 16 18
76Card 76: 46 64 22 56 81 45 68 54 14 24 | 36 29 56 79 48 60 46 12 23 24 7 94 93 30 50 43 83 68 62 63 90 70 72 74 39
77Card 77: 27 51 60 83 18 46 10 23 57 44 | 1 9 39 85 30 36 8 46 84 22 69 29 81 50 2 78 73 74 95 34 77 70 5 20 12
78Card 78: 84 85 50 14 34 1 25 10 54 15 | 17 39 78 70 29 33 49 32 55 76 50 93 72 73 12 56 24 61 90 8 69 58 98 86 96
79Card 79: 91 20 66 77 51 88 69 81 79 30 | 90 45 13 85 78 55 86 76 65 34 59 22 37 99 49 94 60 54 46 17 84 28 61 44 74
80Card 80: 4 9 37 77 89 91 29 31 62 57 | 69 6 94 11 58 93 26 3 55 43 53 32 86 20 65 21 68 81 56 15 1 72 27 71 23
81Card 81: 26 19 49 67 15 54 44 27 25 64 | 71 44 75 54 64 48 22 27 30 28 72 77 67 65 15 23 7 19 85 89 42 49 26 25 16
82Card 82: 78 13 96 18 46 74 53 16 73 33 | 37 96 16 58 35 13 83 73 61 4 69 92 65 11 75 53 23 49 12 22 79 33 78 74 98
83Card 83: 93 82 29 5 95 96 57 16 94 67 | 39 29 16 81 94 95 5 77 32 48 67 6 19 2 96 24 53 82 65 57 93 51 44 49 58
84Card 84: 7 48 34 66 4 31 74 99 33 96 | 96 58 25 36 28 24 30 35 42 20 13 97 60 85 1 53 52 26 48 70 14 99 75 8 5
85Card 85: 6 44 69 84 80 37 35 82 90 30 | 84 91 57 69 27 82 16 71 30 53 18 80 13 9 35 6 20 4 44 11 37 73 90 41 12
86Card 86: 4 75 26 24 90 91 69 77 29 60 | 5 72 80 64 4 73 29 13 90 37 3 26 59 77 7 84 60 81 69 46 99 24 35 75 91
87Card 87: 70 57 68 5 86 89 95 31 87 83 | 17 9 47 62 86 53 82 74 46 31 67 64 14 70 98 57 71 95 30 25 28 68 89 84 59
88Card 88: 51 56 93 33 14 71 37 77 2 58 | 2 8 18 63 35 7 99 93 39 73 25 77 58 83 14 51 27 56 33 40 24 37 80 71 72
89Card 89: 86 49 19 13 54 47 56 26 81 52 | 48 40 43 63 35 85 98 86 22 55 26 46 17 19 68 34 56 13 64 27 72 47 49 54 24
90Card 90: 60 81 8 65 64 32 28 87 18 6 | 2 64 62 81 3 28 38 9 96 8 45 40 42 83 65 32 87 6 60 4 50 36 33 68 18
91Card 91: 75 42 51 6 29 41 94 61 55 22 | 68 95 31 64 41 37 22 76 6 81 51 75 67 79 33 70 94 55 58 56 42 61 29 15 13
92Card 92: 34 7 3 23 79 80 98 40 88 48 | 90 88 94 61 31 59 23 47 81 85 86 48 63 35 73 52 79 70 20 1 97 28 51 75 42
93Card 93: 76 61 71 49 23 84 64 10 82 73 | 23 45 76 31 93 10 84 49 68 62 28 72 20 38 82 13 25 81 60 19 9 7 34 21 89
94Card 94: 76 15 19 25 37 72 78 80 62 57 | 13 19 98 73 48 37 92 68 44 93 90 72 21 60 76 80 23 57 25 20 15 78 89 62 51
95Card 95: 20 96 12 88 73 61 75 18 5 17 | 22 1 64 19 3 42 63 80 84 35 43 89 51 94 54 28 32 70 31 56 4 59 79 30 7
96Card 96: 97 67 10 32 57 41 94 26 74 43 | 67 32 18 55 93 61 21 29 69 83 39 92 58 23 41 59 87 30 50 25 10 94 52 71 43
97Card 97: 18 90 8 91 82 70 88 76 32 45 | 58 78 45 86 23 72 85 30 17 27 93 43 25 79 57 11 71 33 44 89 13 46 3 26 48
98Card 98: 99 17 45 67 83 78 76 93 5 52 | 32 23 76 40 96 56 26 9 29 63 1 33 15 75 85 5 82 70 99 30 41 58 16 42 86
99Card 99: 81 50 99 31 96 61 90 8 36 89 | 22 75 6 93 9 11 88 53 47 44 59 64 35 69 29 46 3 15 91 92 30 67 45 26 56
100Card 100: 14 92 52 90 63 31 25 23 47 75 | 92 52 39 94 90 66 36 68 35 63 3 5 75 86 50 30 48 2 34 64 45 17 95 53 93
101Card 101: 17 15 32 41 78 12 24 52 34 20 | 36 55 92 11 62 40 16 53 21 56 78 71 31 42 85 6 45 46 57 69 12 49 65 94 20
102Card 102: 95 72 92 52 48 6 12 90 89 11 | 78 79 33 36 18 60 54 35 48 47 44 29 70 91 59 99 72 22 88 75 83 20 68 15 2
103Card 103: 26 92 77 86 75 71 40 99 18 42 | 70 85 45 30 69 51 62 5 72 35 23 48 12 2 31 6 57 9 43 65 55 34 74 64 82
104Card 104: 58 47 91 85 1 98 77 97 11 59 | 41 60 46 2 62 94 30 17 48 38 65 58 61 45 7 81 14 33 13 66 49 36 35 83 16
105Card 105: 52 94 29 51 24 72 81 38 22 98 | 89 25 2 20 19 87 35 31 27 63 58 93 79 74 42 73 6 70 45 56 68 10 23 71 4
106Card 106: 53 31 52 12 77 13 57 75 83 33 | 32 21 47 79 18 85 20 31 1 81 17 57 99 36 11 68 29 15 83 38 72 13 10 44 45
107Card 107: 10 29 45 39 88 11 84 46 33 50 | 33 49 53 88 29 25 93 69 3 58 7 39 10 44 46 71 11 87 50 65 81 84 4 45 98
108Card 108: 36 89 17 61 91 20 40 8 82 47 | 45 3 43 62 8 57 20 30 40 99 61 36 38 82 16 90 17 87 9 89 91 47 66 86 68
109Card 109: 8 13 16 10 53 17 67 40 36 84 | 8 19 31 95 42 34 1 83 91 94 12 18 14 65 11 74 63 81 54 22 41 33 97 4 15
110Card 110: 55 85 53 30 52 59 96 36 33 21 | 30 96 65 49 85 9 55 78 90 37 68 59 48 51 21 14 50 67 10 52 33 36 70 57 53
111Card 111: 40 29 81 28 52 78 5 33 87 77 | 45 50 80 64 55 81 77 54 92 29 93 3 21 84 78 65 40 34 98 43 13 5 94 33 18
112Card 112: 91 31 32 89 65 14 81 46 80 17 | 51 89 58 46 80 29 50 14 91 66 57 98 31 82 39 17 99 81 13 55 43 32 77 18 65
113Card 113: 64 3 12 40 34 93 80 96 45 88 | 36 64 17 44 61 80 34 12 28 42 98 77 66 40 45 96 19 93 3 48 10 25 88 22 30
114Card 114: 36 43 48 47 24 7 71 13 72 75 | 48 60 50 52 64 85 45 68 8 55 62 91 71 97 98 24 70 20 43 80 76 7 18 96 1
115Card 115: 64 82 48 63 66 62 79 40 51 17 | 28 52 96 36 84 33 68 92 98 18 37 26 21 16 82 4 43 6 9 79 30 75 42 77 91
116Card 116: 84 70 36 38 87 33 64 45 8 91 | 94 74 91 84 60 36 10 33 45 55 37 62 90 31 19 44 25 8 78 38 87 18 64 70 20
117Card 117: 10 92 76 54 73 71 68 49 53 27 | 60 92 53 82 6 49 67 27 5 61 4 90 68 73 10 75 76 54 17 71 95 50 37 87 84
118Card 118: 10 68 81 55 1 91 64 75 92 39 | 76 94 8 44 86 7 78 15 41 25 4 51 66 53 36 14 59 69 74 5 88 33 45 83 17
119Card 119: 35 23 45 13 9 14 94 6 12 41 | 6 16 52 24 84 17 92 79 14 38 11 32 54 83 63 43 74 64 45 94 68 67 66 78 10
120Card 120: 68 33 17 3 24 21 79 44 84 6 | 85 10 6 5 52 32 45 46 8 24 86 2 29 27 12 11 40 69 64 21 13 68 33 93 63
121Card 121: 77 42 71 14 17 27 4 75 45 8 | 80 77 32 94 3 25 64 63 72 49 42 38 35 36 93 26 67 89 17 66 12 92 96 65 90
122Card 122: 94 91 9 21 25 86 37 13 93 96 | 41 14 54 30 68 50 12 6 76 91 8 95 3 53 5 2 98 56 90 38 21 39 20 45 16
123Card 123: 49 59 88 74 16 29 83 17 60 47 | 92 9 95 48 86 89 56 7 83 16 97 78 23 65 62 30 28 29 17 6 59 96 37 88 49
124Card 124: 68 64 89 27 10 36 12 38 87 46 | 35 12 29 70 80 69 18 38 31 97 53 33 56 66 36 73 58 60 44 61 94 63 2 22 17
125Card 125: 77 92 88 57 3 61 54 44 15 22 | 30 37 2 15 24 49 19 86 62 70 60 88 79 11 1 98 71 55 14 48 51 35 23 16 96
126Card 126: 76 29 81 69 87 79 10 49 62 31 | 95 22 29 33 69 91 46 40 78 92 34 52 65 98 99 28 2 35 73 86 4 94 31 25 88
127Card 127: 1 99 64 88 36 28 92 32 63 9 | 54 71 17 24 48 47 99 74 64 39 88 35 79 80 84 2 33 20 16 27 59 37 6 97 55
128Card 128: 52 58 71 21 38 88 83 79 39 10 | 31 43 84 97 85 48 50 17 82 22 18 75 24 36 5 23 63 95 94 87 91 8 37 7 54
129Card 129: 10 54 52 8 38 60 47 73 42 33 | 89 74 88 23 66 70 92 16 36 65 78 41 49 99 53 5 57 11 29 98 56 44 97 64 35
130Card 130: 35 26 36 87 14 85 88 54 5 53 | 73 42 64 66 27 59 98 8 68 70 47 67 81 25 40 93 91 6 77 20 99 31 50 43 61
131Card 131: 91 7 42 28 60 68 25 80 57 93 | 29 34 10 71 68 30 7 22 28 91 21 49 23 93 60 20 57 80 78 25 13 42 84 17 43
132Card 132: 36 98 95 88 82 61 75 30 43 54 | 44 64 42 70 77 99 84 80 59 53 37 18 26 56 97 33 31 50 15 41 52 58 63 93 65
133Card 133: 83 91 98 86 39 72 13 19 42 73 | 26 42 36 4 8 84 38 12 95 48 55 37 91 25 81 32 50 14 21 33 77 92 59 2 97
134Card 134: 1 13 47 70 17 85 19 63 38 92 | 59 99 23 55 72 92 44 40 53 68 88 14 69 65 35 32 28 79 75 74 34 27 87 77 47
135Card 135: 22 93 70 76 73 17 69 24 74 61 | 5 29 39 92 65 69 79 57 66 23 46 22 77 7 93 73 24 38 95 6 97 43 76 42 31
136Card 136: 23 4 75 77 41 61 88 73 50 82 | 59 73 86 29 27 58 82 2 69 84 4 34 49 12 6 80 46 19 7 92 72 88 38 39 63
137Card 137: 48 73 51 4 52 69 74 67 65 81 | 76 28 5 72 91 18 27 83 47 67 21 11 34 62 14 90 13 49 85 74 66 58 65 4 78
138Card 138: 55 32 80 57 86 78 54 90 97 41 | 30 14 80 39 32 55 54 11 82 87 68 2 99 3 47 78 40 69 5 77 53 50 56 86 74
139Card 139: 29 52 70 64 28 93 18 55 36 88 | 88 49 38 44 56 59 25 16 20 36 75 14 62 84 6 71 86 63 91 10 57 67 98 85 52
140Card 140: 65 34 63 69 67 18 50 40 49 82 | 40 21 18 65 87 49 15 32 3 82 95 41 4 42 29 93 88 57 56 62 12 68 2 27 67
141Card 141: 8 82 31 30 9 54 80 98 17 42 | 26 8 5 36 70 86 66 59 50 13 15 9 68 3 39 77 92 2 96 61 48 84 83 82 32
142Card 142: 72 5 32 33 45 44 21 3 2 27 | 22 24 30 55 9 81 56 72 97 76 92 10 19 98 63 57 88 7 18 32 5 61 29 49 12
143Card 143: 58 47 61 98 96 94 85 76 73 52 | 44 70 20 86 62 68 22 78 28 32 73 12 72 88 69 59 24 56 60 6 35 49 91 58 83
144Card 144: 17 14 55 39 13 61 42 84 57 52 | 69 43 76 8 83 92 38 36 91 2 24 74 10 9 7 45 79 23 89 34 28 31 40 18 37
145Card 145: 55 36 9 53 67 98 95 11 45 1 | 37 27 61 31 70 54 19 34 81 89 76 17 25 66 4 56 49 13 35 32 96 5 26 2 68
146Card 146: 91 9 31 61 30 48 11 81 37 42 | 60 99 4 49 50 5 90 32 6 58 18 63 45 25 82 74 96 35 43 69 14 62 46 15 41
147Card 147: 86 99 81 30 94 65 52 77 17 26 | 40 17 34 85 77 86 65 7 93 33 4 42 48 75 94 81 99 52 56 26 15 23 35 60 30
148Card 148: 96 30 61 70 40 69 55 19 13 11 | 94 7 48 88 43 69 62 29 38 30 31 56 50 58 81 52 46 55 97 3 40 1 33 18 23
149Card 149: 45 36 22 56 75 66 27 73 9 71 | 38 11 75 36 64 69 14 77 84 40 15 73 76 35 19 86 93 95 32 8 78 9 66 49 48
150Card 150: 81 99 76 52 43 11 72 20 8 24 | 9 49 45 72 81 25 55 76 77 99 95 12 8 24 74 20 11 16 52 43 51 21 46 14 13
151Card 151: 85 27 15 60 95 55 48 2 94 3 | 45 73 81 78 57 79 3 27 92 71 94 56 83 60 74 1 15 43 42 23 85 2 95 58 84
152Card 152: 70 52 7 99 4 8 85 74 56 12 | 44 79 62 12 4 99 74 2 85 52 9 70 58 55 54 56 95 8 13 64 7 75 63 22 82
153Card 153: 31 8 18 89 88 79 35 59 76 41 | 47 71 86 22 60 76 42 34 35 3 52 68 92 58 91 89 33 8 88 59 1 18 31 41 79
154Card 154: 68 9 55 95 61 25 59 32 40 58 | 12 29 2 34 23 94 72 78 66 48 64 5 52 96 20 91 57 92 85 37 87 75 73 90 43
155Card 155: 33 70 62 54 30 96 26 3 95 86 | 59 28 6 57 49 78 27 90 13 10 58 82 17 50 73 38 15 74 25 91 60 32 96 55 80
156Card 156: 80 8 47 81 20 82 38 54 30 22 | 51 97 20 38 49 45 22 17 39 64 35 54 81 80 28 90 68 30 47 86 41 53 42 34 8
157Card 157: 11 62 36 43 32 20 96 27 21 4 | 69 25 22 37 83 29 62 20 78 13 46 51 9 98 60 21 96 53 43 3 33 63 84 32 77
158Card 158: 75 49 89 67 22 1 92 73 60 41 | 62 49 7 96 60 22 75 13 1 21 29 64 41 71 83 58 12 34 57 52 19 76 67 40 3
159Card 159: 67 64 27 71 93 18 11 49 56 76 | 14 82 35 60 67 64 27 50 72 85 24 49 47 68 40 87 84 78 93 16 36 73 51 70 91
160Card 160: 74 20 49 81 99 35 53 68 50 88 | 32 76 60 21 93 45 11 44 9 23 34 30 57 51 18 88 14 81 75 99 52 19 73 72 12
161Card 161: 31 6 20 34 1 25 35 86 54 83 | 10 16 63 35 6 92 14 90 94 83 71 46 85 54 49 21 37 76 58 75 84 22 86 57 43
162Card 162: 71 2 91 45 18 67 32 35 70 4 | 80 33 18 86 13 25 41 28 1 74 5 51 63 27 7 77 43 40 66 60 30 52 55 45 96
163Card 163: 56 80 7 96 74 20 25 91 42 15 | 13 7 87 92 8 85 17 20 60 62 27 50 51 58 59 21 74 99 12 18 32 64 6 71 75
164Card 164: 4 62 31 56 10 21 45 51 59 28 | 21 74 82 81 59 55 37 88 56 11 22 63 31 99 86 26 5 16 57 83 24 97 1 42 60
165Card 165: 94 10 52 85 46 27 60 31 82 72 | 36 85 26 9 51 41 49 87 66 70 76 32 16 46 62 88 27 44 84 34 78 4 65 81 10
166Card 166: 8 14 12 94 28 37 96 13 36 70 | 67 69 85 45 29 71 7 26 97 91 11 48 65 22 12 81 60 34 77 25 80 10 38 24 8
167Card 167: 16 2 11 60 29 32 85 84 18 37 | 72 73 99 87 80 49 68 2 25 19 44 51 45 78 24 10 82 92 28 50 36 58 5 11 33
168Card 168: 88 20 78 53 45 93 64 86 62 7 | 55 16 24 32 82 9 1 91 81 34 94 61 89 76 40 58 88 2 23 25 49 44 83 42 21
169Card 169: 30 43 68 19 84 46 34 79 83 40 | 75 12 72 24 86 81 2 96 41 69 8 7 98 20 16 38 77 44 32 17 73 51 35 76 27
170Card 170: 36 65 99 63 11 80 98 57 2 75 | 63 44 48 60 89 80 16 30 82 85 69 5 98 36 47 43 37 78 75 7 2 79 40 55 90
171Card 171: 41 22 51 44 98 50 68 64 39 18 | 29 39 55 97 42 28 81 76 98 49 93 51 20 2 18 44 50 90 22 64 45 41 94 68 60
172Card 172: 45 51 90 61 87 12 43 42 26 30 | 30 22 90 14 5 8 42 43 61 87 50 29 34 26 53 93 95 1 51 58 91 45 18 12 78
173Card 173: 95 73 34 88 4 83 91 10 1 20 | 45 30 58 70 65 47 74 99 25 32 6 3 94 97 76 11 50 21 36 18 38 7 55 60 95
174Card 174: 12 23 97 6 85 48 73 1 78 46 | 78 39 29 27 6 73 46 22 75 95 42 12 23 93 89 85 20 1 97 72 48 58 24 70 91
175Card 175: 88 37 59 56 86 58 64 51 35 47 | 93 82 64 79 88 28 51 13 23 59 71 47 37 83 70 25 35 86 58 56 61 67 78 62 50
176Card 176: 86 97 60 68 91 83 55 56 75 16 | 68 10 99 70 61 43 50 6 59 75 4 97 34 91 44 71 67 93 69 38 73 48 33 17 83
177Card 177: 41 33 14 32 99 37 64 21 36 56 | 41 14 24 64 74 43 99 36 33 89 17 71 49 21 37 57 32 85 72 47 8 20 5 28 56
178Card 178: 99 62 41 81 76 89 17 83 43 40 | 44 38 51 82 98 49 65 85 20 17 72 5 28 96 97 46 10 4 34 7 55 15 47 29 36
179Card 179: 67 25 97 77 59 39 10 51 95 48 | 98 93 29 51 97 84 95 50 67 59 10 39 44 20 48 60 25 96 12 89 21 77 52 76 47
180Card 180: 12 42 91 75 77 56 92 58 51 99 | 38 66 35 19 51 90 73 3 49 81 92 10 77 48 83 58 78 99 54 72 29 47 69 34 56
181Card 181: 15 26 91 99 68 10 89 79 80 98 | 33 78 6 84 91 99 42 66 26 15 89 39 80 29 98 10 53 17 56 31 59 35 51 79 68
182Card 182: 75 8 59 52 93 56 14 29 18 84 | 68 14 10 56 1 78 11 84 69 36 13 93 21 8 65 31 44 18 50 53 2 4 38 88 75
183Card 183: 75 72 67 62 88 12 44 69 3 64 | 62 14 70 41 95 11 5 15 67 35 79 46 49 93 64 2 18 34 21 94 44 6 76 10 72
184Card 184: 86 33 8 63 89 57 81 61 21 1 | 49 80 47 26 39 40 67 25 90 64 24 91 37 95 28 5 15 50 66 73 19 33 9 97 54
185Card 185: 61 96 4 67 63 22 49 26 6 45 | 1 48 72 52 91 5 77 6 26 57 33 75 71 21 22 73 66 74 54 11 65 19 37 67 4
186Card 186: 19 10 50 72 54 85 38 31 28 15 | 64 20 30 78 74 31 83 46 43 12 28 36 84 11 66 96 75 7 76 93 2 18 42 38 86
187Card 187: 37 68 16 30 95 54 73 20 43 32 | 7 8 62 54 26 33 24 43 57 99 31 23 36 3 15 45 55 75 37 95 29 27 5 46 67
188Card 188: 33 20 43 74 98 62 11 84 97 69 | 69 92 30 64 72 2 20 46 31 88 43 50 79 1 53 9 17 81 57 65 67 28 74 90 34
189Card 189: 61 87 63 36 35 72 26 28 7 81 | 6 66 52 40 56 80 92 58 13 10 69 93 98 99 60 88 39 49 9 42 15 33 68 3 23
190Card 190: 78 91 72 67 59 99 42 32 1 60 | 47 85 79 17 22 28 68 18 21 45 87 92 9 7 46 4 34 70 29 40 69 74 62 71 5
191Card 191: 16 48 31 54 96 68 61 8 17 66 | 46 66 88 70 4 77 99 22 15 59 74 2 3 1 64 26 83 10 78 23 82 29 63 65 92
192Card 192: 67 82 32 99 43 58 18 51 57 53 | 7 33 49 21 75 62 23 63 87 20 54 88 3 35 97 17 89 96 91 80 10 22 95 1 48
193Card 193: 26 51 55 42 14 31 58 68 8 99 | 19 90 31 26 8 51 16 99 68 79 64 58 3 39 71 83 27 25 15 45 72 59 55 14 95
194Card 194: 80 66 34 35 6 61 70 16 17 89 | 69 40 76 34 56 72 97 48 59 74 18 62 22 28 4 67 75 35 29 24 31 53 58 11 16
195Card 195: 95 17 24 31 47 66 68 97 94 73 | 19 62 61 53 48 24 78 60 26 71 59 95 79 47 18 64 44 1 83 8 2 34 21 69 81
196Card 196: 46 48 79 80 21 12 6 74 75 36 | 5 26 16 89 2 8 92 3 61 30 42 99 12 41 4 35 10 40 84 53 82 22 73 19 20
197Card 197: 7 77 19 60 25 30 6 1 35 27 | 49 79 83 32 6 38 77 5 10 48 25 78 19 4 51 12 1 7 68 23 56 60 11 57 27
198Card 198: 49 36 93 56 47 94 23 10 45 12 | 55 49 93 12 56 62 77 30 51 94 36 7 39 5 58 18 26 81 23 47 91 1 45 10 84
199Card 199: 34 24 33 74 17 76 57 77 44 56 | 80 78 15 5 22 44 33 13 92 35 3 10 34 7 30 12 16 75 76 31 99 11 61 50 45
200Card 200: 5 39 53 88 71 70 89 92 64 13 | 1 68 12 39 88 57 92 61 23 40 45 30 5 53 71 3 96 67 54 14 89 70 97 64 51
201Card 201: 7 67 93 60 6 36 71 31 81 89 | 38 46 14 11 68 41 4 37 63 60 71 78 97 29 66 57 49 27 39 76 6 7 36 59 99
202Card 202: 94 24 81 14 27 51 34 97 6 23 | 31 10 81 59 51 42 94 2 23 20 43 14 96 68 97 49 24 33 34 87 38 60 82 66 27
203Card 203: 37 24 75 91 72 29 33 28 94 84 | 72 7 94 73 36 11 41 48 96 1 37 25 28 8 29 34 18 87 76 66 33 98 59 24 35
204Card 204: 53 42 58 63 3 49 77 25 36 66 | 62 46 7 2 42 36 63 86 1 15 3 30 8 77 9 5 70 73 97 93 55 6 28 39 91
205Card 205: 2 21 51 89 80 42 10 83 36 33 | 12 97 24 23 30 69 39 77 20 32 31 47 8 28 42 34 50 21 10 76 91 45 98 29 73
206Card 206: 23 81 70 32 76 55 85 60 83 42 | 6 25 29 21 20 45 66 36 10 52 91 46 59 64 53 14 63 98 35 30 82 93 65 87 58
207Card 207: 67 88 35 9 86 83 66 72 85 1 | 78 94 65 31 95 41 43 71 9 80 24 51 11 8 16 61 50 64 75 66 30 39 37 15 86
208Card 208: 41 54 96 97 65 57 84 28 67 77 | 83 41 80 98 73 86 55 4 64 48 57 35 28 59 54 79 58 10 40 19 2 81 72 3 30
209Card 209: 74 3 40 51 39 68 60 85 63 11 | 75 14 83 78 28 58 86 25 45 43 79 71 23 94 76 89 84 15 32 87 72 21 26 65 50
210Card 210: 10 13 69 85 17 52 50 98 95 41 | 90 74 94 71 10 84 67 1 32 31 87 64 62 27 34 75 80 3 60 58 82 20 28 17 92
211Card 211: 61 30 95 15 73 81 69 52 26 3 | 59 8 35 56 83 5 41 71 45 4 91 73 51 93 90 89 72 28 98 9 2 18 40 47 16
212Card 212: 98 19 95 93 62 76 36 70 1 55 | 5 22 21 58 75 85 31 67 49 73 47 90 34 24 99 37 50 11 23 48 96 87 6 29 91
diff --git a/2023/05/5a.c b/2023/05/5a.c
new file mode 100644
index 0000000..15d2805
--- /dev/null
+++ b/2023/05/5a.c
@@ -0,0 +1,45 @@
1#include <inttypes.h>
2#include <stdbool.h>
3#include <stdio.h>
4#include <stdlib.h>
5#include <string.h>
6
7#define N 100
8
9bool isnum(char c) { return c >= '0' && c <= '9'; }
10
11int main() {
12 char *buf, line[N];
13 int64_t i, m, ns, seed[N], next[N], r[3];
14
15 for (ns = 0, buf = fgets(line, N, stdin); *buf; buf++) {
16 if (!isnum(*buf)) continue;
17 next[ns++] = atoll(buf);
18 while (isnum(*buf)) buf++;
19 }
20
21
22 while ((buf = fgets(line, N, stdin)) != NULL) {
23 if (!isnum(*buf)) {
24 memcpy(seed, next, ns * sizeof(int64_t));
25 fgets(line, N, stdin); /* Discard description */
26 continue;
27 }
28
29 for (i = 0; *buf; buf++) {
30 r[i++] = atoll(buf);
31 while (isnum(*buf)) buf++;
32 }
33
34 for (i = 0; i < ns; i++)
35 if (seed[i] >= r[1] && seed[i] < r[1] + r[2])
36 next[i] = seed[i] + (r[0] - r[1]);
37 }
38
39 m = next[0];
40 for (i = 1; i < ns; i++)
41 m = m > next[i] ? next[i] : m;
42
43 printf("%" PRId64 "\n", m);
44 return 0;
45}
diff --git a/2023/05/5b.c b/2023/05/5b.c
new file mode 100644
index 0000000..aeac8c0
--- /dev/null
+++ b/2023/05/5b.c
@@ -0,0 +1,71 @@
1/* For part 2 we save ranges as (first, last) instead of (first, length) */
2
3#include <inttypes.h>
4#include <stdbool.h>
5#include <stdio.h>
6#include <stdlib.h>
7#include <string.h>
8
9#define N 10000
10
11#define MIN(a, b) ((a)<(b)?(a):(b))
12#define MAX(a, b) ((a)>(b)?(a):(b))
13
14bool isnum(char c) { return c >= '0' && c <= '9'; }
15
16void append(int64_t dst[][2], int64_t src[][2], int64_t *nr, int64_t *nnr) {
17 for (int i = 0; i < *nnr; i++) {
18 dst[i+*nr][0] = src[i][0];
19 dst[i+*nr][1] = src[i][1];
20 }
21 *nr += *nnr;
22 *nnr = 0;
23}
24
25int64_t readl(int64_t nums[], char *buf) {
26 int64_t i;
27 for (i = 0; *buf; buf++) {
28 if (!isnum(*buf)) continue;
29 nums[i++] = atoll(buf);
30 while (isnum(*buf)) buf++;
31 }
32 return i;
33}
34
35int main() {
36 char *buf, line[N];
37 int64_t i, li, ri, m, nr, nnr, r[3], range[N][2], next[N][2], aux[N];
38
39 nnr = readl(aux, fgets(line, N, stdin)) / 2;
40 for (i = 0; i < nnr; i++) {
41 next[i][0] = aux[2*i];
42 next[i][1] = aux[2*i+1] + next[i][0] - 1;
43 }
44
45 for (nr = 0; (buf = fgets(line, N, stdin)) != NULL; ) {
46 if (!isnum(*buf)) {
47 append(range, next, &nr, &nnr);
48 continue;
49 }
50
51 readl(r, buf);
52 for (i = 0; i < nr; i++) {
53 li = range[i][0];
54 ri = range[i][1];
55 if (li > ri || r[1] > ri || r[1]+r[2]-1 < li) continue;
56 range[i][1] = MIN(ri, r[1]-1);
57 next[nnr][0] = MAX(li, r[1]) + r[0]-r[1];
58 next[nnr++][1] = MIN(ri, r[1]+r[2]-1) + r[0]-r[1];
59 range[nr][0] = MAX(li, r[1]+r[2]);
60 range[nr++][1] = ri;
61 }
62 }
63
64 append(range, next, &nr, &nnr);
65 for (i = 0, m = -1; i < nr; i++)
66 if (range[i][0] <= range[i][1])
67 m = m == -1 || m > range[i][0] ? range[i][0] : m;
68
69 printf("%" PRId64 "\n", m);
70 return 0;
71}
diff --git a/2023/05/example.txt b/2023/05/example.txt
new file mode 100644
index 0000000..f756727
--- /dev/null
+++ b/2023/05/example.txt
@@ -0,0 +1,33 @@
1seeds: 79 14 55 13
2
3seed-to-soil map:
450 98 2
552 50 48
6
7soil-to-fertilizer map:
80 15 37
937 52 2
1039 0 15
11
12fertilizer-to-water map:
1349 53 8
140 11 42
1542 0 7
1657 7 4
17
18water-to-light map:
1988 18 7
2018 25 70
21
22light-to-temperature map:
2345 77 23
2481 45 19
2568 64 13
26
27temperature-to-humidity map:
280 69 1
291 0 69
30
31humidity-to-location map:
3260 56 37
3356 93 4
diff --git a/2023/05/in.txt b/2023/05/in.txt
new file mode 100644
index 0000000..ed6cba2
--- /dev/null
+++ b/2023/05/in.txt
@@ -0,0 +1,258 @@
1seeds: 1347397244 12212989 2916488878 1034516675 2821376423 8776260 2240804122 368941186 824872000 124877531 1597965637 36057332 4091290431 159289722 1875817275 106230212 998513229 159131132 2671581775 4213184
2
3seed-to-soil map:
42988689842 4194451945 100515351
52936009234 3353543976 52680608
6588295233 2638661119 66434163
73932833115 2936009234 88315480
83525561241 3331695912 21848064
91622262003 1969921080 210668061
102160566101 909457337 162053391
111832930064 1887384181 82536899
123625461917 3024324714 307371198
133547409305 3680043285 78052612
141915466963 588295233 240773057
153089205193 3758095897 436356048
164021148595 3406224584 273818701
172156240020 2705095282 4326081
181164190025 2180589141 458071978
192477360206 829068290 80389047
202322619492 2709421363 154740714
21654729396 1377923552 509460629
222557749253 1211672006 166251546
232724000799 1071510728 140161278
24
25soil-to-fertilizer map:
263961802244 3774724750 90737174
273164426550 3931513861 70563571
28147221566 1279409424 704464
291394834067 2074132435 40845148
303795834030 2142537807 47621185
314083197470 4095560143 199407153
322722903919 2876212954 93296050
333467494732 2775293966 100918988
341809650294 1815421878 66426374
35505665614 275280169 12031240
362142537807 4002077432 60985377
371577608496 331482268 177958690
382590855103 2196397738 132048816
391942888942 1978207624 24340152
40756722275 120895382 4815243
413435289775 3899308904 32204957
421967229094 715059087 147748489
433955563498 2190158992 6238746
44356096070 125710625 149569544
452520387506 2704826369 70467597
46517696854 2041922514 32209921
471755567186 0 54083108
48348569226 1280113888 7526844
49761537518 1597328127 34415327
501114796271 1631743454 128592301
510 1494456232 102871895
521070625412 287311409 44170859
53549906775 1287640732 206815500
54102871895 710084154 4974933
551298474695 1881848252 96359372
563843455215 2549697361 112108283
573761987050 3865461924 33846980
584052539418 2674168317 30658052
591435679215 862807576 141929281
60795952845 1004736857 274672567
613729489716 4063062809 32497334
622203523184 3085216895 316864322
632931907860 3402081217 11267883
64107846828 2002547776 39374738
652816199969 2969509004 115707891
663568413720 3413349100 161075996
672943175743 2328446554 221250807
683234990121 3574425096 200299654
694282604623 2661805644 12362673
70147926030 509440958 200643196
711876076668 54083108 66812274
721243388572 1760335755 55086123
73
74fertilizer-to-water map:
752460553918 850437816 63304366
761259757436 1986466040 193004355
772879827793 2638634287 61837387
7839629536 0 3143529
792160922553 2535779758 68016930
802523858284 922523353 36811379
8152449107 1199799263 207670511
822692884203 2603796688 34837599
833755186617 147251641 492169035
843266515480 3620937477 292130997
851596851845 4077877285 217090011
862727721802 913742182 8781171
873055087322 3913068474 164808811
882228939483 2179470395 229525704
893668162112 1052896909 87024505
903219896133 1539684314 30399976
911510550909 1679599925 86300936
920 3143529 39629536
932560669663 1407469774 132214540
941452761791 1142010145 57789118
95260119618 2700471674 920465803
963250296109 1036677538 16219371
971813941856 1026924408 9753130
984247355652 2488168114 47611644
991823694986 959334732 67589676
1002831305507 639420676 48522286
1012736502973 52449107 94802534
1021180585421 2408996099 79172015
1032941665180 1765900861 113422142
1042458465187 1139921414 2088731
1053558646477 1570084290 109515635
1061891284662 687942962 162494854
1072053779516 1879323003 107143037
108
109water-to-light map:
1102196302869 3170532562 121192468
1113065704582 2916528129 254004433
1122858667310 1154274853 9085577
1133789349818 1163360430 70779786
1142064226029 1434838179 90165206
1151448515654 725716988 103420445
1162690533041 2124509945 168134269
117347894075 3345882022 38285799
1183966625235 2618593488 35838159
1194186823059 4134088017 89981817
1201701108140 1088713231 65561622
1212589948930 2518009377 100584111
1224283393470 4230658428 11573826
1230 3384167821 347894075
1241638541363 2061943168 62566777
1251296314418 573515752 152201236
1261065865126 194284013 230449292
1271766669762 1991838394 70104774
128830054797 2292644214 110248534
1293595088014 3291725030 12245358
1301978385607 1905997972 85840422
1313607333372 424733305 148782447
1323511869770 2833309885 83218244
1334134088017 4242232254 52735042
1342154391235 3303970388 41911634
135494720868 3732061896 335333929
1361836774536 1234140216 141611071
1372317495337 1633544379 272453593
1384002463394 2402892748 64932431
139940303331 829137433 125561795
1401551936099 954699228 27518372
1414276804876 4224069834 6588594
1423756115819 2467825179 33233999
1432867752887 0 19073457
144386179874 1525003385 108540994
1451579454471 1375751287 59086892
1463319709015 2501059178 16950199
1473336659214 19073457 175210556
1483860129604 982217600 106495631
1492886826344 2654431647 178878238
150
151light-to-temperature map:
152977891457 1797846421 453265654
1533607226990 3913974738 161345346
1542303244644 3266224873 12707372
1551537599301 3278932245 264559714
156354466514 3168465761 62294113
157747844586 3543491959 55668994
1582982698313 3599160953 269886589
1592067998119 2251112075 27763866
16059336731 230685734 266868096
1613768572336 1500157846 31849471
1623856743875 939537646 438223421
1632095761985 59336731 146190926
164326204827 4075320084 28261687
1651502134302 3230759874 35464999
1661431157111 868560455 70977191
1672315952016 2579115195 227102616
1681802159015 1532007317 265839104
1692241952911 807268722 61291733
1703297512098 497553830 309714892
171852851251 4103581771 2643427
1723252584902 3869047542 44927196
173855494678 1377761067 122396779
1742543054632 4106225198 139404427
1752682459059 2278875941 300239254
176803513580 4245629625 49337671
177416760627 205527657 25158077
1783800421807 2806217811 56322068
179441918704 2862539879 305925882
180
181temperature-to-humidity map:
1823507573 490548898 11693081
183545755853 699222305 569882925
1843794976513 167435410 77260251
1850 1526297837 3507573
1861335234764 1766508370 36536350
1872131780538 502241979 64264976
1883707588652 1679120509 87387861
18996082543 2288930706 220305732
1901371771114 1529805410 106547120
191481810045 3044354609 63945808
19215200654 1426594789 7560739
1933206337878 109359655 58075755
1942445677382 2019348918 269581788
1951909096745 3571407035 4209780
1963138678479 4049712539 66833109
1973400069156 3490205314 81201721
1984084645800 3846924477 65868498
1992353535073 1434155528 92142309
2001716598669 3935506457 114206082
2013264413633 4116545648 30901597
2021913306525 3628450464 218474013
2033205511588 3461720938 826290
2042748703371 2770603565 195642711
2052715259170 244990096 33149766
2061478318234 3108300417 88629505
20722761393 0 73321150
2083295315230 3575616815 45887125
2093872236764 278139862 212409036
2102196045514 1269105230 157489559
2112972004168 2509236438 123906332
212316388275 3296299168 165421770
2131685215763 3025113077 18894296
2142748408936 244695661 294435
2153704521599 4147447245 3067053
2161215008024 566506955 120226740
2171830804751 3912792975 22713482
2181704110059 686733695 12488610
2193488217401 1803044720 216304198
2201872711004 3044007373 347236
2211566947739 2652335541 118268024
2223481270877 3621503940 6946524
2232944346082 3462547228 27658086
2243095910500 1636352530 42767979
2251115638778 3196929922 99369246
2263341202355 2966246276 58866801
2271853518233 2633142770 19192771
2281873058240 73321150 36038505
229
230humidity-to-location map:
231336906655 0 11018487
2324177510177 2085057023 105144397
2331299579245 2985741466 175347598
234643133711 2270603056 161424888
2352404489601 1000033728 105953201
2364282654574 2864154964 12312722
2373409171342 3327025690 30826088
2382119751049 2190201420 80401636
2393393269098 3357851778 15902244
24082121354 319849190 39107402
2411953814423 3161089064 165936626
24264524116 385149760 17597238
2433439997430 2057119912 27937111
2440 358956592 26193168
245347925142 11018487 93152804
2461484466972 2432027944 360604841
2472510442802 643133711 347359888
24826193168 402746998 38330948
2491190305465 2946259551 39481915
2502200152685 1105986929 204336916
2513467934541 2792632785 71522179
252804558599 3373754022 385746866
2533539456720 1310323845 638053457
2542857802690 3759500888 535466408
255121228756 104171291 215677899
2561229787380 2876467686 69791865
2571474926843 990493599 9540129
2581845071813 1948377302 108742610
diff --git a/2023/06/6a.c b/2023/06/6a.c
new file mode 100644
index 0000000..4ce8fd1
--- /dev/null
+++ b/2023/06/6a.c
@@ -0,0 +1,44 @@
1#include <inttypes.h>
2#include <math.h>
3#include <stdbool.h>
4#include <stdio.h>
5#include <stdlib.h>
6#include <string.h>
7
8#define N 100000
9
10#define MIN(a, b) ((a)<(b)?(a):(b))
11#define MAX(a, b) ((a)>(b)?(a):(b))
12
13bool isnum(char c) { return c >= '0' && c <= '9'; }
14
15int64_t readl(int64_t nums[], char *buf) {
16 int64_t i;
17 for (i = 0; *buf; buf++) {
18 if (!isnum(*buf)) continue;
19 nums[i++] = atoll(buf);
20 while (isnum(*buf)) buf++;
21 }
22 return i;
23}
24
25int main() {
26 char line[N], clean[N];
27 int64_t i, n, p, D, x1, x2, t[N], d[N];
28
29 n = readl(t, fgets(line, N, stdin));
30 readl(d, fgets(line, N, stdin));
31
32 p = 1;
33 for (i = 0; i < n; i++) {
34 D = t[i]*t[i] - 4*d[i];
35 if (D < 0) p = 1;
36 double sq = sqrt(D);
37 x1 = (int64_t)floor((t[i] - sq)/2) + 1;
38 x2 = (int64_t)ceil((t[i] + sq)/2) - 1;
39 p *= x2 - x1 + 1;
40 }
41
42 printf("%" PRId64 "\n", p);
43 return 0;
44}
diff --git a/2023/06/6b.txt b/2023/06/6b.txt
new file mode 100644
index 0000000..3d9fcf8
--- /dev/null
+++ b/2023/06/6b.txt
@@ -0,0 +1 @@
Just use 6a and modify the input file manually
diff --git a/2023/06/in.txt b/2023/06/in.txt
new file mode 100644
index 0000000..db24621
--- /dev/null
+++ b/2023/06/in.txt
@@ -0,0 +1,2 @@
1Time: 41 96 88 94
2Distance: 214 1789 1127 1055
diff --git a/2023/06/in2.txt b/2023/06/in2.txt
new file mode 100644
index 0000000..000bcf9
--- /dev/null
+++ b/2023/06/in2.txt
@@ -0,0 +1,2 @@
1Time: 41968894
2Distance: 214178911271055
diff --git a/2023/07/7a.c b/2023/07/7a.c
new file mode 100644
index 0000000..ffc9b5c
--- /dev/null
+++ b/2023/07/7a.c
@@ -0,0 +1,58 @@
1#include <inttypes.h>
2#include <stdio.h>
3#include <stdlib.h>
4#include <string.h>
5
6#define N 100000
7
8int value[255] = {
9 ['2'] = 2, ['3'] = 3, ['4'] = 4, ['5'] = 5,
10 ['6'] = 6, ['7'] = 7, ['8'] = 8, ['9'] = 9,
11 ['T'] = 10, ['J'] = 11, ['Q'] = 12, ['K'] = 13, ['A'] = 14
12};
13
14typedef struct {
15 char c[5];
16 int64_t b;
17} hand_t;
18
19int strength(hand_t h) {
20 int i, c2, c1, s, x[15];
21
22 memset(x, 0, 15 * sizeof(int));
23 for (i = 0, s = 0; i < 5; i++) {
24 s = s * 15 + value[h.c[i]];
25 x[value[h.c[i]]]++;
26 }
27 for (i = 2, c1 = 0, c2 = 0; i < 15; i++) {
28 if (c1 < x[i]) {
29 c2 = c1;
30 c1 = x[i];
31 } else if (c2 < x[i]) c2 = x[i];
32 }
33
34 return (c1*5 + c2) * 759375 + s;
35}
36
37int compare(const void *h1, const void *h2) {
38 return strength(*(hand_t *)h1) - strength(*(hand_t *)h2);
39}
40
41int main() {
42 char line[N];
43 hand_t hand[N];
44 int64_t i, n, p;
45
46 for (n = 0; fgets(line, N, stdin) != NULL; n++) {
47 memcpy(hand[n].c, line, 5);
48 hand[n].b = atoll(line+6);
49 }
50
51 qsort(hand, n, sizeof(hand_t), &compare);
52
53 for (i = 0, p = 0; i < n; i++)
54 p += hand[i].b * (i+1);
55
56 printf("%" PRId64 "\n", p);
57 return 0;
58}
diff --git a/2023/07/7b.c b/2023/07/7b.c
new file mode 100644
index 0000000..58716b3
--- /dev/null
+++ b/2023/07/7b.c
@@ -0,0 +1,58 @@
1#include <inttypes.h>
2#include <stdio.h>
3#include <stdlib.h>
4#include <string.h>
5
6#define N 100000
7
8int value[255] = {
9 ['2'] = 2, ['3'] = 3, ['4'] = 4, ['5'] = 5,
10 ['6'] = 6, ['7'] = 7, ['8'] = 8, ['9'] = 9,
11 ['T'] = 10, ['J'] = 1, ['Q'] = 12, ['K'] = 13, ['A'] = 14
12};
13
14typedef struct {
15 char c[5];
16 int64_t b;
17} hand_t;
18
19int strength(hand_t h) {
20 int i, c2, c1, s, x[15];
21
22 memset(x, 0, 15 * sizeof(int));
23 for (i = 0, s = 0; i < 5; i++) {
24 s = s * 15 + value[h.c[i]];
25 x[value[h.c[i]]]++;
26 }
27 for (i = 2, c1 = 0, c2 = 0; i < 15; i++) {
28 if (c1 < x[i]) {
29 c2 = c1;
30 c1 = x[i];
31 } else if (c2 < x[i]) c2 = x[i];
32 }
33
34 return ((c1+x[1])*5 + c2) * 759375 + s;
35}
36
37int compare(const void *h1, const void *h2) {
38 return strength(*(hand_t *)h1) - strength(*(hand_t *)h2);
39}
40
41int main() {
42 char line[N];
43 hand_t hand[N];
44 int64_t i, n, p;
45
46 for (n = 0; fgets(line, N, stdin) != NULL; n++) {
47 memcpy(hand[n].c, line, 5);
48 hand[n].b = atoll(line+6);
49 }
50
51 qsort(hand, n, sizeof(hand_t), &compare);
52
53 for (i = 0, p = 0; i < n; i++)
54 p += hand[i].b * (i+1);
55
56 printf("%" PRId64 "\n", p);
57 return 0;
58}
diff --git a/2023/07/in.txt b/2023/07/in.txt
new file mode 100644
index 0000000..bb85ed7
--- /dev/null
+++ b/2023/07/in.txt
@@ -0,0 +1,1000 @@
13A399 27
246645 201
38A9K4 40
488333 578
555353 817
699Q99 146
7553J5 45
8AAQ2A 547
9TKQ2K 120
1057592 534
117Q49K 229
12JK949 744
13688T6 657
1498888 392
154K638 337
16J8888 96
17Q92KJ 778
1848J96 374
19955J6 307
2062TT6 896
21934AK 776
2244654 720
23AJAAA 568
24K6J5Q 162
25T29A4 342
2646342 467
2722227 694
28TQ4TT 468
2988688 728
3088999 183
31Q7T6J 463
3292T9J 884
33KAQQQ 299
343275Q 913
35Q5535 82
3693A4J 48
37J9888 552
382QTQ4 846
3944554 795
40JJJJJ 348
41TT477 733
4258883 460
4377377 317
44357J3 725
45T9J4Q 346
4688228 953
47Q4858 982
485T5TT 405
49TTKTT 322
50QKKKK 197
51A5Q5A 956
522T22A 962
53TQJTT 734
5484TAK 360
55T39Q7 375
56QJJTT 925
5762236 928
58474T7 302
5937KK3 411
607J474 325
6155K5J 850
62TTJ2T 780
63Q5259 127
6493K6J 191
65T996T 333
6699929 193
679JKK3 115
682A647 409
693AAAA 966
7085K58 464
7122893 607
72QJQJJ 471
7359T9T 690
74K8484 167
75TKKK2 526
7644243 273
77KQ888 792
786J3K3 216
7944446 169
80325QK 461
8147T2T 990
827J78J 410
83A7JJA 562
842253J 598
85QK385 103
8665556 721
87TTQQ9 943
88Q4Q44 176
89JJ8JJ 539
90J799A 237
91994QK 510
9278996 458
93AK663 145
94QAA78 767
952Q662 797
96A696A 572
97QA82J 975
98T7KJQ 126
99722JT 416
1002J222 57
1016Q937 719
102AKJ58 39
103QQJQJ 582
104AJATT 187
105Q484A 384
106T9T87 272
1075T7T3 699
10844K44 812
10944228 505
110983Q5 444
11155355 74
112J2JJ2 353
113TJ2T2 883
114Q96J9 708
1157KKKK 447
116557J5 280
117AT4T7 407
118AQ9JJ 73
119K6K2J 597
120K7Q7K 394
121QQ4JQ 635
1222JK35 269
12394934 78
12499K9K 235
125K7K27 91
126QQQTQ 588
127773A3 702
12826232 110
129AA44A 909
13033Q3Q 313
13183335 518
1327AA84 287
133484T4 662
1347JKK7 29
1359J999 38
136Q58T9 17
13729JQ7 355
138772TT 783
139JK66K 473
140TKKTK 433
14152T56 318
1428Q734 628
143K43J7 226
144AA569 77
145J4A54 988
14684J4J 500
14797TQ9 240
1484K554 305
14927999 847
1508QQ83 85
15157638 521
152K5KK9 974
15397K3Q 234
154T88TT 747
15522JAT 71
156TJ337 983
157TA3QK 555
15887686 372
1595KKKK 828
160QK868 168
16199J59 813
162AA28A 875
16347382 837
16427K77 46
1652KKKJ 10
16622292 448
167K4KKK 774
168A3A9K 428
16999222 184
170Q9Q4Q 336
171QQQQ4 631
172KJQTT 249
173T3K46 644
174929J9 165
1752KK22 527
176AKAA5 358
177Q2224 369
178T273J 265
179282JJ 28
180Q488Q 513
18138J88 633
1823T3T3 283
18388855 863
1846J39Q 75
185J44K4 543
18627272 731
1875576K 880
188JTTKT 400
18955J55 750
1902QQ99 919
1914668Q 55
1929A999 5
193JK294 536
194TJ937 692
195KKKKJ 86
196647J4 625
19794227 308
1986AJ5J 841
19999AA5 224
200685A7 24
201TAAKK 112
202286K4 762
203J5Q8A 232
20433323 494
2052A6Q3 495
206JQKT2 37
207AAAQA 978
208K34KJ 703
2097J74T 994
2102J828 723
2115T3T4 535
21248658 140
213J99JJ 954
214TT826 678
215KK3J8 840
216TTT6J 439
2177QQ6T 589
21858585 963
219TTT2A 190
220JQT52 261
22166J76 682
222925KQ 951
223T3223 141
224J78QJ 785
225QQ277 567
2264K6TK 349
227K888K 309
2282J664 713
22975657 218
23096J96 614
23123727 610
23289477 134
233T8456 957
2347K47A 230
235A3AA3 107
23624KK3 538
23765J48 119
238JA98K 647
239KKT6T 935
240A4AAK 248
241K7779 225
242J5574 438
243Q6QQQ 697
24439QTT 469
245K9J62 282
2462K242 971
247QJJK6 41
24849J77 122
249393KK 403
250Q222Q 789
25188Q8Q 587
2524Q8AA 247
25363396 211
254KKJJK 111
255JQ4K7 918
25679775 506
257T5T55 532
2588J558 125
2592QAK8 641
26059548 537
261345K6 106
262Q42K7 695
26388KKK 934
2644J8J6 519
265644JJ 612
266J796K 368
2673J633 621
26866T3A 707
2697Q3K3 768
270A258Q 866
2719463A 820
27258555 843
27336T4J 914
27496K4A 8
275Q34J7 654
27688QAA 651
277AA5J5 58
27873333 740
279JTT9T 609
2803QQQQ 871
28133957 442
28284888 446
28383Q83 742
284K2K3K 243
285JKJ94 377
286K62K2 385
2876QJ87 704
288847J7 61
28987J89 594
29077JQQ 54
29156KA5 56
292AAQQ9 233
293A8AKT 236
29437KKA 711
295J8279 244
296J2Q23 987
297666J6 939
2983JJ77 16
299QQQKQ 104
30096QQ4 398
301J38JA 585
3028QKQ8 899
3034TJK2 806
30466686 421
3055T4T5 889
306K4944 206
30765KQ6 443
30836366 59
309TJT36 996
310JAA3A 367
3114985K 395
312999QQ 926
313832J6 821
31488K7K 890
315J7777 902
31635855 991
317332KK 710
31876AT7 365
319533K3 65
320AAAA9 864
32145TT4 758
322TJJTT 418
323282TT 178
324T536K 474
325J5J3A 259
326Q3QAA 796
327222JJ 793
328Q4666 64
32993TT9 219
33069555 26
331449JA 238
33264935 754
3337K24K 622
334Q7999 932
33555474 288
336J5QQ5 929
337J794A 669
33844K4K 634
3398T6A5 808
34077252 7
341JA8Q4 70
3423JTKJ 181
34334433 845
344A3444 548
34584889 262
3464A9TQ 32
34785A88 189
34873883 321
3497T776 274
350K62QJ 138
351TQ7TQ 80
3526A7AA 786
353TA379 872
35425T33 584
35573747 965
356Q28KQ 1000
3572A222 144
35894993 345
359A9238 172
3608468T 630
36199646 649
36269KK7 210
363QK5K6 457
3646QJ6Q 12
36536339 643
36688A4J 63
367K57JK 549
36877888 382
369T4J56 198
370AQQA7 481
371644K2 492
372T46AA 397
3735J3TJ 861
374J7J79 20
3753333A 42
376QQ555 892
3773AJT5 36
378J4K8A 208
379874TJ 376
380J999J 215
381A8AK3 782
38284444 504
383TT2TT 905
3848746J 752
385AA5A5 449
386A75JT 204
38755595 379
388KK665 775
38922244 364
39022283 152
391AA25A 149
392AA3KA 826
393K399K 981
39493384 97
39546494 347
3963TQJ4 19
397KKK7Q 158
398776J2 267
3997A77J 486
400A4454 9
4016857K 858
4023J3TT 435
403339J3 99
404JAQJQ 105
40582367 571
4063QQ3Q 556
407QJTJQ 599
408696T3 334
409JKA22 829
410J6686 576
41192Q4J 217
4128288K 289
4137JJKA 904
41433383 613
415J339T 315
41688483 503
4179995A 319
4188K92J 483
419TJ244 266
420KJ957 574
42174A44 148
42277KK7 591
423QJQ75 898
42488J8J 885
42592K54 137
42664647 579
42766226 560
428JJ488 839
42943J42 673
4303K3K3 849
43199977 108
432JTT47 113
4332634T 68
434TJQT5 838
43577Q77 763
4362AAKA 972
43778QJ7 257
4386J923 544
4392J2KK 164
440259K3 882
44188K78 602
4424786Q 924
44342444 650
4448536T 52
445AQTT5 546
4463333J 581
4473K984 501
448A8832 685
44934J55 133
45062985 700
4514353J 386
45244454 23
45377772 116
45465665 679
455KKK7J 124
456A7578 749
4575AQ54 396
4587KK8Q 807
4597T7T8 911
46073JJT 157
46198A99 753
462446J4 477
4634T43A 205
464TT999 798
46588885 915
4669Q64J 659
4677767K 357
468A5329 559
46985KKK 739
4709969J 714
471QJQQ9 427
472KT4KT 15
4735T5J5 638
474J74AJ 736
47556666 524
4765T558 930
4772233A 350
4787AA4A 502
479QAAA7 595
4807737T 151
481JQ4Q6 677
48267864 691
4832KK3Q 117
4848272K 414
48575J57 159
486443J4 479
48755KK5 207
488K88TK 910
4893Q9J9 332
490JAJAJ 338
49169369 339
49282KJ6 335
493K39KK 773
49499492 422
4953T663 270
496T5958 328
4979A45K 715
49823593 922
499JKK37 765
500KJKT7 769
501Q74QQ 173
5026232T 729
503227Q2 436
5047AQK4 430
5058Q4JQ 509
506J8248 297
507TT779 306
508A3K34 852
50997228 832
510TJTJ7 300
511A8898 553
51282TJQ 4
51392738 131
514AAAJJ 440
515TT972 51
51669AQK 646
517QQ7QJ 705
5184JK85 718
5197Q63T 220
52044A24 737
5217QAQT 292
52266699 979
5233Q974 329
524TTT6T 648
52585288 686
526989QT 278
5277Q6AK 964
52866466 251
52999744 271
530TTQTQ 163
5313433T 177
532K2333 142
533QQ4Q4 938
5349Q6Q9 787
53547T63 831
5362J56T 493
53794494 72
53825552 869
539936K2 390
540A8AA8 605
5413TT35 727
5422A24T 129
54394999 323
54464A2J 824
545K7676 756
546QQQQ7 18
547882J8 748
5482J77A 611
549222TJ 959
550T6266 722
551823J3 627
5528T569 771
55358KK3 331
55459329 209
555K9K87 6
55682484 150
5579444A 98
558TQ445 487
559J999K 462
560JT4TT 246
5615A455 640
56267KAJ 687
5636A83J 570
56436J6J 90
5656AK6A 573
56688K88 781
5675A3K4 931
56822J27 499
56944T44 948
570K44TT 213
571554K5 927
5726528A 202
573999JT 667
5747J256 401
575A2272 937
5762QJ3Q 900
57763736 973
57832522 933
579T666T 664
58088992 706
581JK267 603
582QQ99Q 316
583AKKKK 507
5848688J 862
58548858 970
58666229 378
587K495Q 14
58879539 761
589A33K3 491
590QAQQQ 417
591T92JA 620
592AQQ8J 475
59364A4K 295
5944A824 231
5958KTK3 453
596229K5 969
597Q3Q53 284
598Q6K34 35
599QJQ8Q 402
60039922 69
601J9TK8 920
6024Q3K8 881
603454AA 999
604556Q9 531
60522K22 496
6066AA39 291
607792K3 810
608TQQTJ 660
609J677K 764
610QTTTT 998
61122223 529
6123333Q 842
6132AAJA 755
614J64K6 466
615TJA4T 693
616J2622 441
61742442 566
618754K8 459
61935826 976
6204743T 676
621693TA 672
62258887 391
623K4899 434
624TTTT3 88
625356T2 894
62677784 212
6273373T 399
62878777 895
629Q97TT 950
63088T8T 760
631J48K2 663
632J3A3A 424
633555T5 25
63437373 389
635J6J46 174
6364TAKT 171
6376TKQ7 624
6385A775 3
639TT3T3 326
64028558 489
641TJ38T 936
6426AK66 254
64344664 223
64477QQ7 87
645Q2829 675
6465TTJ5 995
647T2T9J 454
6487878A 264
64983843 84
650JKKK3 802
65198436 192
6523AA22 940
653555A5 136
654J333J 221
65597KJ3 636
656JK582 801
6575Q82K 515
65825J2T 180
65934234 746
660JQ4K9 255
661224J2 668
66268999 639
6637T77T 886
6646A92Q 629
665JJ55J 161
66699599 429
6676JQ3Q 43
6684699A 361
66975AT2 917
670T9TTT 514
67155A95 551
672J6A96 47
673AAJAT 617
67464669 222
675QQ9QQ 626
67644J44 688
677Q3355 92
678J8J8J 835
679T4382 363
680J359A 296
68149Q49 653
682AAT66 908
68344T72 961
684AKA44 901
68549994 290
686A344A 732
687JJQJK 777
688J8JQ8 819
689A89T9 565
69072A72 868
691K7867 153
692K6663 179
693K76K7 854
6949T265 419
6959K7K9 865
6967797J 426
69725KKJ 670
69875575 11
69975955 431
700TK99Q 684
701KJ273 76
70257525 285
703J3AAJ 263
704Q7QQT 590
705Q77AQ 879
70633626 423
707AAA77 139
70876584 730
7092K9QQ 356
71022225 857
71144KKK 656
712954K6 814
71379TA5 135
714KQKKJ 62
7155QQ88 311
71677K87 452
717ATTTT 370
718J64QA 815
71929399 985
7202T792 351
7215782A 324
72257T74 294
723TQJ53 182
72442222 645
725K4Q92 320
72677A7K 583
727AA999 977
728T77TK 279
7295T586 799
7306K67Q 301
7316J8J2 67
73299JJT 344
733A395K 540
73435AAA 779
73568QT3 557
73645T3K 175
737587Q2 717
7388QK39 616
73973574 550
740T8A36 986
741333AA 800
7422KKKK 393
7439Q6T9 250
744A88A8 203
745J4J44 194
746848J8 281
7475A49Q 44
7488J88A 406
7498JTTT 877
75077767 955
75122K46 199
7526A9AT 387
753T5Q7K 482
75452999 577
755Q6685 632
756TQJQQ 525
75777477 712
758K5656 601
759KKA7A 380
760AA66A 373
76183ATT 942
7623JJ9K 508
76389988 791
764TQ746 757
7658J99T 743
766KKK22 642
767J44K2 980
768K9KAA 830
7699AAA9 260
770558J5 870
771KQKK2 352
772JT4T4 498
773K647T 967
7749K364 569
77544833 844
776T2922 856
777T3463 276
7782TTT2 60
779Q542A 724
7807J724 992
781KT92K 286
7828K388 888
7834394Q 600
784Q747Q 818
785433J4 945
78666J45 381
78755J59 912
7889A5A5 606
7893K98A 195
7909J49A 523
7912642J 944
7929K8Q7 89
7933J335 241
794J639J 564
79563J79 383
7965Q4J7 455
797777T7 674
7986793A 166
799KK9KK 277
8004TA95 873
801KQJA9 81
8022T777 834
8034K44A 109
80493572 312
80533537 258
806756KQ 304
8074J449 770
80827JKQ 412
809KK8KK 596
810J9666 415
81134943 93
81285J6K 404
813J6QJ5 118
8144A452 343
8157548A 327
8166644J 472
817T3A7Q 887
818T3J3J 661
819QQ79Q 516
82073JAT 592
8212QQQJ 413
822QJ523 541
82382878 488
824722T2 256
8254KA4K 923
82696T99 490
8273AKK6 696
8286J6JJ 147
829922JA 593
830J88K6 371
83152245 867
83284664 637
833T2T22 853
834T26A9 952
8358686J 253
836J6AA3 53
8376A65A 701
838JAJTA 745
8393843A 859
84039399 114
841J28Q3 121
84298KT4 13
843TTQTA 772
84439KTT 683
84553J53 298
84647434 671
8474J33Q 542
8489Q9J9 214
849TTTT8 984
850A45K7 891
851K488K 916
852AJ636 997
8537QQQ7 563
85468877 359
855655QQ 790
8563AA4A 855
857T4TTT 958
8589246Q 666
85985K48 485
860AJ283 484
86154J5K 21
862KK9K9 2
863Q69Q3 22
864J4555 809
865J322J 921
866752J5 530
8676K43K 480
8686AAAA 836
86992A29 803
87066888 665
87125529 83
8722AJ22 558
87389999 476
874Q8777 155
8757787J 388
876Q2765 123
877TJ2TK 833
87855AA5 903
87922662 33
8807QQQ2 575
8817J77J 561
88272878 874
883QQJQQ 154
884T693Q 520
8855TT3T 31
886JQQ44 340
8872JJ2Q 804
888J24T2 784
889K7J3J 811
8907KTJT 156
8918848Q 228
89244944 947
893K5426 893
894A55A8 655
895AAKK8 619
89675555 751
897Q2222 816
898TJJ9J 906
899J4224 314
90026A7K 738
90197J54 1
9027KK7K 794
9033KKK5 451
904955K9 827
905Q9QA2 293
906J2A28 200
907J2K77 341
90883888 196
909J97K7 823
91075TJ9 186
911J7638 49
91246K36 128
91392JJJ 735
91429A87 185
91589449 100
9163KAJK 445
917QQ343 586
9188466J 79
919T3T37 362
920252T4 528
921A3A5J 242
9226QQQT 822
9237AJA6 615
924K9625 268
925KK3AK 517
9265Q5Q8 658
927T87K3 618
92857629 788
929A7A7Q 160
930889TQ 741
931TT59T 425
932Q2KQJ 30
933A4K3K 143
9346664K 456
935KK4J4 726
936TTTTJ 437
937QT824 132
938J555J 478
93975KK9 354
94094979 34
941K846J 432
942QQ887 130
943TT97T 170
94466TQ6 878
94557K78 993
94688JK8 608
947AK5Q3 907
948AATAA 989
949QJQ8J 533
9508QQQQ 522
9515JQ49 102
952T3T65 188
95366446 759
9543Q695 275
955AAQTA 689
95643J33 623
957TJ444 968
958Q28Q2 330
959J777T 450
960QT3JQ 420
961T327A 897
962QKQKK 580
96392KA7 946
9647A93K 497
9656KAAA 239
966889TA 50
967K5KK5 511
968J443J 303
969TTT7J 310
970QAK8A 252
971J8658 805
972896K6 680
97388482 876
97469QJQ 408
9754A3J2 941
9768868T 94
9777766Q 851
97862J25 825
9793TT9T 716
980Q5KKK 860
981K7488 95
98233343 766
983JT888 366
984J8885 681
985J66J6 554
986JA65K 604
987QTJ44 848
988583QJ 465
98989Q79 66
99027477 512
991JTK33 101
992TTTQK 652
993A4ATA 545
994J3A33 470
99534QAK 245
9966Q668 698
99766777 709
9985K557 227
99943666 949
100066A6A 960
diff --git a/2023/08/8a.c b/2023/08/8a.c
new file mode 100644
index 0000000..62f6fcd
--- /dev/null
+++ b/2023/08/8a.c
@@ -0,0 +1,35 @@
1#include <inttypes.h>
2#include <math.h>
3#include <stdbool.h>
4#include <stdio.h>
5#include <stdlib.h>
6#include <string.h>
7
8#define N 30000
9
10bool isnum(char c) { return c >= '0' && c <= '9'; }
11int index(char *c) { return c[0]-'A' + (c[1]-'A' + (c[2]-'A')*26)*26; }
12
13int map[N][2];
14
15int main() {
16 char *buf, dir[N], line[N];
17 int n, i, s;
18
19 n = strlen(fgets(dir, N, stdin)) - 1;
20
21 fgets(line, N, stdin);
22 while ((buf = fgets(line, N, stdin)) != NULL) {
23 i = index(buf);
24 while (*buf != '(') buf++;
25 map[i][0] = index(buf+1);
26 while (*buf != ' ') buf++;
27 map[i][1] = index(buf+1);
28 }
29
30 for (i = index("AAA"), s = 0; i != index("ZZZ"); s++)
31 i = map[i][dir[s % n] == 'R'];
32
33 printf("%d\n", s);
34 return 0;
35}
diff --git a/2023/08/8b.c b/2023/08/8b.c
new file mode 100644
index 0000000..713bada
--- /dev/null
+++ b/2023/08/8b.c
@@ -0,0 +1,96 @@
1/*
2I hate this stupid problem. If you read the description carefully (which is
3what I did), you would think that the problem is much, much harder than it
4actually is. In reality, the author made many assumptions about the possible
5paths that made is super easy. Let's see a few:
6
7- Different ghost's path do not end up in the same Z-node (this is not super
8 important for the solution).
9- Each ghost has exactly one Z-node in its path (one could think about this
10 when reading the strange remark that "there are as many A-nodes as Z-nodes",
11 which does not look important at first).
12- Each ghosts meets a Z-node exactly once before entering a loop (this is
13 a fundamental and incredibly strong assupmtion).
14- If a ghost encounters a Z-node after X steps, it will encounter it exactly
15 every X steps (like WTF I don't even have to solve a system of congruences?
16 what is this, a problem for babies?)
17
18Fuck.
19
20This code does not even solve the problem by the way, it computes some data
21about the path that each ghost takes. Then you can figure out the solution
22with a pocket calculator, or by hand.
23*/
24#include <inttypes.h>
25#include <math.h>
26#include <stdbool.h>
27#include <stdio.h>
28#include <stdlib.h>
29#include <string.h>
30
31#define N 1000
32
33typedef struct { char last; int next[2]; } node_t;
34typedef struct { int preplen, plen, nz, z[N], zid[N]; } source_t;
35
36int ind(char s[3], char m[][3], int n) {
37 for (int j = 0; j < n; j++)
38 if (s[0] == m[j][0] && s[1] == m[j][1] && s[2] == m[j][2])
39 return j;
40
41 return -1;
42}
43
44int v[N*N];
45source_t worksource(int i, node_t *nodes, char *dir, int n, int k) {
46 source_t s;
47 int state;
48
49printf("Working source %d\n", i);
50
51 memset(v, 0, sizeof(int) * N*N);
52 for (int j = i, d = 0, l = 1; true; d = (d+1)%k) {
53 j = nodes[j].next[dir[d] == 'R'];
54 state = j*k+d;
55if (nodes[j].last == 'Z') printf("Found Z %d at %d\n", j, l);
56 if (v[state]) {
57 s.preplen = v[state]-1;
58 s.plen = l - v[state];
59printf("Stopping at %d. Preperiod: %d, period: %d\n", l, s.preplen, s.plen);
60 return s;
61 } else v[state] = l++;
62 }
63
64 return s;
65}
66
67int main() {
68 node_t nodes[N];
69 source_t src[N];
70 char *buf, dir[N], line[N], name[N][3], lstr[N][3], rstr[N][3];
71 int k, i, n, m, s;
72
73 k = strlen(fgets(dir, N, stdin)) - 1;
74 fgets(line, N, stdin);
75 for (n = 0; (buf = fgets(line, N, stdin)) != NULL; n++) {
76 memcpy(name[n], buf, 3);
77 nodes[n].last = name[n][2];
78 while (*buf != '(') buf++;
79 memcpy(lstr[n], buf+1, 3);
80 while (*buf != ' ') buf++;
81 memcpy(rstr[n], buf+1, 3);
82 }
83
84 for (i = 0; i < n; i++) {
85 nodes[i].next[0] = ind(lstr[i], name, n);
86 nodes[i].next[1] = ind(rstr[i], name, n);
87 }
88
89printf("%d %d\n", n, k);
90
91 for (i = 0, m = 0; i < n; i++)
92 if (nodes[i].last == 'A')
93 src[m++] = worksource(i, nodes, dir, n, k);
94
95 return 0;
96}
diff --git a/2023/08/ex2.txt b/2023/08/ex2.txt
new file mode 100644
index 0000000..4efe0f6
--- /dev/null
+++ b/2023/08/ex2.txt
@@ -0,0 +1,10 @@
1LR
2
3OOA = (OOB, XXX)
4OOB = (XXX, OOZ)
5OOZ = (OOB, XXX)
6TTA = (TTB, XXX)
7TTB = (TTC, TTC)
8TTC = (TTZ, TTZ)
9TTZ = (TTB, TTB)
10XXX = (XXX, XXX)
diff --git a/2023/08/in.txt b/2023/08/in.txt
new file mode 100644
index 0000000..6812006
--- /dev/null
+++ b/2023/08/in.txt
@@ -0,0 +1,752 @@
1LRRLRRLRRLRRRLRRLRRRLRRLRRRLRLRLLRLRLRRLLLRLRLRRRLRRLRLRRRLRRLRRLRRLLLRRLRRRLRRRLRLLRRLRLLRRLRRRLRRLRLRRRLRLRLRRLRLRRRLLRRRLLRRRLRLRRRLRRLLRRLRRRLRRLRRLLRRLRRLRRRLLLRRRLRRLRRLRRLRLRRRLRRLLLLRLRRLRRRLRLLRRLRLLRRLRRRLRRRLRRRLLRRLRRLRRLRRRLRRLRRRLLRLRRRLRRRLRRRLLRRRLRRLRRRR
2
3LRL = (MCG, TRC)
4TNJ = (LMV, PMP)
5GQK = (MGD, DBP)
6KVK = (LHC, NMM)
7PQX = (SLC, LSD)
8GRR = (XCR, BJT)
9RBF = (VDM, BFG)
10TKN = (VDH, HGQ)
11MMJ = (LTR, CNQ)
12CCX = (FJJ, FKD)
13VHD = (JFQ, DDH)
14NRL = (CTM, XTJ)
15SNH = (QDH, PSQ)
16JTM = (VFH, QBR)
17BJT = (GJL, JXD)
18LBJ = (JFQ, DDH)
19FPN = (PBT, SJR)
20CGR = (NJC, CNF)
21RCM = (GTQ, BBT)
22BQQ = (FNS, KPL)
23NSF = (SLD, SJV)
24QFQ = (XNX, GHT)
25QCZ = (JPG, NLJ)
26RJD = (QDT, NSG)
27CNK = (SKK, NFL)
28CBR = (QDT, NSG)
29QMV = (HXG, FHS)
30DNL = (XLX, RDT)
31XRS = (DHT, RDP)
32GHV = (FHS, HXG)
33MJM = (GQB, XCC)
34GQC = (NKG, NSF)
35RKH = (KVG, JCQ)
36DKT = (LTN, LTN)
37THR = (PHF, VKN)
38BQV = (BTS, SCG)
39BJJ = (GQC, QRR)
40CQL = (LHK, BCD)
41LXX = (LCX, FJV)
42NSG = (VSX, DFN)
43LSD = (JRL, KXC)
44QKB = (NLJ, JPG)
45HSK = (CFN, NTM)
46BLL = (JJQ, MSN)
47SQD = (BLK, LBK)
48KVP = (DBB, RHN)
49MLJ = (QQR, HDH)
50QVB = (GMN, TDP)
51HJB = (GPG, XDT)
52NBX = (NVT, SNB)
53CLL = (PLG, LHS)
54AAA = (JXS, MFQ)
55CHN = (RNL, FHV)
56JHT = (JQF, JQX)
57KSB = (VDL, VBD)
58HBT = (CKB, CCX)
59JXH = (MQH, PRD)
60DBB = (XHL, CHN)
61PBD = (RDB, VHH)
62SDV = (VMG, NTV)
63BJS = (NNG, RQH)
64SLM = (BRB, FLG)
65VDH = (QPG, GKG)
66KNS = (VQX, HFR)
67HBF = (RQC, MXC)
68JSF = (KPL, FNS)
69HLS = (TJQ, TKM)
70TRV = (BVN, GKF)
71NLJ = (GBH, JCT)
72SVM = (DKT, XLG)
73THK = (NTM, CFN)
74MDK = (DNL, VXV)
75MHV = (DQQ, MQX)
76CNF = (QQH, SLN)
77XJK = (VFH, QBR)
78FNT = (HXR, HXR)
79KCT = (CPX, FXC)
80BDB = (NMP, JGG)
81LRZ = (JXC, TNJ)
82JBQ = (NDL, KSJ)
83LJQ = (GHT, XNX)
84HKD = (HFH, VHJ)
85VDM = (GTD, HRP)
86QQH = (THC, THR)
87PRD = (KFR, TJK)
88KKH = (VTJ, LSR)
89LQS = (SJQ, RHD)
90RLF = (LCR, SGG)
91JHK = (PDJ, TRV)
92QHG = (VMS, PKS)
93JRL = (GVJ, SKL)
94XDV = (PJL, JRN)
95TSV = (KCR, QJP)
96JSN = (QFQ, LJQ)
97RLA = (JSN, JVD)
98KPD = (RDK, NSS)
99HXP = (RQT, QTS)
100DDB = (SFH, RHV)
101JGG = (BJG, JTS)
102VBD = (SGD, FRJ)
103HRP = (RJD, CBR)
104RRT = (MLJ, MLJ)
105NVD = (KHM, RBF)
106TNK = (QSX, KVD)
107NST = (CDL, VGL)
108FLF = (SNF, KRN)
109LHS = (BSD, DTD)
110NCV = (KSB, PTG)
111FMX = (QKX, XFP)
112KMB = (FDM, BSX)
113CRH = (CVV, DDS)
114VGL = (JLS, CPK)
115DBF = (KGB, PXQ)
116RNM = (HTP, LVL)
117HKC = (XML, RTK)
118JLC = (TKN, VSV)
119FLB = (NNG, RQH)
120QKH = (GQM, LSB)
121DTD = (FTJ, HCK)
122BXS = (HKD, FDK)
123TKV = (RHN, DBB)
124QBJ = (KNS, DXQ)
125LBS = (BHT, SFM)
126VMS = (CTJ, DDC)
127FQJ = (FVQ, GKR)
128RQC = (LRF, HCM)
129SSG = (GQK, HDV)
130KPL = (GQS, MDK)
131GJN = (PNN, CPB)
132LHK = (QPD, GSV)
133KFR = (KPD, DTV)
134QXC = (QVM, BHJ)
135XRH = (PKM, FPN)
136CKL = (BBT, GTQ)
137FPK = (CRV, MGR)
138LTK = (LVT, HXF)
139BLK = (BRT, BQN)
140BSX = (XMS, XJN)
141MMR = (JCG, HHX)
142DVM = (LHK, BCD)
143RCJ = (BDB, CFK)
144QLN = (DDB, LDQ)
145GKF = (QLV, FNP)
146BXQ = (NKT, FFN)
147HCM = (FPK, KQB)
148HKG = (GQK, HDV)
149FNS = (GQS, MDK)
150CTJ = (NST, HDJ)
151QQS = (GQB, XCC)
152ZZZ = (MFQ, JXS)
153MGK = (CRH, BRV)
154LCR = (FRD, KMK)
155BKD = (BNR, BKM)
156LDB = (KLM, SCC)
157PLS = (PBL, CRG)
158FQR = (PNR, NCV)
159TNL = (CDT, MKC)
160KVH = (FJQ, SHJ)
161KPT = (KGB, PXQ)
162GQM = (BXQ, VLP)
163FDR = (GLC, KGF)
164DDC = (NST, HDJ)
165MTJ = (TMT, TMB)
166PBJ = (LTK, VFB)
167JXS = (SBL, CQB)
168XML = (BMK, QBL)
169XSK = (KSN, KSN)
170TKM = (TKQ, NTX)
171XFP = (HBX, RMX)
172DXQ = (VQX, HFR)
173KRN = (CNK, JDM)
174TJQ = (TKQ, NTX)
175VQX = (LBJ, VHD)
176TGX = (HLK, LDJ)
177MCX = (GDH, BNS)
178DKM = (TVC, LPB)
179VXD = (GCF, SVD)
180FGB = (BKM, BNR)
181VNN = (VCS, BSR)
182FXX = (LHC, NMM)
183JKR = (TQN, GXV)
184FRJ = (TDK, PKQ)
185MMQ = (SCC, KLM)
186XGL = (MSN, JJQ)
187GTQ = (DMV, LLK)
188KML = (MCX, CTT)
189LBH = (LSR, VTJ)
190BDS = (XJK, JTM)
191FVH = (TSV, HHC)
192KXN = (LRL, QKK)
193HND = (HNQ, FSG)
194JQS = (QLL, RKH)
195CKD = (TBT, HBT)
196PXP = (NXC, TTK)
197VHP = (QJC, QKH)
198KQL = (BQV, RJR)
199FSG = (JBH, GPH)
200BVN = (QLV, FNP)
201HNV = (XFH, BKL)
202CNJ = (MNT, DCG)
203VSV = (HGQ, VDH)
204PXB = (RRT, RRT)
205FNK = (TKC, LTM)
206VTX = (LDJ, HLK)
207KKG = (QDL, SNT)
208CTT = (GDH, BNS)
209FJJ = (FNT, FNT)
210JCS = (DDB, LDQ)
211GDH = (TPG, DND)
212FMF = (XHB, BNH)
213QLL = (JCQ, KVG)
214NJK = (RDB, VHH)
215LHC = (QDS, SXP)
216QHS = (KQL, SXQ)
217BJQ = (BXB, HQT)
218GJL = (BTX, GJC)
219BNR = (NJK, PBD)
220NFL = (NSC, FTL)
221SKK = (FTL, NSC)
222MQN = (FMF, KPC)
223XHB = (DCS, SQD)
224MDT = (TDP, GMN)
225XBL = (TMT, TMB)
226HFH = (XDV, DMD)
227BSR = (VTX, TGX)
228LDH = (BJQ, XJJ)
229GXX = (KKL, RCJ)
230PQZ = (HDH, QQR)
231CXH = (VXD, SGC)
232HPB = (VHR, FNQ)
233LLF = (QVM, BHJ)
234VQQ = (FQD, MQN)
235GSV = (NDT, SLM)
236GLR = (HVD, DMF)
237SLC = (JRL, KXC)
238RHV = (HBC, TFR)
239PVX = (PLS, SJS)
240LLK = (BDC, PNK)
241SLL = (FJQ, SHJ)
242LKT = (VPF, SSC)
243MXC = (LRF, HCM)
244FTL = (QSR, SVH)
245GCF = (JTF, HJB)
246VHZ = (RRN, TSH)
247LNB = (DQQ, MQX)
248DRQ = (XML, RTK)
249XLG = (LTN, VLD)
250LBL = (VVF, SPR)
251MBB = (NFG, NFG)
252QJC = (GQM, LSB)
253LSR = (BJS, FLB)
254MQH = (TJK, KFR)
255DFN = (LXG, LLL)
256MSN = (KXN, MPV)
257JCT = (MHV, LNB)
258TPG = (CJJ, RRD)
259GCV = (NVT, SNB)
260LNL = (GXX, DJM)
261XFT = (TSH, RRN)
262FSS = (SLC, LSD)
263TKT = (TVC, LPB)
264XBN = (NBX, GCV)
265RQT = (QKF, XRS)
266XCC = (MXL, RLF)
267RTH = (QVB, MDT)
268DBP = (HNV, XCG)
269QQB = (JMF, PBJ)
270KSJ = (NCS, RNM)
271GNQ = (CPX, FXC)
272HHX = (JKT, SVM)
273SGG = (KMK, FRD)
274SMM = (SJS, PLS)
275VPK = (LTM, TKC)
276VLD = (QKB, QCZ)
277LTR = (TFX, FVN)
278VCL = (DKM, TKT)
279HXG = (MTG, SNM)
280KGB = (MRV, LFD)
281JGK = (CNJ, RXF)
282FMV = (FRT, MNF)
283SLD = (KVH, SLL)
284VVL = (TNJ, JXC)
285GDP = (RBF, KHM)
286XDT = (RML, JHK)
287JKP = (NDL, KSJ)
288BNH = (SQD, DCS)
289LFD = (LQC, HLS)
290NHC = (JHT, SSM)
291VPF = (NRN, LBL)
292BHT = (LQS, MCP)
293SNT = (RHL, BDS)
294BQN = (XGL, BLL)
295FVN = (HGP, QKM)
296NXC = (KQJ, FMV)
297NKG = (SJV, SLD)
298HSF = (HPB, NFR)
299QKM = (RRR, PMK)
300PJL = (XBN, PFX)
301MRP = (LCX, FJV)
302XSQ = (FDK, HKD)
303TVC = (GHN, QQC)
304XLX = (DKJ, NNT)
305VSX = (LLL, LXG)
306FQD = (FMF, KPC)
307PNJ = (XCR, BJT)
308QDV = (QRJ, BFS)
309QVG = (GLC, KGF)
310BMK = (RJS, FLF)
311SXQ = (BQV, RJR)
312BGL = (CSB, SBH)
313BJG = (CNH, PQJ)
314RSG = (QFT, VPD)
315VVF = (DRQ, HKC)
316BBT = (LLK, DMV)
317HGQ = (GKG, QPG)
318HMD = (PHT, PCD)
319PPL = (CKL, RCM)
320QLA = (TSH, RRN)
321KBG = (HBT, TBT)
322RHD = (HKG, SSG)
323GQB = (RLF, MXL)
324QFA = (QQR, HDH)
325KPC = (BNH, XHB)
326XNX = (FVH, MNH)
327HBX = (NFD, VJF)
328SVD = (HJB, JTF)
329DMD = (JRN, PJL)
330PKJ = (BJQ, XJJ)
331TFX = (HGP, QKM)
332MCH = (PKD, PFF)
333SGD = (PKQ, TDK)
334RRJ = (KCT, GNQ)
335PJD = (VLM, JJZ)
336PHF = (PQX, FSS)
337PKQ = (NTP, MMR)
338VPD = (QHB, NHC)
339FRD = (GDP, NVD)
340SFH = (HBC, TFR)
341JRN = (XBN, PFX)
342HSB = (MRP, LXX)
343RMX = (NFD, VJF)
344SBH = (JXH, TSQ)
345NTP = (JCG, HHX)
346PSX = (FMX, PCR)
347LCQ = (PKS, VMS)
348LKV = (SMM, PVX)
349SGC = (SVD, GCF)
350CQB = (LDD, QDV)
351FRT = (XCV, HSF)
352KGT = (SGC, VXD)
353TRC = (PSX, NQC)
354BSG = (PKD, PFF)
355CKB = (FJJ, FKD)
356SSM = (JQF, JQX)
357DKJ = (BKD, FGB)
358TKC = (TXS, FQJ)
359JQX = (DVQ, NLN)
360BDC = (KNL, DSV)
361FJV = (MTJ, XBL)
362DND = (CJJ, RRD)
363PPH = (MMQ, LDB)
364FTJ = (LKT, GNX)
365JKV = (RFM, MGK)
366KCR = (LLF, QXC)
367RFN = (LJL, CFX)
368HCF = (NFG, HSR)
369NTV = (JXG, VHP)
370QQR = (DTX, HND)
371BTX = (QVG, FDR)
372JQK = (SXQ, KQL)
373NJC = (SLN, QQH)
374RML = (PDJ, TRV)
375SNF = (JDM, CNK)
376KMK = (GDP, NVD)
377XSH = (DXQ, KNS)
378DTX = (HNQ, FSG)
379BNS = (TPG, DND)
380KHM = (BFG, VDM)
381SBF = (MGK, RFM)
382NFD = (PKJ, LDH)
383BHJ = (VNN, CGL)
384TXS = (FVQ, GKR)
385CRV = (NTQ, SDV)
386GHT = (FVH, MNH)
387RBN = (RQC, MXC)
388KKL = (BDB, CFK)
389NLN = (RBN, HBF)
390QFT = (NHC, QHB)
391QBL = (FLF, RJS)
392RHG = (PNN, CPB)
393MNF = (XCV, HSF)
394SJS = (CRG, PBL)
395FDK = (VHJ, HFH)
396HXM = (JJD, JJD)
397PNN = (QDK, MMJ)
398GCS = (TTK, NXC)
399VJF = (LDH, PKJ)
400GTD = (CBR, RJD)
401RRD = (TPL, XVR)
402JXC = (LMV, PMP)
403NXH = (MKC, CDT)
404HCK = (GNX, LKT)
405BRC = (QLL, RKH)
406KQB = (CRV, MGR)
407TMB = (MCH, BSG)
408XJN = (RSX, JGK)
409HQP = (SFM, BHT)
410HQT = (MBB, HCF)
411THC = (VKN, PHF)
412TPL = (NGD, QQB)
413NGD = (PBJ, JMF)
414GVJ = (RNT, LKV)
415QDK = (LTR, CNQ)
416JXG = (QKH, QJC)
417TQN = (KRL, QCV)
418RDB = (JQS, BRC)
419MPV = (LRL, QKK)
420SJQ = (HKG, SSG)
421XHL = (RNL, FHV)
422LRF = (KQB, FPK)
423GNX = (SSC, VPF)
424VXV = (XLX, RDT)
425MTG = (CCR, CRR)
426NFG = (BHH, BHH)
427DSV = (PXB, PJN)
428CVT = (KPT, DBF)
429RHL = (JTM, XJK)
430CBQ = (GXL, PQB)
431BHH = (JXS, MFQ)
432DMV = (BDC, PNK)
433NSS = (HQP, LBS)
434FVM = (PRP, RFN)
435NCS = (HTP, LVL)
436QPD = (NDT, SLM)
437GJC = (FDR, QVG)
438CFK = (JGG, NMP)
439HDV = (MGD, DBP)
440PNB = (PQB, GXL)
441RXA = (NLJ, JPG)
442CNH = (JSF, BQQ)
443VXL = (HXR, XQQ)
444QKF = (RDP, DHT)
445QTS = (QKF, XRS)
446VDL = (SGD, FRJ)
447FCM = (TQN, GXV)
448BHQ = (GQC, QRR)
449BSD = (FTJ, HCK)
450CJJ = (TPL, XVR)
451PLG = (DTD, BSD)
452LQC = (TKM, TJQ)
453NTM = (KLG, PPL)
454SHJ = (NRL, NMS)
455QDL = (BDS, RHL)
456PCR = (XFP, QKX)
457XCG = (XFH, BKL)
458LMV = (GCS, PXP)
459JJD = (QQV, QQV)
460HGP = (PMK, RRR)
461TNF = (RQT, QTS)
462SFM = (MCP, LQS)
463MNR = (RFN, PRP)
464LLL = (CBQ, PNB)
465RJS = (SNF, KRN)
466BRV = (CVV, DDS)
467GGK = (LHS, PLG)
468HVD = (GBJ, VQQ)
469KQJ = (FRT, MNF)
470PMK = (CGR, PQR)
471MFB = (GGK, CLL)
472HLK = (NTG, KMB)
473BKL = (CQL, DVM)
474SVT = (CSB, SBH)
475FGD = (PNR, NCV)
476LVT = (VCL, XTQ)
477MFQ = (SBL, CQB)
478SCC = (KKH, LBH)
479JMF = (VFB, LTK)
480GLC = (FBS, DNB)
481HFT = (MMQ, LDB)
482PNR = (PTG, KSB)
483SNM = (CRR, CCR)
484TJK = (DTV, KPD)
485PQR = (NJC, CNF)
486VPM = (QDL, SNT)
487DHT = (KGT, CXH)
488RPK = (KML, XRL)
489VFH = (HSB, QBV)
490FNP = (JBQ, JKP)
491JLS = (QLN, JCS)
492XMS = (JGK, RSX)
493FRK = (GGK, CLL)
494PDJ = (GKF, BVN)
495QDH = (JLC, QTG)
496PFX = (GCV, NBX)
497BXB = (MBB, MBB)
498TTK = (KQJ, FMV)
499PKS = (DDC, CTJ)
500KLG = (RCM, CKL)
501CSV = (QVB, MDT)
502NNG = (DXR, BPD)
503HHC = (KCR, QJP)
504LVL = (CSQ, TKJ)
505QHB = (JHT, SSM)
506JDM = (SKK, NFL)
507JCQ = (TNK, LPJ)
508TSQ = (MQH, PRD)
509JTS = (PQJ, CNH)
510RCR = (KCT, GNQ)
511LXG = (CBQ, PNB)
512TKQ = (HXP, TNF)
513PKM = (PBT, SJR)
514GXV = (QCV, KRL)
515HJS = (BBX, RPK)
516CPX = (XSK, XSK)
517JXD = (BTX, GJC)
518CVV = (HXM, VDB)
519SBL = (LDD, QDV)
520HBC = (VPM, KKG)
521DXR = (CVT, KKS)
522VDB = (JJD, BVS)
523XQQ = (VVL, LRZ)
524PQB = (BXS, XSQ)
525NTX = (HXP, TNF)
526SCG = (VMQ, HJS)
527GHN = (SBF, JKV)
528VXR = (SGL, LMC)
529NQF = (VPD, QFT)
530DDS = (HXM, VDB)
531KLM = (LBH, KKH)
532SGL = (QRL, KLQ)
533GKR = (CSV, RTH)
534QDT = (DFN, VSX)
535MNT = (SNH, FPP)
536TDP = (TKV, KVP)
537KNL = (PXB, PXB)
538GMN = (KVP, TKV)
539MXL = (SGG, LCR)
540PKD = (FXX, KVK)
541SXP = (FNK, VPK)
542NTG = (BSX, FDM)
543QSR = (KBG, CKD)
544FHV = (XCL, MBP)
545RDT = (NNT, DKJ)
546SPR = (HKC, DRQ)
547FFN = (JHD, GLR)
548FBS = (QXL, FTF)
549VLP = (FFN, NKT)
550KXC = (SKL, GVJ)
551TKJ = (FQR, FGD)
552LHH = (PHT, PCD)
553CTM = (GHV, QMV)
554VHH = (JQS, BRC)
555MQX = (MJM, QQS)
556BBX = (XRL, KML)
557LKK = (PKM, FPN)
558RNT = (PVX, SMM)
559JSA = (TNJ, JXC)
560RDK = (LBS, HQP)
561RXF = (MNT, DCG)
562HDH = (HND, DTX)
563VKN = (FSS, PQX)
564LSB = (VLP, BXQ)
565BPD = (CVT, KKS)
566TMT = (BSG, MCH)
567QLV = (JBQ, JKP)
568LPJ = (KVD, QSX)
569QDS = (VPK, FNK)
570GQS = (VXV, DNL)
571DTV = (NSS, RDK)
572SNB = (JLB, LLV)
573NMM = (SXP, QDS)
574CSB = (TSQ, JXH)
575PFF = (FXX, KVK)
576VHJ = (XDV, DMD)
577XFX = (KSN, THB)
578CCR = (NQF, RSG)
579VMQ = (BBX, RPK)
580HXR = (VVL, VVL)
581SJV = (KVH, SLL)
582CFN = (KLG, PPL)
583DDH = (RHG, GJN)
584FLG = (HMD, LHH)
585FVQ = (RTH, CSV)
586RTK = (BMK, QBL)
587NSC = (SVH, QSR)
588MKC = (FCM, JKR)
589XTJ = (GHV, QMV)
590CNQ = (FVN, TFX)
591SJR = (BJJ, BHQ)
592MGR = (NTQ, SDV)
593XFH = (DVM, CQL)
594QSX = (GRR, PNJ)
595QKX = (HBX, RMX)
596LBK = (BQN, BRT)
597PXQ = (MRV, LFD)
598LDQ = (SFH, RHV)
599MNH = (HHC, TSV)
600XCV = (HPB, NFR)
601KLQ = (QBJ, XSH)
602FTF = (SCQ, RGC)
603JJQ = (MPV, KXN)
604LJL = (VDV, SJJ)
605DNB = (FTF, QXL)
606CFX = (VDV, SJJ)
607JKT = (DKT, DKT)
608SJJ = (THK, HSK)
609CDL = (JLS, CPK)
610QCV = (XRH, LKK)
611XCR = (GJL, JXD)
612KMJ = (MLJ, PQZ)
613MPS = (DJM, GXX)
614GBJ = (MQN, FQD)
615PNK = (KNL, DSV)
616BRB = (HMD, LHH)
617PBT = (BJJ, BHQ)
618JPG = (JCT, GBH)
619HSR = (BHH, ZZZ)
620DQQ = (QQS, MJM)
621MCP = (SJQ, RHD)
622LTM = (TXS, FQJ)
623KKS = (KPT, DBF)
624DCG = (FPP, SNH)
625TDK = (MMR, NTP)
626QJP = (LLF, QXC)
627NFR = (FNQ, VHR)
628FKD = (FNT, VXL)
629LMC = (KLQ, QRL)
630PBL = (FVM, MNR)
631JHD = (DMF, HVD)
632CRR = (RSG, NQF)
633JJZ = (JVD, JSN)
634RQH = (DXR, BPD)
635HXF = (VCL, XTQ)
636CRG = (MNR, FVM)
637VHR = (QHG, LCQ)
638VCS = (VTX, TGX)
639FPP = (QDH, PSQ)
640KSN = (XFT, XFT)
641BVS = (QQV, PJD)
642RSX = (RXF, CNJ)
643FXC = (XSK, XFX)
644HDJ = (CDL, VGL)
645QQC = (SBF, JKV)
646LPB = (GHN, QQC)
647LRJ = (QHS, JQK)
648SCQ = (RCR, RRJ)
649PQJ = (JSF, BQQ)
650GKG = (VMJ, LRJ)
651SSC = (NRN, LBL)
652NVT = (JLB, LLV)
653KVD = (GRR, PNJ)
654XRL = (CTT, MCX)
655BTS = (VMQ, HJS)
656KRL = (XRH, LKK)
657RRN = (BGL, SVT)
658FHS = (SNM, MTG)
659QPG = (VMJ, LRJ)
660QKK = (TRC, MCG)
661VDV = (THK, HSK)
662GPH = (VXR, GKQ)
663RNL = (XCL, MBP)
664SLN = (THC, THR)
665CPB = (MMJ, QDK)
666NMS = (XTJ, CTM)
667RJR = (BTS, SCG)
668CGL = (VCS, BSR)
669MBP = (MFB, FRK)
670NNT = (FGB, BKD)
671HTP = (CSQ, TKJ)
672GPG = (RML, JHK)
673QRL = (QBJ, XSH)
674BCD = (GSV, QPD)
675QQV = (VLM, VLM)
676PRP = (CFX, LJL)
677TFR = (KKG, VPM)
678LDD = (QRJ, BFS)
679QVM = (VNN, CGL)
680KGF = (FBS, DNB)
681GBH = (MHV, LNB)
682JCG = (JKT, SVM)
683FJQ = (NMS, NRL)
684QXL = (RGC, SCQ)
685NRN = (SPR, VVF)
686FDM = (XMS, XJN)
687RFM = (BRV, CRH)
688NKT = (GLR, JHD)
689HFR = (VHD, LBJ)
690THB = (XFT, VHZ)
691XJJ = (BXB, HQT)
692QTG = (VSV, TKN)
693NQC = (PCR, FMX)
694JLB = (HFT, PPH)
695GXL = (BXS, XSQ)
696PSQ = (QTG, JLC)
697NDT = (BRB, FLG)
698PJN = (RRT, KMJ)
699TBT = (CKB, CCX)
700JBH = (GKQ, VXR)
701XVR = (QQB, NGD)
702BRT = (XGL, BLL)
703PCD = (MPS, LNL)
704SKL = (RNT, LKV)
705TSH = (BGL, SVT)
706JQF = (DVQ, NLN)
707DVQ = (RBN, HBF)
708RGC = (RCR, RRJ)
709QRJ = (TNL, NXH)
710XCL = (MFB, FRK)
711VLM = (JSN, JVD)
712RDP = (KGT, CXH)
713VTJ = (FLB, BJS)
714LCX = (XBL, MTJ)
715JVD = (QFQ, LJQ)
716BKM = (NJK, PBD)
717VMJ = (QHS, JQK)
718DMF = (VQQ, GBJ)
719CDT = (FCM, JKR)
720NTQ = (NTV, VMG)
721QRR = (NSF, NKG)
722NDL = (RNM, NCS)
723KVG = (LPJ, TNK)
724DCS = (BLK, LBK)
725JFQ = (RHG, GJN)
726GKQ = (SGL, LMC)
727JTF = (GPG, XDT)
728SVH = (CKD, KBG)
729RRR = (PQR, CGR)
730RHN = (CHN, XHL)
731HNQ = (GPH, JBH)
732BFG = (GTD, HRP)
733LLV = (PPH, HFT)
734NMP = (BJG, JTS)
735CSQ = (FQR, FGD)
736MRV = (HLS, LQC)
737LDJ = (KMB, NTG)
738PHT = (LNL, MPS)
739DJM = (RCJ, KKL)
740PTG = (VBD, VDL)
741PMP = (PXP, GCS)
742LTN = (QKB, QKB)
743BFS = (NXH, TNL)
744MGD = (XCG, HNV)
745QBV = (MRP, LXX)
746VFB = (LVT, HXF)
747XTQ = (TKT, DKM)
748QBR = (QBV, HSB)
749CPK = (QLN, JCS)
750MCG = (NQC, PSX)
751VMG = (VHP, JXG)
752FNQ = (LCQ, QHG)
diff --git a/2023/09/9a.c b/2023/09/9a.c
new file mode 100644
index 0000000..10b7beb
--- /dev/null
+++ b/2023/09/9a.c
@@ -0,0 +1,46 @@
1#include <inttypes.h>
2#include <stdbool.h>
3#include <stdio.h>
4#include <stdlib.h>
5#include <string.h>
6
7#define N 1000
8
9#define isnum(c) (c == '-' || (c >= '0' && c <= '9'))
10
11int64_t readl(int64_t nums[], char *buf) {
12 int64_t i;
13 for (i = 0; *buf; buf++) {
14 if (!isnum(*buf)) continue;
15 nums[i++] = atoll(buf);
16 while (isnum(*buf)) buf++;
17 }
18 return i;
19}
20
21bool isconstant(int64_t a[], int n) {
22 for (int i = 0; i < n-1; i++)
23 if (a[i] != a[i+1])
24 return false;
25 return true;
26}
27
28int64_t next(int64_t a[], int64_t n) {
29 int64_t x = a[n-1];
30 if (isconstant(a, n))
31 return x;
32 for (int i = 0; i < n-1; i++)
33 a[i] = a[i+1] - a[i];
34 return x + next(a, n-1);
35}
36
37int main() {
38 char line[N];
39 int64_t s, a[N];
40
41 for (s = 0; fgets(line, N, stdin) != NULL; )
42 s += next(a, readl(a, line));
43
44 printf("%" PRId64 "\n", s);
45 return 0;
46}
diff --git a/2023/09/9b.c b/2023/09/9b.c
new file mode 100644
index 0000000..1b539c1
--- /dev/null
+++ b/2023/09/9b.c
@@ -0,0 +1,46 @@
1#include <inttypes.h>
2#include <stdbool.h>
3#include <stdio.h>
4#include <stdlib.h>
5#include <string.h>
6
7#define N 1000
8
9#define isnum(c) (c == '-' || (c >= '0' && c <= '9'))
10
11int64_t readl(int64_t nums[], char *buf) {
12 int64_t i;
13 for (i = 0; *buf; buf++) {
14 if (!isnum(*buf)) continue;
15 nums[i++] = atoll(buf);
16 while (isnum(*buf)) buf++;
17 }
18 return i;
19}
20
21bool isconstant(int64_t a[], int n) {
22 for (int i = 0; i < n-1; i++)
23 if (a[i] != a[i+1])
24 return false;
25 return true;
26}
27
28int64_t next(int64_t a[], int64_t n) {
29 int64_t x = a[0];
30 if (isconstant(a, n))
31 return x;
32 for (int i = 0; i < n-1; i++)
33 a[i] = a[i+1] - a[i];
34 return x - next(a, n-1);
35}
36
37int main() {
38 char line[N];
39 int64_t s, a[N];
40
41 for (s = 0; fgets(line, N, stdin) != NULL; )
42 s += next(a, readl(a, line));
43
44 printf("%" PRId64 "\n", s);
45 return 0;
46}
diff --git a/2023/09/in.txt b/2023/09/in.txt
new file mode 100644
index 0000000..24b4351
--- /dev/null
+++ b/2023/09/in.txt
@@ -0,0 +1,200 @@
128 38 58 115 255 558 1167 2343 4564 8699 16328 30378 56447 105549 199601 381868 735876 1418100 2712150 5115341 9472583
224 34 56 103 191 343 593 990 1602 2520 3862 5777 8449 12101 16999 23456 31836 42558 56100 73003 93875
312 30 66 118 187 291 486 901 1807 3760 7885 16402 33536 67001 130303 246169 451478 804146 1392500 2347766 3860393
411 7 -1 -10 4 101 392 1052 2337 4631 8595 15584 28661 54781 109041 222274 453659 910327 1775963 3349730 6094694
513 26 56 110 200 360 677 1347 2785 5847 12267 25493 52275 105732 211455 420013 833076 1658291 3323777 6713131 13636877
624 36 50 68 92 124 166 220 288 372 474 596 740 908 1102 1324 1576 1860 2178 2532 2924
74 10 18 35 81 207 523 1232 2664 5299 9766 16819 27345 42607 65306 103013 177906 352348 792280 1916515 4732055
82 4 15 46 115 246 479 915 1841 4022 9326 21995 51143 115539 252570 534754 1099830 2205374 4328183 8346246 15873877
96 16 41 104 240 508 1016 1959 3670 6684 11815 20246 33632 54216 84958 129677 193206 281560 402117 563812 777344
1010 24 59 127 240 410 649 969 1382 1900 2535 3299 4204 5262 6485 7885 9474 11264 13267 15495 17960
111 3 19 65 161 334 621 1072 1753 2749 4167 6139 8825 12416 17137 23250 31057 40903 53179 68325 86833
121 3 14 46 118 256 493 869 1431 2233 3336 4808 6724 9166 12223 15991 20573 26079 32626 40338 49346
135 20 54 111 200 339 551 863 1338 2203 4189 9270 22068 52271 118490 254073 515553 994838 1837662 3275301 5689494
1411 19 37 74 152 315 630 1176 2019 3189 4728 6991 11599 23863 58350 151043 385257 945993 2232085 5082986 11226568
15-6 -5 -1 6 16 29 45 64 86 111 139 170 204 241 281 324 370 419 471 526 584
1619 44 79 123 175 234 299 369 443 520 599 679 759 838 915 989 1059 1124 1183 1235 1279
1720 26 41 76 144 261 459 824 1572 3189 6707 14297 30581 65483 140200 299218 633600 1324592 2722729 5487182 10824554
182 13 49 134 316 686 1400 2714 5060 9211 16601 29879 53781 96407 171038 298877 513930 873445 1482345 2550372 4520094
197 22 55 116 218 381 645 1090 1862 3209 5540 9533 16335 27918 47680 81409 138761 235440 396309 659706 1083288
2023 34 43 54 73 105 151 202 234 223 220 555 2284 8074 23894 62315 149406 340397 757350 1681105 3771572
21-2 9 31 72 157 346 769 1701 3724 8065 17266 36441 75513 153008 302220 580858 1085650 1973817 3493849 6028622 10154597
2217 35 83 175 326 554 878 1305 1800 2233 2292 1349 -1702 -8485 -20570 -37084 -47977 -18173 145725 659887 1980386
236 19 49 119 273 598 1257 2530 4856 8858 15310 24963 38082 53479 66865 68818 44405 -18660 -94790 -14282 809438
2417 21 22 20 15 7 -4 -18 -35 -55 -78 -104 -133 -165 -200 -238 -279 -323 -370 -420 -473
258 23 59 139 312 672 1383 2710 5056 9005 15371 25253 40096 61758 92583 135480 194008 272467 375995 510671 683624
269 16 34 63 103 154 216 289 373 468 574 691 819 958 1108 1269 1441 1624 1818 2023 2239
278 19 59 140 275 481 794 1315 2308 4381 8817 18206 37692 77458 157694 318613 640892 1287715 2591041 5226414 10560561
288 21 37 57 82 107 117 88 -4 -163 -339 -377 54 1555 5117 12270 25264 47285 82709 137397 219034
2922 34 44 52 58 62 64 64 62 58 52 44 34 22 8 -8 -26 -46 -68 -92 -118
3028 57 114 220 416 779 1446 2651 4785 8494 14832 25483 43057 71450 116238 185052 287858 437047 647230 934638 1316054
3116 20 24 28 32 36 40 44 48 52 56 60 64 68 72 76 80 84 88 92 96
3228 39 48 62 97 180 347 630 1022 1413 1518 905 -557 -1064 7553 50137 189888 570667 1494764 3559032 7883557
335 0 3 30 106 262 542 1035 1947 3728 7269 14184 27192 50614 91000 157901 264801 430224 679031 1043922 1567158
344 21 55 119 239 461 864 1591 2913 5356 9967 18894 36631 72557 145803 294037 588486 1158435 2229571 4181885 7634411
358 11 15 33 81 182 384 805 1728 3777 8206 17321 35023 67400 123199 213865 352632 551879 817609 1139457 1474069
366 15 30 69 162 358 754 1560 3223 6658 13679 27799 55705 109973 214073 411584 783020 1476065 2758724 5110417 9373988
3718 26 37 54 84 138 231 382 614 954 1433 2086 2952 4074 5499 7278 9466 12122 15309 19094 23548
383 -2 -7 -12 -17 -22 -27 -32 -37 -42 -47 -52 -57 -62 -67 -72 -77 -82 -87 -92 -97
3916 32 61 121 242 466 847 1451 2356 3652 5441 7837 10966 14966 19987 26191 33752 42856 53701 66497 81466
4013 35 79 160 302 554 1015 1865 3399 6061 10475 17470 28096 43628 65555 95551 135425 187047 252247 332684 429682
4113 6 -9 -20 11 156 538 1364 2981 5967 11279 20495 36207 62647 106658 179157 297277 487420 789503 1262734 1993315
4214 11 18 51 141 348 790 1714 3660 7803 16602 34939 71995 144184 279550 524126 950858 1671811 2854498 4743307 7687145
432 7 22 56 123 242 437 737 1176 1793 2632 3742 5177 6996 9263 12047 15422 19467 24266 29908 36487
4419 34 68 128 220 349 519 733 993 1300 1654 2054 2498 2983 3505 4059 4639 5238 5848 6460 7064
4521 48 85 132 195 292 468 836 1684 3739 8772 20876 48964 111327 243473 510946 1029407 1994954 3728471 6738732 11810049
4611 27 55 108 210 394 696 1143 1733 2405 2997 3190 2436 -132 -5810 -16455 -34641 -63841 -108637 -174960 -270362
4712 12 12 25 90 292 791 1869 4012 8064 15537 29266 54829 103647 199701 393835 793523 1623291 3344337 6885726 14081159
485 13 31 72 164 358 736 1410 2499 4070 6039 8076 9700 11088 15835 38309 120943 371965 1044017 2693426 6497234
49-1 -4 4 46 162 411 867 1607 2698 4206 6273 9338 14615 24985 46510 90835 178809 345728 648682 1176574 2063472
508 16 23 40 92 216 455 847 1408 2108 2839 3374 3316 2036 -1401 -8323 -20552 -40520 -71401 -117260 -183220
5127 54 93 143 215 340 581 1059 2009 3892 7603 14833 28665 54510 101519 184641 327535 566586 956321 1576571 2541779
5218 25 37 63 114 201 333 515 746 1017 1309 1591 1818 1929 1845 1467 674 -679 -2763 -5777 -9950
5311 23 58 131 266 508 956 1834 3618 7240 14408 28142 53779 101035 188408 352630 668776 1292502 2547568 5104551 10339633
5420 30 55 112 230 464 919 1792 3444 6514 12092 22012 39486 70717 129039 244932 488666 1018738 2181538 4711697 10130222
558 15 22 29 36 43 50 57 64 71 78 85 92 99 106 113 120 127 134 141 148
568 17 18 5 -32 -110 -256 -510 -928 -1585 -2578 -4029 -6088 -8936 -12788 -17896 -24552 -33091 -43894 -57391 -74064
570 6 28 73 155 304 573 1043 1826 3066 4938 7645 11413 16484 23107 31527 41972 54638 69672 87153 107071
588 14 26 39 49 61 112 320 974 2687 6657 15139 32341 66134 131237 254984 487637 921079 1723959 3210704 5981290
59-3 6 32 88 209 468 1005 2092 4276 8669 17497 35106 69812 137381 267702 517614 995199 1904592 3626038 6854228 12829699
6016 14 18 32 52 64 53 40 180 979 3722 11247 29252 68383 147421 297965 571096 1046604 1845466 3146378 5207268
610 19 60 146 330 708 1432 2721 4864 8205 13096 19800 28322 38142 47820 54439 52848 34663 -13020 -109250 -281238
6219 37 70 119 185 269 372 495 639 805 994 1207 1445 1709 2000 2319 2667 3045 3454 3895 4369
638 18 30 51 92 174 350 764 1787 4310 10347 24225 54843 119816 252855 516572 1024178 1975442 3715028 6825207 12270294
649 31 64 108 163 229 306 394 493 603 724 856 999 1153 1318 1494 1681 1879 2088 2308 2539
6527 36 46 65 110 223 504 1178 2725 6116 13214 27417 54640 104755 193632 345950 598975 1007532 1650430 2638633 4125506
66-3 -9 -19 -25 -9 63 252 660 1449 2882 5441 10155 19412 38768 80661 171586 365345 766697 1572457 3141343 6110353
679 13 16 19 30 81 256 730 1819 4041 8188 15409 27304 46029 74412 116080 175597 258613 372024 524143 724882
688 17 26 35 44 53 62 71 80 89 98 107 116 125 134 143 152 161 170 179 188
6913 29 69 150 300 564 1014 1770 3055 5340 9688 18482 36824 75023 152753 305660 595433 1124631 2057879 3651414 6293380
7019 39 64 101 169 299 534 929 1551 2479 3804 5629 8069 11251 15314 20409 26699 34359 43576 54549 67489
7126 48 79 119 168 226 293 369 454 548 651 763 884 1014 1153 1301 1458 1624 1799 1983 2176
7216 28 45 62 80 120 240 563 1330 3003 6482 13603 28310 59352 126262 272164 590489 1279633 2753130 5858989 12311553
7316 27 38 49 60 71 82 93 104 115 126 137 148 159 170 181 192 203 214 225 236
7416 26 52 107 212 412 806 1601 3204 6384 12578 24502 47411 91748 178785 352718 706597 1437520 2962583 6158201 12843931
7515 23 44 100 234 527 1138 2396 4995 10379 21457 43857 88008 172421 328611 608145 1092295 1904695 3227218 5318970 8537806
7619 35 67 125 219 359 555 817 1155 1579 2099 2725 3467 4335 5339 6489 7795 9267 10915 12749 14779
7714 9 -2 -25 -60 -96 -107 -38 250 1146 3714 10678 28555 72047 172745 395881 871826 1854119 3824278 7677249 15042442
780 14 48 119 263 559 1175 2446 5004 10002 19512 37235 69743 128583 233715 418934 740144 1287614 2203656 3707527 6129775
79-6 -13 -11 9 54 127 233 409 798 1797 4331 10342 23629 51210 105348 206191 384454 682459 1149765 1826027 2697892
8014 13 12 11 10 9 8 7 6 5 4 3 2 1 0 -1 -2 -3 -4 -5 -6
819 15 23 41 93 228 528 1127 2265 4422 8622 17094 34685 71869 151157 320706 682873 1452897 3076233 6455943 13379245
8226 38 54 85 154 309 648 1354 2736 5284 9786 17637 31605 57512 107535 206117 399770 772302 1467138 2718337 4891512
837 2 -4 -11 -19 -28 -38 -49 -61 -74 -88 -103 -119 -136 -154 -173 -193 -214 -236 -259 -283
8417 40 72 120 202 355 665 1340 2867 6327 14000 30508 64985 135242 275772 552897 1092529 2128842 4085140 7700052 14210216
85-3 -4 -7 -12 -19 -28 -39 -52 -67 -84 -103 -124 -147 -172 -199 -228 -259 -292 -327 -364 -403
869 21 38 62 99 161 268 450 749 1221 1938 2990 4487 6561 9368 13090 17937 24149 31998 41790 53867
872 9 39 99 204 393 760 1519 3132 6545 13600 27720 54996 105835 197349 356668 625334 1064865 1763453 2843561 4469892
8820 33 49 75 125 228 457 1004 2337 5480 12453 26893 54846 105671 192927 335020 555266 880875 1340177 1957191 2742379
8918 21 16 6 5 57 270 860 2190 4774 9202 15936 24945 35235 44593 50493 54394 73951 171296 510662 1464845
9010 11 18 38 71 100 71 -142 -790 -2316 -5409 -10945 -19511 -29701 -33227 -2480 138638 579164 1757487 4641596 11293649
9125 33 43 67 138 323 742 1611 3346 6797 13731 27756 55976 111792 219447 421300 789851 1449309 2618271 4700169 8479106
9227 42 62 88 120 169 286 615 1492 3635 8492 18826 39628 79522 153115 285551 522357 951296 1749478 3279940 6279276
93-1 11 47 125 280 574 1106 2022 3525 5885 9449 14651 22022 32200 45940 64124 87771 118047 156275 203945 262724
9413 21 51 115 225 393 631 951 1365 1885 2523 3291 4201 5265 6495 7903 9501 11301 13315 15555 18033
9520 35 53 83 140 245 425 713 1148 1775 2645 3815 5348 7313 9785 12845 16580 21083 26453 32795 40220
9610 26 63 132 248 429 694 1074 1663 2751 5098 10427 22235 47044 96239 188667 354200 638496 1109225 1864062 3040786
976 -1 -9 -15 -17 -13 13 141 635 2188 6391 16606 39556 88146 186315 377108 735668 1389501 2549183 4553679 7935653
989 15 43 117 265 514 885 1388 2017 2745 3519 4255 4833 5092 4825 3774 1625 -1997 -7533 -15495 -26471
997 22 41 65 106 207 489 1245 3117 7431 16845 36609 76972 157632 315649 618971 1188707 2234572 4109585 7392185 13006510
10010 9 5 -1 3 51 224 700 1840 4321 9327 18809 35825 64971 112914 189038 306214 481705 738217 1105107 1619759
10112 16 30 69 148 282 486 775 1164 1668 2302 3081 4020 5134 6438 7947 9676 11640 13854 16333 19092
1021 0 10 42 98 172 270 462 979 2368 5718 12970 27324 53756 99658 175614 296325 481696 758098 1159818 1730710
1038 19 38 73 142 283 562 1079 1973 3430 5708 9217 14739 23954 40566 72513 136014 262573 510546 983505 1858428
1049 24 57 114 205 359 643 1184 2197 4026 7209 12582 21441 35785 58667 94684 150641 236428 366153 559578 843909
1058 14 22 32 44 58 74 92 112 134 158 184 212 242 274 308 344 382 422 464 508
10624 34 44 54 64 74 84 94 104 114 124 134 144 154 164 174 184 194 204 214 224
10716 30 63 126 233 405 686 1187 2184 4316 8979 19130 40965 87415 185254 389023 807192 1649322 3307839 6494862 12463897
108-7 -7 1 32 121 335 787 1666 3321 6479 12739 25563 52073 106047 212569 414805 783321 1428197 2513885 4276266 7040633
109-2 1 4 7 10 13 16 19 22 25 28 31 34 37 40 43 46 49 52 55 58
11013 27 38 41 36 48 177 688 2156 5707 13455 29337 60698 121182 235783 449463 842011 1554867 2842648 5177133 9461476
11115 42 93 182 326 549 884 1374 2086 3178 5119 9300 19562 45721 111199 268798 632393 1439844 3177921 6832092 14389654
1127 28 73 151 265 408 559 679 707 556 109 -785 -2315 -4712 -8253 -13265 -20129 -29284 -41231 -56537 -75839
1138 5 13 42 97 177 284 446 766 1532 3473 8340 20149 47680 109278 241921 518597 1082840 2220086 4508651 9140126
11417 27 40 71 149 317 632 1165 2001 3239 4992 7387 10565 14681 19904 26417 34417 44115 55736 69519 85717
11524 37 47 65 117 257 594 1347 2963 6367 13474 28217 58615 120994 248715 510261 1046343 2144574 4386122 8926186 18016274
11611 16 36 80 158 277 445 706 1254 2711 6703 16929 40991 93338 199774 404089 777493 1431666 2536382 4342822 7213860
1170 -2 8 48 141 321 657 1303 2580 5096 9915 18799 34571 61685 107144 181982 303624 499562 812938 1310810 2096097
1184 15 39 91 211 473 995 1967 3741 7078 13740 27774 58093 123376 261026 543285 1106377 2204300 4310572 8314176 15899538
119-7 6 36 87 163 272 446 788 1568 3411 7651 16966 36460 75419 150039 287505 531891 952452 1654990 2797097 4608209
12013 29 56 95 152 244 405 692 1191 2023 3350 5381 8378 12662 18619 26706 37457 51489 69508 92315 120812
12115 27 59 125 237 417 722 1283 2361 4428 8300 15415 28528 53504 103742 210470 445527 969865 2133765 4678765 10135083
12220 31 57 122 274 596 1223 2377 4439 8101 14695 26909 50338 96812 191434 387177 794467 1639641 3377468 6902112 13932807
12310 37 91 200 416 820 1528 2716 4696 8091 14175 25464 46666 86122 157896 284700 501870 862641 1445003 2360456 3765020
1246 24 54 95 153 251 440 812 1516 2778 4926 8421 13895 22197 34448 52106 77042 111628 158838 222363 306741
1259 24 49 84 125 162 193 281 693 2172 6405 16762 39393 84782 169869 320863 576881 994560 1653801 2664816 4176661
1263 10 23 57 149 386 945 2142 4499 8866 16685 30566 55492 101260 187366 352765 675303 1309938 2562335 5026719 9836291
12715 29 55 109 226 481 1024 2134 4299 8344 15672 28779 52397 95981 178896 340733 660899 1294259 2533505 4914517 9388784
12814 33 78 166 331 644 1248 2423 4711 9165 17861 34963 68917 136884 273538 548338 1099300 2198986 4383250 8701159 17195603
1297 5 5 7 11 17 25 35 47 61 77 95 115 137 161 187 215 245 277 311 347
1300 2 9 21 38 60 87 119 156 198 245 297 354 416 483 555 632 714 801 893 990
1318 11 29 79 200 478 1087 2365 4957 10076 19965 38689 73433 136495 248086 439830 758518 1269449 2059289 3241351 4974534
1329 26 71 154 282 459 686 961 1279 1632 2009 2396 2776 3129 3432 3659 3781 3766 3579 3182 2534
133-8 -9 -1 23 70 147 261 419 628 895 1227 1631 2114 2683 3345 4107 4976 5959 7063 8295 9662
13414 38 88 183 349 621 1047 1694 2656 4064 6098 9001 13095 18799 26649 37320 51650 70666 95612 127979 169537
1351 4 7 10 13 16 19 22 25 28 31 34 37 40 43 46 49 52 55 58 61
13610 17 33 71 156 319 593 1016 1655 2681 4550 8393 16823 35591 76964 166498 356232 749489 1545759 3118955 6149158
137-2 5 20 55 147 378 896 1945 3924 7507 13868 25067 44665 78648 136752 234293 394618 652305 1057252 1679807 2617103
138-2 -3 -3 12 76 250 640 1443 3044 6202 12405 24581 48599 96524 193673 393656 809674 1677915 3482413 7194006 14714566
139-5 -2 2 11 40 131 388 1045 2594 6015 13162 27362 54272 103007 187497 327953 552225 896728 1406510 2133961 3135644
140-1 -2 -3 -4 -5 -6 -7 -8 -9 -10 -11 -12 -13 -14 -15 -16 -17 -18 -19 -20 -21
1416 23 51 90 140 201 273 356 450 555 671 798 936 1085 1245 1416 1598 1791 1995 2210 2436
14222 44 78 135 237 421 758 1410 2772 5783 12540 27421 59046 123639 250801 493519 945638 1772306 3262446 5917591 10599023
14324 37 60 106 197 375 727 1435 2867 5730 11311 21837 40990 74618 131688 225532 375442 608675 962934 1489396 2256363
14412 20 49 112 222 392 635 964 1392 1932 2597 3400 4354 5472 6767 8252 9940 11844 13977 16352 18982
1452 7 24 61 126 227 372 569 826 1151 1552 2037 2614 3291 4076 4977 6002 7159 8456 9901 11502
14612 11 22 60 158 379 821 1618 2953 5122 8728 15159 27666 53731 110255 234858 510014 1112985 2415218 5172306 10872818
14717 24 49 120 294 677 1456 2952 5715 10719 19792 36560 68444 130715 254454 501802 994701 1968430 3870295 7539464 14530122
14825 40 65 122 253 535 1117 2293 4630 9184 17861 34010 63355 115342 204806 353380 588983 939636 1414390 1959381 2372399
14925 52 90 138 195 260 332 410 493 580 670 762 855 948 1040 1130 1217 1300 1378 1450 1515
1500 2 24 87 221 468 885 1547 2550 4014 6086 8943 12795 17888 24507 32979 43676 57018 73476 93575 117897
15119 32 61 117 214 369 603 947 1457 2242 3509 5629 9228 15307 25395 41739 67535 107204 166717 253973 379234
15223 32 38 44 60 103 197 373 669 1130 1808 2762 4058 5769 7975 10763 14227 18468 23594 29720 36968
1534 11 19 35 76 180 439 1069 2539 5797 12662 26510 53500 104832 201057 380617 717363 1357502 2598934 5062820 10063437
15410 19 23 14 -24 -121 -314 -610 -897 -761 888 6598 22021 59353 144459 331532 733040 1580211 3343069 6963206 14293206
1553 17 48 105 201 354 600 1028 1847 3495 6800 13203 25053 45984 81384 138966 229451 367373 572016 868493 1288977
156-4 -3 10 49 132 289 583 1147 2252 4449 8873 17855 36050 72341 142802 274973 513588 927669 1618516 2727541 4442064
15719 39 74 133 236 422 765 1415 2696 5313 10758 22099 45557 93732 192181 392487 797276 1606233 3197558 6267150 12058959
158-7 -10 -13 -16 -19 -22 -25 -28 -31 -34 -37 -40 -43 -46 -49 -52 -55 -58 -61 -64 -67
15921 44 74 122 221 432 849 1603 2865 4848 7808 12044 17897 25748 36015 49149 65629 85956 110646 140222 175205
16018 26 39 66 116 198 321 494 726 1026 1403 1866 2424 3086 3861 4758 5786 6954 8271 9746 11388
16121 40 78 164 356 766 1605 3259 6420 12322 23187 43106 79841 148586 279840 535679 1042583 2055644 4079972 8092520 15934162
16220 37 62 95 136 185 242 307 380 461 550 647 752 865 986 1115 1252 1397 1550 1711 1880
1630 2 15 48 121 283 642 1407 2942 5832 10961 19602 33519 55081 87388 134409 201132 293726 419715 588164 809877
1648 13 15 13 15 42 131 338 755 1592 3455 8105 20256 51423 127543 303162 686530 1482119 3060047 6065853 11589253
16512 30 59 93 125 157 214 361 722 1498 2987 5640 10262 18599 34737 67942 137708 281702 566759 1101727 2048287
166-3 10 49 127 264 492 863 1464 2440 4028 6633 11078 19417 37246 79490 183510 436575 1030078 2361565 5219525 11107638
16716 33 54 90 174 378 846 1849 3867 7702 14625 26559 46299 77769 126315 199032 305122 456279 667096 955488 1343124
16819 43 88 176 343 647 1194 2198 4111 7897 15598 31482 64323 131829 269087 544536 1090317 2160903 4249054 8320480 16296305
16922 41 67 112 212 447 969 2039 4084 7808 14445 26357 48398 90840 175255 345646 688410 1366499 2675535 5132758 9613680
17012 25 47 89 162 277 445 677 984 1377 1867 2465 3182 4029 5017 6157 7460 8937 10599 12457 14522
1715 0 -7 -1 49 197 534 1225 2596 5304 10634 21018 41034 79540 154415 302881 602927 1215420 2462671 4968277 9895903
172-9 -14 -15 1 65 237 627 1430 2974 5775 10594 18507 31038 50464 80459 127293 201992 324897 538038 942790 1811370
1732 4 0 -10 -11 41 233 709 1684 3458 6430 11112 18143 28303 42527 61919 87766 121552 164972 219946 288633
1747 26 67 150 317 656 1342 2714 5434 10819 21508 42739 84695 166680 324376 622208 1174037 2177180 3967333 7105608 12513901
17512 22 38 64 119 247 532 1123 2276 4424 8309 15295 28210 53572 107038 225653 493336 1090494 2385292 5093646 10548309
17614 12 10 19 59 159 357 700 1244 2054 3204 4777 6865 9569 12999 17274 22522 28880 36494 45519 56119
1772 14 43 115 280 632 1341 2710 5286 10076 18959 35465 66244 123814 231609 433008 806986 1494370 2740499 4962479 8852304
17816 36 82 165 307 556 1007 1841 3405 6374 12066 23034 44170 84820 163047 314653 612780 1210538 2432293 4964944 10250289
17910 8 10 20 58 188 557 1451 3382 7223 14402 27147 48738 83665 137509 216252 324578 462546 619794 766166 837338
1809 22 46 85 154 288 571 1200 2601 5616 11777 23672 45407 83249 146871 252546 431725 752582 1369644 2629419 5280540
18116 20 35 87 210 449 878 1653 3133 6129 12402 25663 53593 111897 232285 477770 971150 1946550 3840269 7447123 14183748
18222 44 94 197 405 821 1643 3250 6376 12465 24392 47913 94545 187207 371116 734593 1448530 2841203 5540681 10747619 20760527
1834 15 42 101 226 487 1024 2115 4318 8768 17778 36006 72647 145461 288069 563007 1084756 2059673 3853830 7105719 12909204
18415 23 48 115 271 611 1319 2724 5371 10107 18182 31365 52075 83527 129893 196478 289911 418351 591708 821879 1122999
1857 6 17 48 107 202 341 532 783 1102 1497 1976 2547 3218 3997 4892 5911 7062 8353 9792 11387
186-4 3 25 70 153 309 619 1270 2682 5750 12268 25628 51937 101824 193553 358902 655155 1190487 2177891 4048307 7684230
187-2 4 19 40 65 112 264 766 2210 5847 14057 30979 63235 120551 215877 364424 581237 878545 1269600 1800115 2661524
18818 30 45 58 64 58 35 -10 -82 -186 -327 -510 -740 -1022 -1361 -1762 -2230 -2770 -3387 -4086 -4872
1898 20 59 143 292 523 844 1247 1700 2138 2453 2483 2000 697 -1826 -6077 -12688 -22432 -36241 -55225 -80692
19011 12 8 -7 -28 -26 65 361 1041 2360 4662 8393 14114 22514 34423 50825 72871 101892 139412 187161 247088
1916 6 19 54 113 189 264 307 272 96 -303 -1028 -2205 -3985 -6546 -10095 -14870 -21142 -29217 -39438 -52187
19226 40 63 112 222 455 906 1708 3036 5116 8278 13187 21602 38439 76677 167925 383519 874229 1941697 4162964 8603981
19312 19 31 58 110 209 412 843 1741 3551 7128 14215 28539 58216 120779 253209 531098 1103839 2256973 4519124 8840092
19414 28 47 71 102 153 266 539 1162 2462 4957 9419 16946 29043 47712 75551 115862 172768 251339 357727 499310
19519 22 38 89 208 457 958 1941 3833 7447 14380 27796 53861 104226 200137 378978 704206 1279303 2264473 3888958 6437241
19620 38 83 177 353 665 1204 2120 3650 6152 10145 16355 25767 39683 59786 88210 127616 181274 253151 348005 471485
19718 33 52 75 103 147 258 596 1573 4137 10313 24197 53757 114135 233848 466630 914030 1767831 3387708 6439669 12137157
19816 32 61 98 136 164 171 173 281 836 2678 7743 20501 51456 125378 299753 704238 1621680 3648963 8007452 17127734
1990 9 25 62 141 293 566 1037 1844 3286 6097 12096 25583 56164 124287 271914 582905 1221701 2506400 5046590 10003946
200-4 12 56 141 280 486 772 1151 1636 2240 2976 3857 4896 6106 7500 9091 10892 12916 15176 17685 20456
diff --git a/2023/10/10a.c b/2023/10/10a.c
new file mode 100644
index 0000000..d25b0c8
--- /dev/null
+++ b/2023/10/10a.c
@@ -0,0 +1,76 @@
1#include <stdbool.h>
2#include <stdio.h>
3#include <stdlib.h>
4#include <string.h>
5
6#define N 1000
7
8typedef enum { EAST, SOUTH, WEST, NORTH } direction_t;
9
10int main() {
11 char map[N][N];
12 int i, j, k, n, s;
13 direction_t dir;
14
15 for (n = 0; fgets(map[n], N, stdin) != NULL; n++) ;
16
17 for (i = 0; i < n; i++)
18 for (j = 0; map[i][j]; j++)
19 if (map[i][j] == 'S')
20 goto found_s;
21
22found_s:
23 if (map[i][j+1] == '7' || map[i][j+1] == '-' || map[i][j+1] == 'J') {
24 j++;
25 dir = EAST;
26 goto found_direction;
27 }
28 if (map[i+1][j] == 'L' || map[i+1][j] == '|' || map[i+1][j] == 'J') {
29 i++;
30 dir = SOUTH;
31 goto found_direction;
32 }
33 if (j > 0 && (map[i][j-1] == 'L' || map[i][j-1] == '-' || map[i][j-1] == 'F')) {
34 j--;
35 dir = WEST;
36 goto found_direction;
37 }
38
39found_direction:
40 for (k = 1; map[i][j] != 'S'; k++) {
41 switch (map[i][j]) {
42 case '|':
43 if (dir == SOUTH) i++;
44 if (dir == NORTH) i--;
45 break;
46 case '-':
47 if (dir == EAST) j++;
48 if (dir == WEST) j--;
49 break;
50 case '7':
51 if (dir == EAST) { i++; dir = SOUTH; }
52 if (dir == NORTH) { j--; dir = WEST; }
53 break;
54 case 'F':
55 if (dir == WEST) { i++; dir = SOUTH; }
56 if (dir == NORTH) { j++; dir = EAST; }
57 break;
58 case 'J':
59 if (dir == EAST) { i--; dir = NORTH; }
60 if (dir == SOUTH) { j--; dir = WEST; }
61 break;
62 case 'L':
63 if (dir == WEST) { i--; dir = NORTH; }
64 if (dir == SOUTH) { j++; dir = EAST; }
65 break;
66 default:
67 printf("Error: dead path\n");
68 return 1;
69 }
70 }
71
72 s = (k+1)/2;
73
74 printf("%d\n", s);
75 return 0;
76}
diff --git a/2023/10/10b.c b/2023/10/10b.c
new file mode 100644
index 0000000..0b298dc
--- /dev/null
+++ b/2023/10/10b.c
@@ -0,0 +1,156 @@
1#include <stdbool.h>
2#include <stdio.h>
3#include <stdlib.h>
4#include <string.h>
5
6#define N 1000
7#define set(i, j, c) if (newmap[i][j] == '.') newmap[i][j] = c;
8
9typedef enum { EAST, SOUTH, WEST, NORTH } direction_t;
10
11char map[N+2][N+2], newmap[N+2][N+2];
12int n, si, sj, count[26] = {0};
13direction_t sdir;
14
15void printmap(char m[][N+2]) {
16 for (int i = 1; i < n; i++) {
17 for (int j = 1; m[i][j] != 'B'; j++)
18 printf("%c", m[i][j]);
19 printf("\n");
20 }
21}
22
23void color_rl(direction_t dir, int i, int j) {
24 switch (dir) {
25 case EAST:
26 set(i-1, j, 'L');
27 set(i+1, j, 'R');
28 break;
29 case SOUTH:
30 set(i, j+1, 'L');
31 set(i, j-1, 'R');
32 break;
33 case WEST:
34 set(i-1, j, 'R');
35 set(i+1, j, 'L');
36 break;
37 case NORTH:
38 set(i, j+1, 'R');
39 set(i, j-1, 'L');
40 break;
41 default:
42 break;
43 }
44}
45
46direction_t firstdir(int i, int j) {
47 if (map[i][j+1] == '7' || map[i][j+1] == '-' || map[i][j+1] == 'J')
48 return EAST;
49 if (map[i+1][j] == 'L' || map[i+1][j] == '|' || map[i+1][j] == 'J')
50 return SOUTH;
51 return WEST;
52}
53
54void advance(int *i, int *j, direction_t dir) {
55 if (dir == EAST) { (*j)++; }
56 else if (dir == SOUTH) { (*i)++; }
57 else if (dir == WEST) { (*j)--; }
58 else (*i)--;
59}
60
61direction_t newdir(int i, int j, direction_t dir) {
62 switch (map[i][j]) {
63 case '|':
64 case '-':
65 return dir;
66 case '7':
67 if (dir == EAST) return SOUTH;
68 if (dir == NORTH) return WEST;
69 case 'F':
70 if (dir == WEST) return SOUTH;
71 if (dir == NORTH) return EAST;
72 case 'J':
73 if (dir == EAST) return NORTH;
74 if (dir == SOUTH) return WEST;
75 case 'L':
76 if (dir == WEST) return NORTH;
77 if (dir == SOUTH) return EAST;
78 default:
79 printf("Error: dead path at (%d, %d)\n", i, j);
80 exit(1);
81 }
82 return EAST;
83}
84
85void walk_and_color_rl(char c) {
86 int i = si, j = sj;
87 direction_t dir = sdir;
88
89 newmap[i][j] = c;
90 color_rl(dir, i, j);
91 advance(&i, &j, dir);
92 for (; map[i][j] != 'S'; advance(&i, &j, dir)) {
93 newmap[i][j] = c;
94 color_rl(dir, i, j);
95 dir = newdir(i, j, dir);
96 color_rl(dir, i, j);
97 }
98 color_rl(dir, i, j);
99}
100
101void fill(int i, int j, char c) {
102 if (newmap[i][j] != '.' && newmap[i][j] != 'R' && newmap[i][j] != 'L')
103 return;
104
105 newmap[i][j] = c;
106 count[c-'a']++;
107 fill(i, j+1, c);
108 fill(i, j-1, c);
109 fill(i+1, j, c);
110 fill(i-1, j, c);
111}
112
113int main() {
114 /* Get input */
115 for (n = 1; fgets(&map[n][1], N, stdin) != NULL; n++) ;
116
117 /* Add borders, copy to newmap */
118 for (int i = 0; i < N+2; i++) {
119 for (int j = 0; j < N+2; j++) {
120 newmap[i][j] = map[i][j];
121 if (map[i][j] == 0 || map[i][j] == '\n')
122 newmap[i][j] = map[i][j] = 'B';
123 }
124 }
125
126 /* Find S and set the initial direction */
127 for (si = 1; si < n; si++)
128 for (sj = 1; map[si][sj] != 'B'; sj++)
129 if (map[si][sj] == 'S')
130 goto found_s;
131
132found_s:
133 /* Set the initial direction and walk the path mark it with X */
134 sdir = firstdir(si, sj);
135 walk_and_color_rl('X');
136
137 /* Replace the unnecessary pipe symbols with dots */
138 for (int i = 1; i < N; i++)
139 for (int j = 1; map[i][j] != 'B'; j++)
140 if (newmap[i][j] != 'X')
141 newmap[i][j] = '.';
142
143 /* Walk again the path and mark adjacent dots left and right */
144 walk_and_color_rl('Y');
145
146 /* Mark the remaining dots left and right */
147 for (int i = 1; i < n; i++)
148 for (int j = 1; newmap[i][j] != 'B'; j++)
149 if (newmap[i][j] == 'R' || newmap[i][j] == 'L')
150 fill(i, j, newmap[i][j] + 'a' - 'A');
151
152 printmap(newmap);
153 printf("r: %d\nl: %d\n", count['r'-'a'], count['l'-'a']);
154 printf("Check with the map printed above which one is 'inside'\n");
155 return 0;
156}
diff --git a/2023/10/in.txt b/2023/10/in.txt
new file mode 100644
index 0000000..3d6da60
--- /dev/null
+++ b/2023/10/in.txt
@@ -0,0 +1,140 @@
1F--FJ77F-L7---J-F777-F7|77F|-J-F|77|F-L-J-77-L7FL77-7|----.F7-|-|.7-.-FL-FF-FF77.|.F-F-.F|.7.F.7-F-77.J7|----7LL7F|7|-F-J-777-77.F-7-FL77FF|
2F7FJ.LF-7JJ||.JF-J-7F-FLJJ|F7JFL|LJ.|.|7LFF-J|J-L7LJFJF||.F.FFJFF7L7.L-JF7.FLL-FJ-J7F|L-7|F7.7-|.J7|F-7LJ|FFL7J-77||LF-JJ|L7JLLJLL--F7|.LFFJ
3LL7|7FJFJ7L--LJ|.LF7--|JJL-.|7FF-7.LJ-LLJFLJL|.|.LJ||.7JF-7F|L-|J|L7F||LFJL|.7J|LJ.--77|.LLFF77||7F|JLF-77-|7F7LFJLJ-FJJ-7FLL7J.|7|7.L.FLF77
4||FJ--.F-7FL7JJL7.|JL-LF777FFF7|-FJJ.L||--JF7JLL|777LL-.|FLL|.|J.|L|-L7.LFL7-JF7F77..L7F7JF7|L77JLFJJ.L7|LLJJJLFJFJJ.JJJ.L7.||FLFFF7F|FJ-||F
5||JJF|-J7L|.LJ7..-J.|JL||F7F7JFF-7J.7|F7J-L|J-|-J7-7-|.FFL7LJ77|FJ7|JLJL--.||L|FFJ--LLJJFF|LJFJ77.||..F7J7FF|L7JF|J777|-|JJF|J7.L|.|FLF7FFJ|
6|J|-|7JF77L-|JF-7J-7J-||LJLJL--7.|FF77|||..LF7-7L77F--L77L|FF|L77LFF-7JJFLFF7|F7-J-LF|7F-7L-7|7F7.F77F-7FL|77F7LFJ-JFLJFJJ-LJJ|L.|FF-7FL7JFJ
7|LJJ||LL|77F|JLF7|FL-F7L-7F7F7FJF-7||-||77.F|.FL7|7LF7|L7|LF7JLJ|F-||JL-7|F|L-J|JJJ.FF-JFJF-JL7|L7||7L7L-7.FJ|J|LJ7.|.J|..FJ|L7.-7JLL||L-.JJ
8|F|LF7.||-FJ||.L7-|.F|L--J|LJLJ-|FJ||L||F7F7777L|7F7FF7J|F7||7.FF|F|JL7J-F.L7F7|F7F7JL-7|-L-7FJ|FJ||F7L7FJ7|.|LL|FL--F-L7FF-|FJ-L|.-.L-7-FL7
9L-F---|7.FLJJF||L...|L---7L7F7.FJL7||FJ||LJ|F77FFF7F7|L7FJ||L--7F-7-7-J7-|7LLJ|LJ|||JFL||F7F|L7|L-J|||-||F7F|J7FLJ-7-7-LF7LF|7JF-JL77LLL7.|J
10J7F7JL|LFL-JJF77|-F-----7|FJ||7L-7||||FJ|F-J|L7F7||||L7|L7||F--JL7|-F7L7.|7FF7L7FJ||F7FJ||L7L7LJF-7||L-J||L-77L-J|-F-LF7.77L7J.|F7L-7-|JL|L|
11.|L|FJ..LLL.FF-77F|F---7||L7|L-7FJLJ||L7|L-7|FJ|||LJL7|L7|LJL7J|FJL-J|J||LFFJL-JL-J|||L7||FJ7L-7|JLJL7F-JL7FJ-|J7LF77|||-L.LL|F.LJLL|7-7LL-J
12-.|LJ||-F7|FJ.FF7.LJJF7|LJFJ|F-JL-7FJL7LJF-J||FJ|L--7|L7|L-7FJ.FL7F--JF7J.FJF7F---7LJL7|LJL-7-FJL7-F7|L---J|JF7LF-JLFF7||L-F--JF7|.LL77|JL-|
13LLJ.LLJFJJ-7-FF||.J|J||L-7L7|L--7FJL-7L-7|F7|LJFJ7F-JL7||F-JL-77F|L---J|-FJFJLJLF-JF--J|F7F7L7|F7L7|||F----J.||7FFL7F7FJ7JFL||||LJ..L|7J|FF7
14.||-.L|-|7.J7F-J|7--FJL-7L7||F--JL7F-JF-JLJLJF7L-7L--7|||L--7FJF7|F----J.|FJJLF7|F7|LF7||LJL7|LJL7||LJL7F--77||-F7.F7-JF7.-7L777.FF7F.L7--||
15-|7.|||JLF7.FJF7L77.L--7L-JLJL7F--JL-7L--7F7FJL--JF7FJ||L7F-JL7|LJL-7F-77LJ7F7||LJ|L7|LJL7F-J|F--J||F--JL7FJFJ|FJL-J|7JFJ.L777JF7-J--JFJ7|.7
16F77FFF---L7-L-JL7|77LF-JF7F7F-JL----7|F-7||LJF7F7.||L7||FJL-7FJ|F7F7LJFJF7|FJ|||F-JFJ|F--JL--JL-7FJ|L-7F7|L7|FJL7F--J---7L7FJ|FLL7.F|LLJ7L7|
17|J|7.F7|.F-.|FF-J|F7LL--J||LJ7F-----J|L7|||F7|LJL7|L-JLJL-7FJL7||LJL--JFJL7L7|||L-7L7|L------7LFJL7|F-J|||FJ|L-7|L-7||-J7L7.FFJL|LJ-L7.|77L7
18JF||7|F|7.|7|FL-7|||F7F--JL--7L--7F-7|FJ||||||F--JL----7F-JL-7||L--7LF7L-7|FJ||L--JFJ|F------JFJF7||L7L||||-L7FJ|F-JF7.|F-J7L|FF7-JJ-7--.|J|
19F|LJ-|.|LFLJ|77FJLJLJ|L--7F--JF7-||FJLJFJ|||LJL-7F7F7F-J|F7F7|||F--JFJ|-FJLJFJL---7|||L-7F---7|FJ||L7L-JLJ|F-J|FJL7FJ|7F7.F|||FF|LLJ.||.LJJF
207J.F7J7---J.LLFJF---7|F7FJL--7|L7LJL-7FJFJ||F---J||||L-7||LJLJ||L--7L7L7L--7L7-F7FJL-JF-JL7F-JLJFJ|-L7F---JL7FJL7FJ|FJFJ|.F77JFFF.FFF7F-JL7J
21F777.LF-JJ7F7LL7|F--J|||L7F--JL7L7F--JL7L7|||F7.FJ|||F7||L---7||F--J-L7|F7J|FJFJ|L-7F-JF7FJL7F7FJFJF-JL---7FJL7FJL-JL7L7|FJL77FJL.F7.7JJ.|J7
22|F-J--7|.FJ-F7L|||F-7LJ|-|L7F7-L7|L--7FJFJ||LJL7L7||||||L7F--J||L--7F-J||L-JL-JFJF7|L7FJ|L-7|||L7||L7F----JL7FJ|F7F-7L-JLJF-J-J-J.||FJ|.F7.|
23LLJ7FF-77|7-L|L||||-L-7L-JFJ|L-7|L7F7||.L7LJF--JF||||||L7|L--7LJF--JL-7|L----7FJ-|LJFJ|FJF-S|||FJ|F7||F-7.F7|L7||||FJF----JFF7J|FFLJJ7L-FJFJ
24.FLF-LJ--LL7FF7LJ||F--JF-7|FJF-JL7|||||F7|F7|F7F7||||||FJL7F7|F-JF7F7FJ|LF7F7||F7|F7L7|L7L-7|||L7||||||FJFJLJFJ||LJL-JF7F7LF||-.JL|-L-7||||J
25LF7L|.|LLJJLFJL-7LJL--7|.|||FJF7FJLJLJ|||LJ|||LJLJ||LJ||F7LJ||L7FJ|||L7L7|LJLJLJ|LJ|FJ|FJF-JLJL7|LJ||LJ|FJF-7L-JL---7FJLJL-7||..|7..F-J7-||.
26F|7F-F---J.|L-7FJ-|JF7LJFJLJL-J|L---7FJ||F7|LJF7F7|L7FJLJL7FJ|FJ|FJ|L7|FJL----7FJ-FJ|||||L-7F7FJL7FJL7FJL7|-L-7F----JL7F7F-J|L7.-7..JJ.J.77-
27-J||.|7|.F-FF7|L-7F-J|F-JF--7F-J-F--J|FJ||||F-JLJLJFJL--7J||FJL-JL7|FJ|L7-F7F-J|-FJFJFJ|F-7||||F-JL7J||F7|L--7|L-7LF7.LJ|L-7|FJ7JLF.|-||FL-7
28|-F--F77-77FJ|L7FJL-7LJF7|F-JL--7L--7||FJ|LJL7F7-F7L--7FJFJ|L-7F7FJ|L7L7|FJ||F7L7L7L7L7LJFJLJ|||F-7|FJ||||F--JL--JFJL-7FJF7||L--7.|-J7LL7-|7
29L||-FJ||LF-JFJFJ|F--JF-JLJL-7F-7|F--JLJ|7L-7FJ||FJL7F7|L7L7L--J|||FJFJL||L7|LJL7L7|FJ-|F-JF7J||LJFJ|L7||LJL7F7F--7|F--JL7|LJ|F--JF|||||-LFF7
30F|7.JL-F-JF7L7L7|L---JJF----JL7LJL----7|F7||L-J||F-J||L7L7|F---J||L7L7FJ|L|L7F-JFJ|L7FJL--J|FJ|F7L7|L||L-7FJ|||F-J|L7-F7|L--JL----7J77FF-J|L
31-JL7JFLL7FJL7L-J|F----7L-----7|F77F7F-J|||FJF--J||F7||LL7LJL---7LJJL7|L7|FJFJL-7L7|FJL-7F--JL7||L7|L7||F7||7||||F7|FJFJLJF-7F-----JJL|JL77FJ
32.J.|-J..LJ7LL7F-JL-7F7L------JLJ|FJ|L-7||||FJF7FJ|||||F7L-7F---JF--7||J|||FJF7|L7|||F7FJL7F-7|||FJL7||LJ||L-J||LJLJL-JF7FJFJL-7.L-|F-7.LJJ.|
33|FFJ7.FF7F7F-JL7-F7LJL--7F7F---7|L7|F7|LJLJL-J|L7||||LJ|F-J|F7F7L-7LJL7|||L7||F-J||||||F-JL7||LJ|F7|||F-J|F--J|F---7F7|LJ7L-7FJ7||FFJ.F7FJ--
34-|7|F7FJLJLJF-7L7|L7F---J|||F--JL-JLJ|L7F-----JFJ||||F-JL-7LJ||L7FJF--J|||FJ||L-7LJ|||||F7FJ|L-7|||||||F7|L7JFJL--7|||L-7-F7||-F-LJL|7|-|-L|
35.|F-JLJF----J-|FJ|FJL--7FJLJL7F-----7|-||F7F7F7L7|||||F7F7L7FJL7|L7|F7L||||-||F7L-7|||||||L7|F7|||||||||||FJFJF7F-JLJL7FJ|||||J|7J|.LJJ|||F|
36FLL-7F7|F7F---JL7|L7F7FJ|F7F-J|F7F--J|FJ|||||||FJ|||||||||FJL-7||FJ|||FJ||L7||||F-J||||||L7|||LJ||||||||LJL-JFJLJF7F7JLJ-FJ|LJ||7--JJ|-7F||J
37||7.LJLJ|LJF---7LJFJ||L-J||L--J||L--7||FJ|LJ|||L7||||LJLJ|L-7FJ|LJJ||||FJL7|||||L7FJ|||LJFJ||L-7||LJ|||||F7F-JLF-JLJL-7F7L7|F-7JJ|.LF|7.-L|-
38F7-F-7F7L--JJF-JF-J7||F--JL--7FJL---J||L7|.FJ||FJ||||F7F-JF-JL7L7F-J|||L7FJ||LJ|FJ|FJ|L7JL7||F-J||F-J|||FJLJ.F7L7F----J|L-JLJFJJ-FL7L-F7J.|.
39F77L7LJ|-F7F7L-7L7F7|||F7F--7|L7F---7||.|L7|FJ||FJ||LJ|L-7L--7L-JL-7|LJ7|L7|L-7||FJL7L7L-7|||L77LJ|F7|||L----JL-JL----7L7F-7FJF7JFJL7|||FF|J
40|L--JF7L-JLJL-7|FJ||||LJ||F-JL7LJF7FJ||FJFJLJFJ|L-J|F7L7FL7F-JF----JL--7|FJL7FJ||L7FJ.|F7|LJL7L-7JLJ||LJJF-7F--7F7F7F7L7LJFJL-JL-7.L7F-|-FJJ
41|F--7||F7F7F-7|||FJLJ|F7LJL7F7L7FJLJJLJL7L-7-L7|F--J||FJF-JL7FJF7F7F-7FJ||-FJL7||FJ||FJ||L-7FJF7L-7FJ|F--JFJL-7||||||L7L7FJF-7F--J7FJ|LL-|J.
42LJF-J|||LJLJFJLJ|L-7FJ|L7F7LJL7LJF--7F7FJF7|F7LJL7F7||L7L7F7|L-JLJ||FJ|7|L7|F-JLJL7L7L7||F-JL7||F-J|FJL--7L---JLJ||LJFJFJ|FJ7|L-7J|-L-7J|F77
43FFJF7|LJF7F-JF-7L--JL7|FJ|L7F7|F-JF-J||L-J|LJL--7|||||FJFJ|||F7F-7||L7L7L-J|L---7FJFJ7||||F7FJ||L7JLJF7F7L7F7F7LFJL-7L-JF|L-7L-7|F7J|LF77J-J
44FL-J||F-JLJF7L7L7F--7||L7L7||LJL7|L--JL--7L7F---JLJ||||.L-JLJ||L7LJL7L7L-7-L----JL7L-7LJ|LJ|L7|L7L-7FJLJL-J|||L7L7F7L-7F7|F-JF7LJ||JL-|LJ.|J
457FL|||L--7FJL7||LJF7|||FJFJLJF-7|F------7L7|L----7FJ||L7F--7FJL-JF7FJFJF7L-------7|F7|F-JF7|L|L7|F-JL7F----JLJFJL|||F7LJLJL-7||F7|L7J|L77FL7
46|7JFJ|L||||F-J|F--JLJLJL-JF7FJ|LJL-----7L7|L7F---JL-J|FJL-7LJF7F7|LJFL7|L-7F-7F7FJ|||||F-J|L7L-J|L7F-J|F------JF7LJLJL-7F---J|||||FJ|F--|J7.
47L7-|FJF|FJ||F-JL-7F7F7F7F-J||JF---7F---JFJ|FJL-7F7F-7||F--JF-JLJ|L-7F-JL-7||7|||L7||||||F-JFJJF7L-JL--JL-------JL7F7F-7LJF---JLJ|||F7|||LJF7
48L|-LJFJ-L7|||F---J|LJ||||7FJL7L-7FJL-7F7L-JL7F7LJLJFJ||L7F-JF---JF7|L7F7FJ|L7||L-JLJLJLJ|F-JF-JL--7FF7F---7F-----J|||FJFFJF-----J|LJL7JFLFL-
49.|.|||JJ|LJLJL7F-7|F7LJLJFJF7|F-JL--7LJL-7F7LJL--7FJL||LLJF-JF7F7|||FJ||L7|FJ|L----7F---J|F7|F7F-7L-J|L--7LJF-7F7FJ|||F7L7L---7F-JF7FJ.7.|L|
50--J-LJF-F-7F7FLJFJ||L----JFJLJL7F--7L7F-7LJL---7||L-7LJF--JF7|LJ||LJL7|L7||L7L7F--7|L7F-7||LJ|LJLL--7L--7L--JFJ|||FJ||||-L7F--J|F7|LJJ7F7J-7
51F7.|7.JLL7LJ|F7-L-JL-----7|F---J|F7L7LJ|L---7F7L7L--JF7L--7|||F-JL-7FJ|7LJ|FJFJL7FJ|F||FJ||F7L7F----JF-7L----JJ|LJL-J|||F-JL---J||L----J|.--
52LLFF-F7F7L-7LJL7F7F------J|L----J||FJF7F---7||L7L----JL7|FJ|LJ|F-7FJL7L--7|L7|F7|L7|FJ||FJLJL-JL--7F7|FJF---7F7L7F---J||L7F----7||F7F-7FJ-LJ
53L--|FJL|L--JF-7LJLJF7F-7F7|F----7|LJFJLJF7FJLJ7L7F--7F7L7|FJF7||L|L-7L7F7||FJ||LJJLJL-J||F7F-----7LJLJL7|F--J||FJL--7FJL-JL7FF7LJLJ|||||...|
54||LL77LL-7F7L7|F-7FJ||J||LJL---7|L--JF--JLJF7FF7|L-7LJL-JLJFJLJL7L7FJFJ||||L7|||F---7F-J|||L----7L----7LJL---JLJF---JL7F--7L-JL---7||7LJF-7F
557J7LLF.L7||L-J||FLJ7LJFJ|F-7JF-J|F7F7L-----JL-J||F7L7F7JF7LL-7F7L7LJLL-JLJ|FJ|L7L-7FJL-7||L-----JF---7L--------7L-----JL-7|F------J|L-7----7
56LL7JF|F.FJ|JF-JL7F-7JFJFJL7L-JF7LJLJL-----7F7F-J||L7LJL-JL7F-J|L7L7F7JF--7|L7|FJF-JL---J||F------J7F-JF-------7|F7F------J|L---7-|L|F-J7-F-L
57.FL-FJJFL7||L7F-JL7L-JFJF7L---JL---------7||LJF7LJFL-7F-7FJL-7|FL7LJL-JF7||FJ||.L7F----7|LJLF7F----JF-JF7F7F7FJ|||L--7F--7|F7F-JF77|L7----.L
58F-LJ.|.LFJ|-JLJF--JF7FJFJ|F7F77F-------7FJLJF-JL7F7F7|L7||F-7||F7|F7F--JLJLJLLJ-JLJF7F7LJJF-J||F--7FJF-JLJLJLJFJ|L7F7LJF7|LJLJF-JL7L7|7.|LJJ
59-.|FL-7|L-J7|F7L-7FJLJ7L7LJLJL-JF7F7FF7|L--7|F--J|||||FJLJL7|LJ|LJ||L7F7F7J|.|LLFFFJ||L7F7L-7|LJF-JL7L----7F-7L-J7||L7FJLJLF7F|F--JFLJJ7.F|J
60|-F-JF|-F7F--JL7FJ|F---7L-7F7F7FJLJL-J|L7F7LJL---JLJ||L--7FJL--JF7|L7LJLJL-77F77F7L7||FJ||7FJL7JL---JF7F--J|FJF7F7|L7||F7F7|L-JL---7J|7|FL-7
61FFL7L7J7||L-7F-J|FJL7F7L--J|||||F-----J|||L--7F7F-7FJL7F-JL----7||L7L7F7F7FJFJL-JL7|LJL7||FJF7|F7F-7||LJF--JL7||||L7||LJLJLJF---7F7L-7-L-J||
62--7LF-7F||F7||F7LJ7-LJL--7FJLJLJL7F----7|L--7||LJ7LJF7LJ.F7FF77||L7L7||LJLJJL----7|L-7FJ||L-J||||L7L7L--JF-7FJ|||L7LJL7F---7L--7|||F-JLL|--J
63L7|.|L-FJLJ||||L7F7FF7F--J|F7L|F7LJF---JL-7FJLJF----JL7FFJL7|L7LJ-|FJLJ.LJ7L|F--7|L--JL7|L77FJ|||.|FJF7F7L7LJFJLJFJ.F7LJF-7|F7FJLJLJJJ7F--J|
64|LJ|L7JL--7LJLJFJ||FJ|L--7||L7FJL--JF--7F7LJF7FJF7F--7L7|F7LJFJLF-JL---7-FF-7L-7|L----7|L7L7L7|||FJL-JLJL-JF-JF7FJF7||F7|FJLJ|L--7LJ..FLJLL7
65LJ77-L7||FJF7F7|J||L7L---J|L7LJF----JF-J|L7J|||FJLJF7L-J||L--J7.L7F7F--JFLL7L--JL--7F7||LL7|FJ|||L---------JF-J|L-JLJLJLJL--7L---JL|7|7.7|F7
66|.F77.-J7|FJLJ||FJL7L-----J-L--JF----JLFJFJFJLJL-7FJL7LFJL7.F-777||LJ7|-F||L---7F-7LJLJL--J|L7LJL---------7FJF7|F-7F7F-7F7F7L---7J.|J.L7||J|
67L7|L7FJLF||-F7||L-7L7F----7F7F7LL------JFJ-L7F---JL7FJFJF7L-JFJF7|L-7-77L7FL-F-J|.L7F---7F7L-JF-7F-------7|L-J|LJ-LJLJ|||LJL----JLFJ-7.FJ||L
68L7J-LLFF-J|FJ|||F-JFJL---7||LJL7F-------JF7FJL--7F7|L-JFJL---JL|||F7|-77LLJ|.L7FJF-J|F--J|L---JFJL-7F----JL---JF7JF7-F7|L-----7F77JL-J-L-FFL
69-J-|JLL|F7|L7LJLJF7L-7F7FJLJF-7|L--7F-7F7|||F---J|LJF--JF7F----J|LJLJF7FF|J|FFJL7L7FJL---JF7F-7|F7FJL7F--------JL-JL-J||F--7F7LJ|7.|-FL|7J.|
70L.F.F-JLJLJJL7F-7|L-7||||F--J7||F7FJL7||LJLJ|F7F-JF7|-F7|||F---7L-7JJ7|||.LJFL--JFJ|F7F7F7||L7|LJLJ.FJL7F-----7F----7FJ|L-7LJ|F7L777-L|JL77.
71FFL-J-F7J|JJ|||.LJF-JLJ|LJF--7||||L7FJLJF-7FJ|LJF7|LJFJLJ|||F77L--J|JL7F-.|.|LLF7L-J|LJLJLJL-JL--7F-JF7|L-7F7FJL---7|L7|F7L-7LJL-J-JF-7-J.F7
72J..FF-JL7F7F-J|F7FJF7F7L-7|F7LJLJL-J|F7FJFJL-JF-J|L-7|F--J|LJL7F---7--7J--F7L-FJL---JF7F7F7F---7FJL-7|LJ|FJ|||F7F--JL-JLJL--JJF-7L|.|||FLFF7
73.FFFL--7LJ|L--J||L7|LJL7FJLJL7F-7F--J|LJ||F7F7L-7L--J|||F-JF--J|F--JFFJ7.|.F77|F-----JLJLJLJF--JL---J|F--JFJ|LJ||F--7F-7F7F7F7|FJ7J.-7-F7L7J
74|-LJ|JL|F7L---7||-LJF--J|F7F-JL7LJ7F7L-7FJ||||F-JF--7|L-JF7L---JL-7F7|7LJJFLFFJ|F-----7F----JF7F7F-7FJL---JFJF7LJ|F-JL7LJLJLJLJ||.7FL||L|7.L
75L7.F||.||L-7F7LJ|F-7L--7|||L---JF--JL--JL-J|||L--JF-J|F--JL-7F-7F-J||F7J|J|J|L7|L-7F-7|L7F7F-J|||L7LJF-----JFJL-7||F7L|F7F7F7F7|7F777|F.L|||
76FL7FF7-LJF-J|L-7LJFJF--JLJL---77L---------7LJ|F7F7L--JL----7|L7LJ|7|LJL---7|F.||F7LJFJL-J||L7FLJ|FJF-JF--7F7L7F7LJLJL-J|LJLJLJLJFJ|7LL|F-FLJ
77LLL|JFJ|JL--JF7|F7L-JF7F7F7F-7L-7F--------JF7||||L7F--7F--7|L7|JF--JF---7FJ7L-LJ||F-JF---JL-JF--JL7L--JF7LJL-J|L-7F7F--J.F7F7F-7|FJ.-.LL7|.|
78.|.L-|-F--7F-JLJ|L-7FJ||LJLJLL-7|L-7F-7F---J||||L7|L-7|L-7||LLJLL--7|JF7LJ7|7|F-J|L--JF---7F7L----JLF7FJ|F----JF7LJ|L----JLJLJFJ||F7.7-L|--F
79|-.L-|LL-7|L7F7FJF-JL7||F----7FJL--JL7LJF---JLJ|FJL7FJL-7|LJLF7.|JFJL7||F7F--7|F7|F-7FL7F7LJL----7F7||L7|L---7FJL7FJF-7F---7F7L-JL-77|J7L.|J
80-.7|.|FF-JL-J||L7L7F-J|||F7F7LJF-----JF-JJF--7LLJF7|L--7||F-7||7F7L7FJ||||L7FJLJ|LJFJF7LJL------7LJLJ|-|L---7LJF-JL7|JLJF7J||L7F---JJ.|LJ-F7
81.L|J--7L7F-7FJL-J7||F7LJLJLJL7FJF----7L7F7|F-JF77||L---J|||FJ||FJL-J|FJLJL7|L7F-JF7L-J|F--------JF--7L-JF--7L--JJF7LJF7FJL7LJFJ|F--7.FLLJFF7
82F||LF.|7||F||F--7FJ||L7F---7FJ|7L---7L7|||||F7|L-JL----7LJ||FJ|L---7||F---J|FJL--JL7F7|L-7F-7F7F7|F-JF--JF7L-----JL-7|||F7L7.L-J|F-J-.|.L|.|
83.LJ-J-77LJFJ||F7LJFJL7|L-7FJL-JF----J7|LJLJLJLJF---7F--JLFJLJFJF7F7|||L-7-FJL-7FF7L|||L7|LJFLJLJLJL--JF--JL--7F-----J|LJ|L-JF7F-J|L|J.-7-LFJ
84L|J.JF|F|LL7|LJL--JF7||F-J|F7F7L-----7|F7F7F7F7||F7|L7.F7|F--JFJLJLJ|L7FJFJF--JFJ|FJ|L7L7F7F--7F-7F7F7L--7FF7LJJF----JF7L---JLJF-JF77|LL.F||
85||F77LJ---L||-F----JLJLJF7LJLJ|F7F7F-JLJLJLJ||||FJ|L-JFJLJL--7|F---7|7|L7|FJF7||FJL7|7L7|||L-7|L7LJLJL7F7L-JL7F7|F-7F-J|F7F-7F7L--J|J.F|.-FL
86|.L-|-LJL|7LJFJF7F7F-7F7|L7F-7LJLJLJJF7LF7F7LJLJL7L7F7|F--7F-JLJF--JL7|FJ||FJL-JL7FJ|F-JLJ|F-J|FJF7F-7LJL---7LJLJL7|L-7||||-LJL----J-7LJ7FJ|
87FJ.||L|.LJFLFL7|LJLJFJ||L7||FJF7F----JL-JLJL--7F-JFJ|||L-7LJF7LFJF-7FJ||FJLJF----JL-J|F7F7LJF7LJFJLJJL-----7|F7F7FJL7FJLJLJF7F7F-7JL7.FL|JJ7
887J.-7.L-F|J.F7LJF---JFJ|FJLJL-JLJF7F----------JL7FJ7|||F-JF-J|FJFJFJL7||L7F-JFF7F7F77LJLJL7FJL7FJF7F------7|||||||F7LJF--7||LJ|L7|F-7-F.LJ-L
89F77-|F|F|||F|L-7L---7|7LJF-----7FJLJ7F--7F7F7F7FJ|F-JLJL7|L-7|L-JLL-7LJL-JL--7||||||F7FF--J|F7LJ-||L-----7LJLJLJ|LJL-7L-7|FJF7L7|LJFJ.|7L7FJ
90L||.77F|J-F-L-7L--7FJ|F7-L----7|L----JF-J||||||L7||F---7L7F-JL7F---7L--7F--7FJ|||||LJL7L--7|||FF-J|F7LF7FJF7F7F7L----JF7|||FJL7LJF7L7F--.|-J
91..L-L|7JF7FJJLL--7|L-J|L7F----JL-7LF--JF7|||LJL-JLJ|F77L-JL-7FJL7F7L---JL7FLJFJ|||L--7L-7|LJ|L-JF-J|L-J|L-JLJLJL-7F--7|||||L-7L7FJL-J-JF7J-|
92FJ7L|.F.|JL-F-7F-JL--7|FJL------7L-JF--JLJLJF7F---7LJL7F7F--J|F7LJL-----7L7F7L7|||F-7|F-JF7|L--7|F7L--7L------7F-J|F-J|||LJF-JFJL-77||FLF.FL
93FLL-FLJF77FFL7LJF7F-7|||F7F7F7F-JF--JF-7F-7FJ||F-7L---J||L-7FJ||F7F-7F--JFJ|L7||||L7|||F7|L----JLJL7F7L------7LJF7|L--JLJF7L77L---JF7-77L-JJ
94J7LF|---J|L--L7FJLJFJ||||||LJLJF7L7F-J-|L7LJ7LJL7L---7J|L7FJ|FJ|||L7|L--7L-JFJ|||L-JLJLJ|L----7F--7LJL-------JF-JLJF7F---JL7L------7LJJ7F||J
95LJ-J7FJ||L..7.LJF7-L7LJ|||L--7FJL-JL--7L7L---7F-JF-7FJFJFJL7||FJ||FJ|F7-|F--JFJ|L----7F-JF7F--J|F-JF7F7F-7F7F7|F7F7||L----7L7F-7F-7|JJ.-JJ-7
96F7|LL|||-7J-F---JL--JF7LJL---J|F7F----J7L--7FJL-7|7LJ.L7|F7||||-||L7|||FJL7F7L7L7F7F-JL7|||L--7|L7FJ||||-LJLJ|||LJLJ|F-7F-JFJL7LJLLJ.LL-|LLJ
97---F7||J-|J-L------7FJL7F7F--7||LJF---7F7F7LJF--JL-7F7FJ||LJLJL7||FJ||||F-J|L7|FJ||L-7FJFJ|LF7||FJ|FJ|||F-7F-J|L---7|L7||F7L7FJF-7.|7|..|77F
98L7LJ-L.LFFF--------J|F-J||L7FJ||F-JF7FJ|||L-7L---7FJ|||FJL7F-7FJ||L7||||L-7|FJ|L7||F7||||FJFJ|LJL-JL7|LJL7LJJFJF7F-JL-JLJ|L7|L-JFJ7F7.-7||7|
99.F-F.|J-|LL-----7F7FJ|F7|L-JL-JLJF-JLJFJLJF-JF7FFJL7|||L7L|L7LJFJL-JLJLJF-J||FJFJ|||||L7||L|FJ.F---7|L--7L---JFJLJF------JFJL--7|.L|.-7L-J.|
100-7JJF-.FLFLF----J|||FJ|LJF-7F7F-7L-7FFJF--JF-JL7|F7LJ|L7L7|FJF-JF7F-7F-7|F-J|L7L7|||||FJ|L-J|F7L--7|L---JF7F-7|F--JF7F7F7FJ||F7LJ--7F7F-JLF.
101|.|FJ.7JL|FL7F7F7|LJ|FJF7L7|||L7|F7|FJFJF7JL--7LJ||F-JLL7LJ||L--JLJFJL7LJL-7L7L7||||LJL7L--7||L7F-J|LF---J|L7|LJF7FJLJLJ|L---J|-||JL--LJ.-J7
102J.-L7--7JLFLLJLJLJF7LJFJL-JLJ|FJLJ|LJFJ|||F7F7L7FJLJF7F7|F7L77F7F7FJF7L7-F7L7|FJ|||L--7|F7FJLJFJL-7L7L-7F7L-JL7FJ|L----7|F---7L777||.LFJF|-J
103|7-LL-FJ.FFL|FF---JL--JF----7LJF-7L--JJFJ|||||L|L-7|||||||L-JFJ||LJFJL7L7||.||L7|||JF-J||||F--JJF7|FJF7LJL---7LJLL7F-7FJ|L--7|FJJ-JJFF-7|-7|
104FJJ|L|L-|7-LJFL7F7F7F7FJF---JF7|JL--7F7L7|||||FJF-JFJLJ|||F7FJFJL--JJJL7||L7||FJ||L7L-7||||L7F-7|||L-J|F7F--7|F-7LLJ-|L7L7F-JLJ|L---|J|||.||
105J|L|-7|.L|-||-LLJ||LJLJFL7F7FJLJF---J||.||||||L7|F7L7F-J|||||FJ|LF7.FF7||L7||||FJ|FJF7||||L7|L7|||L7F-J||L77|LJFJF7F7L-J7|L-7|LL7L7L7JF-J-F7
106F7-7-|77J|.FF7FF-J|F-----J|LJF--JF7F7|L7|||||L7|LJ|FJL7FJ|||||F7FJL7FJ||L7||||||FJ|FJ||||L-J|FJ|||FJL7FJ|FJFJF7|FJLJL7F77L--J--.F.J-L-7J|JLJ
107|JJLJJL7.|7|||FL-7|L---7F7|F7L---J||||L||||||FJ|F-JL-7||FJ|||LJ||F7||FJ|FJ|||||LJFJ||||LJF7J|||||LJF7LJFJL7L-JLJL7F--J|L----7JJF77FFLJ|.7..L
108J7|-|.LJJJ-F|7F7LLJFF--J||||L-----J|||FJ|||LJL7|L7F7FJ||L7|||F-JLJ||||FJL7|LJ||F7L7L7|L-7|L-JL7||F-JL--JF7L------JL-7L|F----JJ|||JLL..L-F-7.
109L|F-7-FL7J.L|-||F7F-JF7FJ|||F7F7F7FJ||L7||L--7||FJ|||7LJFJ|||L-7F7||||L-7|L7FJ||L-JFJ|F7||F7F-JLJL7F--7FJ|F-----7F-7L-JL----7F-JL777F-J.L|LF
110.J7LJ|FJ|J.F7.||||L--J|L7||LJLJ||LJFLJ-LJ|F--JLJL7||L--7L7|||F-J|LJ|||F7||FJL7||F-7L7||||LJ|L-7F--J|F-JL7|L-7F-7LJ-|F-------JL-7FJF7JL-J7|FF
111LFJJLLJF7LFJL-JLJ|F---JFJ||F---JL-7F-----J|F7|F7FJ|L7F7L7||||L-7L-7|||||||L7J||LJFJFJ|||L7LL7FJL7F7||F-7|L-7LJFJF-7|L-----7F7F7|L-J|7-|.7-|F
112FFJ..LFFJ|L7F---7LJF7F7L7||L7F7F7FJL-7F--7LJL7||L7|FJ|L7|LJLJF-JF7|LJ||||L7L7||F-JFJ.LJ|FJF7||F7LJLJ||-|L-7L7FJFJFJ|F7F7F7LJLJLJF--J7..FJJL|
113F-77---J77.LJF--JF7|||L7|||7LJ||||JF7LJF-JF-7LJL7||L7L7|L-7JFJF7||L-7||||FJFJ||L-7L---7LJ||LJLJ|FF--JL7|F7|.|L-JFJ|LJLJ|||F---7FJFJ..LJ7F--J
114J--7J.|J|L7LFJF--J|||L7LJLJF--J|||FJL--JF7L7L7F-J||7L7||F-JFJFJ|||F7|||||L-JFJ|F-JF7F7L7F-JF7F7L7L7F-7||||L7L7F-JJF7F-7|||L-7FJL-7F7-|.|-L7J
115|.-F7---7JF-L7|F--J|L-JF7F7L-7FJLJL7F-7FJ|FJ||L-7||F-J||L-7L7|FJ|||||LJ|L--7L7|L-7||||FJL7FJLJL7L7LJ-||LJL-JFJ|LF7|LJFJ||L7FJL7F7L7.||7|.FJF
1167-|J.|LLJF7FFLJL7F-JF--JLJ|F7LJF7F7||FJL7|L7FJF7|||L7FJL7FJFJ|L7||||L7JL7F7|.LJJFJ|||||LFJ|F--7L7L--7|L----7L7L-JLJF7L7|L7|L-7||L-J.F--7-J..
117|.77.J-LJ7F-LJJFJ|-|L--7F7LJL--JLJLJ||F7||FJL7|LJLJFJL7FJ|JL7|FJ|||L7L-7LJ||F---JFJ|||L7L7LJF-JFJF--J|F7F--JJL7F---JL-JL-JL--J|L7|L---LJJJ77
118-.L|--L-JF|.||-L7|-F7F-J||F7F---7F7FJ||||||LFJL--7.L7FJL7L-7|||FJ||J|F-JF-J|L--7FJFJ||FJF|F7L-7L7L-7|LJ|L---7-|L-----------7J7L7|77F|77J..FL
119.-.|L7F|JJLJ-7JFLJ.|LJF-JLJLJF7FJ|||-|||||L7|F7F7L-7||F-JF-J||||FJ|FJL-7L7FJ7F7|L7L-J|||FJ||F7|FJF7L--7|F---JFJF7F7F7F-7F-7L7JFLJJF-J-|-F-||
120-77L7L|J7.LJJJ|F|J-L7FJF----7|LJFJ||FJ|LJ|FJLJLJ|F-JLJ|F7L-7||||L7|L7F-J|||FFJLJFJF--JL7L7|LJLJL7||F-7||L--7FJFJ||LJLJFLJ|L-J-JJLFJJ--J-|-J7
121|7F.F7L-FF.L|L|7J.F-JL7|F7F7LJF7|FJ|L7|F-JL7F-7FJL--7J||L7FJ||||FJ|FJL--7|L7L7F7|7L-7F7|FJL7F7F-J||L7LJ|F-7|L7L7|L-7F7F-----7J.F7L.F7J.FL7.|
122L-|F7FLFJF7.-7L7-FL-7FJLJLJL7FJ||L7L7LJL-7FJL7LJF--7L7||FJ|.||LJ|FJL-7F7||FJ-LJ|L7F-J||||F7LJ|L7FJL7||FJ|FJ|7L7|L-7LJ||F----JLF-J7L-J|-FJ.LJ
123|FFLJJFLJLL-|77|.F-7LJ.F7FF7||F|L7L7L7F7FJL-7L-7L-7|FJLJL7|-||F-J|F--J|||||F---JFJL-7||||||F7L7|L7FJL7L7||FJF-JL7FJF7LJL-7|LL-.||77LF-F-L-.|
124LLF7|F7J.LJ.||L7FL7L---JL-JLJ|FJFJ.|FJ|LJF7FJJFJF-J|L-7F-J||LJ|F7|L-7FJLJ||L-7F7|F--J|||LJ|||FJ|FJL7FJL||LJFL-7FJL7|L7F7FJ-J||-LL77.J-||L|7J
1257JLJ||LL7-|7LJLL-L|F7F--7F--7|L7L7FJL7|F7||L-7L7L7FJF7||F7L7-FJ|||F-J|F--JL-7|||||F7FJLJJFJ|||-|L7-|L-7|L7F---JL-7|L7||LJ.LFF7.JJLJ.L|FF--J.
126L7.LL...|.|L-7|J7.LJ||F7LJF7||J|FJL7FJ||||L7FJFJFJL7|LJ|||FJJL7|LJL-7||F7F-7|||||LJ|L---7L7||L7L-JFJF-J|FJL-7F7F-J|FJLJ.|-F-J|77FLJ-JL-J..F|
127L77.FL.7--JL|F7-F---JLJ|F-JLJ|FJL-7||FJ|||FJL7L-JFL|L77LJ||JJ-LJFF7FJ||||L7LJLJ||7FJF7F7|FJ|L7L--7L7L-7||F7J||LJ.FJ|F7F-7FJLF77-|.|F-J.|.FF7
128FL7F-.LL|-|.LL--L--7F--JL----JL7F7|||L7|LJL-7L--7-||FJ-L7LJFFF---JLJFJ|||FJJ|LFJL7L7|||||L7|FJF--JLL7FJLJ||FJL7J-L7LJLJFJ7J||J|LLL7LJJ|7-J.J
1297-L77FJ.7.J7.|.L|LLLJ.LLF------J|||||FJL--7FJF--JL-LJJ7.7JF7-L---7F7|FJ||L-77L|F7|J||||||FLJL7L----7|L7JFJLJF7L7-JL7F-7|LJ|FJF-7|.|7..|7..|J
130LJF---..|7|LJ|7FJ.|FF|JJL----7F-J||LJL-7F-JL-JJJ|7L|JLF-|LF7--JLFJ|LJ|FJL-7|-FJ|LJFJ|||LJF---JF7F--JL7L7L7F7|L-JJF-JL7LJJ-FLFJF-L.L7..L-7FF7
131.F||7..F|--7-|-7.FFF|J|JF----JL7-|L--7-|||-L7|7FL7-|L7.FJ-F.F|J-|FJJJ||7FLLJJL7|7L|FJ||7.L--7FJ|L-7J||FJLLJLJJJ-F|F7FJL|JF7|.L|JJL-JF-FJL7FJ
132F|L-J|F-J|-|-|||7-FJL7|-L-7F-7FJFJF--J-LJ-7LF-7L77JL.7F|J-|-F|7-LJ7-FLJ-|JFJ.||L7-|||LJF----JL7L7FJJFJL777L|FJ7FLLJ||-FJ|LJF--J7F-FL|L|.F|LJ
133L7-.7J|.L|||---||J||FFL.J7LJFJ|-L7L--7F7JLJ7L-J|.||FL---F-J|L7-7J.L-7J|FF.|-7-L7L7LJ7LLL--7F7FJ|LJF-JF7|.||LJLFJ-|-LJ-|.L7F|||LFJF7LJ.7-LJF7
134L7-7|F-L7LJ||.L|JFFFJ7J-L77FL7L-7L7F7LJL7FJ-F|--7FL7J|..LJ|L7|F--FLLJ.F||FJJ|7LL-J-L|-F7|-|||L--7.L-7|LJ7LJ7|.|LJLF7FL--JF-.--J.|JJ.FFJF|.LF
135FJJ|F7F-7J.JJ-F7JLLJ.J-7F777J|F-J-LJ|F7FJJFFFJ||F-|7-F7.LLF-F|-J-F7-JF-L7LL.LF-LJJJLJJL7J-LJL-7FJ7|L|L7.|JJFF-JJ-LL|F7.|-J|FJJJ.L-F77|F-JL7|
136F7.--JJ-L-7LJJJL7L|J-LL7.F---J|F7F|-LJ||J.FF---F-||-7.77-.-FJ|7..JJJ.L7|-|.|-||L7JLLL-LJ||.J-LLJ7L7.L7|7J-7-FJ|..-7LLJF|J-F|.|LL77|.LJJ|-L-7
137|77|.LJ.FLLJ|F7J|FF7F7LJ-L---7LJ|-JFLFJL7-JJ|.L|FFJ--7.|L|7.-J-L77L7|J-L7.F7-J7F77-7F7FF|-JJ.|FL7-J7LLJ7JF--J|L--F|...F|7JF---FJ|7-7||LF7J7|
138F-J-7J|-||F77F|-|F|LJ|FJ.FLF-JF-J|-FLL--J-|-J7.FFJ|-J7F-7LJ-JJ|.||||.LFLF7JLL|||L--JJL|-7L|JFJ7.F7LJ7|J|||JF|FL7--LJJ7F|J||L|-J-|J.F-L-FL7FJ
139L-J.J.||.L7J.7JF|-|-|FF|7FLL--J-L77|-|J|FL7.FL--|-F7FJLL7-77J.F7L|-|7FJ-|L7-7.|L-7.FJJL||.|FFJJ-|J|FJJ--7|-|-7JF7|F7---LJF7.|7.L.|F|JL--J|7.
140|--7J-L7--FJ.LL-7LFJLL7--FFLL.L--FJ|--7---L-7L7-LFF|J-LL|.|7L7JL-L-FJLJ.J.L-FLJ7-J77JJ.L--L|--L-J--|-FJL|JJL7J--J-JJJ.L..L--LF|J.F|--F-JJL|-
diff --git a/2023/11/11a.c b/2023/11/11a.c
new file mode 100644
index 0000000..3b7f8fb
--- /dev/null
+++ b/2023/11/11a.c
@@ -0,0 +1,39 @@
1#include <inttypes.h>
2#include <stdio.h>
3#include <stdlib.h>
4#include <string.h>
5
6#define N 1000
7
8#define ABS(a) ((a)>0 ? (a) : -(a))
9
10uint8_t dr[N], dc[N];
11int64_t i, j, k, n, p, g[N*N][2];
12
13int main() {
14 char line[N];
15 for (i = 0; fgets(line, N, stdin) != NULL; i++) {
16 for (j = 0; line[j] != '\n'; j++) {
17 if (line[j] == '#') {
18 g[n][0] = i;
19 g[n++][1] = j;
20 dr[i] = dc[j] = 1;
21 }
22 }
23 }
24
25 for (k = 1; k < i; k++) dr[k] += dr[k-1];
26 for (k = 1; k < j; k++) dc[k] += dc[k-1];
27
28 for (i = 0; i < n; i++) {
29 g[i][0] += g[i][0] - dr[g[i][0]];
30 g[i][1] += g[i][1] - dc[g[i][1]];
31 }
32
33 for (i = 0; i < n; i++)
34 for (j = i+1; j < n; j++)
35 p += ABS(g[i][0] - g[j][0]) + ABS(g[i][1] - g[j][1]);
36
37 printf("%" PRId64 "\n", p);
38 return 0;
39}
diff --git a/2023/11/11b.c b/2023/11/11b.c
new file mode 100644
index 0000000..edb0fd6
--- /dev/null
+++ b/2023/11/11b.c
@@ -0,0 +1,39 @@
1#include <inttypes.h>
2#include <stdio.h>
3#include <stdlib.h>
4#include <string.h>
5
6#define N 1000
7
8#define ABS(a) ((a)>0 ? (a) : -(a))
9
10uint8_t dr[N], dc[N];
11int64_t i, j, k, n, p, g[N*N][2];
12
13int main() {
14 char line[N];
15 for (i = 0; fgets(line, N, stdin) != NULL; i++) {
16 for (j = 0; line[j] != '\n'; j++) {
17 if (line[j] == '#') {
18 g[n][0] = i;
19 g[n++][1] = j;
20 dr[i] = dc[j] = 1;
21 }
22 }
23 }
24
25 for (k = 1; k < i; k++) dr[k] += dr[k-1];
26 for (k = 1; k < j; k++) dc[k] += dc[k-1];
27
28 for (i = 0; i < n; i++) {
29 g[i][0] += 999999 * (g[i][0] - dr[g[i][0]]);
30 g[i][1] += 999999 * (g[i][1] - dc[g[i][1]]);
31 }
32
33 for (i = 0; i < n; i++)
34 for (j = i+1; j < n; j++)
35 p += ABS(g[i][0] - g[j][0]) + ABS(g[i][1] - g[j][1]);
36
37 printf("%" PRId64 "\n", p);
38 return 0;
39}
diff --git a/2023/11/in.txt b/2023/11/in.txt
new file mode 100644
index 0000000..9406fc1
--- /dev/null
+++ b/2023/11/in.txt
@@ -0,0 +1,140 @@
1...#...........#..............#..................................................#...................#...................#..................
2................................................................................................#..............#...........................#
3..................................#...................#.......................................................................#.............
4.......................#....................................................................#...............................................
5........#........................................................#.......#..................................................................
6..............................................#............#......................................................#.........................
7...............#.....................#...............................#...........................#..........................#...............
8....#...........................#................................................#.......................#..........................#.......
9............................................................................................................................................
10......................................................................................#......#..............................................
11............#.......#.......................#.....#...........#.............................................................................
12.........................#..................................................................................................................
13................................................................................................................#...........................
14..............................#.......#............................................................#.................#.................#....
15............................................................................................#...............................................
16.............................................................#.......#............#.......................#..............#.................#
17.......#....................................................................................................................................
18...............................................................................................................................#............
19...............#............#......#...........................................#.......#....................................................
20.........................................#................#.......#............................#.....#......................................
21...................................................#...................................................................#....................
22..............................................#.................................................................#..................#........
23...................#.......................................................................#................................................
24.#......................................................................#...................................................................
25.......................#.....#............#................#......................#.............................................#...........
26...............#....................#.......................................#................................#...........................#..
27............................................................................................................................................
28....................#................................................#...........................#.................#........................
29...........#....................................#...................................#.......#.........#.....................................
30..#...................................................#..................#.................................................................#
31..................................#...............................#........................................................#................
32..........................................................................................................#.................................
33......................................................................#.................#.......#.....................#.....................
34.......................................#..........#.........................................................................................
35......#........................#..................................................#.........................................................
36....................#.................................#................................................#.................................#..
37...........#...................................................................................................#............#...............
38...................................#.............................#.............#.................#.................................#........
39.............................#..........................................................#.................#..........#......................
40........................#................#..................#..................................................................#............
41...................#.....................................................#.......................................#..........................
42...................................................#.................................#...................................#..................
43..........#.............................................................................................#...................................
44......................................#.........................................#................#.....................................#....
45.....................................................................#..................#...................#...............................
46........................#..........................................................................................#........#...............
47.#...............................................#..........................................#.........#....................................#
48.............................#.............#..........#.....................................................................................
49..............#...................#..............................................#........................#.................................
50....................#.................................................#.....................................................................
51.................................................................................................#................................#.........
52....................................................#............................................................#..........................
53................#..........................................#.......#.....................#...............................#...............#..
54.....#................#.....................................................................................................................
55#...............................................#............................................#.............#....................#...........
56..........#.................#.............#............#....................................................................................
57.....................................................................................#......................................................
58..................#.................#....................................#......................#....................#......................
59.............................................................#................................................#.............................
60................................#.............#...................................#.......#.................................................
61.....................................................................#.........................................................#............
62...........#.........................................................................................#......................................
63.....................#..............................#.........................#.....................................................#.......
64..............................#.....#.......#.............................................................#.................................
65.....#................................................................................#...........#.............#...........#..............#
66................#...............................................#................................................................#..........
67#...........................................................................................#........................#......................
68..........................#.....#...........................................................................................................
69.........................................................#................#.............................................................#...
70......#............................................................................#........................................................
71.........................................#.........................................................#..........#.............................
72.....................#....................................................................#...............................#.................
73..................................................................................................................................#.........
74............#......................#.............................#.......#..................................................................
75...........................................................#...................#.............#........#....................................#
76#.......................................#........#..............................................................#...........................
77.................#..................................................................#.......................................................
78......................................................................................................................#.................#...
79............................................................................................................................................
80................................................................#.............................................#.............................
81......#.........................#........#............................#.........................................................#...........
82............................................................................................................................................
83.....................................................#.............................................#........................................
84.............#..........#.................................#........#........................................................................
85...................#.........................................................#.................#............#........................#......
86.............................................#.........................................#....................................................
87............................................................................................................................................
88.#.........#..........................................#....................................#................................................
89.................#...................#...................................#...............................#.......................#..........
90.......#..............#........#...................................................................................#........................
91................................................................#....................#...........#....................................#.....
92.........................................#.............................................................................#....................
93...#.....................#......................#............................#..............................................................
94...................................#..................................#......................#..............................#...............
95............#......................................................................................#........................................
96...............................#...........#................#....................#........................................................#.
97..........................................................................................................#.................................
98...........................#......................................#....................................................#............#.......
99...#.....#...............................................#................#...................#..................#..........................
100.............................................#................................................................................#.............
101...............#........#...................................................................................................................
102....................................#................#...............#.................#..........#.........................................
103..........................................#........................................................................#........................
104...........................#.....................#....................................................#.....................................
105.................................#.............................................................................................#............
106.........#.....................................................#...............................#............................................
107.............................................#............................#.............................................#................#..
108#..........................................................#........................#.......................................................
109.............#.......#................................................#.......#...................#................#........................
110..........................#................................................................................#................................
111.......................................#.......................................................................................#............
112......................................................................................#.....................................................
113.......................#.....#......................#...............................................................................#......#
114........#....................................#............#.............#...................................................#...............
115.................#................................................#...........#........................................#....................
116...........................................................................................#......#.........................................
117.#....................................#.........#...........................................................................................
118.......................................................#................................................#........#..............#...........
119...........#................................................................................................................................
120..................................................................................#.............#.....................#.....................
121............................................................#..............................................#........................#.......
122..#................................#.......#..................................#.............................................................
123.......................#.............................................................#.....#...............................................#
124.........#..........................................#..........................................................#............................
125................#........................................#...........................................#................................#.....
126...............................#........#.........................#.............#...........................................................
127.............................................#....................................................................#.............#...........
128....................................#........................#......................#...........#.......................#...................
129...................#.............................#.......................................#..................................................
130.............#..........................................................#...................................................................
131........#..................................................................................................#................................
132............................................................................................................................#............#..
133#........................................#......................#..................................................#................#.......
134.....................#.............#.....................#............................#.........#...........................................
135.....#.....................#................................................................................................................
136.........................................................................#..................................................................
137.............#...............................................#....................#..................................#........#.............
138........................#...........................#....................................................#..................................
139........................................#........................#...............................#.............#..........#..........#......
140..#.......................................................#...................#.............#...............................................
diff --git a/2023/README.md b/2023/README.md
new file mode 100644
index 0000000..cb3ae47
--- /dev/null
+++ b/2023/README.md
@@ -0,0 +1,18 @@
1# Advent of Code 2023
2
3This is my first year trying the AoC. I decided to use C because it is the
4language I know the best and I am familiar with the standard library.
5
6## Instructions
7
8Compile with `-std=c99` and other required options, for example
9
10```
11$ cc -std=c99 -lm 06/6a.c
12```
13
14My solutions read from stdin, so run the e.g. with
15
16```
17$ ./a.out <in.txt
18```
diff --git a/README.md b/README.md
new file mode 100644
index 0000000..7f1a662
--- /dev/null
+++ b/README.md
@@ -0,0 +1,3 @@
1My solutions for the [Advent of Code](https://adventofcode.com).
2
3See `year/README.md` for instructions.

Generated with cgit - Back to sebastiano.tronto.net