Committing days 1-4

This commit is contained in:
nalydmerc committed 2023-12-04 19:40:03 -05:00
commit db9b6acbb6
19 files changed
+2500

No files matched your search

+133
View File
@@ -0,0 +1,133 @@
#include <stdio.h>
#include <stdlib.h>
#include <stdint.h>
#include <stdbool.h>
// How much memory to allocate for each line
#define MAX_LINE_LEN 200
#define DEFAULT_FILE "input.txt"
// Returns 0 if a string is not a number (e.g. 'two')
// Otherwise, returns the equivilant ascii character digit.
// Only works for single digits.
// Only accepts lower case.
char parse_num(char *str)
{
const char *num_strings[10] = { "zero", "one", "two", "three", "four", "five", "six", "seven", "eight", "nine" };
// The lengths of the strings above,
const uint8_t num_string_lens[10] = { 4, 3, 3, 5, 4, 4, 3, 5, 5, 4 };
bool possible_nums[10] = { [0 ... 9] = true };
uint8_t num_idx = 0;
uint8_t char_incriment = 0;
char current;
bool result_still_possible = false;
for (char_incriment = 0; char_incriment < 6; char_incriment++)
{
// Grab out next character in the string
current = *(str + char_incriment);
for (num_idx = 0; num_idx < 10; num_idx++)
{
if (!possible_nums[num_idx]) continue;
// If we have passed the end of our number string and every character has matched,
// then we return our valid character.
if (char_incriment == num_string_lens[num_idx] && possible_nums[num_idx]) return (num_idx + '0');
// If the character is not the letter it should be, disqualify this number.
// e.g. if num_idx == 1 and char_incriment == 2, current should equal 'e'
// because 'e' is the 3rd number in the word 'one.'
if (current != num_strings[num_idx][char_incriment]) possible_nums[num_idx] = false;
else result_still_possible = true;
}
if (!result_still_possible) return 0;
}
return 0;
}
// Returns a string of the next line.
// Remember to free() this after you're finished.
// Limited by MAX_LINE_LEN (I'm lazy.)
char *next_line(FILE *file)
{
char *strbuf = malloc(sizeof(char) * MAX_LINE_LEN);
uint8_t idx = 0;
char current = 0;
while (current != '\n' && current != EOF)
{
current = fgetc(file);
strbuf[idx] = current;
idx++;
}
return strbuf;
}
int main(int argc, char **argv) {
// Get filename as an argument
char *path = (argc > 1) ? argv[1] : DEFAULT_FILE;
if (!path)
{
printf("Requires input file.\n");
return 1;
}
FILE *file = fopen(path, "r");
if (!file)
{
printf("Could not find file.");
return 1;
}
int8_t firstdigit = -1;
int8_t lastdigit = -1;
int8_t parsed_num = -1;
uint32_t sum = 0;
char current = 0;
char *strbuf = next_line(file);
uint8_t strbuf_idx = 0;
while (current != EOF)
{
parsed_num = parse_num(strbuf + strbuf_idx);
current = strbuf[strbuf_idx++];
if (current == '\n')
{
if (lastdigit == -1) lastdigit = firstdigit;
sum += (firstdigit * 10) + lastdigit;
firstdigit = -1;
lastdigit = -1;
strbuf_idx = 0;
free(strbuf);
strbuf = next_line(file);
continue;
}
if (parsed_num != 0) current = parsed_num;
if (current < '0' || current > '9') continue;
if (firstdigit == -1)
{
firstdigit = current - '0';
}
else
{
lastdigit = current - '0';
}
}
printf("Sum: %d\n", sum);
return 0;
}
+57
View File
@@ -0,0 +1,57 @@
#include <stdio.h>
#include <stdlib.h>
#include <stdint.h>
int main(int argc, char **argv) {
// Get filename as an argument, defaults to "input.txt"
char *path = (argc > 1) ? argv[1] : "input.txt";
if (!path)
{
printf("Requires input file.\n");
return 1;
}
FILE *file = fopen(path, "r");
if (!file)
{
printf("Could not find file.");
return 1;
}
int8_t firstdigit = -1;
int8_t lastdigit = -1;
uint32_t sum = 0;
char current = 0;
while (current != EOF)
{
current = fgetc(file);
if (current == '\n')
{
if (lastdigit == -1) lastdigit = firstdigit;
sum += (firstdigit * 10) + lastdigit;
firstdigit = -1;
lastdigit = -1;
continue;
}
if (current < '0' || current > '9') continue;
if (firstdigit == -1)
{
firstdigit = current - '0';
}
else
{
lastdigit = current - '0';
}
}
printf("Sum: %d\n", sum);
return 0;
}
+60
View File
@@ -0,0 +1,60 @@
#include <stdio.h>
#include <stdlib.h>
#include <stdint.h>
#include <stdbool.h>
// Returns -1 if a string is not a number (e.g. 'two')
// Otherwise, returns the number.
// Only works for single digits.
// Only accepts lower case.
int8_t parse_num(char *str)
{
const char *num_strings[10] = { "zero", "one", "two", "three", "four", "five", "six", "seven", "eight", "nine" };
// The lengths of the strings above,
const uint8_t num_string_lens[10] = { 4, 3, 3, 5, 4, 4, 3, 5, 5, 4 };
bool possible_nums[10] = { [0 ... 9] = true };
uint8_t num_idx = 0;
uint8_t char_incriment = 0;
char current;
bool result_still_possible = false;
for (char_incriment = 0; char_incriment < 6; char_incriment++)
{
// Grab out next character in the string
current = *(str + char_incriment);
for (num_idx = 0; num_idx < 10; num_idx++)
{
if (!possible_nums[num_idx]) continue;
// If we have passed the end of our number string and every character has matched,
// then we return our valid character.
if (char_incriment == num_string_lens[num_idx] && possible_nums[num_idx]) return num_idx;
// If the character is not the letter it should be, disqualify this number.
// e.g. if num_idx == 1 and char_incriment == 2, current should equal 'e'
// because 'e' is the 3rd number in the word 'one.'
if (current != num_strings[num_idx][char_incriment]) possible_nums[num_idx] = false;
else result_still_possible = true;
}
if (!result_still_possible) return -1;
}
return -1;
}
int main(int argc, char **argv) {
const char *num_strings[10] = { "zerorr", "oneqw", "twoqw", "threere", "fourer", "fiveer", "sixer", "sevener", "eighter", "nineer" };
uint8_t i = 0;
for (i = 0; i < 10; i++)
{
printf("%d\n", parse_num(num_strings[i]));
}
return 0;
}
+1000
View File
@@ -0,0 +1,1000 @@
2xjzgsjzfhzhm1
qhklfjd39rpjxhqtftwopfvrrj2eight
95btwo
lfsqldnf3onenplgfxdjzjjnpzfxnineseven
five7fouronesevenpfsrmszpc
xcsfkjqvln2tpm
ncjtcdb625two9
6srtj3gfghkdtmfzseven
three4fournineone
pcpsxmkhdgsix25six6ngzsqzdcrb
1sixdzhbjvnvgcxmsrlkb9xbjk7t2
dsxnfkjn2vtwofivethree2
qfbp2tpgvsxm
kvbhsseven2rkbllhrhvsevenfour2vf
bqbtzbtt3
ninek6
3fivebvqhvhlvz
two68jxfnqlzfkninenine8
vhckhhhb2sixtftjtdjf2nine
4jc
3sevenxlxfnpk
5sjfive
c8bvlkdq283rqfftj
8eight1threehhvmnlft
4sixmfcronelzcpnfourlgdbkgt
hntcjmppp9fmntwokx2
24mkgr6mx9n4
cksfkrdmdcmnbmkgk3two4
twosixthreefivelq3nine
njmrtr6fmldninevcbtxr42
eightfrdrczdxrcrfxh6
8sevenonefmfqhtx8lk
lnoneight8twodg
tszrcb7tvvhfive4
nknphprtv67fivehqlfournine2jk
9eightszgdhftggrktkzbsmnhtwonekh
1onefzkgf2two417
77fivepsmmpp
bnine7vmttgmdskc
6tnsixclbvkhmsp
ggreightwo1mnsbzmxsdcdrhhg5one
ninetwo6qtbklgb2
four8fmfxmr
threetxfrsevenvfdgrtsixtwofsq7
hqxlseven53
vxqq24eight6
7psxpgxmkpzkzeight3
9four7
stwoone4eightwoj
one38
9cjlrgrgpfjeighteightdcpjhzbjqcdthree
rqfone2
dvkxhvkgxcfivescjcnqqnnine2tthreecptkgxmzjsbzdrhk
5lhprmg8two7two3
5lvtg5sevennine2zrrmghf4seven
fourfive97sevensevensixcsffnlcbtjk
onesixoneninesixnbkf5xpsgsmpvdsdsqdvpjjzp
nineb321mgkpqjqjqh
seven2cstttkvkmpssflkxjmbnvthreefour
six1bmcjbhdgqm6kgzsxbgdqnjqf3four6
zchkfjxsllkncz175
vsveightwo8
fourbtrnfdp2four5
13dtf8769
6qfvvdqdrtstwothree4seven8vszpseven
7rgzpxfbczk1fivetwo4two9nine
3sksmfxn
16ninetwonqqmptq
9five4fckzssxsvpzbvlktjzcninethree
3threel889bvbcgvl
threetzzjntxlsd2klrjfnbg87
3two3qrrdbkbk
29oneightt
7mkpfchstjt7mshqht4fivesix
tvmqndvsix875nine8
vg7477ninecpnrvnine7
seveneightmknlqjlstx4zjjrpbhjhnnc8
8qklthreetwo7tlmrfzvtwo7zvccc
6one1dpstqpmfbhst
sixfourfourseven6rzdkfour
6eighttbltmntb8
seven72cqslvzpgj
jpvrsgfhtwo5nfc1cgxdrdrbfnseven
four1ninezlhqxtsgfzsevenhspvmxrtztzgtmseven5
foursixzjvgjgsevensvkd5
seven121fivefgxhdfive
twoh8
ghhtttxqgr95
zkpklcjbjlr2
nine2mtrdcbrbntrdqninevbkbfg35lnpx
nineninesix68pcvsdnns
rf16one7
seven276
sixseven1
qjxseven9six
7c9xvhgmpf41
dlzpvdpxseven9nine
mlmlqrpn4twofivesbmhdbcsixtwo
ld74txfzksr5qconenine
six7djcdrtk7chktrh88
2seven7jtrbhznt
1eighthnhchsevenfive
qdhscpeight8
12gnxzzm
k7fourmhcfkggt8919np
8zljspvnmlx6four
36twofivethreeptbdrfqzbz7qbjm
bxkbjbzgone3ldhlnhxfcf7btkktspxrtqkxqfdmlqgqvgclb
sevenfourmdrxseven2z2fiveone
8bbprzqrqn
twofivethree95mpqclhfkzlsix
gpfjflrkc96tmsix6dxjnfive
qzeight6
five5zlthgqjntwotqmnnsd
eight6nbpvfour4kzkvbzrxcmkh
fdkrxdckqbpsklz64fourones8
5qpldkhltl
27xldkbqbnmrrbqkhmksvk
pjoneightknpcgkkv7cbknrhfdmtdm8
432xsixvvktflzxone
35fouronemzzszfqppllgchsjjnine
qgcnzcbvsxbtn6lthreenineone
two2fourkdgbfb
fzkmbtvnvj5bzfgvxv3nineknpqzznzmf
9mkqtmlnpzt282dgkmvlsonefourthree
mcqhpkhonethreeninesevenfdsggqnlfcnrft3frqzkscft
847
gsxvvr6tghfbxxghgv6lplf
fqzgkxkbmkpbhpvpdprmlhsngc5
qeightwo2threecrjjtv9fourbthree
2eightdcbgfdqzk
fourtwothree5tdzpzfxkpjmlkzzrf
seven633
8mldn
eightmg7dvjzbngkxmnxdctjtdffive97zpjrjqvp
sixfournineone38eighteight
8mngs412
3fivefourtwo7five
7sevenjfkcf7rvone8xjdvsc
tljcrzngfdsqctfour6hsnljsxrqdzd
csix7hnkhds4four67
3cxrlqcnseven4twox3
rtwonerxcnpqdnzksvzmmndcjlzq2nine6ntfzjdqnrjeight
zbqgrvvvblggbghtfx98
three2zcpspgtq77vqtgpcxkvq8
94zksixnvbxrllxln
1eightrctknxkmv9jtwoeight
2onenine5eight58
four2five
6fourfiveeight
pbfourlzdl4
4onejrltvhxprhlzctrqzbz5fourseven6
hlsdjlleightdcmdj8jdg
eightbfkgvbxxm6
sixseven9hmhchsmqhhtrdftcfivetz
mq4five2fsdhzn
ceight3mncgnineeight8dkqrjjtmc
onefour7eightsix
seven4fqsjk38fhbmn9fgzzcc
9cmb5ninenjsppthpnine5
qghtvpsqpxptoneljvstwo8lpqcbgtqvjmpq
onelq85dlqpx8
1threetzsxqtndvhqn
lqdvkonebqjqj9
3six6
9two9sixeight776
scrrprfkblkplgqzzqb2
18vcrhxb4b
three8nine
1khkncj8fivefourthree2
ninetwo8tbbsfmkqtt51five
66one88
ninempgbhpm6seven34
eightthreetwo4threetwo
vvpqkdonesevendvfrgmhhlsix91threethree
vbskcncpjxtdhqlcone6kgqpz
54lmnnqsrm73
5mqnmvcbqnz82ninethree
47teightthreehrhtdndrk
fft2foursrdhxkzfourv
tbeight48759eight9twonenl
3sfkvkmvbbm9four9cbjzgllfl
sixqhxeightone7tlsd
22zmllbhcptwo
dqxdjrkmnvkbsxc3ztbseven
oneeight6dcphmnrfltfour
mgxzcfsevenfour4six
sixb8six34gqjtlcq
fiveseventhreexfblvxgkplvbrgpfive1onesix
one3mgqphj5
7fpzxmmxgnb5
jbshclzone3oneseven117dkzzdxdd
56five1
jeightwo1ninemxtvgl717pbv1mqs
3six36
35mlzjsgxxtg
hmmjgonehjqdcqkh1gskjrmfour7
eightfiverqbb3
sixtdkfbglhbjbvthreejsd8tglkrsfktcjt
1eight2mgxrgbbb3
zzqxvtthreepf3eighttwoonefive
vjnxhl4threetwokj
oneqddgbbqtzsonenxkeightvx7
nine24
ftwone2
53twonehx
two7three4fourhbgninenkvxjjsz
7five62ninefour
53nine7lqthree4
1six1jn
five5drcjvbgdxzonefourfjdkfive
6onecfninesqfdtxmdhmfvlhbsjv9eight
5dqmfmqbdfdjvpl
qxkqfjshdone2zrmdsts
1qrvnf8zvfour
dht2
4twoqdrshn87vxldzvnkn1five
4nineh
zctqdcfbseven6three58lzscrpsbb2
fzmndhssmm3jdzlfourshjkmjkv53gvssnvzsz
five2qkxtfkj3sixshpnzdcjhlcmksnv
bskcmljnq69
psxkxqztb3xsctsk6qvldjdzzqmgqcxncx2btqxh
onetwosixttghndtzx8
8twocmnfmslsheighthtxsgjddm
fnvkqndfqmhgscnvq31kvvftxbzhtgzxqtngvqseven
7sevenkhhvtvsbrvcvm8zksvgcfrkgfourtzjvpqstckmmlzz
7hkfiveeightpjhone
8zptwoonemrninefive3spxrlhr
3qvjknqcnngpkninecgsbp3sevenfnpvrcltj
qztwo8678
bxkj959dntcpzv
4one4
lstwone347nine
ff79krfbjttqp4seven1
gjtlbgxdqt7eightsix
8fivefour82threetwo
1zjxthree4
szgx6fivefour12
557dspnfzhmlh
5hnfour
847zzkrtjlb
82six
xlnhrcksv3fourzl
2ninetwo8ninelhnsbseven9
ccseightwo8fiveonetwo5onegkhlg
eightp2onegrmfsnine5one
4five9xnmlldfive
five636
fivesix29
34dsbtmlhgggzkqxs7
twothreesmgjch93mcdndsn
cmnmtzjnmtggseven1tjsshnktffive72
7xcbpsix6m
7fourthree
7cxnzthree
5eightthree3lpvlfk
4rdnp
one6gmpjfouronettbbjdqsxn
6xtcv
dpspd1cb2onegxsgdtcsix
1eightpseven
ntczqmrclm2
six7nineeight1
qrndlfour9bhbmlgj6
52vhnxvngjjkzt
nine8six
3seventhreesixfpmpbjninesix
seightwoseven4sevenppdnk7
lnxeightbhxfmdrxcbjzx9sixnine
8ptdmjrd21zrnt1one
one1dmbfournine2
25five748
266eightwom
zxfxjn32threelxmqnlcvnknzbn3
lqmjm2onezseven
sphlhbbz14sixtwosix
sixr9llqxb4
tnnhlmsix314mqvdlxfour4
threenjxgtthreethreeeight14one
1fivetwo
hhhtkpvhvg8
31cslxxzgbktjtwotrzs1one
twoseven9
4fivenine9332
six35nineeightwok
nine9fpxgqjrftwovhldfflqthree
434four5threetpcs
ql52kzzgnsgll
onex5145
gsppnkx1
22six
zjbbqnbhsdfourmk19sixone
six3onesevensixvnsixone7
seventhreefive8
four62four7eightseventwo
2three5jtzmtxhqxhsixxlkmptshb
five3lklnccst1dstgvnprktgcnseven
sevenfour52
hfxkkbcfpcgzfqsv1three68three
lnqrcdpglf2ksqddhp
13onenbmqvpqsbbf
1bfive
1dmnlscgvfdqrf
bvtwonettkzzxpb4
5two2t7
t7djkh
63t86nlhfgqgnrghqone1
one89eightlmztkcjjnonefive
7twosjmcrlcfqr29lfkrjz
1nine5four
xxjbmsvfxb8
nxvrvcqkbseven99rbzbdp641
56fdpx
skszhkqdtonesixth5eight
ninetwo8jqbtwokbhzvv4fiveoneightxb
1threemfcblxjljdtone
fsfgncxvcmszn2pzspkkgqvfxlnbzgjr1
rrxhnslrkeightgcsbcgdbkplzxbmmlxsn5sfp66
foureight3
5rplrmrjtjcfnct9sixfourzptmffrpthree
mld6ztzninesixfour4
twohbbxmthljpkqthtcgtt8
ltvgmqgsix89
6khclqhcvdz24eightseven
6prb
nhsjqtnk6bqzhzvldlcgsmkq1twobfqzm
tfivehmdtxqlsevenzxt1ckjbnttgqctwo4
ghnjjmtlvfive9znltjfskfnl3vdcjkvqcdplvdmckmfgxq
ztvvbbjx3
6jhsrszlpsh
4fhtrctvrgmfhdjqvqp8sixnnftggrzlgs2
bvlqxnjbbjgtfpslpspvpl7jsjlrdfiveeight88
fsvcxvlc74sevenltx37sevenlbq
fourfivetgkqz5cgj4
cnrjtfvht74nptvh
oneldnoneone745dhvqnvmlfj
2trhmdcpnreight
dshghlkjzh1kv
threexzkssrxlzzpxsjzbbtthree7
eightdsqrdllssxv7sevendttwo3three
stz6five9four
jfbfgvfgmvlhjv94
rcncncfcqsevenjdrtctbbsznpct48cbbxseven
ninevjxzk2two
1qgdcpslvqhjzbgtsbnzcd
kmlzbndds8fivegfdgpfivetwo63
66mkeightnine1rvfnine4
nine82
58ntpkdssixnntjlgfkxq
2jxqttctsxthreepnxsfive
fivekvfkqpc28foursixptgbpfm6
6twofourslqbzlcsmf
five4vmdl
thx5six
5hfnsqhvcfgckcseven3jgdtkkv
seven6eight65five99
hplrgdqrjtonesevenseven4z65eight
khkts8hcsfvhvqjv9eightnine48
pqxztthreeninelxhcxkjclk2
sixrmfpj6nine4zx
9xtvxkxpjv9
cmtggbrckmmzffncttxsevenhphmhfgjsr85
83s4
26fivefivethreemstzpncmhfm
87eightfourgvmmfbknineone
bdxg2zszhcgtvtseventhmbvfive
zeight8
eight78dcnq4jtz
67csrthree
3vqxtwonerts
1five3
sevensixfournineksxkz9bkbgcrjjjhnineeight
8seven29
9394
pkqxvl9vbjmqblrksjqcshpzpfrfouroneeightnine
heightwolgpplrbnhrgdkrk25crttkkzkbt
6659eighttwoone
55lzqzng2dmtpq45
512gpmqpsqfive9eight
eightsnxz58zrbh8fiveeight
six893ninerrxzj
twoflrzzcgninefqqlmmzzqgnjrcxcfour5ninetlcmc
tmfkbgcssdcmkthmx1seven
6three9fourmdpzj
mgprpn68
xssxrtpntlkppxp958rzd2nine8
fx15twoeighttfjlcglnbptwo66
threeseven522
xrjpstjr2
6eight1742oneighthhj
1ddfkgjrxfzrhnxtnvfqxdv4
8hlcxdpkrnrgfzmsschlhcbndkcvdszgqntl
five154sixfourqgffh
5rsvtzgrvq1slrlgqksone6lns
92sevenk3xfrvgddsthree4
rctlcz67
2nmrbhnzpf7
bjmssix1sevenfour4
744ninefivefivejjcnpgrqxtrctwo
r4five4
16two2
threefn8
3gmsrqtjm
one8tmlnlqvgfone5fivefive
1spllmone9three1xsssk5
6rlqqblbrxh8
41qqccnsevengbbrpgcqggtlhtzqcfqzhtx
hzfivethreenine2
sixeightvcm4lngvkdlpz6dstz
twoeight34tv1
tgqc6fqsftwoninexncjnrtcgcbrxdmnine
8one27ninerjt3seven
1sjvxlzszhhsix
2xxmpjsfbr
7eight5eight5bzgdpkkpgrn
twozcrxdsix1lrxltrhvznine7twoone
8qlfive8nlmthree39
4five5five7671
4fiveqtrngqtbpd74
vbccfjhjndeight1h
8kfzchkdvfgvlhqzfgseven
6ninexrxsvlmmzrsevenjhzzggfcxqrvfjtnjctveight9
6fourfourfourxgrgqklnpcsjbsqvhnkjfcjdhdf
65fpnfszb3
srnhthmpseven1four3rrpznf
vgmqr9zttpdrzjfiveninesevendfive
fournthreesevenseven72seven
9594
twolhvpfzbfsfourrrcpzzshd66grxddrmkvthree
seven5twotwolpsqlbcqpthree
29eightzjgsfmll
gtkrjrsevenfbjcpjlsmqsfceightseven9
qkbntcjvfl6three9qhpcptvpkfour7b
gvkhmrljmhrpj956bzxhkljpvpxltctjvvpfjtsnb
rcqlnpcmng6l5vfkpddeightsevenfhmxzztndq
sptdrlsfxpsxff4five
lrzhhxdrkdtbdjbsfourthreemmjjnn1
9sxthreethree
six9fourseven4
dpone9fshbbpcm8
twoczqzvqkcnine6eight
qbtkgxp1fourdz
dxrrsdbmtpnl6hfdtj
sixsvtwo8
5fxdkhbgqm8fouronefive5
jqj6lhtbjt
6pdgrsdxghfkhptbjcrrjcsevenbksvmzvnninercz
8rzqvh6ntlg2bfktcphztdkckjg7two
fivesixnine1
4beightsevenonetwothree8jx
sixfourmvpk6fourtgknrjmxfftnmngjnine9
68seventwosnqsj
g853seven7
7ninejqslxmkxpbkxksjcjlnttslpcmsprvgnrxg
jmvqrhdcctwofivev6eightone
ninefiveseven9eighthbb7two
threethreethreerlgqzvsevenx3eight
xbkvgdsrhknine3blt
xzbcgjkkbk1two1zprpn3bcxxhlxjtx7eight
3tflfncljtwo9
four3seven8one6
six7vqfive
ddhhgvrkzfhone8
fqtbnbvdvbklnkmpr89twotwo4
9two166eight4cfnsstwo
twofive88
nxpmbfiveeightqmtblmtzpjcnxnxjtwosixtwo9
fourthreefivedone9jzhrbrzmdqkzmqzfklxq
qbgpfsvlx1eightjsevensixfour
2sevenfqkeight2five
sqnsvsevenrbkhgkbhmmqjztzvn3sevennkcghqqcckp
eighthcrzxpjt1eightone
sixone2
four56zqxr1lcmblzgdgqjnqb
q6hdldzmjh6ninevjm9
j82onek67
5njnffiveshlbqpqhzt
97nineoneightcq
ffivetwo41vnzhfqmrd4
two2fiveone1nftfhvzkpltvn4three
twofivethree7jlsjxgjfbvnlxhb
rmb4fourlmzgvfcsgn2five
6dthkxkcdbssixdlrb38
qgbnpdpchmnnftqpeight9xlmlskqhc156drhpf
sevensixsevenjqckcmg6sixxtgvrvm2sgtvrjrq
4nnhmghrqrkcmfmqxtqxncljskfvmhfmgqfour
dlpqjk2fivesix7
onegtddk5vzgpndqp2five
qsslgone4onelbnbckznrfnjmsgz
pvqdbhjgqrgbqkzgpdbmvninekhvfrmpchhxm2
tpxvskgzgnnvmnfncvqxxtkmm75vfgmxr4zbpdmdseven
ssnqndqxsevenxztmfq64
mcxmhtnbczdfnstjn31six
twosixfz5jvbxxlhdklbp1
five4six952
vmnhjm3rzgglnmzj318
dcnprh12qnmmqnvhkrhtrnxs5
5b
mkfgxmvsixeight5
crzdkbjthreeone287fourpgzqldn
2cgdd
seven8oneeightllqtfbdtmdnvlcsfh5
4seven1zqponeeightlplm
c7sevendvmxlfpnr6
eightlkhjgqj6
njvmgjdmx2
9six7
3cfbjptcp5one8four
eight6kxc8one
6sevenlpbdcgbhxsixfourseven7
4sixeightsix9hq
6eightb
8eight86jkrdgmxdfourthree
4dxczptzbvjfive56eight
seven3threerpqhsqspsdpvxj2sevensndcxn
zqcbcseventwo4gh16jksxkphgf
44tfour7br
five266five93seven1
prsbtlbninendbpzv5xx5
6three2nqgtrlkfxn
ninefourxkrsgshmdd78six7nine
gnkphdvhqk74fptcqgp
cfdmp2
fzhhdclzncxmg26nineeight4
seventworlcqhfq2qrfiveqqgmmzdpntfm
onedvsbvstdshtlzs6sixfive
qjfbtdtcknthreeeightsix71
2ninesixscdxtwo
threerlpjxlzsr9qqzmfbzdtnknn2four
8kxxljngrqsgkxcnlhrlxxfgl57fql7
vhrjlgqjnnthree4four8fivebfourffcnbghnz
5jb5oneoneonebseven
kbkv3three4rgdkdzkrkk
eightxhxzkbhjxsvfsjfbzghktvlqhseven2xkslcrfsgdc
sevenone6rmkcvfour6jhvhz
threenhfprcngzhcqckchphcninecmqvczqt5
foureight6
7fkrgmdrxgdkfpvxkns9
5onetwoqnp
nine73dbfljgnninecdgxrgkdlsqzflbtwo
five3jcsevenfour8sevenjgfxkfgnlzbkb
lqtvkrfour67gdnrhkfvzgfoureightone
kct1pljt8seven
six269two
64k
41ggbblvhs726
mbvfq5gghsxtwomngfczfdpb1seven
4ggzmdpbkrczhmmrk5
317
pxtgbfnfhqgncrsgtf7sixfour
dvqnfourcsnmcxnxq7ghmjbgmct
vnskfrdcjdoneddjpkcj7fourjjlllonepxlpjkzbzfour
hbdjzfbvrthreekxmlkm49
trptone5bpsxgl
5one1
sixsixfzgbninecxssl9
six7xdnsdgsix4
fivefive84fxrzgk4eight81
zszvqhms8sstxvfz
3one3sixbmxbfsdbdtmh
qnfgnjgcv6two57
5676xzlbzk485seven
five8dbbtpxctf
two1gntvjr
77one
vlnkqvczts5tkghpvthree6krgszgx4
nine2threefoureight
foursevenhc3twofour
9zzgqfzmfpsfn
ghb57sixeightwofqc
6twovninejckdhmcsxkfoursix5
oneqxljxjhnineppln419
one2zlfsxrkfourthreexl7
nqbtczpblq856one6
3cxmmzlh1
frjsdskzk79lcxvjqqdnlqsmbpbdxrxthreeseven
twoone457fivetbq4
fourtvbdksxsjxzgdk77
fourgbvdlpbgztwoftmkjkkmthreesix1
nhrqfbzggrskfgmnbg7sevenfzrnlxfbtc
foursevenmdrnfqsn4jvnrntwo29
fivevzvszgqvqp6627zqnk
15fcvczdlqprxjzhgbxpxs5
9fourfivejsgvnf9five
kzlndjrn8rgq
spfqqx3sevenoneldqnqbmspvsixfiveninezmvks
oneseven5
2eightfour5bqbmsnhmtfivebss
ninejnckkvseven4
jzhfcmvb8fiveqgq18fivevlpgdnkbq
67four
grzpdtl9
lzf8fivedr2fivevbpldcone
nine4bdfptdffgkssltwopl
eightlvgfhfbsqrdjrskqkprdlltnzzpfhnczsonetwo5eight
7xqfgzglblftvsqqbgpfmthreesix9jfl2
eightgngsvqvrhgmvhtqhbpdeightfour6
1bqvpnggbdrfoureightxmclfpfqgjssrpflnzl
eightfive1qvhhthk9ninetwo
six36fourfivefivezsvndsl5four
jnpzplgbqf6tlzpsgvzhtnkdvhzhbvhps5
cldz3bfpvdxjmc
dpponeseven48sevennineeightrkn
five3fournine
2xcckljnjz98mjjscfjsxsevenqhxrqvqmbvhzgkc
sixtwo66469
79four5eight
jxqktt47
eight36
rsjlmlj5oneightc
xczzpjknphtspmh7eightvfzjjk2five
kmznfcxhsn8fivethreexnineone2
four6six
2hhnine627
eightnine1vkdpgvxgm
8three6pvtqmfdxdkxps
7frnthree
78tworhldxeighttphp
dcmv6vvfbzjdtphbpssjnnqdmrgzgkfdveightwov
zsbmctdseven1snxmqxzgsix9
lxtwo4sevenxsix
tkdkqfpj5eightq8two447
seven1onesixfivest
45six5sevenseven
jpxxdjphzskpbrllninexmmmdxrznzthreecvsmjssmfxczhm5
4flhfqlphfcnn9sevenx3
16ttrmgqninefsgvkt5four
3snfkm
6threetwoglgkbqjlsn4fivehcgfour
ninesixfive1ninelgdmhkqrvn
two3pxvlsheight
two51
sixninezkbfbxgzznlgtpxgcpzvgkczdbfive8three
fourjljzqgbsthreeqjdgsqpspnsixxnglmkss5m
32sevenctqtqrqlsfourfoursixrcjztxx
8qlccjngpt
2eight58five
1ninesevenxtlbrq6
9fivevkmm8tgxfkzvgq
53txg
3xqmjvxkcbjf2
2fhndgqnqd5
2vnrpjdb6four79
7four5
foursix5hdcg489ninerncnk
6s2jd
fournine8ninejn6rkknh5
fcfxflzv7seven7
1fournineqzknrvfhdxfoureight4seveneightwobr
1two3
twombl5
fourzjh9six
1ljrvbrqpcchb
11rvqfmcxgg
fiveoneggjpmdt2t
nnjdzhdrkvhpxnprlfrhxpbtpbdxm1xfshdr
five39threehhrhsrhhqkjt9
hm8nine
3ldckgksm48xc2seven8gbzfq
sixqpcqjzqxsjhr7
kthreethreelmjfour485
mnggrsbbnh1
xfn5
qzlxtczqlvninekjnbnonefcbqqgfmqf66xpvjgfzjgxvjrcqmzx
krsfvctzfhonejxtqbbnd7eight
tjhgbtqtwoljone9
mdfntzfpg1fiveninecvxrfnine2
7hcrxzc
6two6plgrmbnine9sdbvgtnj
threenine4fthstfjzzp
6eighteight9npghczggthreectqssdtp
flc4gtqsjmrddx8eightseven
threeone1oneone7
gfbfjzltcjfkkrsprgtpfive4
sixrdzp2onesevenrqrtldnq4c
sevenktwo3threeeightthreenhnmpdmlqjnvl
4eight82717
nrhqqkmkeightthreenzqbgcphoneseven7
twoprrgggznzffour5bbrdsvtgkkrbl5nlrkpjmnbzgsbtl
28pvjrszmrdntp4nqdnhkdrtwoxr
sixsix9five4
lxchg91threethree74
6bmxblxdkghqdjqgqbrqtxknvdsevenztgspsfh83
39bsspvhslzkmrnzxtlxsbhk4
74seveneight9ninedgzgjdvxgvrnfz
fourxvvqsfktptjbsb69
rxsevenfive5vx9
72six7
five5lcxv2jvsssxqjtmzclfdfourfive
87three9
6rckksfour413331
33gtz
xkmxtvzhgxqqmknn9pzhgjxqseight
8threefivedrtlgrnqfouroneq
6snzkxjcfive62dqtqmtwoxnine
zxtjclonefour1eight5eight1
qlffthreeseven2three
xfppngbg5six3two8nine
ninesevensevencfhppvhdnfour8
xhvnm1
9threecbdccktrkfourfour9twoneqd
1five4fivenine
jcscpdtzk757nine8
sevenninesixxkzzzbfour2three
sixthreetwovfqxtbvcrrjtwo3four9
nzdjhtlqfnxmrzvgrzkfmm7mhmvbbxfd
3seven2eight99
two6nineljvxs5eightseven3
55fivezgbmcdpv
hkgvvrtrtwopjbqhtts8seven
c138
mnrnhqtzthreesnnj2
81
qscxbblvsxsgtcpr4cphmxgmbrb
4six2mrvdpxqvhngrrzhjdjfp
4tmrlmdfivefivethree7
363
8488one
827pcxnhpk
ckbdqdvhdd4hrb9nnghltwo
5onecjjfdfrxppqkhrpthree5lr4
62lvlsp2sixfive5
czxfkhcbvcdhdzx2
jzdgngb68
fourtwo18pxkttcr8four
bkttjvvmxvzkhmxtpqrxxhslstwo6five22
four26mcvb2fivepone
dzptwo5ninejgjrfour
nrhqqnjfour9four
ffoneightpxp41six
threeninehzmrh8dzvmpgrhsv
5onefour5
jdl5fourtwo8
threefour8seventwo1seven
lvkjd6five6fxkfthxkgmfour6
three3seventhreepbsgc
7threethree6fgmfgcv6glrk
nine3five
54one9
jhvqhrvqfrfgpdrh3three5
3psztbfour4
nlffive1nxcqpfour232
3threetwosgsbdjnt
dtfstb1qhggj
qnnp9twojdg4kfzvtbsevenfour
qfnmdkfkpndd36sixsixfourseven
8seven7oneseven9x4five
4847onetgmsbjjqhtfiveksmmlftk
fivesixlklrnhtdfg3
cpcqone1pnxkhrkdhhzheightlpb5three
eighttwo6
seven2fourfourvfzxqbh7
frf1fivesix3snnlpgpc7
svtvfcsevenhszznbzpfiveeight2
lqpqzthree5mcmzpqlxkgpssix
9sltfzqsczpjbndmqbccgmq
5six9fourxppzkgbj6
8dqhklnxseven1
3two4
ktvlhmq3xzmcztbplxlqzpqmoneightffd
76dklx7two8nine5vgvh
xmgjgfz4
two7tcnceight9
ninecvfgpbrqcgvplt32six
g3rcbzqxnjllqoneklpbjzbqbseven
svkf8ggdnmeighthhjlz3four
hfdb44zqjmxbrft3qrpgvjngc1
dzsbnsrg35tm
qchpdcg2
9775fcg91
gdrhdgmfdk77eight
14bsixthreeseven
two1twoninepkkvhlzlt3
kvslhphhj9fourvljqbfive
8nc6
qg7six
7vkgv8
td5fivefive
xvfour8jttrsvvjkkdxxzjsl
7qbgdfkj4fourfivenmqtfmgeight
eightfourdzxpfggzxcqrmtxnggchlqtwokcnrdhqf1
lbhcptlfhflgthreefive9cpprdlbv
nine7941cfxnxszfivebm
ninenhgpj7fourfour9
456xg
ninethreesqdp11four32lgdl
38trrgt7
tnhhxlm3rvzvxmmcgpxm
oneqtmg25snbgzfhtkq8hdlvszrclcsrhqsdn
3cjndzmkfx
clxvdv7seven
five6three1
8sixfour36seven9mlxmrx7
vdrk27jnrbrvdrnine2nvnlkcszoneightchk
67drgjqrqdktplq
36pprvngxrrjtnpffmrxxdl
hkkrgxtpvzzmcrfcbcjzbpnvls88hrxl
b4jkeightsevenmxkdpvdpt857
6eighteight2four
eights73five
fiveslpjvzjlpvzone41nine
smnmlrxx7
onesixfive4
8s75eightone
1fivecpqsxm
99743ninesix
twopzflcvxsgzn1v8
9three49
two2sevenf8sixvdpxzgxbmkrz2
sevenfive6shhbqhgqqhstdrnfxsjtjvnine
kzqsvn29s
threenlrrhz4ttqljvr
qx9sfdx
nhsbgsvvp7
876eightfivetprjjbxhzbfpqgltt1
six3xdjtphrm1pbjvjfn
nflcpmjpt6six9two6xvbmbm
fmlglbgmhvseven4nnkkgcmbv9chmthxvztgsevenbtzs
7bkmchf4five
xgglktnbeight183twonine
onecbpdv9
fhhmddrnlnkvlb5drtcbrjprzcqlj7mgspc
7threexkfjklvzcfourtnrgmpveightfour8
6rhmcblhfourtwo3two
one4fiveonenine
slksfchvlgblninefszfbksddgvd4
four742sbseven3lk
8qbchrfldtvppv6fourzfivez
ninephsmnnvsfour1
one5kvcrtnc5sixonehjfxnsixfqhzjj
8drgrzngh
16eight8rczbjmblhn
threejpgjbpfdbvgdpftwo96
sfkhvjgd2smgfkr9two27
threeqpdeight3
threesevenxblrmqkvzvrbhsix4
9seven2vlhsninenvptdvmrpzbrlpfhfnl
xkjpdpgsrtvlfg1eight
seven254
three8fnmcfhrdtjdlpfqlqhgx
21bkjv54s8
82ddfour6vcggxhlmpfivesix
cdsbgtpqthreefivel8nine
5five5cksct7bvjbtdjkcz
64fhm
tqk5
3mhzkhtfzscpgfctfskdn2five
cvmvthreez8fivegvcbsxj35nfxdshqz
sevenqlqmkhdjpmsjrtggqzfive35scmnfpmhmp
sixfive2
6sevensvqhhfivetwo
eightthree84
82six8
8bbhrkzgtg59cpgdvb
11three3hfjkvmsl
qdljkm792
eightgq5xgskvtpgmhxsnhzlqhnksxflvx
ghdhv1seventhree55fourthreemrlhq
oneonethree3zm
3twobsxqfsfnine
eightsbznkpzsqqtpxfhlfr5
sevenchs2twoeight
ninezjtxp7bpzdgtoneeightoneighth
fmkbvzzgvl46fiveoneightqn
kvsonevxtmmxnfour4lpxjrbcfoursixp
391onelktkfd1three2twonels
pn2
3cmsmfvjchflngkrbtsfrblltwo
eightfour8ninesix29
dpdvnonefour2eightbzzrvthmkgfcdv5
59sfiverboneone3
6xrqq1
9bczfbfbhkntmdmseven68
npqm35qszmptx
fivepkdlmonefivesixz252
dzrtwonetbbv9twovrsp
fpkfourfivendkhz6five
86dknvgcnmcslmztwo3
fivetxrrzjpb6tqseightjthnhn
362zhtxdgvcdgnzv55
eightsevenbllbgvdonethreeprglpjhxhqfdn6csnghrtl
5fourc
8fournine3svdlh5sevenoneighttsq
eightjkqmgljpprcpblvrthreeseven8fourone7
vqrqlhmb9seven231vbfzrrstwohjvdjgg
kk1foursixeight849
seven13ttbnlr21
jfgsksrrkjsixsixthreesixfourrbxqzdhc9
3fiveeightqbndjdg6pmftqshone
nineoneseventkdpztbkk83two4
cjdbxhpzr87eight
twosevenkkdhf86sevendzhvkrttjljr
67cdltmnbkktzseightsix7two
three44zqtglqcffrkmhsgjfive
twoonenbf74three9tthsvmngcx
lvrnpvmvgvnnonesix5
nchcfxxphmnqbhfourxnine52sixj
fourqpvngjszftg88seven
xgzmv133zvjmlfqhcmjbqzfntkjtpdjlkmv
fivejxc4threebzqbhrldsf
glvtpvnsevenqvrtcgjkhkcsix1seven
sjeightwo4fivesevensixnqxsjckfive
z5
jxxhsmdvkglljhxzxljqz9zplmslcfdxxljtwosixkjxlsrfcx
fiversdslrkcqclzb7zdzlbllfkvphfqhnfour
five1hpdncfpzhdxrhnv4lblgthree7snj
8scqf
threepcfkrhstmsbfvqxsxrctwo185six
7lqvpqxbjrv9nine985
eight16jvfqcgbmhdgdltxz9
three8vncqf9
zrzp9sevenxthpsxtdninebmnhgrkdjqqjfffourblbkch
fiveseven25snpsnjgnfl
ninefourxrtdlb1threefivefive1rbqzfbxtst
three8three7five41
tcnvsevenz45fngtjljh
txvpst1
eighthrlbmtk4nssknqmxjvjnqsqlfivekzrphrtwo
two492ninekcjvllckdtkp
48vlvmkcvbsfoursix8
eight28sixsix3nine45
jkm8hhqfclneightjlpsnck8dcvlvgkrfprflsvlh
4zxjqlfn
fivebpqfjtcmlsixfour48onejqhzgtftrvkknngf
dkfour7fivezzsjdbnvgninefivenine5
twoxjqldtk91eightneight
seven57177
gpbqvlpxvnzgninefoureightthree5
bzprbrninesnjpgqthreeeightsixtgmvrthfour4
83brtxx4zzxsxrcfivebzbxlsl
threesevenninetwo8twoone
veightwochrmfrkrcppxkj4tvvzmhqjhnjvtq1threegtmfnnjpxb
3zgqpvq9krslgjgkjmtbsbhbjg
4nine8mhfs67vhdjvsjrlz2
nine659xrvhhnnbqq7
bninetwoeight8fxntpdkrfp9eightnb
qtwonecvbgxqfiveoneeight4five
seven926
shkkksn4onefivethree
eightsevenqvfqmzqsfn1
sixdgjmtk5fivevqbxxdzrjqdtgnnffzmfqxzjdzhp
stsjcmzbxt1
rvnone3three9twozchp26
ninefmpkdlvzfivetwo1
four4one4vdpgp9lprtqjzmhk
15rpdhczznrzclfcsxdx41
seven36twopnvjdxrss5
46ninenine
6jg8xtqfmjffdlfhzrn
2jsixfive573
two8eight39fbqkdzseven9
3gnrg5
hlkk1
1sevenfive7
72jvdqmlrddk
ninetwo8hzdninesixnjhgrcsttwo
23cxdccvvjrjfsixlcrmxjkeight
6brqjfjsix56nine3
ninezveighttwogc5two
ninexskpsth5sevennine
c7jmmjcv
89sixthreeeight71q
fivekccfngmxseven7onernfskqnqfive5
sevensixone4hfhgs
xq2jxddpdm3nine8ptqlm4
smsevendj19fbqdjpznfourgqq6
7147
znqbfmcpd4twoseven
fhcsmxtdx6
sxj2tcb92
6nine6
qdfknmdzt88
66threebsndqlkrshfive5
eight7pckdhlqzrx24
3ninevk
sevennine3
8one1rjtnhjx
eightthree3ninekzhtlqsevenssprmrqhhgncrs
6one8nlzxfxvr
4cgm9fivethree
four77gxvdqztzzgbsxhntwortndzqzj
t8three335
c2rjggzl
jjgjbqgbnz4gdsqk66991
ninezckbpsr9
jb5sevenseven
one5nfdcvx
1kbcmclhrh1onejzft
fiveninefivedglztnjxblonehfive3
6onesixh6onethree9
spdzhnt5tpzrkh1fxlnine4skgzdln
1onenineqgzcq2eightwonh
vfzvds826vtlrcg6rvseven
vqmoneight9tknqtcsmb
kqrcrqrqjbdeight7ckhr23
oneeight2
8eightnhtqcggtxc6dfsfcjfpznmsthree
sxfvfdkff8dvlmbdktsixmzpnxzmml2
9lgmxktj1frxl
+4
View File
@@ -0,0 +1,4 @@
zero1
1zero
asdfone
asdfoneasdfoneasdf
+126
View File
@@ -0,0 +1,126 @@
#include <stdio.h>
#include <stdint.h>
#include <stdbool.h>
#define STRBUF_SIZE 200
enum color
{
color_red = 0,
color_green,
color_blue
};
typedef struct gameresult_t
{
uint8_t red;
uint8_t green;
uint8_t blue;
} gameresult;
gameresult parse_hand(char *str)
{
gameresult result = {0};
uint8_t num = 0;
while (true)
{
num = 0;
while (*str != ' ')
{
num = (num * 10) + (*str - '0');
str++;
}
str++;
switch(*str)
{
case 'r':
result.red += num;
str += 3;
break;
case 'g':
result.green += num;
str += 5;
break;
case 'b':
result.blue += num;
str += 4;
break;
}
if (*str != ',') return result;
str += 2;
}
}
gameresult parse_game_maxes(char *str)
{
// Keeps track of the most cubes of a single color seen any hand
gameresult maxes = {0};
// Keeps result from the most recent hand
gameresult result = {0};
while (*str != ':') str++;
while (*str == ':' || *str == ';')
{
str += 2;
result = parse_hand(str);
if (result.red > maxes.red) maxes.red = result.red;
if (result.green > maxes.green) maxes.green = result.green;
if (result.blue > maxes.blue) maxes.blue = result.blue;
while (*str != ';' && *str != '\n') str++;
}
return maxes;
}
bool game_is_valid(char *str)
{
gameresult maxes = {0};
maxes = parse_game_maxes(str);
return (maxes.red <= 12 && maxes.green <= 13 && maxes.blue <= 14);
}
int main(int argc, char **argv)
{
// Get filename as an argument, defaults to "input.txt"
char *path = (argc > 1) ? argv[1] : "input.txt";
if (!path)
{
printf("Requires input file.\n");
return 1;
}
FILE *file = fopen(path, "r");
if (!file)
{
printf("Could not find file.");
return 1;
}
char strbuf[STRBUF_SIZE] = {0};
gameresult maxes = {0};
uint8_t gamenum = 1;
uint32_t power = 0;
uint32_t sum = 0;
while (fgets(strbuf, 200, file))
{
maxes = parse_game_maxes(strbuf);
power = maxes.red * maxes.green * maxes.blue;
sum += power;
}
printf("Sum: %d\n", sum);
return 0;
}
+124
View File
@@ -0,0 +1,124 @@
#include <stdio.h>
#include <stdint.h>
#include <stdbool.h>
#define STRBUF_SIZE 200
enum color
{
color_red = 0,
color_green,
color_blue
};
typedef struct gameresult_t
{
uint8_t red;
uint8_t green;
uint8_t blue;
} gameresult;
gameresult parse_hand(char *str)
{
gameresult result = {0};
uint8_t num = 0;
while (true)
{
num = 0;
while (*str != ' ')
{
num = (num * 10) + (*str - '0');
str++;
}
str++;
switch(*str)
{
case 'r':
result.red += num;
str += 3;
break;
case 'g':
result.green += num;
str += 5;
break;
case 'b':
result.blue += num;
str += 4;
break;
}
if (*str != ',') return result;
str += 2;
}
}
gameresult parse_game_maxes(char *str)
{
// Keeps track of the most cubes of a single color seen any hand
gameresult maxes = {0};
// Keeps result from the most recent hand
gameresult result = {0};
while (*str != ':') str++;
while (*str == ':' || *str == ';')
{
str += 2;
result = parse_hand(str);
if (result.red > maxes.red) maxes.red = result.red;
if (result.green > maxes.green) maxes.green = result.green;
if (result.blue > maxes.blue) maxes.blue = result.blue;
while (*str != ';' && *str != '\n') str++;
}
return maxes;
}
bool game_is_valid(char *str)
{
gameresult maxes = {0};
maxes = parse_game_maxes(str);
return (maxes.red <= 12 && maxes.green <= 13 && maxes.blue <= 14);
}
int main(int argc, char **argv)
{
// Get filename as an argument, defaults to "input.txt"
char *path = (argc > 1) ? argv[1] : "input.txt";
if (!path)
{
printf("Requires input file.\n");
return 1;
}
FILE *file = fopen(path, "r");
if (!file)
{
printf("Could not find file.");
return 1;
}
char strbuf[STRBUF_SIZE] = {0};
uint8_t gamenum = 1;
uint32_t sum = 0;
while (fgets(strbuf, 200, file))
{
if (game_is_valid(strbuf))
sum += gamenum;
gamenum++;
}
printf("Sum: %d\n", sum);
return 0;
}
+100
View File
@@ -0,0 +1,100 @@
Game 1: 7 blue, 9 red, 1 green; 8 green; 10 green, 5 blue, 3 red; 11 blue, 5 red, 1 green
Game 2: 7 green, 3 blue; 20 blue, 4 green; 6 red, 13 blue, 2 green
Game 3: 11 blue, 3 red, 1 green; 15 red, 9 blue, 3 green; 11 blue, 4 red, 4 green; 1 red, 2 green, 14 blue; 18 blue, 4 green, 10 red
Game 4: 3 red, 7 blue; 3 blue, 2 red, 2 green; 2 green, 1 red, 1 blue; 3 green, 5 blue, 5 red; 7 blue, 1 green, 1 red; 2 green, 7 blue
Game 5: 1 blue, 2 red, 1 green; 6 blue, 3 green, 2 red; 2 blue
Game 6: 5 green, 5 red, 5 blue; 9 blue, 6 green, 8 red; 7 green, 3 red, 15 blue; 9 blue, 9 green; 10 red, 12 blue, 4 green; 9 blue, 1 red, 9 green
Game 7: 8 blue, 9 green, 16 red; 9 green, 9 blue; 10 red, 5 blue, 8 green; 9 green, 17 red, 2 blue; 1 blue, 18 red, 8 green; 3 green, 8 blue, 14 red
Game 8: 6 green, 8 blue, 16 red; 10 green, 1 blue, 4 red; 2 blue, 15 red, 10 green; 7 green, 9 red, 2 blue; 17 red, 4 green, 7 blue
Game 9: 5 blue, 1 green, 4 red; 2 green, 6 red, 12 blue; 2 green, 7 blue, 1 red; 12 blue, 2 green, 1 red
Game 10: 1 red, 16 blue, 18 green; 14 green, 13 blue; 4 green, 7 blue; 5 red, 16 blue, 11 green; 14 green, 2 red, 5 blue; 10 blue, 3 red, 6 green
Game 11: 4 green, 2 blue, 17 red; 1 green, 2 red, 1 blue; 5 blue, 14 red
Game 12: 7 red, 7 green; 7 blue, 7 green, 8 red; 14 red, 7 blue, 5 green
Game 13: 1 red, 7 green; 7 green, 5 blue; 4 blue, 1 red; 14 green, 5 blue, 2 red; 3 red, 5 green; 10 green, 2 blue, 3 red
Game 14: 4 blue, 7 red; 10 red, 6 blue; 1 green, 3 red; 1 green, 12 blue, 8 red; 1 red, 1 green, 6 blue; 1 green, 6 red
Game 15: 4 green, 6 blue, 12 red; 7 blue, 6 red, 4 green; 1 green; 16 blue, 5 red, 5 green; 11 blue, 7 red, 2 green
Game 16: 6 blue, 2 red, 4 green; 7 green, 2 blue; 2 red, 4 green; 3 green, 4 blue, 1 red
Game 17: 9 green, 9 red, 3 blue; 9 green, 4 blue, 5 red; 10 green, 2 blue, 3 red
Game 18: 2 red, 1 green; 3 red, 9 blue, 1 green; 4 red, 10 blue; 6 blue, 2 green, 5 red; 12 blue, 5 red, 2 green
Game 19: 2 blue, 15 green, 9 red; 9 blue, 15 red, 4 green; 9 green, 4 blue, 4 red; 2 blue, 12 green, 16 red
Game 20: 5 blue, 2 green, 9 red; 10 blue, 2 green, 6 red; 1 red, 13 green, 6 blue; 15 green, 13 blue, 12 red; 13 blue, 5 green
Game 21: 3 red, 1 green, 10 blue; 8 green, 10 blue, 5 red; 12 blue, 5 red, 2 green
Game 22: 4 blue, 6 red, 2 green; 5 blue, 16 red; 13 red; 19 red, 1 green, 6 blue; 11 red, 2 green, 5 blue
Game 23: 5 red, 4 green, 2 blue; 7 blue, 3 green; 5 blue, 4 red, 1 green; 2 blue, 3 red, 2 green
Game 24: 1 green; 4 red, 6 green, 2 blue; 6 green, 4 red; 8 blue, 3 red, 2 green; 1 blue, 2 red
Game 25: 4 green, 2 blue, 12 red; 10 blue, 1 red, 2 green; 3 green, 12 blue; 7 green, 12 red, 3 blue; 2 green, 6 blue, 13 red; 3 green, 14 red, 9 blue
Game 26: 8 red, 8 blue, 4 green; 5 red, 14 blue, 11 green; 3 green, 4 blue; 3 red, 10 green, 8 blue
Game 27: 14 red, 5 blue, 6 green; 1 red, 1 green; 3 red, 1 blue, 4 green
Game 28: 11 green, 9 blue; 3 green, 6 blue, 7 red; 9 blue, 5 red, 10 green; 8 red, 5 blue, 10 green; 10 green, 9 red, 2 blue
Game 29: 12 red, 1 green, 7 blue; 4 red, 4 blue; 12 red, 1 blue
Game 30: 3 red, 9 blue; 7 blue, 3 green, 2 red; 1 green, 3 blue, 8 red; 15 blue, 8 red, 1 green; 1 red, 2 green, 6 blue; 2 blue, 3 green, 15 red
Game 31: 10 red, 14 green, 9 blue; 6 blue, 7 red; 16 red, 3 blue, 5 green; 11 red, 7 blue, 1 green; 10 green, 8 red, 3 blue; 14 green, 6 red, 8 blue
Game 32: 1 red, 7 blue, 4 green; 5 green, 6 blue; 4 blue, 2 green; 2 blue, 3 green
Game 33: 2 red, 4 green; 1 green, 12 blue; 1 red, 4 green, 13 blue; 3 red, 11 blue; 8 blue, 3 red, 4 green; 4 green, 2 blue, 3 red
Game 34: 9 green, 3 red, 10 blue; 2 red, 5 green, 7 blue; 8 green, 3 red
Game 35: 3 blue, 1 red; 1 red, 1 green, 3 blue; 13 red, 1 blue; 3 blue, 3 green, 14 red; 1 blue; 3 blue, 2 green, 3 red
Game 36: 5 red, 10 blue; 10 green, 4 red, 8 blue; 6 blue, 9 green, 9 red
Game 37: 1 red, 3 green, 1 blue; 7 blue, 4 red; 11 red, 6 blue, 2 green; 1 green, 10 red, 3 blue; 2 blue, 1 green, 10 red; 10 red, 4 blue
Game 38: 13 red, 6 blue, 1 green; 8 red, 4 green, 8 blue; 13 green, 7 red, 3 blue; 6 red, 12 green, 2 blue; 7 blue, 15 green, 5 red; 13 green, 2 blue, 11 red
Game 39: 1 blue, 5 green, 6 red; 1 green, 8 red, 4 blue; 8 red, 10 green, 6 blue; 2 blue, 1 red, 4 green; 3 blue, 2 red, 7 green; 8 red, 6 green, 2 blue
Game 40: 6 blue, 20 green, 12 red; 7 blue, 10 red, 7 green; 5 red, 2 green, 8 blue; 2 blue, 1 red, 7 green; 11 green, 3 red; 9 red, 9 blue, 6 green
Game 41: 15 red, 5 green, 7 blue; 4 red, 7 blue; 12 green, 7 blue; 12 red, 15 green, 8 blue
Game 42: 2 green, 12 blue, 4 red; 2 blue, 2 red, 8 green; 10 blue, 2 red, 11 green; 1 green, 1 red, 5 blue
Game 43: 14 blue, 2 green, 11 red; 10 red, 8 blue; 15 blue; 1 green, 16 blue, 6 red; 3 red, 17 blue; 3 blue, 1 green
Game 44: 3 blue, 4 green, 9 red; 7 green, 15 red, 2 blue; 8 green, 8 red; 3 green, 10 blue, 6 red
Game 45: 2 green, 14 red; 1 blue, 16 red, 5 green; 3 green, 5 red; 1 blue, 5 green, 2 red
Game 46: 2 red, 13 blue, 6 green; 8 green, 1 blue; 8 blue, 6 green, 2 red; 6 green, 3 blue; 2 green, 7 blue
Game 47: 1 green, 11 blue, 6 red; 3 green, 4 blue, 4 red; 6 red, 13 blue; 6 blue, 5 green, 6 red
Game 48: 1 red, 1 green; 6 red, 3 blue, 2 green; 3 green, 6 red
Game 49: 10 blue, 15 green, 5 red; 5 green, 10 red; 4 green, 12 red, 5 blue; 7 red, 9 green, 7 blue; 17 green, 3 blue, 4 red
Game 50: 7 red, 8 green; 11 red, 1 green, 2 blue; 12 red, 4 green; 15 red, 2 green; 5 red, 2 blue, 6 green; 1 green, 3 red
Game 51: 7 red, 4 blue, 1 green; 10 red, 7 blue; 11 blue, 8 red
Game 52: 3 green, 2 blue, 1 red; 1 red, 1 blue, 2 green; 3 green, 12 blue; 9 blue, 3 red; 6 blue, 2 red, 2 green; 1 green, 1 red, 14 blue
Game 53: 7 red, 1 green, 4 blue; 5 blue, 5 red; 7 red, 2 blue
Game 54: 3 red, 8 green, 12 blue; 15 red, 4 green, 16 blue; 1 blue, 4 green, 5 red; 5 green, 8 red, 10 blue; 14 red, 7 blue
Game 55: 8 green, 18 blue, 2 red; 4 red, 15 green, 19 blue; 10 blue, 8 red, 1 green
Game 56: 13 blue, 2 red, 5 green; 1 blue, 13 green, 5 red; 3 red, 1 blue, 10 green; 5 red, 14 blue, 1 green; 11 green, 6 blue, 6 red; 11 green, 7 blue, 8 red
Game 57: 1 green; 1 blue; 1 blue, 6 red, 1 green; 1 green, 3 red; 1 green, 6 red
Game 58: 14 blue, 7 red; 4 green, 10 red; 5 blue, 7 green, 6 red; 3 green, 6 red, 19 blue
Game 59: 3 green, 5 red, 3 blue; 1 blue, 5 green, 3 red; 3 blue, 7 red, 4 green
Game 60: 6 blue; 11 blue, 2 red, 6 green; 1 red, 3 blue; 2 green, 1 blue, 2 red
Game 61: 5 red, 6 green, 8 blue; 8 blue, 5 green, 7 red; 6 green, 3 red, 7 blue; 8 green, 7 blue
Game 62: 9 green; 4 red, 5 green; 3 green, 14 blue; 4 green, 3 red, 6 blue
Game 63: 6 green, 12 blue; 1 red, 12 blue; 1 green, 13 blue; 3 blue, 8 green; 7 blue, 2 green
Game 64: 2 green, 11 red, 1 blue; 2 red; 3 green; 2 green, 6 red; 1 blue, 6 red
Game 65: 9 green, 1 blue; 5 green, 14 red, 1 blue; 11 green, 6 blue, 2 red; 8 red, 1 green; 9 green, 11 red, 5 blue; 18 green, 11 red, 1 blue
Game 66: 5 green, 17 red; 1 blue, 4 green, 2 red; 3 green, 2 blue, 13 red; 4 red, 1 green; 2 green, 18 red; 18 red, 1 green, 2 blue
Game 67: 7 green; 2 blue, 1 green; 1 blue, 6 green, 1 red; 3 green, 3 blue
Game 68: 7 blue, 18 red, 16 green; 7 blue, 6 red, 3 green; 5 blue, 4 red; 12 red, 20 green, 7 blue; 5 green, 4 blue
Game 69: 5 red, 19 green, 2 blue; 12 green, 7 red; 7 red, 10 green; 2 blue, 1 red, 1 green
Game 70: 8 red, 2 green, 14 blue; 1 green, 12 red, 3 blue; 2 green, 1 blue, 18 red; 10 red, 15 blue, 1 green; 2 green, 1 red, 14 blue; 1 green, 12 blue, 8 red
Game 71: 11 green, 9 red; 17 red, 1 blue, 9 green; 14 green, 1 red, 1 blue; 6 green, 11 red; 3 red, 14 green; 1 blue, 12 green
Game 72: 4 red, 3 blue, 16 green; 12 green, 5 red, 4 blue; 7 red, 4 blue, 12 green
Game 73: 1 blue; 1 green, 10 blue, 1 red; 1 blue, 1 red, 1 green; 11 blue, 1 green, 1 red; 10 blue
Game 74: 12 red, 3 green; 11 red, 1 blue; 19 red, 1 blue; 3 green, 1 blue; 5 red, 1 blue; 5 red, 1 blue, 2 green
Game 75: 9 blue, 4 green; 1 green, 1 blue, 5 red; 6 blue, 8 red, 3 green; 10 blue, 2 green, 6 red; 3 green, 3 red, 3 blue; 4 green, 7 red, 8 blue
Game 76: 1 green, 13 blue, 2 red; 1 green, 15 blue; 8 red, 1 green, 10 blue; 3 blue, 6 red
Game 77: 9 red, 2 green, 11 blue; 6 red, 5 blue, 2 green; 6 blue, 9 red, 1 green; 4 blue, 5 red; 13 blue
Game 78: 13 blue, 4 red, 2 green; 7 red, 2 green, 8 blue; 6 red, 20 blue, 4 green; 7 red, 3 green, 14 blue; 15 blue, 2 red, 3 green
Game 79: 2 red, 10 blue, 6 green; 4 blue, 3 red, 3 green; 3 red, 5 blue, 3 green; 1 blue, 4 green, 1 red; 1 red, 3 green, 1 blue; 1 blue, 6 green
Game 80: 2 green, 1 blue, 3 red; 2 green, 2 red; 1 green, 4 red, 1 blue; 4 red, 3 green
Game 81: 1 red, 3 green; 11 green; 4 green, 6 red; 1 red, 1 blue, 13 green; 11 green, 1 blue
Game 82: 15 green, 3 red, 9 blue; 3 blue, 7 green, 3 red; 3 blue, 11 green; 9 blue, 3 red, 9 green; 5 blue, 1 green, 1 red; 4 blue, 9 green, 1 red
Game 83: 5 red, 1 blue; 17 red, 1 green, 6 blue; 3 blue, 11 red; 7 blue, 4 red; 1 blue, 12 red, 1 green; 1 red, 1 green, 1 blue
Game 84: 6 red, 7 green, 3 blue; 2 blue, 7 red, 15 green; 1 blue, 5 red, 3 green; 10 red, 1 blue, 4 green; 4 green, 2 blue, 4 red; 9 red, 11 green
Game 85: 1 green, 10 red; 10 red, 2 blue, 3 green; 2 blue, 6 red; 1 blue, 16 red; 8 red, 2 green; 13 red, 4 green
Game 86: 3 blue, 2 red, 9 green; 2 green, 6 red, 8 blue; 2 red, 7 blue, 8 green
Game 87: 14 red, 1 green, 2 blue; 9 blue, 11 green, 7 red; 13 green, 5 blue, 1 red; 12 red, 7 blue, 3 green; 6 red, 8 blue, 3 green
Game 88: 7 blue, 2 green, 14 red; 7 red, 4 green, 16 blue; 6 green, 6 blue, 2 red; 1 red, 7 green, 2 blue
Game 89: 3 red, 5 blue, 3 green; 4 blue, 2 green, 14 red; 17 red, 1 blue
Game 90: 9 red, 1 blue; 7 red; 12 red, 1 green, 1 blue
Game 91: 12 green, 16 blue, 5 red; 18 green, 11 blue, 3 red; 5 green, 6 blue, 2 red; 13 blue, 10 green; 3 red, 2 blue
Game 92: 7 red, 10 green, 13 blue; 4 green, 9 blue, 1 red; 3 green, 9 red, 13 blue
Game 93: 2 blue, 2 red, 6 green; 3 red, 14 green; 13 green, 3 red, 3 blue; 3 red, 8 green; 13 green; 13 green, 1 red, 2 blue
Game 94: 12 red, 5 green, 2 blue; 5 blue, 12 red; 5 blue, 2 red, 9 green; 10 red, 8 green, 8 blue; 7 red, 8 green; 3 blue, 6 green, 5 red
Game 95: 7 green, 5 red, 3 blue; 14 green, 3 red, 5 blue; 6 green, 1 blue; 10 green, 2 red, 5 blue; 4 blue, 14 green, 4 red
Game 96: 2 green, 2 blue, 2 red; 5 blue, 2 red; 2 blue, 1 green; 1 green, 1 red
Game 97: 5 green, 6 red; 6 red, 5 green; 4 red, 4 blue; 1 blue, 4 green, 3 red; 1 green, 8 red; 2 red, 9 green, 5 blue
Game 98: 1 red, 3 blue; 3 green; 1 red, 4 green; 1 red, 4 blue, 3 green; 2 blue, 4 green, 1 red
Game 99: 8 blue, 3 green; 1 green, 3 red; 2 green, 5 blue, 7 red; 5 red, 9 blue, 1 green; 3 green, 6 red, 7 blue; 3 green, 6 blue, 9 red
Game 100: 13 green, 9 blue, 4 red; 2 green, 2 red, 15 blue; 1 red, 1 green; 9 green, 1 red
+3
View File
@@ -0,0 +1,3 @@
Game 1: 7 blue, 9 red, 1 green; 8 green; 10 green, 5 blue, 3 red; 11 blue, 5 red, 1 green
Game 2: 7 green, 3 blue; 20 blue, 4 green; 6 red, 13 blue, 2 green
Game 3: 11 blue, 3 red, 1 green; 15 red, 9 blue, 3 green; 11 blue, 4 red, 4 green; 1 red, 2 green, 14 blue; 18 blue, 4 green, 10 red
+158
View File
@@ -0,0 +1,158 @@
#include <stdio.h>
#include <stdint.h>
#include <stdbool.h>
#include <stdlib.h>
#include <string.h>
#define STRBUF_SIZE 200
#define DEFAULT_FILE "input.txt"
#define ISDIGIT(X) (X >= '0' && X <= '9')
// Parses a found number.
// The provided location can be any digit of the
// number; this function will automatically
// seek the first digit before processing.
// Erases numbers as they are processed.
uint16_t parse_num_at(char *str, uint8_t idx)
{
// Check input
if (str[idx] < '0' || str[idx] > '9') return 0;
// Find first digit of number
while (ISDIGIT(str[idx]) && idx) idx--;
if (!ISDIGIT(str[idx])) idx++;
uint16_t num = 0;
// Add up all digits
while (ISDIGIT(str[idx]))
{
num = (num * 10) + (str[idx] - '0');
// Erase the number to make sure we don't count it twice
str[idx] = '.';
idx++;
}
return num;
}
// If the character is a * with two adjacent numbers,
// returns the gear ratio. Returns zero if the symbol
// is not a gear.
uint64_t get_gear_ratio( uint8_t idx,
char *above,
char *current,
char *below)
{
char *above_copy = malloc(sizeof(char) * STRBUF_SIZE);
char *current_copy = malloc(sizeof(char) * STRBUF_SIZE);
char *below_copy = malloc(sizeof(char) * STRBUF_SIZE);
memcpy(above_copy, above, STRBUF_SIZE);
memcpy(current_copy, current, STRBUF_SIZE);
memcpy(below_copy, below, STRBUF_SIZE);
uint16_t nums[8] = {0};
if (idx) nums[0] = parse_num_at(above_copy, idx - 1);
nums[1] = parse_num_at(above_copy, idx);
nums[2] = parse_num_at(above_copy, idx + 1);
nums[3] = parse_num_at(current_copy, idx + 1);
nums[4] = parse_num_at(current_copy, idx - 1);
if (idx) nums[5] = parse_num_at(below_copy, idx - 1);
nums[6] = parse_num_at(below_copy, idx);
nums[7] = parse_num_at(below_copy, idx + 1);
free(above_copy);
free(current_copy);
free(below_copy);
uint8_t i = 0;
uint16_t num1 = 0;
uint16_t num2 = 0;
for (i = 0; i < 8; i++)
{
// More than 2 adjacent numbers
if (nums[i] && num1 && num2) return 0;
// The second number
if (nums[i] && num1) num2 = nums[i];
// The first number
else if (nums[i]) num1 = nums[i];
}
return num1 * num2;
}
// Search through a line of *current for symbols.
uint64_t parse_line(char *above, char *current, char *below)
{
uint64_t sum = 0;
uint8_t idx;
char c;
for (idx = 0; current[idx] != 0; idx++)
{
c = current[idx];
if (c == '*')
{
// We've found a symbol,
// add up all numbers around it
sum += get_gear_ratio(idx, above, current, below);
}
}
return sum;
}
int main(int argc, char **argv)
{
// Get filename as an argument, defaults to "input.txt"
char *path = (argc > 1) ? argv[1] : DEFAULT_FILE;
if (!path)
{
printf("Requires input file.\n");
return 1;
}
FILE *file = fopen(path, "r");
if (!file)
{
printf("Could not find file.");
return 1;
}
char *above = malloc(sizeof(char) * STRBUF_SIZE);
char *current = malloc(sizeof(char) * STRBUF_SIZE);
char *below = malloc(sizeof(char) * STRBUF_SIZE);
memset(above, '.', STRBUF_SIZE);
fgets(current, STRBUF_SIZE, file);
uint64_t sum = 0;
while (fgets(below, 200, file))
{
sum += parse_line(above, current, below);
free(above);
above = current;
current = below;
below = malloc(sizeof(char) * STRBUF_SIZE);
memset(below, '.', STRBUF_SIZE);
}
// Process the last line of the file
sum += parse_line(above, current, below);
printf("Sum: %lud\n", sum);
return 0;
}
+130
View File
@@ -0,0 +1,130 @@
#include <stdio.h>
#include <stdint.h>
#include <stdbool.h>
#include <stdlib.h>
#include <string.h>
#define STRBUF_SIZE 200
#define DEFAULT_FILE "input.txt"
#define ISDIGIT(X) (X >= '0' && X <= '9')
// Parses a found number.
// The provided location can be any digit of the
// number; this function will automatically
// seek the first digit before processing.
// Erases numbers as they are processed.
uint16_t parse_num_at(char *str, uint8_t idx)
{
// Check input
if (str[idx] < '0' || str[idx] > '9') return 0;
// Find first digit of number
while (ISDIGIT(str[idx]) && idx) idx--;
if (!ISDIGIT(str[idx])) idx++;
uint16_t num = 0;
// Add up all digits
while (ISDIGIT(str[idx]))
{
num = (num * 10) + (str[idx] - '0');
// Erase the number to make sure we don't count it twice
str[idx] = '.';
idx++;
}
return num;
}
// Returns the sum of all numbers around a symbol,
// including diagonals.
uint16_t search_numbers_around( uint8_t idx,
char *above,
char *current,
char *below)
{
uint16_t sum = 0;
if (idx) sum += parse_num_at(above, idx - 1);
sum += parse_num_at(above, idx);
sum += parse_num_at(above, idx + 1);
sum += parse_num_at(current, idx + 1);
sum += parse_num_at(current, idx - 1);
if (idx) sum += parse_num_at(below, idx - 1);
sum += parse_num_at(below, idx);
sum += parse_num_at(below, idx + 1);
return sum;
}
// Search through a line of *current for symbols.
// returns the sum for that line (erases numbers as
// they are processed.)
uint16_t parse_line(char *above, char *current, char *below)
{
uint16_t sum = 0;
uint8_t idx;
char c;
for (idx = 0; current[idx] != 0; idx++)
{
c = current[idx];
if (!ISDIGIT(c) && c != '.' && c != '\n')
{
// We've found a symbol,
// add up all numbers around it
sum += search_numbers_around(idx, above, current, below);
}
}
return sum;
}
int main(int argc, char **argv)
{
// Get filename as an argument, defaults to "input.txt"
char *path = (argc > 1) ? argv[1] : DEFAULT_FILE;
if (!path)
{
printf("Requires input file.\n");
return 1;
}
FILE *file = fopen(path, "r");
if (!file)
{
printf("Could not find file.");
return 1;
}
char *above = malloc(sizeof(char) * STRBUF_SIZE);
char *current = malloc(sizeof(char) * STRBUF_SIZE);
char *below = malloc(sizeof(char) * STRBUF_SIZE);
memset(above, '.', STRBUF_SIZE);
fgets(current, STRBUF_SIZE, file);
uint32_t sum = 0;
while (fgets(below, 200, file))
{
sum += parse_line(above, current, below);
free(above);
above = current;
current = below;
below = malloc(sizeof(char) * STRBUF_SIZE);
memset(below, '.', STRBUF_SIZE);
}
// Process the last line of the file
sum += parse_line(above, current, below);
printf("Sum: %d\n", sum);
return 0;
}
+140
View File
@@ -0,0 +1,140 @@
.854...........................................................................362...........271...732........838.........24................
...*.............................117*...........459........767*648....#.........*...................................$...&..=................
....970.........368.124.+............57................653...........723.....366....*443..60.........536....441....45..879.....789...*......
...........749*...-...+..330.....................215%...*................725.....953........%.................*............639......331.419.
.......706.....59.............*....=...262.............678...........857.*............189....................912.+589.846*...*..............
..........*................393.59..418....*................151...........594...........*....584*258.......................17.997............
.......774....275........................777........841..............988.........121....908.........86.....482..295....................@....
.110..........%.....605..@.......305*18...............*....740.............840..*................52*.......*...........100...........250....
...........*..............856..............412.........761....*....344....*.....505.....................121......709...-....-...............
......980.269..189+............701..............22...$........343..*...684..............-375......223........97.*..........890......443.....
..904*..................555.....*.......38.....*....207............773.......................824.....*.......*..../....618..................
....................355*........362....*......442.$..........613...........%770.......526.....*.......418.....283..76....*....862...........
...450....*292..............735.....149...........143..........*...458...........279.........43..769...................$..48.....*..........
....*..413.........983*....*.................679.......642....214...#........107*......=.........*.....%...........276.39......196.889*624..
...128.................658.515...890#...................../...........................60..../....528..359.....451...*.....56................
...................719...................525.................$502............284-........@...489.................#..287.....@....+..........
...849...............*................../.........................282.+649...............217............240.....................833.....930.
.......666...179.....986.526................./927......73.....176*...............@...459...........=946..*..488...126.....*.................
..........@.....*549.....@...261.....370*951...........+.............114......170.......@...............269............471.891.$859.........
.............................../.................646.....-.327........*..237..............452......../......*620..713...............324.....
..................=716.....753....................-....431..=.......692.%.......210.......*.......860....208...............81*655....$......
......298....17*..........+....................................................*..........603................950.218.$......................
................692...54......+778.809........140..*.........249............%.332..............*.........372*......*.328.....=..............
.......421.............#..............+........*....493.......*..........589..................286...............254..........458...672...258
........*.....949.630.....725...609.........408.............108..............304.517......829.........666*..........724.182...........*.=...
.........435./....*..........*.*................580..................@.........*..&..147.-......221*......544..662/....*...........881......
..750.............561......568.487.@...935.......*....106...........104......808.......*............333...................&900..............
...................................287.$......930.....&.....*528.........332............755..................840../.............583.....209.
.371.299.................503.............................632................*.......&...................500........647..193.......-.........
....*........-902..2.123..*...912.......775......./...............241........734....90.968.513..66.566...................*..&...............
..................*....@.923...*.......*.....289..47.....785..710.......54................*......*....................767....452....=....597
.............348.362............607.....889.....#........*....*........*......$904................694...............................241.....
....955........*.....559*792............................307..25.........449..............*751.404.....134.....841...........................
......&.959...300............446.504.644....692...............................#.................-.....*.......*...758*35....................
.908$...*...........&..861...........=.....%....240............-..+..9.514...615.....&....-646.....538...144.751...........899.........545..
.......806.270*....946.@...............*..........*.555@....803..322.-............410..........514.................510..10..*.....858..-....
...............373....................7.918.....699.........................710.......&...........-.....78%............+....34..............
....653...............................................553.......896.......-......&...721....970.............................................
.......%...........379..377.....770@.................$.....126....*...712.287....951.........*......984*..........+.............+700........
..............924...*....*.............422...................*...233.*........................124...........902....181......................
................&....156..363.....*855....*.................884......509..879..755.......$...........*635......*........283.........661.....
..559..........................393.........766...789.............683..................461..#......910.........904.........$.%......*.....13.
.........=...568.........680/.......................*......*522.#..........................747...........*113................702...952......
....*....334...*...392..........910*...............233..189.........219.879............225......521...941...................................
.146.981......284.*.......*972......391.....789*...................................628*.....*....*................675.......................
..................921..151......................983...............582......983.690.......213.137.268.............*..............24$.........
....561....................600........106-...............226..................*.....996.............................681.....768.......852...
..............................%............................$................=...963..$.....@............421*305.......*.....*........$......
.....923.285*.....961...........*......$812......812..851.............678.29.......*......501.....228..............385...853...........251..
.444*...............*...998...99.711.............+.....*......330.....*.........287...........781..+..........%445..........................
......$....250=.....965...*.............................113...$......766....$.......941........-......658.............894........351........
......335...............463.328*.....411....%.............................981.113......*5.............*...773=.573&....*............$.......
..........%348..................460.....*5..517.......583.261.....889@.......................953.....496...............547............620...
...299.................367.......................+....*................852.442.796.........*.@...............=................834.....*.....
....*....772...487.......................#......938.462.956..41.643...*.....#.....*592....66...809.368..3..549........................772...
.566........*.....*320.....498..775.230.193....................*......961.........................*....*.......%283.....406.......495.......
........292..585..............*.*.....*..........213...*309...................469..549......413........903................*....29..*........
.........*.......@.........551..806...489......................51.655.999*.......*.$.............21*.................300..931....*..595.....
......878......62../...........................871......169..=..&..*......235..788...497..........................68....*.......191.........
.144.........+.....31............-...............*..623*....428.....955...............*.............424....89....*......728.............*665
.............447...............530...203...955.336..........................227........665.......$.........*.....669..............473.......
835...................*323..............*./...........=.....24..........*.........................452.......9.............263.........570...
......568...803@.....................152.......209.933.....*....877..667.895............548...963......................................*....
.......$.........=............................*...........948..-...................171.*........*.605.765..-........90..............992.....
..360..........#.476...........................564../.............755*...............+..709...11.....*......909..........696..124%..........
........74...73................320.........658......739...=...........484...860*....................................314.....................
...=509...*.........79.290........*...222...*.............46...940..............960.....473.....320..........$681......*591..269....../.....
........887.94@......*..*.........302...+.784.554+............+......#......455........./............891..........457........*...609.120....
....................874.246.....................................+.....228..*....&.........272....%..$.....*377.....*..52..604....%..........
.....44.....870*457................905.45......58...............956.........935.551...807..$.....21....356.......317....................%...
.........=...................267......*...300=.........543..............398..............#.................$.......................386...745
..........145......+............................*......*...........7....$.............64...........646....675..1..930..770.....791.$........
................744....462......443&......*389..575..965...805....+..14.......761*578..-...#..776...*..................-........-.......822.
....668.484...............*............875.................*.........*....................227...*..908.............215......*.......270.....
.......*......771..........318....883......881...........655.@26..130..799.......876..91......28...........699.........807...510............
.............-........391*.........*.......+......903..................*.....379.*....@...........713........#............*.................
..........+................196..230...........411....*965..682.......873....$.....916....755....&..=.....................296......+958.983..
...*.....718.......279........%...............................*.271.............@.......*......932.......621..637.843..................*....
..59..........%2...........................................400...*...142.870...746......256..........865*...........%...=.....%...409...761.
............@...........122*157...........394........%.444.....207...-......*.........................................434..827...*..........
.....266..19.....=..............624.......*........398....*................373...........418...16.....654.878*.................890..........
...............487..........884....*......199.227........723......914*411...........228..........%...................872................-...
.....937..608.................*....306........$....................................*..................522..309.@16.....*.............765....
......#....................128../.................%136....140.................773...114...........33....*....*.........615.....303..........
.249.....590..$...949..768.......380......%...996..............833...28...310.#...................*..338.....770...559......................
...+.854.../.678..*....................646...*.........................=...&..............#.....422...................#.231...714.122.......
......*...........552........................741..........+.......437........455*768..134..69..........*........519.......*........*........
.......976.............466......497$.............607......783........*....*.............@..............28........-.........279......394.....
............%....857...*....542.........915.543..$...............979...581.66......555....................331...................281.........
....715......542..#..20....@........241...*...*.........701.......$...........113...../...193..96*305........&................/...#...489...
219*...................................#.599...845.....*.....................$....*.........*...................$....996...240........*.....
..........151.520...554.............................665..........................1.398.=450..426.....198.....326.....+..........-....129....
.........*...........*.................687..............588....62..........504................................................970...........
..........463.....776......804............*..............*.....*..........%....90/...834.790...514...740.770.......667......................
....392..................................371...184........906.56....575.............*.............*.........*......*......435.....308.......
....*..........*......908..........497...........................-.........884....849............374.....620....727......&........../.......
.125........862.326......&........+..........497.....&811.......213.......*...........465....................64.....993.....................
......................%.....288...............*...-.......617...........-..677........*.....32..........-907.+........*.....=....48.475.....
.........787.........400.....*.......420....884.425......*.....420...727........#27..181.....*....414..............986......114./.....#..404
........*.......%...........596....=.*....................863................$................428..*......899.....................114.......
.595=.112.737.699................382.888..........................315...@...325..........480........115..*.........-......368...............
...........*......+.@......652.*...............................&.....@..182.......219$.........945+.............844...........996....744*...
..87......749..535...395..#....339..564.....813....410.........135...........330.......828...........585......................*..........870
...+........................$........+..967*.........*....921......321......%................612@....*......................44..............
.......764...716............818..327..............578.......*...../...........941..................736..@421........762.........282.........
861#......*..@.......982..........*.........+...............714.................*..867.....863........................@....614....=.........
........549................*....260.........91................................85.....$........*.803*895..622.$..............*.........684...
............770*346.....714.652......145.........270...286..........#.......................66..........*.....337.176.813...483...223*......
..........................................*..392..&.........505...957.@.........158...285......881#....497.........+...*....................
.........=../..../.....588........227....639............741*..........443..681..........+..153........................335...................
........201.671.96......$............*.....................................*........415.......*........-.......155...........848.58&........
............................922......92...........180..........................&39...%....208..389......696.....*............=.......883.852
....237.........950.........*............80..............................................*....................657.......................*...
....../..611.......*.....671...443...971.&....366....381...442....458...$.......589.343.397.....463.......60.......&........125......&......
..853...../..945..564...........*......*.......@......-................783..........*.......................*.......28......=.........373...
................*.......+843..550..998.973.........+.....208.565..@..............231......292............+.365..172............+............
......117......615..................*............299............&..862.895............/86...*....114..552........*...697.....733...388......
.....................................212..261........885...............*...903..26*..........50.....-..........158................*.........
...../........11..360....748......................67....*272.....320...16.....*....137.905......239......470......................433.......
...141........*.....%......+......967........-...%...........243...*.......904............*....*..............88.377......619...............
................=.....-668....%.....=.+461..525.....662.....*......196..28..............778...940..400..682...*...*.........*..638*.........
779#..113........209...........744....................*...144..811....../...#......................-...*.....297..713.....50................
.........$................#.........844...6...........62.......*.............957...&.......112@.......211.............173....989............
..749.......$......989..931................*....&............424.........709.......867............590...................*.......*..645......
...*..290...573......*............437....227.....53......132............#....471%.............501..%..................733.....270.....=.....
..637...*............596............................=....*.......400...............*...........*....................................#.......
......958.....757%.........=.........228......624...746.81../.....*........../..718.198..38...184..............*820..774......./830.693.....
.........................453...405.=...=....................100.144.......728...........*...................498............$................
..616............................*.756...310.........#52.............130.......=........506.....509.779..........723.......182..+...........
...*....49.....-..............551..........*................789./.....*......306...613........./......*..491....*...............791..931....
...863.....%.72......832.653........*490....814.....984.....=...741...568..........*.................998........567........+........#.......
.........171..........*..-.......406...............*....389.....................486.....630............../...............457.576............
..............308..515..................373@......709..&..............*185..................689..........751........44..........*764........
..............*..............661....=.........*.............993....984.....*.......908......=...273............../.*........................
.......582..335...260....59......998../.....39.760.313*174...*..........@.183......................*47....&994.887.577........*464.....22...
......*...............................449..................802........762.....522..139+..154..266$......................46.323.....712*.....
....827.....................................35......600*29.....724........488............*...............149*227.........*..................
........@......278*............@..135..........594.........470*...........*....540*.......42..............................775.536..790......
.....990...........742......181....*..............*..@521................743.......552............310...*....+738.....................*.....
.......................125.......311............715........263...........................................173...................235....291...
+3
View File
@@ -0,0 +1,3 @@
.854...........................................................................362...........271...732........838.........24................
...*.............................117*...........459........767*648....#.........*...................................$...&..=................
....970.........368.124.+............57................653...........723.....366....*443..60.........536....441....45..879.....789...*......
+10
View File
@@ -0,0 +1,10 @@
467..114..
...*......
..35..633.
......#...
617*......
.....+.58.
..592.....
......755.
...$.*....
.664.598..
+117
View File
@@ -0,0 +1,117 @@
#include <stdio.h>
#include <stdint.h>
#include <stdbool.h>
#define DEFAULT_FILE "input.txt"
#define STRBUF_LEN 200
#define NUM_CARDS 202
#define WINNING_NUM_SIZE 10
#define HOLDING_NUM_SIZE 25
#define ISDIGIT(X) (X >= '0' && X <= '9')
void parse_nums(char *str, uint8_t *nums, uint8_t len)
{
uint8_t i = 0;
uint8_t digit_idx = 0;
char c;
uint8_t num = 0;
for (i = 0; i < len; i++)
{
num = 0;
digit_idx = (i * 3);
c = str[digit_idx];
if (ISDIGIT(c)) num = (c - '0') * 10;
num += str[digit_idx + 1] - '0';
nums[i] = num;
}
}
void parse_line(char *str, uint8_t *winning_nums, uint8_t *holding_nums)
{
while (*str != ':') str++;
str += 2;
parse_nums(str, winning_nums, WINNING_NUM_SIZE);
while (*str != '|') str++;
str += 2;
parse_nums(str, holding_nums, HOLDING_NUM_SIZE);
}
bool num_in_set(uint8_t num, uint8_t *set, uint8_t len)
{
uint8_t i = 0;
for (i = 0; i < len; i++)
{
if (num == set[i]) return true;
}
return false;
}
uint32_t calculate_points(uint8_t *winning_nums, uint8_t *holding_nums)
{
uint32_t points = 0;
uint8_t i = 0;
for (i = 0; i < HOLDING_NUM_SIZE; i++)
{
if (num_in_set(holding_nums[i], winning_nums, WINNING_NUM_SIZE)) points++;
}
return points;
}
int main(int argc, char **argv)
{
// Get filename as an argument, defaults to "input.txt"
char *path = (argc > 1) ? argv[1] : DEFAULT_FILE;
if (!path)
{
printf("Requires input file.\n");
return 1;
}
FILE *file = fopen(path, "r");
if (!file)
{
printf("Could not find file.");
return 1;
}
char strbuf[STRBUF_LEN] = {0};
uint8_t winning_nums[WINNING_NUM_SIZE] = {0};
uint8_t holding_nums[HOLDING_NUM_SIZE] = {0};
uint64_t points = 0;
uint64_t card_copies[NUM_CARDS] = { [0 ... NUM_CARDS-1] = 1 };
uint8_t i = 0;
uint8_t copyidx = 0;
uint8_t cardidx = 0;
for (cardidx = 0; cardidx < NUM_CARDS; cardidx++)
{
fgets(strbuf, STRBUF_LEN, file);
if (strbuf[0] == '\n') break;
parse_line(strbuf, winning_nums, holding_nums);
points = calculate_points(winning_nums, holding_nums);
for (i = 0; i < points; i++)
{
// Add copy of card for every point
if (cardidx + i < NUM_CARDS)
card_copies[cardidx + i + 1] = card_copies[cardidx + i + 1] + card_copies[cardidx];
else
break;
}
}
points = 0;
for (i = 0; i < NUM_CARDS; i++)
{
points += card_copies[i];
}
printf("Total cards: %d", points);
return 0;
}
+100
View File
@@ -0,0 +1,100 @@
#include <stdio.h>
#include <stdint.h>
#include <stdbool.h>
#define DEFAULT_FILE "input.txt"
#define STRBUF_LEN 200
#define WINNING_NUM_SIZE 10
#define HOLDING_NUM_SIZE 25
#define ISDIGIT(X) (X >= '0' && X <= '9')
void parse_nums(char *str, uint8_t *nums, uint8_t len)
{
uint8_t i = 0;
uint8_t digit_idx = 0;
char c;
uint8_t num = 0;
for (i = 0; i < len; i++)
{
num = 0;
digit_idx = (i * 3);
c = str[digit_idx];
if (ISDIGIT(c)) num = (c - '0') * 10;
num += str[digit_idx + 1] - '0';
nums[i] = num;
}
}
void parse_line(char *str, uint8_t *winning_nums, uint8_t *holding_nums)
{
while (*str != ':') str++;
str += 2;
parse_nums(str, winning_nums, WINNING_NUM_SIZE);
while (*str != '|') str++;
str += 2;
parse_nums(str, holding_nums, HOLDING_NUM_SIZE);
}
bool num_in_set(uint8_t num, uint8_t *set, uint8_t len)
{
uint8_t i = 0;
for (i = 0; i < len; i++)
{
if (num == set[i]) return true;
}
return false;
}
uint32_t calculate_points(uint8_t *winning_nums, uint8_t *holding_nums)
{
uint32_t points = 0;
uint8_t i = 0;
for (i = 0; i < HOLDING_NUM_SIZE; i++)
{
if (num_in_set(holding_nums[i], winning_nums, WINNING_NUM_SIZE)) {
if (points) points = points * 2;
else points = 1;
}
}
return points;
}
int main(int argc, char **argv)
{
// Get filename as an argument, defaults to "input.txt"
char *path = (argc > 1) ? argv[1] : DEFAULT_FILE;
if (!path)
{
printf("Requires input file.\n");
return 1;
}
FILE *file = fopen(path, "r");
if (!file)
{
printf("Could not find file.");
return 1;
}
char strbuf[STRBUF_LEN] = {0};
uint8_t winning_nums[WINNING_NUM_SIZE] = {0};
uint8_t holding_nums[HOLDING_NUM_SIZE] = {0};
uint32_t totalpoints = 0;
while (fgets(strbuf, STRBUF_LEN, file))
{
if (strbuf[0] == '\n') break;
parse_line(strbuf, winning_nums, holding_nums);
totalpoints += calculate_points(winning_nums, holding_nums);
}
printf("Total Points: %d\n", totalpoints);
return 0;
}
+202
View File
@@ -0,0 +1,202 @@
Card 1: 74 8 2 86 40 25 93 17 61 32 | 65 25 73 55 75 94 54 99 53 17 89 4 44 13 15 32 57 92 8 21 74 64 5 87 24
Card 2: 8 18 79 59 71 84 72 23 96 74 | 22 83 74 78 72 30 8 59 6 23 7 71 31 84 18 96 21 36 51 67 80 79 60 28 42
Card 3: 63 27 56 19 85 86 40 78 67 54 | 34 32 79 64 35 46 61 31 24 41 33 44 10 56 49 36 4 82 98 54 23 21 63 86 51
Card 4: 2 95 87 25 13 12 9 24 68 29 | 84 54 49 78 52 60 34 25 97 26 55 39 66 79 23 94 29 67 12 51 9 16 19 76 8
Card 5: 70 92 50 61 43 16 53 71 91 7 | 17 70 62 84 82 9 14 16 56 15 63 91 77 57 58 60 96 35 88 26 51 54 59 74 80
Card 6: 34 86 44 60 10 4 89 5 94 92 | 60 95 35 2 86 32 94 79 82 64 4 5 92 89 44 69 34 21 76 72 9 6 52 48 61
Card 7: 99 36 57 20 46 38 26 58 72 11 | 99 70 20 58 38 67 76 36 84 27 94 11 26 35 46 21 81 31 72 62 13 10 57 54 4
Card 8: 19 95 24 99 44 36 58 26 31 6 | 69 10 43 42 70 64 92 40 38 47 21 98 41 49 20 71 65 59 91 72 34 74 84 29 22
Card 9: 87 77 90 73 7 27 48 1 13 55 | 96 28 40 62 19 3 25 47 80 85 68 94 82 50 12 65 84 75 83 41 91 89 55 42 48
Card 10: 6 89 13 82 16 54 27 67 19 76 | 65 67 94 58 97 61 54 80 53 6 73 41 95 7 83 2 23 11 63 24 78 29 13 16 82
Card 11: 27 50 4 17 31 70 18 75 91 20 | 71 85 67 80 92 6 31 48 15 70 51 7 78 34 8 72 16 62 4 52 75 39 2 82 74
Card 12: 27 68 79 78 21 56 53 29 2 74 | 96 69 59 49 20 42 23 71 54 72 25 7 55 19 64 37 62 41 10 66 26 75 93 18 84
Card 13: 1 75 85 51 47 45 93 11 57 80 | 97 66 4 61 42 36 12 83 86 51 99 90 52 82 30 33 20 56 44 59 18 24 28 40 41
Card 14: 24 28 85 42 5 3 33 76 98 75 | 31 95 54 8 90 10 6 85 75 44 94 40 62 47 83 26 9 27 68 63 88 80 82 55 93
Card 15: 52 28 90 27 6 37 44 3 51 39 | 65 44 64 85 47 20 86 83 38 49 80 21 56 30 89 69 84 93 1 48 88 76 36 77 97
Card 16: 28 7 3 39 71 85 84 13 44 31 | 93 79 33 21 4 18 63 23 68 49 57 9 22 54 27 69 75 29 30 78 37 98 91 38 94
Card 17: 97 20 84 50 98 82 45 22 33 60 | 53 10 68 92 43 76 99 52 38 96 31 4 25 15 11 42 69 56 62 23 29 74 51 39 40
Card 18: 28 66 82 85 94 35 72 29 63 68 | 73 86 63 60 20 10 64 89 66 61 90 35 72 8 85 28 29 1 88 49 76 36 82 94 68
Card 19: 58 41 33 29 38 60 3 73 10 13 | 52 73 20 51 47 75 74 26 69 18 70 24 62 53 91 85 63 1 76 5 42 43 97 10 84
Card 20: 46 8 66 7 27 4 9 78 24 18 | 13 14 57 92 6 59 3 81 70 10 4 51 98 23 66 64 74 49 83 27 24 73 95 35 7
Card 21: 15 32 12 47 53 89 24 58 59 18 | 47 82 1 53 58 93 44 19 12 96 13 61 15 72 75 83 65 41 54 49 71 78 68 59 79
Card 22: 92 27 79 68 46 97 2 96 94 80 | 18 81 12 13 39 93 83 38 52 46 89 17 24 58 49 74 10 8 57 65 35 19 54 41 11
Card 23: 92 72 68 65 54 18 34 62 41 82 | 96 32 74 10 12 8 34 55 54 83 91 22 47 68 52 21 41 65 72 97 30 70 46 18 9
Card 24: 49 76 13 10 59 33 86 29 95 32 | 16 60 38 33 68 51 15 50 95 61 29 93 76 6 31 71 10 25 13 40 49 77 2 32 23
Card 25: 38 66 33 7 77 73 44 50 25 76 | 20 12 63 92 61 5 88 37 75 21 41 47 73 77 13 76 31 80 60 34 93 90 54 3 45
Card 26: 77 45 81 84 53 80 76 22 75 61 | 25 58 38 45 98 10 6 92 70 82 24 22 4 68 97 72 14 49 17 83 27 53 77 89 75
Card 27: 60 16 79 54 85 56 92 41 26 44 | 63 44 69 60 96 7 36 2 37 5 41 73 6 51 64 56 53 76 57 99 21 30 67 85 66
Card 28: 41 84 40 62 67 89 29 7 2 8 | 35 9 24 29 20 33 6 98 50 95 10 36 14 80 1 3 88 15 13 48 18 72 26 76 31
Card 29: 68 66 52 34 99 70 29 58 19 98 | 88 64 1 14 79 31 44 39 45 40 21 6 97 13 73 11 48 67 8 50 10 57 51 94 91
Card 30: 99 45 9 78 88 76 60 86 12 98 | 54 60 30 57 68 22 64 26 98 23 89 50 7 61 91 87 83 25 2 37 56 78 94 36 31
Card 31: 59 93 89 84 66 44 34 88 54 27 | 29 12 61 23 49 86 24 19 54 99 35 90 65 82 13 76 20 87 48 40 62 16 80 33 43
Card 32: 44 13 99 31 54 52 55 66 58 16 | 40 88 79 93 67 20 30 37 26 24 77 2 81 62 71 82 49 92 86 41 32 59 53 16 90
Card 33: 76 34 40 17 37 46 72 62 47 20 | 68 73 3 5 44 78 86 82 52 22 80 91 95 42 66 77 38 88 75 33 41 4 54 65 18
Card 34: 45 19 5 25 68 70 82 73 95 54 | 28 97 19 95 89 42 27 70 17 73 15 25 61 77 82 1 45 7 65 57 54 90 5 68 79
Card 35: 9 66 65 71 20 89 4 27 15 54 | 97 24 49 64 14 93 77 99 78 34 88 52 83 39 60 56 79 48 57 50 82 18 3 53 95
Card 36: 66 89 69 77 32 37 22 40 82 11 | 42 74 69 97 60 22 11 49 82 67 56 90 17 15 27 40 66 13 89 77 32 5 3 37 57
Card 37: 93 31 41 27 36 50 59 97 86 62 | 21 28 79 92 16 86 23 5 45 34 90 66 95 37 9 71 81 67 58 85 15 73 31 25 30
Card 38: 61 92 74 75 1 70 96 71 30 68 | 66 44 94 35 78 1 92 18 83 93 2 33 70 71 68 38 61 86 56 40 20 30 74 3 46
Card 39: 20 15 47 8 33 55 29 94 16 18 | 21 63 8 33 15 58 94 66 16 45 30 59 29 52 20 61 86 31 48 40 25 62 47 95 18
Card 40: 27 23 32 47 55 48 31 93 74 20 | 15 77 85 31 58 53 60 98 20 22 99 92 64 44 76 1 79 9 36 87 72 21 13 48 59
Card 41: 57 74 11 92 16 78 44 41 13 64 | 39 34 76 80 84 58 54 38 97 23 46 86 65 69 9 15 91 53 6 29 10 49 47 64 4
Card 42: 5 4 99 36 85 18 63 81 61 47 | 43 73 80 88 76 64 79 7 86 94 98 39 37 56 33 51 49 90 70 6 20 1 21 59 82
Card 43: 93 18 47 21 75 30 43 90 52 23 | 50 25 65 33 90 58 57 10 55 61 30 41 62 23 76 21 2 75 18 83 92 69 37 5 98
Card 44: 24 68 45 26 90 76 33 52 19 72 | 80 68 99 1 12 97 90 26 7 32 4 40 77 8 48 83 96 14 49 27 52 94 54 81 37
Card 45: 94 48 13 95 73 11 8 91 84 53 | 78 84 12 59 62 57 90 5 75 55 29 22 71 92 54 47 39 53 20 14 26 69 34 48 51
Card 46: 43 63 30 28 71 57 77 20 27 46 | 49 35 56 20 79 75 44 48 95 52 5 66 12 93 24 85 39 7 16 8 99 9 80 78 71
Card 47: 25 62 88 36 24 10 15 90 8 23 | 4 54 9 80 42 78 32 19 21 65 86 26 28 7 96 71 48 64 36 95 69 44 89 34 57
Card 48: 54 27 17 84 63 35 73 61 65 83 | 53 6 88 32 87 63 69 19 20 49 17 29 37 45 73 93 41 27 90 54 3 83 36 56 71
Card 49: 84 14 88 11 45 63 90 76 38 49 | 86 60 58 31 82 98 55 8 99 92 27 50 85 96 33 19 32 3 62 46 56 2 57 16 77
Card 50: 61 24 52 67 50 37 36 75 3 2 | 32 61 84 75 22 29 21 80 70 56 86 44 96 97 99 6 65 68 81 60 90 43 85 58 66
Card 51: 89 91 62 39 50 92 79 7 87 6 | 36 47 77 12 98 83 54 11 31 33 68 52 41 75 62 80 18 14 43 65 15 58 19 71 13
Card 52: 79 38 23 82 69 27 67 86 48 58 | 83 17 90 42 60 68 65 47 45 33 62 7 23 76 29 91 35 95 28 71 13 24 5 25 92
Card 53: 86 76 93 98 81 57 44 49 65 11 | 88 28 53 34 58 4 48 23 59 41 7 87 55 74 77 14 18 8 94 99 16 19 56 61 2
Card 54: 59 11 64 1 14 17 74 82 70 6 | 99 22 37 19 2 18 13 38 26 39 46 5 86 97 56 89 78 91 33 10 30 69 52 90 44
Card 55: 1 18 55 64 16 44 96 20 21 46 | 64 57 21 69 42 18 89 99 20 88 33 37 55 60 31 67 24 26 1 58 96 44 46 16 98
Card 56: 10 12 98 27 64 75 70 53 9 5 | 41 26 29 93 7 98 78 66 80 57 31 88 35 18 92 58 47 50 79 74 65 84 71 69 42
Card 57: 52 84 86 58 4 17 91 35 12 83 | 66 17 35 81 22 25 84 10 26 42 58 4 89 83 12 91 52 47 61 9 50 54 88 86 5
Card 58: 39 77 53 52 71 86 47 31 35 87 | 54 68 67 36 96 14 70 42 65 85 79 97 39 80 72 95 9 60 4 17 81 30 50 91 55
Card 59: 48 4 42 32 17 24 13 30 25 90 | 65 38 97 19 16 8 52 11 15 64 73 71 74 66 58 62 49 9 37 91 75 12 56 35 80
Card 60: 82 20 70 4 17 26 94 99 47 35 | 77 16 6 22 49 83 26 91 8 47 94 44 99 59 52 10 70 90 63 86 82 67 41 4 69
Card 61: 44 95 42 85 16 26 81 92 61 55 | 67 7 17 8 69 34 13 82 47 18 59 76 70 11 25 99 40 85 21 12 22 77 38 44 24
Card 62: 56 81 21 43 99 50 20 88 62 51 | 81 99 95 38 43 98 88 20 30 64 79 48 6 62 50 73 7 69 34 56 36 39 85 26 21
Card 63: 36 72 91 33 84 95 15 50 27 24 | 21 39 47 46 65 51 16 36 6 35 89 95 62 15 75 37 56 84 13 63 31 92 93 44 77
Card 64: 24 12 30 35 3 45 38 67 73 78 | 3 37 27 12 21 92 58 55 33 14 85 74 13 68 57 15 34 94 65 2 70 63 83 61 98
Card 65: 54 68 51 13 20 2 26 7 91 18 | 71 11 84 8 35 2 87 24 83 89 75 82 91 28 44 79 63 67 9 46 42 53 13 93 31
Card 66: 56 80 96 75 66 83 8 37 7 22 | 28 66 87 80 4 21 92 37 90 75 57 22 65 59 99 39 8 31 63 93 89 56 29 26 96
Card 67: 16 46 47 23 79 96 69 93 45 33 | 76 68 18 60 89 55 23 14 25 21 92 62 52 75 28 13 98 90 94 57 12 64 31 73 45
Card 68: 76 16 78 19 61 43 35 83 55 80 | 23 51 47 64 10 87 40 77 6 84 27 48 91 38 31 22 39 62 43 67 76 58 5 7 80
Card 69: 23 33 56 51 8 18 58 1 61 72 | 75 14 18 12 32 23 2 41 57 35 33 61 67 27 56 10 72 58 8 31 43 5 1 87 90
Card 70: 30 44 77 73 93 35 2 72 96 88 | 40 82 38 69 34 22 31 13 90 28 80 30 92 39 5 14 83 33 93 79 71 2 58 67 97
Card 71: 7 6 91 81 74 36 90 20 22 97 | 12 30 96 64 34 89 56 21 15 10 76 16 14 50 11 9 95 63 55 92 66 59 27 26 75
Card 72: 83 63 17 81 44 10 18 3 99 92 | 34 42 46 3 55 37 31 47 92 41 61 39 98 29 14 10 69 62 83 48 44 28 26 93 96
Card 73: 47 24 29 98 77 93 27 8 73 90 | 23 72 55 65 48 70 27 86 50 68 28 77 37 40 87 14 99 49 62 97 56 36 66 47 71
Card 74: 55 23 63 86 58 94 48 20 72 79 | 77 36 17 49 39 10 47 23 31 94 3 13 40 70 79 72 8 93 56 62 2 18 55 78 97
Card 75: 58 16 64 19 99 22 20 89 76 44 | 50 39 92 33 32 61 44 72 88 46 25 5 68 54 74 55 78 77 7 89 64 96 95 47 76
Card 76: 39 10 25 12 88 89 42 14 32 71 | 34 30 22 46 55 43 77 24 36 20 53 47 8 26 48 45 94 62 93 82 79 63 9 89 88
Card 77: 12 7 66 55 73 83 43 69 37 27 | 96 81 10 89 17 22 29 44 21 3 18 45 60 32 95 62 67 42 39 49 83 82 99 65 16
Card 78: 16 73 23 52 38 81 64 25 84 87 | 20 97 9 31 95 36 77 33 63 70 68 17 27 83 53 69 94 74 96 5 99 72 89 13 67
Card 79: 94 28 21 83 49 34 42 9 89 10 | 81 31 85 74 60 39 38 11 15 79 55 32 72 50 99 19 3 96 98 8 76 1 90 30 47
Card 80: 18 40 55 13 5 9 66 61 20 57 | 68 85 64 60 94 34 1 27 12 43 95 80 58 38 66 91 74 56 37 88 55 20 44 57 72
Card 81: 88 79 67 89 83 49 50 91 48 35 | 79 87 29 2 24 48 99 18 88 89 22 91 42 4 49 67 20 73 83 17 23 50 27 76 35
Card 82: 14 49 40 54 10 90 53 63 8 65 | 8 9 60 54 42 72 87 56 79 76 90 93 40 82 49 63 38 28 10 65 69 97 14 96 53
Card 83: 37 31 96 81 56 70 38 66 95 54 | 24 92 38 32 23 31 29 90 33 54 80 10 66 13 86 37 1 79 95 81 44 70 3 56 8
Card 84: 78 23 98 84 3 52 37 59 56 95 | 32 36 38 24 90 7 18 74 48 21 71 57 44 8 58 6 82 25 19 72 62 70 67 47 94
Card 85: 74 25 65 88 20 52 39 21 17 70 | 76 93 62 26 90 34 25 7 36 98 97 70 45 19 47 22 33 21 11 27 8 57 56 71 61
Card 86: 1 44 73 15 24 94 87 84 33 51 | 53 38 56 26 16 39 99 72 7 8 36 59 69 98 34 27 5 89 25 78 55 29 62 65 83
Card 87: 25 27 78 39 14 43 56 36 60 33 | 85 93 71 9 39 7 72 20 13 91 30 76 68 52 94 21 56 15 70 60 32 14 84 57 77
Card 88: 37 97 26 89 54 64 57 98 32 62 | 77 29 63 33 71 20 99 9 78 4 67 31 8 51 41 12 82 19 61 55 11 56 74 24 66
Card 89: 75 27 74 63 42 45 72 18 85 50 | 52 2 22 57 45 50 8 10 58 65 69 74 99 32 14 42 27 51 56 30 44 20 84 12 16
Card 90: 42 22 5 75 28 20 82 31 41 32 | 31 35 75 36 23 64 14 50 25 65 7 81 46 70 27 96 44 15 77 99 39 33 61 12 54
Card 91: 86 76 17 16 3 93 69 13 8 95 | 12 97 48 33 55 35 84 91 5 31 57 77 28 79 6 19 98 26 43 49 1 82 37 61 24
Card 92: 76 90 89 65 20 95 59 24 63 22 | 25 71 69 47 36 32 50 77 43 85 33 20 39 27 67 96 40 19 84 34 90 98 81 52 80
Card 93: 91 96 47 12 2 46 61 58 39 77 | 1 69 67 60 65 63 19 32 64 46 62 8 15 94 92 93 74 20 54 29 99 89 23 75 28
Card 94: 36 66 11 56 96 54 42 44 83 84 | 19 33 82 32 15 16 97 47 64 73 72 2 12 10 29 75 38 27 5 80 39 6 22 53 24
Card 95: 35 26 10 67 65 73 5 75 78 18 | 75 99 54 38 73 24 33 7 28 9 64 67 74 5 26 30 37 18 39 35 53 10 4 78 65
Card 96: 17 63 42 20 93 48 94 41 89 5 | 48 88 41 89 1 40 26 53 46 5 49 97 20 91 42 28 74 17 94 79 63 32 93 7 72
Card 97: 48 77 23 12 8 80 59 88 92 42 | 96 88 13 97 27 86 8 48 33 99 59 23 12 39 90 36 42 92 94 38 76 80 77 26 9
Card 98: 70 35 92 63 28 96 50 20 94 98 | 70 12 13 22 96 94 61 74 50 32 92 52 93 54 98 66 20 63 28 99 35 87 78 67 91
Card 99: 49 65 8 14 33 57 92 90 22 97 | 14 92 84 29 61 97 72 43 26 63 57 19 60 46 49 95 35 86 39 36 80 21 30 73 74
Card 100: 44 47 96 69 98 77 52 31 80 14 | 34 74 18 25 75 67 16 2 49 36 68 39 87 97 33 43 3 19 46 10 45 86 91 50 71
Card 101: 28 86 75 77 17 78 96 5 20 30 | 31 67 62 83 58 90 23 25 27 35 29 22 64 50 10 15 6 88 17 78 77 9 4 66 63
Card 102: 15 8 61 1 24 98 32 16 81 93 | 99 69 26 70 88 71 25 40 53 54 79 58 15 32 48 87 18 24 52 2 98 82 10 21 6
Card 103: 86 29 83 91 56 31 74 87 53 22 | 45 15 79 95 3 14 94 83 16 72 65 36 38 53 78 52 39 91 50 54 86 31 99 22 56
Card 104: 22 63 37 54 36 96 90 80 8 7 | 63 75 84 80 48 54 36 35 14 74 53 25 47 37 96 23 56 22 6 8 34 90 7 64 55
Card 105: 49 2 17 32 41 45 85 25 83 12 | 77 13 34 83 80 20 50 47 78 30 11 48 44 86 84 21 25 63 36 49 97 74 68 53 81
Card 106: 64 2 46 80 75 13 69 56 54 71 | 42 60 95 16 48 30 75 38 46 69 18 98 59 14 93 84 55 70 97 53 32 20 76 2 19
Card 107: 22 64 50 79 55 18 87 8 20 98 | 28 69 96 15 70 42 11 12 38 83 55 99 62 98 3 79 53 24 91 44 19 9 4 66 82
Card 108: 1 71 73 45 2 50 17 72 19 9 | 1 62 77 47 27 54 2 55 60 89 71 96 31 43 10 67 3 65 25 9 45 68 50 88 73
Card 109: 39 61 22 80 23 78 85 99 71 52 | 45 53 46 75 82 84 44 33 76 57 31 65 80 2 66 49 47 39 35 95 19 96 30 14 43
Card 110: 50 31 7 42 72 16 28 77 81 43 | 2 6 90 72 16 71 48 77 63 38 31 4 93 76 49 78 45 46 5 80 27 25 26 74 33
Card 111: 89 53 2 28 35 5 68 42 62 23 | 35 8 78 24 85 56 55 27 14 33 48 80 18 11 71 1 53 77 91 44 58 25 74 92 43
Card 112: 33 40 80 76 16 97 71 67 26 49 | 27 34 11 35 51 26 59 58 44 86 66 54 82 21 8 74 99 77 37 71 16 50 40 61 28
Card 113: 34 62 21 74 51 35 19 37 89 49 | 41 5 91 23 43 62 42 68 81 89 19 70 55 88 52 15 97 80 58 26 11 63 6 49 28
Card 114: 11 63 45 75 92 50 57 42 29 79 | 13 89 23 20 58 50 26 40 3 27 16 47 71 49 85 78 59 21 37 68 34 7 98 45 19
Card 115: 6 64 20 23 50 14 24 33 9 15 | 61 42 74 40 95 30 18 60 46 43 3 25 14 16 92 56 53 90 19 24 78 58 63 80 49
Card 116: 69 25 32 2 1 6 24 17 89 4 | 13 57 77 49 27 87 91 68 52 96 20 21 5 62 90 39 47 55 56 63 30 38 14 79 45
Card 117: 8 5 28 47 41 25 87 73 17 56 | 43 63 88 32 35 20 13 66 64 86 30 10 92 71 45 57 70 69 62 18 9 93 1 81 95
Card 118: 38 54 10 60 63 36 90 47 83 18 | 63 47 45 65 78 60 55 98 91 36 22 81 83 18 90 15 40 10 87 38 54 33 8 32 4
Card 119: 82 95 23 76 45 72 16 62 71 83 | 46 66 81 9 16 93 87 4 40 97 5 72 78 54 67 56 61 12 21 74 64 52 23 14 26
Card 120: 64 42 36 63 41 71 84 69 85 29 | 80 31 87 20 18 71 43 64 94 7 54 36 45 86 41 60 28 84 88 26 63 85 69 58 77
Card 121: 66 77 99 55 75 31 44 30 47 73 | 20 59 45 34 63 89 88 52 39 13 91 61 78 76 73 99 38 23 40 50 4 1 65 67 58
Card 122: 9 20 68 24 25 67 3 63 34 12 | 81 48 31 89 72 99 11 26 13 73 58 94 42 57 59 5 74 12 18 20 60 88 83 76 2
Card 123: 51 24 73 56 61 57 79 46 37 69 | 55 38 63 17 85 75 59 61 88 50 53 72 1 5 66 52 14 80 74 6 57 22 97 70 77
Card 124: 59 97 26 20 53 15 27 65 2 23 | 75 2 74 22 72 91 85 33 98 11 26 99 9 62 61 16 87 69 8 32 10 37 59 20 48
Card 125: 30 58 23 6 81 8 3 37 53 15 | 75 66 81 42 32 84 57 40 63 19 70 76 74 54 61 82 44 8 16 80 55 87 10 92 22
Card 126: 30 71 38 18 91 61 68 99 13 16 | 91 5 99 88 86 61 16 90 13 9 58 30 69 50 71 1 28 54 20 40 68 46 18 4 73
Card 127: 74 60 96 29 69 68 16 80 45 20 | 53 31 71 26 42 64 99 5 81 92 43 96 16 69 22 19 88 60 54 20 29 76 6 56 11
Card 128: 47 88 77 56 66 5 38 14 70 1 | 19 5 1 76 2 77 35 51 68 22 75 44 45 13 37 96 86 60 85 87 25 26 64 11 65
Card 129: 76 13 49 32 89 52 40 43 54 86 | 57 12 64 59 21 1 40 45 20 24 60 68 77 14 55 80 88 11 83 94 84 4 58 71 18
Card 130: 77 98 41 54 64 1 14 20 51 26 | 5 53 6 80 46 14 29 9 77 55 94 40 84 60 33 97 66 64 81 1 75 73 28 16 36
Card 131: 16 88 64 81 42 51 13 10 45 48 | 18 77 28 84 75 94 13 35 27 83 29 2 11 44 48 20 19 46 17 25 70 38 30 42 54
Card 132: 17 95 50 10 52 65 94 91 49 44 | 30 19 5 13 49 97 44 60 54 38 64 92 37 87 33 67 35 43 40 16 91 15 7 96 36
Card 133: 3 51 66 53 19 60 34 26 32 75 | 87 29 64 65 10 50 98 42 69 35 89 26 41 23 14 94 38 49 13 37 53 31 95 90 27
Card 134: 81 88 58 61 11 31 54 29 42 50 | 44 35 72 34 21 57 86 79 2 11 67 85 37 49 83 70 64 63 95 12 62 52 71 15 3
Card 135: 8 45 79 72 50 38 17 92 89 91 | 77 23 59 53 36 80 25 95 69 83 33 40 62 49 86 19 18 75 84 48 44 47 96 39 73
Card 136: 4 41 75 98 60 79 65 9 74 20 | 90 98 16 2 41 9 1 79 28 27 37 47 20 80 74 36 48 60 42 26 75 65 58 4 6
Card 137: 96 77 70 23 91 54 43 61 25 4 | 36 96 45 18 42 10 24 65 52 99 93 38 76 27 77 95 23 61 35 34 85 43 59 70 54
Card 138: 74 87 59 72 88 15 14 97 68 13 | 11 84 15 27 33 38 8 72 12 40 88 37 14 75 97 82 39 57 87 2 83 68 74 59 13
Card 139: 12 20 1 36 10 91 16 42 94 8 | 74 10 86 57 3 27 25 15 33 78 24 84 19 35 58 38 17 77 59 85 4 92 2 55 60
Card 140: 62 18 78 34 56 35 70 69 12 50 | 60 8 52 72 95 97 56 69 39 59 38 78 35 43 25 7 16 89 87 57 49 36 88 62 76
Card 141: 7 36 86 91 88 37 23 67 92 41 | 86 36 60 4 83 14 88 45 44 23 90 16 7 10 30 92 64 52 91 58 9 72 67 37 94
Card 142: 15 68 29 85 72 87 78 4 45 33 | 70 5 78 53 22 13 88 52 72 37 55 7 24 41 90 58 84 23 73 83 3 66 96 61 92
Card 143: 8 47 60 23 42 79 66 44 68 62 | 44 66 79 51 8 39 22 85 38 81 42 21 60 67 11 25 7 47 23 9 68 12 70 62 83
Card 144: 46 62 12 26 90 16 95 99 8 93 | 23 5 94 99 30 85 75 16 34 81 11 53 27 8 90 82 26 62 87 55 14 73 97 67 93
Card 145: 48 96 83 27 12 82 3 29 86 49 | 21 27 96 82 84 49 3 70 76 91 32 29 12 22 58 86 44 87 61 2 83 72 48 40 68
Card 146: 62 1 12 83 72 10 50 17 98 5 | 19 26 83 98 49 87 24 32 40 35 50 85 18 17 38 7 61 8 5 20 77 34 1 33 62
Card 147: 5 62 85 11 61 49 2 88 75 59 | 59 23 11 44 73 35 82 63 2 33 68 49 75 56 88 62 67 61 5 98 89 19 24 90 76
Card 148: 89 21 6 97 13 61 82 71 37 84 | 71 5 7 34 19 66 4 61 55 10 25 82 97 9 72 30 89 13 21 77 6 31 58 84 48
Card 149: 46 96 58 2 92 66 52 39 22 23 | 70 31 7 45 46 58 27 2 42 25 59 66 52 99 96 63 39 14 62 51 95 84 69 8 89
Card 150: 85 61 42 49 66 9 40 74 8 77 | 41 89 97 87 48 49 69 82 21 54 91 52 71 46 28 99 47 78 98 39 81 95 9 33 85
Card 151: 70 35 27 20 42 47 72 89 8 64 | 73 42 3 10 59 72 89 70 50 35 2 8 32 5 36 47 29 98 75 51 30 58 43 86 56
Card 152: 65 21 42 45 83 97 90 96 12 28 | 21 30 83 14 24 49 10 65 88 79 64 8 33 15 57 1 97 32 91 78 39 62 4 99 23
Card 153: 22 82 23 85 32 25 83 63 68 59 | 52 48 27 94 43 18 21 90 10 62 22 35 55 50 77 93 12 42 91 73 64 36 84 9 8
Card 154: 86 15 55 71 88 99 77 18 66 30 | 31 18 38 57 76 53 82 1 49 84 77 14 26 11 40 86 41 87 47 9 62 88 20 59 21
Card 155: 34 52 7 30 51 83 42 86 49 16 | 51 57 77 36 21 13 17 88 56 98 96 66 62 63 6 37 52 70 50 32 43 45 47 64 53
Card 156: 1 48 76 45 33 51 16 20 25 47 | 49 41 1 64 13 57 79 53 35 6 52 71 97 83 95 87 88 58 37 16 24 63 31 94 46
Card 157: 20 3 5 93 75 15 89 14 96 43 | 42 30 91 82 34 44 31 41 4 59 62 54 38 33 25 51 84 28 96 85 8 60 83 10 36
Card 158: 68 19 67 1 7 92 4 81 98 53 | 71 64 18 83 66 57 25 49 30 62 95 77 93 40 75 47 15 84 78 9 48 52 24 38 34
Card 159: 3 32 42 47 90 1 27 66 50 97 | 4 41 22 18 36 57 76 50 80 24 27 45 25 88 58 29 83 87 86 89 59 66 3 11 13
Card 160: 76 74 90 64 70 1 97 28 68 84 | 18 19 67 84 12 51 97 60 68 92 28 90 1 94 93 64 30 2 74 76 61 49 85 70 96
Card 161: 75 12 21 36 44 85 1 43 29 45 | 99 87 38 73 60 33 80 25 1 54 85 45 4 57 41 29 43 90 49 44 27 12 31 16 23
Card 162: 23 69 91 77 84 98 55 89 92 74 | 26 44 25 49 10 15 82 37 39 64 61 83 53 1 38 69 22 96 5 91 36 65 75 41 98
Card 163: 78 64 29 96 73 12 35 19 65 38 | 76 96 35 9 34 41 46 39 3 10 27 24 13 84 91 92 22 58 62 16 8 12 60 18 56
Card 164: 82 84 96 81 23 19 58 2 24 62 | 36 93 49 5 71 87 34 39 2 98 97 28 77 70 17 53 51 23 57 81 3 48 29 27 62
Card 165: 53 95 19 88 39 99 29 62 91 77 | 18 51 63 11 99 71 84 86 57 96 60 62 77 32 35 27 98 23 97 1 65 17 15 87 38
Card 166: 17 46 33 41 80 57 47 91 1 64 | 33 98 57 1 88 23 64 41 43 61 84 11 7 52 80 60 4 97 75 46 55 21 47 91 79
Card 167: 47 3 71 68 6 94 54 61 66 72 | 69 9 10 67 68 87 49 61 56 6 85 59 75 23 44 90 94 13 66 52 53 72 64 45 31
Card 168: 90 57 89 45 63 53 61 46 96 55 | 57 94 39 18 45 53 27 24 81 79 50 30 21 31 83 99 67 98 92 90 22 47 46 80 7
Card 169: 7 47 36 15 24 51 52 9 48 61 | 15 88 48 99 3 12 22 7 47 87 89 57 9 24 82 51 97 61 52 1 36 54 94 63 62
Card 170: 26 42 91 72 64 18 69 81 44 22 | 46 60 73 35 4 52 33 51 13 82 62 5 27 90 95 2 7 56 44 76 75 50 87 70 74
Card 171: 17 80 28 54 57 90 86 59 67 1 | 1 59 19 90 37 57 76 87 42 73 20 41 68 33 67 53 28 50 86 54 80 99 6 17 91
Card 172: 95 28 26 47 83 76 31 52 70 89 | 69 18 8 50 20 27 16 60 11 88 75 13 34 57 90 1 5 91 38 32 6 68 65 35 33
Card 173: 15 74 3 88 42 10 62 59 39 27 | 34 61 14 52 74 88 22 39 67 23 10 73 27 46 55 24 30 89 35 82 66 83 86 15 43
Card 174: 6 8 3 61 1 87 94 18 20 93 | 59 56 13 57 85 8 67 6 14 60 10 69 29 3 99 26 44 78 82 22 49 24 36 90 87
Card 175: 47 64 30 84 70 92 51 53 12 73 | 11 79 23 33 4 2 36 47 7 53 10 13 20 92 51 72 32 61 94 78 5 64 69 19 54
Card 176: 55 57 29 40 25 44 96 7 70 14 | 51 88 85 62 5 66 23 30 81 33 50 75 25 61 59 43 87 71 32 76 27 48 8 11 86
Card 177: 57 9 53 8 63 88 32 52 79 28 | 35 42 99 1 72 64 51 11 58 16 50 70 21 87 65 77 66 94 63 96 47 32 62 81 92
Card 178: 48 22 72 59 60 61 8 39 24 67 | 34 88 67 4 48 59 84 98 83 26 50 10 57 45 14 7 9 21 63 17 94 91 37 39 36
Card 179: 11 60 35 51 80 12 53 22 71 72 | 10 18 70 11 16 19 72 23 83 63 61 58 56 50 28 89 7 75 59 48 81 54 33 2 40
Card 180: 50 48 20 85 86 18 67 91 27 22 | 7 14 31 51 36 42 66 56 46 16 15 10 5 67 90 2 19 63 26 35 91 82 43 68 49
Card 181: 75 78 86 53 61 26 68 77 85 25 | 95 40 18 73 6 43 74 87 51 64 37 83 62 24 19 33 2 7 13 52 48 63 57 70 75
Card 182: 6 60 67 18 39 29 33 54 37 83 | 15 72 38 35 8 96 36 44 81 19 21 1 40 87 46 52 9 4 28 31 85 13 68 32 41
Card 183: 52 18 27 20 7 46 38 58 91 37 | 20 46 27 9 37 90 63 99 59 78 66 65 88 91 18 21 1 49 85 71 26 4 8 58 50
Card 184: 38 58 36 50 76 43 32 98 69 23 | 36 24 69 33 48 92 28 44 43 91 58 50 86 4 98 78 76 81 23 32 71 27 66 40 38
Card 185: 53 21 69 24 51 39 88 3 78 5 | 89 78 73 61 59 21 8 79 64 51 39 66 53 69 67 68 36 29 88 38 44 47 46 19 13
Card 186: 48 54 68 40 60 27 45 51 61 17 | 52 78 51 35 45 74 62 89 27 76 48 17 56 53 40 14 61 11 68 37 31 54 39 60 4
Card 187: 64 49 14 90 67 54 40 21 60 71 | 8 30 55 89 17 90 97 60 16 49 74 14 67 24 82 64 51 25 61 98 12 19 35 40 43
Card 188: 53 51 65 17 4 88 5 69 28 34 | 11 24 78 69 77 26 88 4 60 71 28 20 59 10 51 2 17 49 52 65 34 8 53 64 5
Card 189: 53 78 45 15 50 2 6 16 3 38 | 53 10 27 45 67 38 76 56 50 4 41 77 91 16 3 6 60 13 2 43 15 9 98 20 78
Card 190: 72 54 84 76 69 10 13 19 97 26 | 84 45 29 49 71 72 2 47 16 32 46 14 5 34 35 99 6 93 56 89 22 79 73 24 64
Card 191: 18 70 33 56 72 68 98 52 24 46 | 55 52 25 18 24 12 49 15 46 23 71 72 89 26 33 2 76 7 44 56 68 97 83 70 98
Card 192: 33 34 57 40 93 14 12 45 79 25 | 97 20 48 39 90 64 27 40 26 58 42 60 45 2 81 80 23 34 79 57 24 18 71 53 5
Card 193: 87 90 72 76 10 83 41 6 54 23 | 23 18 1 76 93 88 96 72 7 31 20 90 68 30 39 40 44 11 35 3 78 54 17 46 60
Card 194: 5 10 25 27 6 45 67 86 92 32 | 68 32 21 5 33 74 42 27 84 48 46 14 38 39 64 47 95 86 45 56 31 25 67 15 17
Card 195: 31 33 64 80 68 21 20 29 63 11 | 80 81 1 56 61 21 12 33 64 30 76 82 97 43 27 52 31 20 70 45 17 4 60 77 68
Card 196: 73 91 78 83 14 54 94 92 9 8 | 3 56 55 76 96 22 17 43 15 40 52 51 13 50 79 65 41 25 60 11 93 53 99 4 87
Card 197: 63 64 25 48 91 95 77 7 38 69 | 40 29 14 72 27 5 10 97 56 30 51 13 15 34 75 87 86 60 45 88 33 61 90 32 85
Card 198: 70 60 61 56 16 81 18 12 88 65 | 5 67 62 45 43 21 32 94 19 27 77 58 50 41 9 85 29 40 92 87 54 24 76 48 33
Card 199: 29 26 70 45 22 86 27 64 95 80 | 46 5 38 61 44 97 9 15 78 93 73 34 7 23 67 41 58 33 1 85 48 98 4 14 53
Card 200: 3 88 81 61 64 39 54 51 49 17 | 16 87 35 37 82 68 55 19 80 33 10 2 48 25 79 89 52 4 44 59 26 72 90 83 9
Card 201: 28 44 46 58 13 92 35 16 30 14 | 32 79 85 98 67 55 21 41 93 43 19 72 35 24 90 64 88 82 84 20 45 91 81 38 49
Card 202: 85 43 47 11 9 21 27 53 17 95 | 10 6 26 91 30 69 52 20 28 16 82 45 72 54 58 96 88 99 38 55 78 98 15 70 4
+6
View File
@@ -0,0 +1,6 @@
Card 1: 41 48 83 86 17 | 83 86 6 31 17 9 48 53
Card 2: 13 32 20 16 61 | 61 30 68 82 17 32 24 19
Card 3: 1 21 53 59 44 | 69 82 63 72 16 21 14 1
Card 4: 41 92 73 84 69 | 59 84 76 51 58 5 54 83
Card 5: 87 83 26 28 32 | 88 30 70 12 93 22 82 36
Card 6: 31 18 13 56 72 | 74 77 10 23 35 67 36 11
+27
View File
@@ -0,0 +1,27 @@
#include <stdio.h>
#include <stdint.h>
#include <stdbool.h>
int main(int argc, char **argv)
{
// Get filename as an argument, defaults to "input.txt"
char *path = (argc > 1) ? argv[1] : "input.txt";
if (!path)
{
printf("Requires input file.\n");
return 1;
}
FILE *file = fopen(path, "r");
if (!file)
{
printf("Could not find file.");
return 1;
}
// Code goes here
return 0;
}