day 19
This commit is contained in:
parent
1cb6b9117e
commit
1458e923e6
16
aoc/str.h
16
aoc/str.h
|
|
@ -41,6 +41,7 @@ void str_print(str s);
|
||||||
#ifdef STR_IMPLEMENTATION
|
#ifdef STR_IMPLEMENTATION
|
||||||
|
|
||||||
#include <stdio.h>
|
#include <stdio.h>
|
||||||
|
#include <string.h>
|
||||||
|
|
||||||
str make_str(uint8_t *data, size_t len) {
|
str make_str(uint8_t *data, size_t len) {
|
||||||
return (str) { .data = data, .len = len };
|
return (str) { .data = data, .len = len };
|
||||||
|
|
@ -108,25 +109,14 @@ bool str_starts_with(str s, str prefix) {
|
||||||
if (prefix.len > s.len) {
|
if (prefix.len > s.len) {
|
||||||
return false;
|
return false;
|
||||||
}
|
}
|
||||||
for (size_t index = 0; index < prefix.len; ++index) {
|
return memcmp(s.data, prefix.data, prefix.len) == 0;
|
||||||
if (s.data[index] != prefix.data[index]) {
|
|
||||||
return false;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
return true;
|
|
||||||
}
|
}
|
||||||
|
|
||||||
bool str_ends_with(str s, str suffix) {
|
bool str_ends_with(str s, str suffix) {
|
||||||
if (suffix.len > s.len) {
|
if (suffix.len > s.len) {
|
||||||
return false;
|
return false;
|
||||||
}
|
}
|
||||||
size_t offset = s.len - suffix.len;
|
return memcmp(s.data + s.len - suffix.len, suffix.data, suffix.len) == 0;
|
||||||
for (size_t index = 0; index < suffix.len; ++index) {
|
|
||||||
if (s.data[offset + index] != suffix.data[index]) {
|
|
||||||
return false;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
return true;
|
|
||||||
}
|
}
|
||||||
|
|
||||||
bool str_empty(str s) {
|
bool str_empty(str s) {
|
||||||
|
|
|
||||||
|
|
@ -0,0 +1,402 @@
|
||||||
|
rbrr, gbgrgrg, rgurwgb, grb, ggg, grbugw, brwggrw, rbbrub, grguuu, uuub, uw, urug, bru, wwrrb, rbwbb, urw, uwuw, ubg, uugug, wbub, guubr, rru, gwb, wggrg, gubbwww, wrr, wbw, grug, brrr, rgw, urg, gugg, rugwuwb, rwu, rgu, bbu, ubb, gr, wwwggw, ub, uggrb, bbwrru, wuwrww, gbrbwru, uubu, bub, uguub, b, uwgu, brggrr, rruuggrr, buuu, brbgw, wbugb, rbwru, wrgu, bbg, uwbg, ruwg, bgugub, urwrrb, bggugw, bg, rgrrb, guwwu, gbbr, rwb, urrgu, brw, gbrwg, gbgwwrb, grgb, ggug, ugw, wbwwbug, wrbru, uwww, wwuw, wubg, burubw, gwr, wwubu, ubggrr, uru, www, wwr, uwbw, ww, rbbrwbr, rrwgru, gwuwgug, wubwww, gwbbwwb, bwu, ubr, rrguwr, bu, g, wrwbr, ggwb, wbr, uubwbrrg, gubrurwu, ugbg, wrurwbwr, buu, wuwbgrbw, ruw, wwgrw, bbbr, wbg, grrrrbu, wguuggwb, wrrwr, rbrru, bur, wurgwbgw, wgr, burggw, grugug, uugbrg, bgurgrr, urbw, gurur, wggb, rrub, uwgwg, grrug, uuu, gurg, ugugg, rurb, bbb, rrggwwb, brwbb, rrbub, ugb, wwbgg, gbguw, wgwgbb, wgw, brrw, ugbwrg, wgub, uub, bwgrugwb, guwgg, gurw, rrruwr, wgg, bgw, wrub, bubrw, uwrbb, uubugbwg, bwr, ugg, gwrbg, gbg, rbuwr, gububbu, bbw, wggw, rwrww, bbggbr, urgburg, rwbgr, rgr, wbugu, uug, uwg, ubgruurb, r, uu, rrw, uuwgu, gbu, urb, ugwg, bgrgrrg, rub, wubgwbg, brgubr, uuuburb, rbrwgr, wgwur, wbu, buurrgw, uwu, wbgb, rgru, wgggg, gubbr, uubwwg, uurbbggg, bgrwg, wggburr, ubwrg, wu, urbu, wbwrur, urgu, bggub, gbuwbb, uruu, gwwggwu, wugubrbr, bgrb, rgrbrb, guw, brr, rbguu, bgb, rug, gbur, gbb, rbrwbbb, ruuw, wrug, bbrwbgu, wwuwwbr, bgugur, rgg, brbw, wru, burrg, gu, ggwuww, wuw, uurg, wuwwbrwr, bbgbr, wb, ug, rrru, gwbg, ubwrug, rgur, rwg, ggrr, rgbub, uwubub, rwugg, wgbw, wburr, rgbu, ugr, ggwwb, gg, bbrbwgrw, gwu, brgwrwb, bguw, bbwwurr, ruu, ggbbu, ggr, bgwbgr, gru, gguuw, rbg, urbb, grw, wrwubbg, wbuu, ubwuw, gug, rbbr, wwb, buw, gw, buuw, wurgbuu, u, uuw, rwbw, wbbguw, bww, urguuwr, buwb, rugguggb, wwub, wrgubb, wrbr, gubbrw, guugr, ubbu, rwwbrb, bw, uwur, uugugw, bb, grr, wwuu, grrggg, rur, burugrr, ggb, rr, grg, brgw, wbwgu, uruwb, wuu, bwwgwrb, urgg, rrwuru, wurbur, uwb, bwrb, wur, ruwbwug, gb, bbr, uuwguu, ggwgwggw, bgurbb, wrw, rrbu, ubu, wbrgr, ruug, rbrg, rbr, bubwb, wbwgbwb, urugww, wrgbw, wgb, grub, gwrbuu, rbb, rrb, wbb, gguw, ggurrwg, bgwg, uuurw, wrwuww, brg, gbuub, uuur, rwrwu, wgu, rrrw, rbw, bwrbr, gwrgwu, ubbruu, rurrbrg, wwbwb, ubrg, wbbb, brb, rgwgr, gwg, brrgb, rwub, guwburb, buwgbru, ugbug, bwb, wgbwuu, wrbg, rrwugb, guuub, burw, brgwbwb, ubrub, ggbb, wggww, buwwwwuw, gur, ugu, guu, gwrbbrug, wbggu, gbgbuu, gbr, ggub, bbwg, ugwuur, grgr, ubguu, urgw, ru, bgg, wwu, buggg, gbuu, uuwu, rrww, ugrw, urr, rbu, bbugb, rgb, uwrbbu, wrwguu, rw, wwwu, gbbbuguw, wbrwwg, gbbrwrwr, wugw, rrbb, wurg, wgbubg, wug, wwwwg, br, rwbg, ur, rrrggg, gbw, ggu, bwrwb, rrr, rguuww, wuwbgww, bug, wgwru, wgbggw, uww, bwg, ggw, ubw, rrg, wg, uur, uwr, wrb, bwurbg, ugur, rb, gww, ubuu, burr, ggwg, rwr, gwuww, bgbwu, gub, bgu, wwgr, wwgb, bbrug
|
||||||
|
|
||||||
|
wwugguwgrwwbrwubrwrwburubgrwubbbrugbggwrbwrwwrgggg
|
||||||
|
brwwgggrrubuwubbgbgruwgwguguwgwwugrgbwbgrbbwwuwwruug
|
||||||
|
gruurgurbugwgwbwuwubrggrgbgguurgrugbuubwgwrguwggwburrrgu
|
||||||
|
ugbrrgrwgbuggrrwuwwwbwugwwgbbrbuugbwbwbrrggwgruurrguuguw
|
||||||
|
grgggbwuuggwbbugrburbbbbbbbgwubbruuggubbgrggurg
|
||||||
|
wrggrurwbubuwwbrbrrurgrrrbuggwgbbgbbwgbwbbrgugruug
|
||||||
|
ugrrrrwggbbuuubrbggrgurggruurgrburbrgubrwrwgbwwwuugbwwuw
|
||||||
|
ggwrrwwrbbrrbwrgrwuurrbbwubgugruurbrggrrbr
|
||||||
|
rrurruguurburuwubwugurrrwgwgubbbwuurbggrwruuwg
|
||||||
|
gwbgrrggwbgbwrgwurbubgrwubwrgbugurbrbbrbrb
|
||||||
|
rwburrrbrwggbgwbruuwrwrrurwwuwwbugguwwrurwbwrrbu
|
||||||
|
uwruuuuwrwrwrrgurrubuwgwgrwbwuubgrwrbugubbbbuwbr
|
||||||
|
rwwggwwurwwrrrbwrwwwugbrggruwgruggwbwwgguuuuwurbrgbu
|
||||||
|
rwgbgwbgburuwubrbgrwrwubrrbrgubbwrgwbrbrugbbubbwurgu
|
||||||
|
ugbbbubgbbuwbwrwgbgbggurbggrwbgubbwuwbbrwgrubbg
|
||||||
|
wwbwbrggbrburubwgrwgbgrgwuruwrwwrgubwgurrbwrrwurwuurgggwgg
|
||||||
|
wuwgbwrbbgguwgwurgwbrgbwguwrbwuugubuubuuwgbwrr
|
||||||
|
ruuwuugwuuggbbwbuurguuwwgbwbgbgwbwwgwwuugugbbwwwruwuubrrgw
|
||||||
|
wwbgrburbbwurgruwugbrgggrgwwggbbgwgurbbgubugbgwubwg
|
||||||
|
wrggbbruuwrrbgrbwbuuubrruwgrwrrrgrwgwbbw
|
||||||
|
rgbugwrgwwurbgwubwruwwbrwggbwruubwbbrrwubrgwurrrrugbgg
|
||||||
|
buurwgrwgwbbugwgbuwbwurbwbggrugbbbwwbwrbwgrwurwubrgbrbbgu
|
||||||
|
rwwururugbgubrwubrrggbwwbgbrgrrbbuurbugwbgwuurgbuubrgu
|
||||||
|
bwgwruwwrbwgrgggrgwbruguwrubbrrgugbrbruwbug
|
||||||
|
bwwrurburbbwbuubrrwwuwubwrburrwuggrbbuwwggb
|
||||||
|
gbwuuuruuwguuwwbuwguuuuwgwuuugubbggrbuuuwb
|
||||||
|
uuwrwrwwbrubgbrrwbrbuuuwrrggbrrgwuugbuurrbbu
|
||||||
|
wubggwugrugbubgrbwwgbburbuuuwwbbwuuguggruugbuwwwbwrwbww
|
||||||
|
gggwbuwrugwruurgubrugrrrubbwwguwurbwbrgbwgwwgug
|
||||||
|
wrgguwwbbgbggubbuugbgrrbrurwuguwguuggwbwwrggww
|
||||||
|
ubrruwrbuuggwuuwbrwgbguurbwbbgrrwurbbbgrwbubgwubgbrwgbbrb
|
||||||
|
ugrgrwbrgwgwrrwbrwwugrruwrgrgwrurbbgurrbwwrruruwbbbrbrugu
|
||||||
|
wbrgrubuugggruwwrwbuwgwgurugurbbgwwuggbwgrugwubr
|
||||||
|
uugwugbububwrrgwwrrguruwwgwgbgugwgbrrwgrubbrwrrrbgwr
|
||||||
|
rgwuugbwbwurggurrbrbuwggwwbbgwrbbrugwbggwggwuurg
|
||||||
|
wgrrrurwgrgbwuwrggrbbgwgurugruwwugbuuruurub
|
||||||
|
buwgubbgbwwgbwwrrggwwrrbwgwwgrugbbguwwwwgbwuwuuuururgur
|
||||||
|
rburrbgwwwwgrrurbruwwbwbbwrwgubguwbbubwbgguruggruuugubbwu
|
||||||
|
grbgurbbgguubrrwbrwwgrwrwwubbubbbugwwgurwgwgrbwww
|
||||||
|
wrgbggrgrwggwuuwbrgwurgurrbwbbwrbgwuurwgrgw
|
||||||
|
gbwwubwgrwuguwggbgrgrwwgugbuuwbuuwruwwgbbb
|
||||||
|
ugrwwrrgwrguwgbbrbguugbbgbgbbbggbrubbbbrbguwwgu
|
||||||
|
guggrgugguuubwwgruwwuggbugwbwwwururgbwwwrggrgbugubgubg
|
||||||
|
rrgwrbggggbgwgggubrugrrbgrwwwuggbwwrgurwwuubgwrww
|
||||||
|
bgbuuwgwgrgwwggrggrbwurguuururwrbbwuuwbwgugbbgwr
|
||||||
|
bgbbrbgbrugrggrbwgurbgwwbbrurguwrbrwwwwwbbggrwbgrwwwbw
|
||||||
|
ruwbbgburgrbrbwrrbwwwuwggguruubbbrugbgbbrurbugrubgwgur
|
||||||
|
ubrgguggrwgrbrgrrbwrrrgrgbrruwgwrurugbgubb
|
||||||
|
wuggrwwgrgwwwbgwwuubrggwuuwbubgbrgbuwurubbwbuwwbw
|
||||||
|
grwbwruuggubgurrbrrwguggbwrubwwuuubbbgggwururw
|
||||||
|
guurbugubbwbgrruggubbgrurgggwugugrrubgbruububgubgubu
|
||||||
|
uubwwbgrurgrrurwbgwgwurguuuwguuwbwbuurbrgrgbuubgwbwbbgbbw
|
||||||
|
wrggguwwwwrgbbgrwrbwbgbbuguurrgbbubwbbwrbgwuwwruubrwrrgbgu
|
||||||
|
wgwugwwrrurbgwwrgbggbgbwgbbgrgrbuwgwrwrrurw
|
||||||
|
bbbwbbgwgurrgbuugwbbrubrgrrggurwgguwruwruggrwwrgrrgbugrub
|
||||||
|
bbwbrbrwrwbgurgrrwrrwbbrwrwgruugwbwrwurbwbwug
|
||||||
|
wwgwrrrgbbgguwguuggwbrruubgwrwuuuwrgbrburbu
|
||||||
|
urgwwgwbwbgrguwguubggwuwrbuugggbwuburubbuburrgbuwb
|
||||||
|
wrgbbwuruubwuuguubwuguwwgbuurgrgwguwbrbwwrgrggugbbbb
|
||||||
|
uuuubuuguubugbruwwwbrbrbgrrwwurwrruwwbuuwwrbbgrurbubbubrb
|
||||||
|
bgwurgbwrbwurgwbgwburgubuuubbbwbwwwuuwrgwugg
|
||||||
|
wrggwubugrugugubbguwgwbrwruurrggwuwwrbbgbbbrgbb
|
||||||
|
wruwwgbbrrgwrgrggbrugrwwwbrbwubuggugwbwuggbrwgburbwbbwubbg
|
||||||
|
ugwuuugbwwwrurrgubbbwguurbwgwbrgrwbwugugubbug
|
||||||
|
wrgrubuuwrgrbwbuuubgrbubbrbgrurbuuwggbgrwwgwwbwr
|
||||||
|
uururwwbrgwwrwggwbwrrrrgbbbuugbguwuwwggrgug
|
||||||
|
ugrwbwwrgbrbwwuuwuuurbgruwgrugbrrrbguuwubbub
|
||||||
|
wwwbrruggbuwwgbubwggrrgugruuurrurrwgwrguwwwrrgubugww
|
||||||
|
wrgrrgbrbggbwbubrwbrwrwbbgbwuwgbbwggwrrubgurbugguwuwuw
|
||||||
|
grrwbggrwbuugrggwubrbguuwrurbuuwbggbgugburbrrbuwwrrggggwwu
|
||||||
|
uubrruwgwuwbggbbuurwubwgburbuuwugbwuwurrwbrbgrbbr
|
||||||
|
rubuubuwuuburbbbwgbrrguwgrbbrwwgbugrubbruwgrgbgrbw
|
||||||
|
rwwwbwwguwrurbubwrurrbuurbwrubuwruggbguubgwrbugguuubrgrg
|
||||||
|
buwuwruubbrrrwbbuwbbugrwbguuwrubwrbwwrrgugwuur
|
||||||
|
wrrbuwuwwgwrgwgrruwrwbbwbwwruuwwuugbgrggubbbwwgb
|
||||||
|
guwbwrwuruwrgwuguguwbuwurruwbuggwuwrwwubugb
|
||||||
|
bgbuwwgrrwwuwrbgrgbwbrggubwwbggwwbbwwurgbuubrrwwrburwgrbb
|
||||||
|
wwwgbrbwrwrurrgrbgwbbgrbuwwbbugwwwuwwrurbu
|
||||||
|
wrgbrurguwgrruuggrrugurwuurrubuuguwgugurwgbrruburuu
|
||||||
|
wuwurubwugubrbrbwgrwbuugwbbbrwggrbwwguwwrbrbr
|
||||||
|
wrgwrggbwbwbwubrbgruurbbgggububbbgbburgurrgruwb
|
||||||
|
bggwbbrwbgugbgrwwgbbrruuguuuruuuwgrrrrgwbr
|
||||||
|
wrgwwrgrgbwugbgwgbgbbgrgbuwwwwuwwbubbbwg
|
||||||
|
gggbrrgwbwbuwbrbbbrbbwuubrrwuuggurwggwrwbwbu
|
||||||
|
rbugwwuwrbwbguwbgbgrwbwbbggwruwbuwrwwubrgbbrwurwwwb
|
||||||
|
bwwwbuggbuurbbuwrwwrbgubwbuurbrbubwgwgugrwuwgburwbbwwbrg
|
||||||
|
wrggrgwgbgrwubgbwgrugwbuggggurrrwbrgwwwgwwggwgu
|
||||||
|
ggburrrgubrrgwgwgbrwugwgwgrwbbbuguwbgbrwbuuurwrbr
|
||||||
|
urrgbwwuubwwubuurrbwwgubuuggrguwwwgbwwuguwgbugb
|
||||||
|
buugbwgwrurbbugbrugggwrbrwwruurgurwrburgrguur
|
||||||
|
bwugruuggubrbuuwurbbwbbruggrwwbrruugrwrguw
|
||||||
|
wrgwubgubbuwubwruuruuuwwrurrbgrrbruuurgrbrwugbbuggww
|
||||||
|
ugubburbrggubgrwgwguburwwburbubbrubrwrbuwb
|
||||||
|
wrgguwubbrrwbrwuwwbrwruubwgwwwrwwgbrrwguubbwwwugugwr
|
||||||
|
wgwuwwgrwrubrgwrgubrggggwuwrgrwwbwwbggrgbuwu
|
||||||
|
grwbwgubgwrggwrbgrwbuugrgrburbuubbgrwwwbwgb
|
||||||
|
bwwwbbrbwwurruuwwggrwbggrgguwrubbwbgbbgugubwbbuug
|
||||||
|
bbggwubbgwwrbburwwwgwrbwrbgrbubbwrrrgbgbruu
|
||||||
|
wrgwurrubgguggwgrrbugbbwbrbuurgbbrwrwrwgugwubbbubu
|
||||||
|
wrggggwrbbrugbrubguwuggubwggugrbuurwubgbuwubwgwgugugwubwbrwu
|
||||||
|
bwwugbwbgrrbgrrbbrbgggbwwwwggbbrbwwbbbuwgguugubrububgwwu
|
||||||
|
ugurgbgruurwbwgrruuwwbgbrrbbbggggurruruwrubbbuu
|
||||||
|
uwrugrrgrwbrgubrwwuwwgwgrbbgrbgbrwwuwubuwr
|
||||||
|
ggbgwbrwuwgruwrwgrrrrwugwgbrbbuwuwwbuubwgw
|
||||||
|
wrrrgguurbgubbgbguwruugwrbrgwbgwrrbbuwugbbrwgrbbugrgbbgwuu
|
||||||
|
urguruuggubbwurrubuurgbgbrbgugwwrrggwwwugugg
|
||||||
|
gugbggubuwubrgubwuwrwbgbrgbguggwrbrrgwguugu
|
||||||
|
buwurubbbwurgrubgwgggrruwrrbbrbugggggwbwwgwwb
|
||||||
|
wrwbbuburwrrwwururbrwgbbrbgwbbrrrbubbgrgbuggwrw
|
||||||
|
ugubruguuwrgwububrbgrbwgbwburwgurwbuwwubuwu
|
||||||
|
gwrgugrbgbubbwubgbrwbuwggugwurrburgwrwrugubwggwuu
|
||||||
|
rgbrgrbggwbwuubburrurggwggguurwuwwwrwuwurbrggrgbuwrgbgwbgb
|
||||||
|
wrggrwwbrrurbbuuwburubgruurbrgwrwgrrgrbguguuubwug
|
||||||
|
rguwwuuwgwwubwbggbugwgrrwgbrgbgurbwgrgugurrgguggrrbuuu
|
||||||
|
ruwubrwugurgrbruruggwbugbgrurwuuwbwrwugwgrr
|
||||||
|
wrgbrrbgubgbgwrbwgwubuggurguburgwrruruur
|
||||||
|
uburbrrbgbrrruwruwgwrrgrgurgrruugrruwuuugbuwburwubbrbbgw
|
||||||
|
wrbwuggbuuwwwuuwbwuuwgwbuubuwgrggrrbgbuwgubrruuggrrruuuwub
|
||||||
|
rwwgbrrurubuwrgwgrbgbrrbbbwbbbwrugwbubugwuwgwugwwurwgrbr
|
||||||
|
wrrgwrggrbuuruggggwrguwbwgrubgwbguuggbgrwrgubrurwuggrwgwrb
|
||||||
|
wwrggguurbuwbwurwwbbwwbrggwggbrbbrgugurbrbwwwrbrrggbbb
|
||||||
|
ubbrrbbwwrugugwrggwuwwuruwuwbwguwgggwwbwrbgbwuugruw
|
||||||
|
rggbrwgbbgwrwwrrbgwbuwwbrbrbururwgbugwwbrguuruwrbbbbwrwgu
|
||||||
|
rguwbuwgwrrbgwbwwwuwrrbrwwwburrbbwbruwggugubbu
|
||||||
|
rgwbgwwbugbgwruugwwrugwrrbuwgrbbwbuwubguubwbugugrwu
|
||||||
|
ubwwgrurugbrbrgwrbgrbwruwrbwwbugrwgwrwubrgbwwrurb
|
||||||
|
rurugbugrwuwbgrbwgbbrguwgbgugwgurbbrbuuurbwuuwwgbgg
|
||||||
|
rruubwwwuwrrwgwugwrbgwbuugbrbwugrwwuwurguw
|
||||||
|
wrgwwrgugrbrruurwuwgbwguwurrubwbbwurwwrgruwbgbwwrwu
|
||||||
|
bgruuwgwrgwugrrguwugwbrbgbbbgguurwrbubgwrr
|
||||||
|
gwrgrwurbruwgburrruuggbuwbgbwggwgurubwgurrbwuwb
|
||||||
|
bwbugugubgubrwubrbgruwrubbrurggbgrrgubrrbuurwrrubbwurbbb
|
||||||
|
bggwwgrbburbbubbuuburuguwubrubgbrubrrrgwwbgrrggrgggwrrgrg
|
||||||
|
rrrgbgwbgrwuwgubbwbwgubbrgwwbwburbwguuruwwwrbrb
|
||||||
|
wrgwbbugggruwgbwrggbbburbrgbwuuwurbugggbuggrwrbw
|
||||||
|
wgurbubuuwrwubrrgrrbrbwrwurwbrbgrggguggwubgrgbr
|
||||||
|
rubgwgbwbrubrbbrwwbbrrugrbbrrwuugggggwrwugbbbrb
|
||||||
|
wrwwubrbguubrggurwrburgggruwubggwgwbrgrggrggwuubwggubgggww
|
||||||
|
wrgwbgbrgugggburuguuwgrrrbrgrwbgubruwrwugbggubuwbbbbwwwbw
|
||||||
|
wrgrwggbwwrgbwubrubbwbbuuggrbbugrrrbguwbrub
|
||||||
|
grbrwgbugbgwgwbwubbuurgrgbbggwgbgbwwwrurguuubgbrwugb
|
||||||
|
urwbbbuggwugrgggurbuwgrrwwbuubwubugbgburgwgbubwuurwuwbuw
|
||||||
|
wwgubbuwubrgrgwguwbgrurbgwwuwbgwwgbuuuwwwwggwgrrwwwwrbrbuw
|
||||||
|
wurwrbgrubrrbguwwwgrggwwgrgbbbbuburgruwugwrbr
|
||||||
|
gbwgbrbrrrggrurrbrrwwrrbwwgubgwwuruwurgrrbbrwb
|
||||||
|
gubuwgggwgwwwwuwgggwgwwugrwbggbbwbwrrwugrwuurggwbgbgrwruug
|
||||||
|
uwrugrgbburwwbugrbwwwbbgurruwbburgrwwwgrwrwrggg
|
||||||
|
brbgrggwububuugrwgubwubbbwwgggrgurrwwggbburgbuugw
|
||||||
|
ggwwbgugwwggrrububbgrrrrwwbwwuuurbuuubbgwbwu
|
||||||
|
bgruubgwurbuwrrggugwwbwrbwbgwrwugugbrwwwbburugbbguur
|
||||||
|
bbbrggbgrrbrubugbrguwrrrruwbuwbgugwubgrugrwruugwgbuw
|
||||||
|
wuurgrrwurwggwwguguwwurwwugguuguubbuuruwubg
|
||||||
|
bbuuwrbwwwgggrgrrrrbgwwbwurrurubgubwburgbggrwrubgwbrw
|
||||||
|
rwuwwbrguggwuwrruwurubguubgwburrwgugrwubwwbwgwwbbbrgrbb
|
||||||
|
gguuggrrggbwbubgrbrrwbbubuwbrwrwgbuggbbbuuuuuwrgrrgw
|
||||||
|
bubbrwwgbwrwwggubgwwwubgbrwubuuruuwuwgwwgruggbw
|
||||||
|
wubburwgbbgruuubwggwurwrubwuwbrgbuuwbbguwwgrwbugbwrrgubrg
|
||||||
|
rbwrruguuuwwbrwwwbwrwrbubwuggwurrbugwubuggrbubwrubwbwu
|
||||||
|
uggubuwbuurrbgrugwwubwubrrburubbbgbugubrwwbuwrbu
|
||||||
|
ubbgbbgrbuguwwbgrwwwgwubuguubruugbguuuwbrrg
|
||||||
|
rugbbrguuruuruwgbuwrwbbubgrrbrwwbwugrwugbwuuwbwwbbwuwrg
|
||||||
|
gbubbuubburgrbbrgubggrbbwwuwwbbrurguubgwubbubbbuu
|
||||||
|
uggwrwuubrrwrrwurbrwrguurrugwwgruwrgwrrrbbuubgrruruwr
|
||||||
|
wrgrwburgbugwgruburwguurbgggbgubrurwurguwwurwwrbrubbwbwr
|
||||||
|
bbrubwwbubwuwgwgbrbwuurwrrbgguwbwbgbwuwurbbwbrgrrgwbbgw
|
||||||
|
bwurwgwgguubrgwbguugrubbrgwrugubbgwwubruguwbrbwb
|
||||||
|
wrgrwggurrrgwwggbgwrgrrubuubwbwrrrwggbbgbgrbwgwbgb
|
||||||
|
wubrrwbbugrrrrbbgrbwuwwggggrrbbbwurrbuurwbuwrwgrbggu
|
||||||
|
gwgurwruwwbbgbrurrrbrurrrgrrggbgubwbggugrwrrbuw
|
||||||
|
wrgwwwurubgbrgwbuguubwuwurbuurwrruuggrwrrburuuur
|
||||||
|
gubwbwuggbbguwwbgbgrgggbwggbrrrrwubwrrrruuwbgrrwguww
|
||||||
|
wrgguwubgwwwrwwbrbgrruwbrurrrugwrrbbrgbgbw
|
||||||
|
guwwwgrrurrwuwbwrgububgwurrbrrbgbrrwguwrrggguuugbrbbwrgw
|
||||||
|
rwwbggrrugburbbrbguwbgwwrubwrrwwbbgurruurbggruubrgggg
|
||||||
|
uwbgbugwrguuwurgrrgrbrwwubrrbuuwggwwwurgurgwrgrwbr
|
||||||
|
wwgrggwgwbgrugwrggbbruurbgbbwrgruuwbbrurwb
|
||||||
|
urbwbgwbbugbuwwrgwwwwgbbwbruwbwgwwrrrrbubrbbgurbgwuru
|
||||||
|
wgrgrrwububgruwubgwuuwbubbgurruruwrubgrgwg
|
||||||
|
wbbbgbbbguuuubruurugwbruwbbrbwubrgrburrrrwrrb
|
||||||
|
wrggrugrubgrwrwgugugrrgguuwrubwwugrrbuwbw
|
||||||
|
uwbbggrrburubbgwwrwgggwgwggwgbuwbwgburbgrrwr
|
||||||
|
wubbgrggwrrbrbrgwrbubbruugbrwbbbugbrgguubgrgwggu
|
||||||
|
ruuuuurgrrrrrugbbrgburubbwuugwwgbgubgubwubguuururgrwb
|
||||||
|
bwgrugbbwbbrrwuuuruwubgwuwbrwurrrbwgurwbur
|
||||||
|
ubgwubrburgrgrwwrrurrgguwbbwbrbwbuuuuwwwugbrwgrwguubwbrrrg
|
||||||
|
wbrbwruwbbubbgbbgurbuurbwrggbwbgrugugwwgwwwbrburbgbbwr
|
||||||
|
ubgbbbbgwrwgrgrguubrrgugbgugubrwbruguwbwrugwuburwwbb
|
||||||
|
ubrwbuubwuubrrbbrurgbwubuwwbrbrruwwrgrguwrrbwgrugwbubw
|
||||||
|
gwwruuuwurbwrwrubrwwrrbwrrggrburbgwgruwubrrwgubbbuw
|
||||||
|
rwggugubbwgwrwbwrwrwrgwgugugguruwgwbbrwbwrggwurb
|
||||||
|
ugubuwurgrrgugbugrrwrguwwrrurubrbrbrurbrbbwbbuuwugrg
|
||||||
|
uuurwubugubbggwwwurbwgrgruubrwbwgguwrwwrbubbgrgrbbgubb
|
||||||
|
wggruwbwbrwgrwrwbrbuwbrbbwrwwrbubwggrbuwuggbbrgwrgbggwwb
|
||||||
|
wrgbgrbrgwbggbgbrwgrbbwgrgbgrubbwgbrwrwwgbbbwurgwbgwbwbrug
|
||||||
|
urgwwbwbbrwugruuruuubgbwubgwbuwbbggwrbrggwurgrrrgbububwg
|
||||||
|
wguubbbbgwuuuwrrguurgugrrubrguurwggburbgrwbgwuu
|
||||||
|
uurrbwuwwuwugbgrbgwbggwbwgwbwugbbwgurubwgrrbb
|
||||||
|
wrwrbuggbbrrwrgugrububuwggbwrbrrbbruuuggwb
|
||||||
|
wgwwurrwuuuubuuggrgwwuurrugruwbuwgwrrrwrwbwrubugrwwuwurbgw
|
||||||
|
wrgruubububrbwggggbbrrgrbuuuuwrgwggruwurgggwgwggwuwwwgrwgb
|
||||||
|
ruuggwgbrwwbubuggwwugrrubuwurbgrugrwgwubgbggrbbgbwgrurwggg
|
||||||
|
bggbrgwrwruuuuuwbbrgbrgwubbubugbguugggwwrrugrbu
|
||||||
|
wuuwguubwwguubbwggwwwurbgbugbwwwugwwguuugrwgrwrbwbrbubbgbg
|
||||||
|
ggrgwbwrubrwugwrgbrwurwggrguurgurwrwrrgubbbwrwg
|
||||||
|
wrgguwwrbubgrurgwbbuwguwuwgwbwugruruwwuuuwrbrubwrgr
|
||||||
|
bgwrrbwugrbuggrwbuwrrbrrggggruuugbrrguwubur
|
||||||
|
wrgwbgwruwggbwuubrugbgrrwubrgbburwwrbrwrwwrbguwgur
|
||||||
|
buwbrgrbubgubgugwrrbwbgguuwbbwuubrgrrwwgubbbgwgggugbru
|
||||||
|
gurbrrwbbwgubrrwbwuubbuuruubbruwrwwwrrbrwrwwbrbrubb
|
||||||
|
wrgbbwbrrwwrrwggbbwrrurgurbgwgguggubwbbbruurwrwuggg
|
||||||
|
wrggrugrrwwbgwwwwbugbbbbrwwgggrgggwbuguurgu
|
||||||
|
wwugrwwbbggrgwurgrrbbuwgwgurrrbgruwrwugwrr
|
||||||
|
bwrwubrgugguububbuggubbgggugrwuburuwrwrrrgbrwbrgr
|
||||||
|
grgggugwbuburgbggguubwbrrgrguuwwbrgggwwwrgbgugw
|
||||||
|
ubgbbugugbrugrwuguugwbggugbbwrgrbuurwbgrbrbgubbgwuwuwgbgw
|
||||||
|
gurbubbwgwuwwgwbrbuwugguggbgrwgggrwuwwbgbgwbg
|
||||||
|
rbuuugbburuuubgrubrbbrwgggwbbuugrugrrbbwggwr
|
||||||
|
wrgrwrwbwggwrwuguwrurbugwbruwbggbggrrwurruwuuruwru
|
||||||
|
uwguwwgbgggrubggwugwbwrbrbbwbgguuwrbgggwugrbwuwrwwgrur
|
||||||
|
rgrwrgwuwbbbrgwrrwuubgrgbwwrrgburbgbbubbgubwrburbbwuuur
|
||||||
|
wgruurgwubgubgbwbwbgggurbgbrggrbbgwgrrwggrwwgg
|
||||||
|
wgwbwuwwwgwrbubwbuuuwwuuuuubuwbuurrgbgbubbbuuguburwbgru
|
||||||
|
wrgbuurwbwbwguwrrugbrrwuuububbrgwbgugubbwgugrwgwwggwuwgrgrr
|
||||||
|
guggbbgugbwgurrwbuwruggbbubbwguuuruuwwggwrbbgruburgrrbug
|
||||||
|
wrgwuggurgbwgrgrggwwwgbbrwwgguwgguggbbgbbugwbrruwubrrrbrwuu
|
||||||
|
bwgbuubgrwbugwbrwuugurwgbrggbgrwrggwbrgguwbr
|
||||||
|
rbwwgrbgwwuwbrwgurbguwwgwrgwburwbbbwgrrgubugwurrggrwuww
|
||||||
|
ggrwruugwguuwrbgbrgbrggrwugwggbrgwgurbwgbbrbgwubuggbbrgugw
|
||||||
|
uuwwrwrrurgbrwrgbbuguruwwuwrwrugwrgrrbburgu
|
||||||
|
grbbgurubwbwbgrwwgruurwbbuubrwwrrbwubwuwbbbrwu
|
||||||
|
brrwwbbuwbwrbbgrbgbbuwwbbwrwwgubuwruwbgbwrwwwggug
|
||||||
|
wrwbgbgggruurugwbrwwgbuguuwguurbgrgrguuwwwrgu
|
||||||
|
wbwgbubrgbuwwwwbwbuuggugggggrwbwrwgrgguwrggrbwrgrburwbubb
|
||||||
|
ubgwwrbbwbuwrguwrrwrrwggruwbgbrwuwbubububuggbggbrwbu
|
||||||
|
urrbwuwwwrugbugwwgwbbubgrgbburuuwgbgguguugb
|
||||||
|
uwbugbgubgrwgbruubbrrbrwgwuubuwbwbbuwrgbwugbr
|
||||||
|
wrgwrrrbugbgwuwbwrubwgbbbuguwrrgrrwgbbgurwwbrbbggggrrbrruwu
|
||||||
|
rwrrwbwwggubbguuubrwrurgrbwurguuuruuwgubwgbwbrbbgbgb
|
||||||
|
grrbrgwrwbwbbgguwgguugrwurrbwwgwgbuubgrbuwbbbgbbbuw
|
||||||
|
rgwubwwubrrgbrwwubuguugwbbwuwgbgubgruuruubgurrgwguuggwrw
|
||||||
|
ruwuwuwbuwrgggwgrruguwwbrbuwwgugbuuwruwbwrbgwubwu
|
||||||
|
ubgrgrguguwwbwrwwbgwurwurrrbggrrggubgrrbuuggbgg
|
||||||
|
wrggwgrbugwwgruwwubrubgrgggwgubbbwwwwrwurubrwrggrwwbrgwgw
|
||||||
|
gwbggrggwbgwgbrwwuuuwbbwrwgbguwruguuugwrbgrbbrrwrurrggbb
|
||||||
|
brrbuwguwgrbbburrubrbwburbrwbgwbbwgrrgwugrg
|
||||||
|
wgruguruwwgbrurbugrrrwrgwbrwuuruurrwrrgwuuwgwg
|
||||||
|
buuwrbwbubggrwugwwbuwgubbbrbbgbubrrwrbbwwrrrrrwgugurrrbbb
|
||||||
|
rbrrburuubrwurwgguggggubgbbruwwggburwwbwrb
|
||||||
|
ubgruruwbrgbrbugrbburuwugrurugrwbwwguwuuwuwgubgbrgwrbbggbg
|
||||||
|
gguuuwwrgggwgurrrubggubruubbugbbuuwgrruuwguguu
|
||||||
|
uwbwggbrbrrbuggbwwwubwwuuggwrwwrurrwbgbwuwgw
|
||||||
|
rwwwbuurburrrwubguwgrguguubrbgwbggbwurgwug
|
||||||
|
gbgugwbuuwuwguwugwruwwbwurguubuurbbgggbgggrrwgwbgu
|
||||||
|
gbrrbwwbuugurwbgrrwwwwgruurgbbgwwwgrguuuwgbgbgwwrbgwr
|
||||||
|
gbwubwugbgwwugwgguruwubwggwuruwrbbwwbggggrgurwg
|
||||||
|
wrgwbggbrgbuwrgrggwrwbbwwuwruuwuwrgrwwuwg
|
||||||
|
wbrwgrgbrrrwuuuuuugwwrwbrbwbuubgggrrrbwuwruggwbwwubwbrgbwb
|
||||||
|
uurbbgrrwrbwubwwwgbrrrrugbrbrbgbubrgrwbruuwggbbwbrg
|
||||||
|
wrgbrrugrwrugbbrbwgrwbubruuguggwuwugrgbruurbbuubwbwur
|
||||||
|
ggrwgwgwugbggwrbwbrwwrrrbgwrbwuwgwbuuurbwwuwbgubuurwb
|
||||||
|
wrgrrbuwgurbgubwwwwguuwggwbrbwbwwwwuuwggb
|
||||||
|
bbrurwwuwbgggrbgwrbrbgwurrrbbggrguwuwgggbbuuwggruwwgbw
|
||||||
|
ugggggbwgrwubrrwurwgrwwurwrrgbrurbuguwbgwwrrbgwwwwrgwrrw
|
||||||
|
rurbgbbwgrrgwuuwugwgbubwrwruugubgruwbwwrrg
|
||||||
|
wrgrrwggbwruuugrwurbuwwgrgururgugwuwubbgbbgrwururwrgr
|
||||||
|
wgrrbwrwrrbgwgwwrwubgrrurbgrwruguurrruwbwbrwugwr
|
||||||
|
gbrwwbbbuwbwwuwubwggwrrbubuwrrwbrrrbuwbbbbugwbgu
|
||||||
|
gurwruwurbgrurgbuwwgrrrwrbrrgwrbggwwrwruggurg
|
||||||
|
bgururwbrguubbwbwbubbbrrbrbwrbgrubgwbruwbbwwruurruurrgurru
|
||||||
|
bgugrwbbbgrbwuwrbubwbwubggwrwrwgrrbrubggwgwruwwuwwgrbwwb
|
||||||
|
rbguwuwrrbwbbgrrururugbwwruwwrrwbugwguggubruuuuburrguugbu
|
||||||
|
gurbggwbggwwurggbrgbgugrbgubrgrwrrgwguubwrurrrgrbwwbugwrw
|
||||||
|
wrgbuwbugrgwrugguggbrrrgurruuuwgbguwgburb
|
||||||
|
gurburbuuubuwrbwrubwuugwgwbuurrbwuurbrruuburwggw
|
||||||
|
wgguwuuwguubuwrbwwwbbguwuugwrbubwugugrwwgwwwwggurwrbru
|
||||||
|
wggbwgwwrggruuwbrubrrgbggrgwrwrgubbwuugwwuwrggrg
|
||||||
|
bbwbgggubbwwuwrbggwbrgguugbuuwubguuwwrgbwuruwgruwr
|
||||||
|
wuububrwurrgwubbgrbrrgubbbubgwbrbwrwrbwurwgg
|
||||||
|
bgbbrbwwgubwbwbgggrwbrgbbuurgwbrrwgwgruwwrguuggubrbrurwr
|
||||||
|
rbuuwrwbuubwrwrgrggurgwrurrgubbuwuugwbgwrrw
|
||||||
|
wrggbwurgrrubgbgwrrgbruuuuwrruruubbbgrgubbggrwbbuugg
|
||||||
|
buggwggrgbwbgwwbguwuwrbgwrbbwwrguwwuwggurbwgurbggubrrwgg
|
||||||
|
guuggrbbuwbrwgrurrwwwuugwbwugbuwrbgrwguuwbgubgrbbg
|
||||||
|
uuwwwbgugguuwuggrburwwubgurwwbuugrrwgugwuu
|
||||||
|
buurwugwrrrgggubgwwwggwwgwugurbgrgwwuuubwuggurwrrbggbguwgr
|
||||||
|
uuwwbgggubuubgurgwurbwguwrrwgwugubruuugwuguuuwwwgwgb
|
||||||
|
rwbgrbwrwugbbwgwrwrgubbbbwwrrguwwubbugrbbwgbg
|
||||||
|
ugrurggwgbgwgwrruugrwugwrgggbuurwbbubuugrbgbru
|
||||||
|
uuugugurgbwwwwrbrgbrbggrbrurrgbbbrubburbbbbrrrbbbgww
|
||||||
|
brbburruuwuwwbgwugrrrrggbwgrbrgwugrwbwggrr
|
||||||
|
rbbbgburbwbwgbubbrugbgwgugwgrbubggwgwwuwbuurbuurgwrugrrg
|
||||||
|
wuuuubrgwrwwwwugugrgwbrubbbbbgwbbgbubrrbbwgwwrgg
|
||||||
|
ubrwubuurrrwugruubggwuwbbbuuwgbuubwrrrwbrwwwwbubwgwbrwwu
|
||||||
|
brrurgrwwrruwrrubbwuwguuuggurbwgruuurbggggguwurrg
|
||||||
|
uuggbrwgbugguwbgrrwgwwuuwuururwwbgbgrbgbuu
|
||||||
|
grbbbrrgwrurugbwugbwgrgbgbgubugbrurruubgrugguubrwwugwuu
|
||||||
|
ruwbwbugbbbgggbrugrgbbwbbgrguwrwuurrrbugbugbwwgbbugb
|
||||||
|
ruwwrrwugwwbubggrubwbbgwrbgwggbwgguuubgbgubg
|
||||||
|
uuwwugrbbwbbbbwwwwgrbbggurubwrrbbuuubrrggbgb
|
||||||
|
wrgrgwuruwwugubrbrruggwrbbgrrubbggrbrwbruwubgbbrrwwgrgbgubgg
|
||||||
|
urwuuwgugwwubuwrgwbwbgbbrwrwrrrrrbuburwbrurwuuruuugbrbb
|
||||||
|
ggrurrwubwuwbugguuruuwggwwrgrgwwbbrwubgrbggbbur
|
||||||
|
rwuggbgubrwuuwrwrbbbgbrgwwuwrbbuwrubguuugbbgwww
|
||||||
|
wbrwgbrubgrrwbrwrwrwwrgrrbbrwggwbrguwwbrbbwggubbrruuwgrb
|
||||||
|
bruwgrwrrgwrbugruuubwbruuurgbwgguwwruuurwbgr
|
||||||
|
wubrurubrubrrwbuurgrgubgwbgrrurugguggbrguurbugr
|
||||||
|
gbrggggugguugrrrwrgrrurggwwrgubuubwurugrbbrrrgg
|
||||||
|
gwrbugwubbuuwrggubrrubbgggggbgbggwrbrgrwgwruwbwggubug
|
||||||
|
gwrrgubggrurrgbbugruwgbwbrrbwuwuwbggwgrrrwgrggubbgurbg
|
||||||
|
wrggwgwgwuwbrwwbwwgrurubugubgrgubuubbgwgbggwwwg
|
||||||
|
wwrwbbrwwrwubwwwgbwrgguwuwrguwwggurgwgbburuuwwgwrggg
|
||||||
|
wwrbwwbbgbgbuwbwuggrbrggurbugbrwuwugrrurwbruw
|
||||||
|
wrbgrrggbwwgwwwgbwgbbrurwugwgugurguwbrgubr
|
||||||
|
gwrbgbgugubgbgrugbrbgrgguwggwgubugwurwbwrgwbrugwwwb
|
||||||
|
wbgugubwwwrurggwuwuwrrwwrwgbbbuwbbbrgrrgwurw
|
||||||
|
uuuguubwbbwwgbbwwggguubgububgrguguubwwuugwwrwbr
|
||||||
|
rwbgrwwgwrrruwugruuubbwrbrgubgrgwgbbbwwgburbubgrg
|
||||||
|
wgbuugbgwbgwuwwgbwgwwguwrbuwurbuwrbwwrbbrwrrrubwrgbbug
|
||||||
|
ubuwggbwubbgrwbbbwwrrbuwwuwwwwbbubbwrwbubwgrr
|
||||||
|
uurwrurwrbbbgwrbggbwwruguwbwgwururgugrugruggggbgwwrrurggg
|
||||||
|
wrggurbbwgrurggubgbggbrbgbgrwbgwrwbububgrwrwgrwwubuububu
|
||||||
|
wrbwrgggggbuwubugurguuuugbwuwuuruburgwrwuwr
|
||||||
|
bggbgwgrrrbwbwurgwwrggbwrwgbwuwwugwbwgbrrrbgrwwgwrwgbr
|
||||||
|
ubuguruwbrrrgbwwgrgggrruwgggrgrbgrgwubggbrbuubw
|
||||||
|
grurrbguuubuggbbguurbwwbrrurguwurubrbgwggrguwbrrgburruugb
|
||||||
|
wrgbgrugrwwgwbgubbwbbrwubruggruuguuwubwgwurubggrbgwurrrrr
|
||||||
|
wrgrwuguggwwurbwubgwrbrugbruruwuurgurbbgrgr
|
||||||
|
wbbrguggbrbgwgwrugbuwrgbrgbuurrggggbrwgwwwuubbub
|
||||||
|
grrgwbwwbruugggburwbwgrbrggwgwwwwuwwbrwrbwr
|
||||||
|
guuwuuuwrgwwgbruugwwwrwuggrrgwbwwruuuuubububrwrbgurbw
|
||||||
|
rrwrrurggwurggguurrrrurwugwwrruwrruubwrbbguubww
|
||||||
|
grrwgrrrwbubggrrwbbgggbgwbbwubrbwwugugggwbg
|
||||||
|
wrgrrggwurbwbrguwrurwbwrbrbrggggrguwbwgwgwrbggbgrbgrb
|
||||||
|
bwrbwbwurbrugggwbgbrguwrugugrruubrggbwuurrubub
|
||||||
|
wbgwwubuurwwubbwwgurgugbbbgrgwuwbbwrbgwbwguugurubr
|
||||||
|
bbbbruwuwgwbuuugrrbgugrwgrrwwggugrggugbbgrrbw
|
||||||
|
wrggrwwubwruwbugubgurrwrbrrwbgrgbgrruguuubgbbwuwbub
|
||||||
|
wgurrgubgrgbgggurgubbugbbbruruggrbggrgrwwrw
|
||||||
|
rurbwwuuugurguwgwguwurrruubuguwwrbbburrbrwwugrruuw
|
||||||
|
wwubwbggrurbwubbrwbuuruwbgugbwgwgrugubbwbub
|
||||||
|
ruwbrbuguwuuuwwbrbwguuwgrwuruugbrgbbwugubrrrgrgb
|
||||||
|
rwrbrwrbwuwbuubrugwrubwbuuwbubrwbrgurgwgbgrurwrruuwu
|
||||||
|
rugwbruruguuuwgrbwruggggwbgruwrwuggubgruurbubwug
|
||||||
|
wgruguuruwbrrbwubuwgbrwugrgubgrwgggbwwuggbwbb
|
||||||
|
gubuwrgurwrbrbrugrruuwgbbwubwwbgbgguwuuwwgrbrwuwr
|
||||||
|
grrrgwguwrgbrbbwbbrwbgugwbrgggggbbrrurbbgbggwbuugwugb
|
||||||
|
gbrbggrbgrrbbggggubbbwuugubgggbgbrurburugwwwurwwuuw
|
||||||
|
wrgguubrrwbrrugwuuruurwbuuwgwbuugubgbrbbrrbgrbgwrrrwrgguww
|
||||||
|
uwwburbrrururbrwgrwrgrbuwubgugwwwgwgwrrurggu
|
||||||
|
rgubgrwgruwwwgrrruwrububgrrwuubbwrguuwwrrubururguwgbrg
|
||||||
|
gguwbrrrrgwbbgrrbubugrgwwbbgwrgrguwuwwrwbwwgubbgubbuwuwgw
|
||||||
|
rwgrwrbuwbwrrwrrbrrbbbuubgrgbrgugbuuuwbuuw
|
||||||
|
rgguwggrbrurwrrgbruwbguwwwrubwurbrbrwwbwwggrrrwbwg
|
||||||
|
rwruubwuwguwrurrubwuubbburwubbwwguguurggbbwuwb
|
||||||
|
wgwubbbrrbgbwrgubrgguurrrbuurwubbbguubguuuurguwwr
|
||||||
|
grwwbgggrbbrbwgrwbuuuruwwgbbuguurgburbrgugurwb
|
||||||
|
rgugwuuubgubwwwwbbuurwwwburrrgurbwbgbuwwruuugu
|
||||||
|
gurrwwgrgwrbrbbgurbwrrbubrbuwbuurrrguugggrrbwugbb
|
||||||
|
wgwburbwwbubrgurgbbugwrbbrwggwgbwbrbgwburbbugbrrbggbwwwwg
|
||||||
|
uwubgbbubwrbbbubgbbgwbuguububruubbbwuwrububbg
|
||||||
|
ubgbbuwgwrbrggrbrwrgubbubrbbuurrgwbrggbuuwwwrgwubwrbbwb
|
||||||
|
wgrbrwwwgrbgruwbbwgbggwuugggwggbrwrwbburgubgburrwrrwrwbw
|
||||||
|
wrgrbgrbugubrwwwwuubbrbrbrwgwuwbbrgwrbwwrbwbrrubbrr
|
||||||
|
wrgbburuubwbrrggwurbwwbrwuwwugrwrbwwbwgrwwwrbrurubrgrbw
|
||||||
|
rwwbwgwbgggwuuwwbrwgwgrubwwwrrbgruubwrgguwrwr
|
||||||
|
rurbrwwruuuuugwgbbwgwrgrbbwbrwwruuuwwgrbgwbbbuurururwww
|
||||||
|
uwguwbuggubwuubururgbgurrbbugbwuwrgwwrbwwuuwruwuubgb
|
||||||
|
rwubrrrubgwubbgbubrrrrwbbbgbgrbbbuuwrwuggwgugr
|
||||||
|
buwrgbggrburwwrrwrrgbrwbwurwgwubgwbwgrrgwbwrrbrbrgrbgububb
|
||||||
|
wuuurwgbuwwwwuwbbugbrwurrgguwbbbbuuggwbrrwbgrbrgwrgrubug
|
||||||
|
bbuwbrubrwbgurwbwbguugwwgwrwbgbwruurwuwbuuruuggr
|
||||||
|
rbbrwwbbwuuwwuuurburrrgwgrwbbrrbuggwrwrgruugbu
|
||||||
|
gbrgubuurgbgguwwwwubbgrbwrrurburugbwgbubbwruuuuruuwbbgwguw
|
||||||
|
wurwggrggwwrwugbwgrwuuwrugbuuggbgrwrgwggrgugrgrwrrwbb
|
||||||
|
rgwrwuwuwrgubuwbgurwrgurwuuuwgwwrgwgrgruwuwwggwurwrbbuw
|
||||||
|
wrwwrgwbwgbugggrguuurwwuwrbrwrrruwwbrrrgrruubg
|
||||||
|
wbwrrruuurgrrrwrbuwbggbguwugrbwbggbuburgruwgbbruubrwbrgrur
|
||||||
|
uuubuguurruuwwurbuwbgwrrrbrbwrwbuwubugrrruwuggrrwb
|
||||||
|
rrbggbubgrruubbgubuwubbgwuubgbrruwuugggbrbuubgugg
|
||||||
|
buwugbwbbrugbwbgwurguwbwwbbgbbbuguwgrwburrgggbgbguruww
|
||||||
|
wrgbgwurgrbrggrburguuubugbwgugrwbwwwwbbuubw
|
||||||
|
gwruuubuubbbwurbgurrrbwwbburguugbwbrrgbubrwwrrwwgbbgbu
|
||||||
|
wgubuugggrugrwrrggugguwgbwwwruuuwwurwbwgwbbwgr
|
||||||
|
buwwwgrruuuwrwgggbbggbguuwwugwwguuuuuruubrruubbuwubggbgwrg
|
||||||
|
gwrgbgubrwuruwuruguubbuwrbggwwrguugrrgwwbbwgwrbbwbgguuw
|
||||||
|
wrgrbwuburwgwggggrrbrgrbbguuwuwbgrbwbubbbbb
|
||||||
|
wuuurbguuwrurgggrwbgwrbgggrgrggrwuwguwrrugugrugwbuwbrug
|
||||||
|
ugbubbugwbwgugbwuurwbuugbgwbgwgbrurgruuruubgugbwugwubu
|
||||||
|
rgguwubwruubugbrrguruugrrwbrgggurrgbugwbrggu
|
||||||
|
ggwrgrrrrwrggbbwwuwgbrrrugrrubwwwrgrruugurwgrbgwbg
|
||||||
|
gugwrgwbugugrruubbbgugrwuurbruubwrrbbuuubbb
|
||||||
|
gbuuggruguburwbrrbrggrguwguubugbwggbgwuwrwgrgub
|
||||||
|
urbwrguguuwrugrbwgrrgbwrwrwwuuwgbgwbururggwurgrw
|
||||||
|
wuwurrubrwubugbgwgwwuguugbgbuwrwbuwrgbggrurgruwuwuuu
|
||||||
|
grrugwbrrbbwbrgguuwbubbgrugrwbwrurwggbwwwr
|
||||||
|
rwbggurbrwubrbgwuwruwbrgwwgrubuuuurbbggbwrrrwur
|
||||||
|
wwbugrgrgruwrgbugrwrgwgrbruuuuubbubrwbwrgrb
|
||||||
|
wbbbrgwwrrrwwbrrwwwuwugwbrwgrbwuwuggbuwruuugubgbg
|
||||||
|
wrgbuggbbrbrubgubbbuwrubbuwwgbggbbwgrwrruwgguwguwruubw
|
||||||
|
guggwbwbgrrubbrwrrwgugguuuwrgbwgbbguwbbubw
|
||||||
|
|
@ -0,0 +1,138 @@
|
||||||
|
#include "aoc.h"
|
||||||
|
|
||||||
|
typedef struct CacheEntry {
|
||||||
|
struct CacheEntry *next;
|
||||||
|
u64 hash;
|
||||||
|
str design;
|
||||||
|
i64 count;
|
||||||
|
} CacheEntry;
|
||||||
|
|
||||||
|
#define CACHE_SIZE (1 << 16)
|
||||||
|
_Static_assert((CACHE_SIZE & (CACHE_SIZE - 1)) == 0, "Cache size must be a power of two");
|
||||||
|
|
||||||
|
typedef struct {
|
||||||
|
Arena *arena;
|
||||||
|
CacheEntry *entries[CACHE_SIZE];
|
||||||
|
} Cache;
|
||||||
|
|
||||||
|
static void
|
||||||
|
cache_init(Cache *cache, Arena *arena) {
|
||||||
|
cache->arena = arena;
|
||||||
|
}
|
||||||
|
|
||||||
|
static u64
|
||||||
|
hash_str(str s) {
|
||||||
|
// fnv-1a hash
|
||||||
|
u64 hash = 14695981039346656037ULL;
|
||||||
|
for (i32 i = 0; i < s.len; i++) {
|
||||||
|
hash ^= s.data[i];
|
||||||
|
hash *= 1099511628211ULL;
|
||||||
|
}
|
||||||
|
return hash;
|
||||||
|
}
|
||||||
|
|
||||||
|
static f32
|
||||||
|
cache_get_load_factor(Cache *cache) {
|
||||||
|
i32 count = 0;
|
||||||
|
for (i32 i = 0; i < CACHE_SIZE; i++) {
|
||||||
|
count += (cache->entries[i] != NULL);
|
||||||
|
}
|
||||||
|
return (f32) count / CACHE_SIZE;
|
||||||
|
}
|
||||||
|
|
||||||
|
static CacheEntry *
|
||||||
|
cache_get(Cache *cache, str design) {
|
||||||
|
u64 hash = hash_str(design);
|
||||||
|
u64 index = hash & (CACHE_SIZE - 1);
|
||||||
|
for (CacheEntry *e = cache->entries[index]; e; e = e->next) {
|
||||||
|
if (e->hash == hash && str_eq(e->design, design)) {
|
||||||
|
return e;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
return NULL;
|
||||||
|
}
|
||||||
|
|
||||||
|
static void
|
||||||
|
cache_put(Cache *cache, str design, i64 count) {
|
||||||
|
u64 hash = hash_str(design);
|
||||||
|
u64 index = hash & (CACHE_SIZE - 1);
|
||||||
|
for (CacheEntry *e = cache->entries[index]; e; e = e->next) {
|
||||||
|
if (e->hash == hash && str_eq(e->design, design)) {
|
||||||
|
e->count = count;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
CacheEntry *entry = ARENA_ALLOC(cache->arena, CacheEntry);
|
||||||
|
entry->hash = hash;
|
||||||
|
entry->design = design;
|
||||||
|
entry->count = count;
|
||||||
|
entry->next = cache->entries[index];
|
||||||
|
cache->entries[index] = entry;
|
||||||
|
}
|
||||||
|
|
||||||
|
static i64 cache_hit_count = 0;
|
||||||
|
static i64 cache_miss_count = 0;
|
||||||
|
|
||||||
|
static i64
|
||||||
|
count_realizations(Cache *cache, str design, str *patterns, i32 len) {
|
||||||
|
if (design.len == 0) {
|
||||||
|
return 1;
|
||||||
|
}
|
||||||
|
else {
|
||||||
|
CacheEntry *entry;
|
||||||
|
i64 total = 0;
|
||||||
|
if ((entry = cache_get(cache, design))) {
|
||||||
|
cache_hit_count++;
|
||||||
|
total = entry->count;
|
||||||
|
}
|
||||||
|
else {
|
||||||
|
cache_miss_count++;
|
||||||
|
for (i32 i = 0; i < len; i++) {
|
||||||
|
if (str_starts_with(design, patterns[i])) {
|
||||||
|
str remainder = str_sub(design, patterns[i].len, design.len);
|
||||||
|
total += count_realizations(cache, remainder, patterns, len);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
cache_put(cache, design, total);
|
||||||
|
}
|
||||||
|
return total;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
int main(int argc, char **argv) {
|
||||||
|
Arena *arena = make_arena(Megabytes(2));
|
||||||
|
Tokens lines = read_lines(arena, argv[1]);
|
||||||
|
|
||||||
|
str avail_line = lines.tokens[0];
|
||||||
|
DYNAMIC_ARRAY(str) patterns = {0};
|
||||||
|
str pattern = {0};
|
||||||
|
while ((pattern = str_next_token(&avail_line, STR(","))).len > 0) {
|
||||||
|
*push(&patterns, arena) = str_trim(pattern);
|
||||||
|
}
|
||||||
|
|
||||||
|
Tokens desired = {
|
||||||
|
.tokens = lines.tokens + 2,
|
||||||
|
.len = lines.len - 2,
|
||||||
|
};
|
||||||
|
|
||||||
|
Cache *cache = ARENA_ALLOC(arena, Cache);
|
||||||
|
cache_init(cache, arena);
|
||||||
|
|
||||||
|
i64 part_1 = 0;
|
||||||
|
i64 part_2 = 0;
|
||||||
|
for (i32 i = 0; i < desired.len; i++) {
|
||||||
|
str towel = str_trim(desired.tokens[i]);
|
||||||
|
i64 count = count_realizations(cache, towel, patterns.data, patterns.len);
|
||||||
|
part_1 += (i64) (count > 0);
|
||||||
|
part_2 += count;
|
||||||
|
/* printf(STR_FMT " -> %s (%ld)\n", STR_ARG(towel), (count > 0) ? "possible" : "impossible", count); */
|
||||||
|
}
|
||||||
|
printf("%ld\n", part_1);
|
||||||
|
printf("%ld\n", part_2);
|
||||||
|
|
||||||
|
if (false) {
|
||||||
|
printf("Hit count: %ld\n", cache_hit_count);
|
||||||
|
printf("Miss count: %ld\n", cache_miss_count);
|
||||||
|
printf("Hit Rate: %.2f%%\n", (f64) cache_hit_count / (cache_hit_count + cache_miss_count) * 100);
|
||||||
|
printf("Load factor: %.2f%%\n", cache_get_load_factor(cache) * 100);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
@ -0,0 +1,10 @@
|
||||||
|
r, wr, b, g, bwu, rb, gb, br
|
||||||
|
|
||||||
|
brwrr
|
||||||
|
bggr
|
||||||
|
gbbr
|
||||||
|
rrbgbr
|
||||||
|
ubwu
|
||||||
|
bwurrg
|
||||||
|
brgr
|
||||||
|
bbrgwb
|
||||||
Loading…
Reference in New Issue