Committing days 1-4
This commit is contained in:
commit
db9b6acbb6
19 files changed
+2500
No files matched your search
+133
@@ -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;
|
||||||
|
}
|
||||||
@@ -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
@@ -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
@@ -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
|
||||||
@@ -0,0 +1,4 @@
|
|||||||
|
zero1
|
||||||
|
1zero
|
||||||
|
asdfone
|
||||||
|
asdfoneasdfoneasdf
|
||||||
+126
@@ -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;
|
||||||
|
}
|
||||||
@@ -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
@@ -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
|
||||||
@@ -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
@@ -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;
|
||||||
|
}
|
||||||
@@ -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
@@ -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...
|
||||||
@@ -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...*......
|
||||||
@@ -0,0 +1,10 @@
|
|||||||
|
467..114..
|
||||||
|
...*......
|
||||||
|
..35..633.
|
||||||
|
......#...
|
||||||
|
617*......
|
||||||
|
.....+.58.
|
||||||
|
..592.....
|
||||||
|
......755.
|
||||||
|
...$.*....
|
||||||
|
.664.598..
|
||||||
+117
@@ -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;
|
||||||
|
}
|
||||||
@@ -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
@@ -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
|
||||||
@@ -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
|
||||||
@@ -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;
|
||||||
|
}
|
||||||
Reference in new issue
Block a user