Compare commits
10 Commits
6a204e5f59
...
main
Author | SHA1 | Date | |
---|---|---|---|
c2d5545139 | |||
466d79e81a | |||
911a60ab6c | |||
985b88f0aa | |||
cd42646864 | |||
5ce4e2b51b | |||
a83cef34f0 | |||
78df584c4d | |||
4cb23761b2 | |||
5296af36dd |
46
Cargo.lock
generated
46
Cargo.lock
generated
@@ -11,6 +11,31 @@ dependencies = [
|
||||
"memchr",
|
||||
]
|
||||
|
||||
[[package]]
|
||||
name = "crossbeam-deque"
|
||||
version = "0.8.6"
|
||||
source = "registry+https://github.com/rust-lang/crates.io-index"
|
||||
checksum = "9dd111b7b7f7d55b72c0a6ae361660ee5853c9af73f70c3c2ef6858b950e2e51"
|
||||
dependencies = [
|
||||
"crossbeam-epoch",
|
||||
"crossbeam-utils",
|
||||
]
|
||||
|
||||
[[package]]
|
||||
name = "crossbeam-epoch"
|
||||
version = "0.9.18"
|
||||
source = "registry+https://github.com/rust-lang/crates.io-index"
|
||||
checksum = "5b82ac4a3c2ca9c3460964f020e1402edd5753411d7737aa39c3714ad1b5420e"
|
||||
dependencies = [
|
||||
"crossbeam-utils",
|
||||
]
|
||||
|
||||
[[package]]
|
||||
name = "crossbeam-utils"
|
||||
version = "0.8.21"
|
||||
source = "registry+https://github.com/rust-lang/crates.io-index"
|
||||
checksum = "d0a5c400df2834b80a4c3327b3aad3a4c4cd4de0629063962b03235697506a28"
|
||||
|
||||
[[package]]
|
||||
name = "either"
|
||||
version = "1.13.0"
|
||||
@@ -42,6 +67,26 @@ version = "2.7.4"
|
||||
source = "registry+https://github.com/rust-lang/crates.io-index"
|
||||
checksum = "78ca9ab1a0babb1e7d5695e3530886289c18cf2f87ec19a575a0abdce112e3a3"
|
||||
|
||||
[[package]]
|
||||
name = "rayon"
|
||||
version = "1.10.0"
|
||||
source = "registry+https://github.com/rust-lang/crates.io-index"
|
||||
checksum = "b418a60154510ca1a002a752ca9714984e21e4241e804d32555251faf8b78ffa"
|
||||
dependencies = [
|
||||
"either",
|
||||
"rayon-core",
|
||||
]
|
||||
|
||||
[[package]]
|
||||
name = "rayon-core"
|
||||
version = "1.12.1"
|
||||
source = "registry+https://github.com/rust-lang/crates.io-index"
|
||||
checksum = "1465873a3dfdaa8ae7cb14b4383657caab0b3e8a0aa9ae8e04b044854c8dfce2"
|
||||
dependencies = [
|
||||
"crossbeam-deque",
|
||||
"crossbeam-utils",
|
||||
]
|
||||
|
||||
[[package]]
|
||||
name = "regex"
|
||||
version = "1.11.1"
|
||||
@@ -129,6 +174,7 @@ name = "y2024"
|
||||
version = "0.1.0"
|
||||
dependencies = [
|
||||
"itertools",
|
||||
"rayon",
|
||||
"regex",
|
||||
"utils",
|
||||
]
|
||||
|
@@ -23,3 +23,4 @@ utils = { path = "../utils" }
|
||||
itertools = "0.13.0"
|
||||
regex = "1.11.1"
|
||||
md5 = "0.7.0"
|
||||
rayon = "1.10"
|
||||
|
26
test.py
26
test.py
@@ -1,26 +0,0 @@
|
||||
# JS sucks
|
||||
for line in open('./y2024/resources/17_input.txt'):
|
||||
if line.startswith('Program:'):
|
||||
instructions = list(map(int, line.split(': ')[1].split(',')))
|
||||
|
||||
def outFromA(a):
|
||||
interim = (a % 8) ^ 3
|
||||
c = a // (2 ** interim)
|
||||
postC = c ^ 6
|
||||
return (postC ^ (a % 8)) % 8
|
||||
|
||||
candidates = [0]
|
||||
for i in range(len(instructions) - 1, -1, -1):
|
||||
newCandidates = []
|
||||
# print(f'Instruction: {instructions[i]}, candidates: {candidates}')
|
||||
for c in candidates:
|
||||
for j in range(8):
|
||||
num = (c << 3) + j
|
||||
out = outFromA(num)
|
||||
# print(f'Num: {num}, Out: {out}, Instruction: {instructions[i]}')
|
||||
if out == instructions[i]:
|
||||
newCandidates.append(num)
|
||||
candidates = newCandidates
|
||||
|
||||
# print(candidates)
|
||||
print(min(candidates))
|
@@ -7,3 +7,4 @@ edition = "2021"
|
||||
regex = "1.11.1"
|
||||
utils = { workspace = true }
|
||||
itertools = { workspace = true }
|
||||
rayon = { workspace = true }
|
||||
|
402
y2024/resources/19_input.txt
Normal file
402
y2024/resources/19_input.txt
Normal file
@@ -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
|
141
y2024/resources/20_input.txt
Normal file
141
y2024/resources/20_input.txt
Normal file
@@ -0,0 +1,141 @@
|
||||
#############################################################################################################################################
|
||||
#...###.....#...#...#...#...#...#...###...#.....#.........#...#.......#...#.....#...#.........###...#.....#.............#...#...#.......#...#
|
||||
#.#.###.###.#.#.#.#.#.#.#.#.#.#.#.#.###.#.#.###.#.#######.#.#.#.#####.#.#.#.###.#.#.#.#######.###.#.#.###.#.###########.#.#.#.#.#.#####.#.#.#
|
||||
#.#.#...#...#.#...#...#...#...#...#...#.#...#...#.#.......#.#.#.#.....#.#.#...#...#.#.#.......#...#...#...#.#.....#.....#.#.#.#.#.#.....#.#.#
|
||||
#.#.#.###.###.#######################.#.#####.###.#.#######.#.#.#.#####.#.###.#####.#.#.#######.#######.###.#.###.#.#####.#.#.#.#.#.#####.#.#
|
||||
#.#.#...#.###.....#.............#...#.#.#...#.#...#.#...###.#...#.......#.#...#...#.#.#.###.....#.....#.....#.###...#.....#.#.#...#.......#.#
|
||||
#.#.###.#.#######.#.###########.#.#.#.#.#.#.#.#.###.#.#.###.#############.#.###.#.#.#.#.###.#####.###.#######.#######.#####.#.#############.#
|
||||
#.#.....#.#...#...#...#.....###...#.#.#.#.#...#...#...#...#.#...#.........#.....#.#...#...#.......#...#...#...#...###.....#.#.#.............#
|
||||
#.#######.#.#.#.#####.#.###.#######.#.#.#.#######.#######.#.#.#.#.###############.#######.#########.###.#.#.###.#.#######.#.#.#.#############
|
||||
#.......#.#.#.#.......#...#...#.....#.#.#.#...###.#.......#...#.#.#.......#...#...#.......#.....###.#...#...###.#...#.....#...#...#.........#
|
||||
#######.#.#.#.###########.###.#.#####.#.#.#.#.###.#.###########.#.#.#####.#.#.#.###.#######.###.###.#.#########.###.#.###########.#.#######.#
|
||||
#...#...#.#.#.#...###...#...#.#.....#.#.#...#.#...#.#...###.....#...#.....#.#.#.#...###...#...#.#...#.#...#...#...#...#...........#.#.......#
|
||||
#.#.#.###.#.#.#.#.###.#.###.#.#####.#.#.#####.#.###.#.#.###.#########.#####.#.#.#.#####.#.###.#.#.###.#.#.#.#.###.#####.###########.#.#######
|
||||
#.#.#...#.#.#.#.#...#.#...#.#.#...#.#.#.#.....#.#...#.#...#.....#.....###...#...#.#...#.#.#...#.#...#.#.#...#...#...#...#...#.....#.#.......#
|
||||
#.#.###.#.#.#.#.###.#.###.#.#.#.#.#.#.#.#.#####.#.###.###.#####.#.#######.#######.#.#.#.#.#.###.###.#.#.#######.###.#.###.#.#.###.#.#######.#
|
||||
#.#.....#.#.#.#.#...#...#...#...#...#...#.......#.....#...#...#.#.......#.....#...#.#.#.#.#...#.###.#.#.....#...#...#.....#...#...#.#.......#
|
||||
#.#######.#.#.#.#.#####.###############################.###.#.#.#######.#####.#.###.#.#.#.###.#.###.#.#####.#.###.#############.###.#.#######
|
||||
#.......#...#.#.#...###...#...#.....#...#.............#.#...#.#.#.......#.....#.....#.#.#.#...#...#.#.###...#.###.#.............#...#.......#
|
||||
#######.#####.#.###.#####.#.#.#.###.#.#.#.###########.#.#.###.#.#.#######.###########.#.#.#.#####.#.#.###.###.###.#.#############.#########.#
|
||||
#.....#.....#.#.#...#...#...#.#.#...#.#.#.#.....#...#...#...#...#.....#...#...........#.#.#.....#...#.#...#...#...#.......###...#.#.........#
|
||||
#.###.#####.#.#.#.###.#.#####.#.#.###.#.#.#.###.#.#.#######.#########.#.###.###########.#.#####.#####.#.###.###.#########.###.#.#.#.#########
|
||||
#...#.......#...#...#.#.#...#...#.....#.#.#.#...#.#...###...#.........#...#...#.....#...#.#.....#...#.#...#.#...#...#.....#...#.#.#.#.......#
|
||||
###.###############.#.#.#.#.###########.#.#.#.###.###.###.###.###########.###.#.###.#.###.#.#####.#.#.###.#.#.###.#.#.#####.###.#.#.#.#####.#
|
||||
###.#.....#.......#...#.#.#.....#.......#...#.....#...#...#...#.....#...#.#...#...#.#.#...#...#...#...#...#...#...#.#...###...#...#...#...#.#
|
||||
###.#.###.#.#####.#####.#.#####.#.#################.###.###.###.###.#.#.#.#.#####.#.#.#.#####.#.#######.#######.###.###.#####.#########.#.#.#
|
||||
#...#.###...###...#...#...#.....#.........#...#.....###...#...#.#...#.#.#.#.###...#.#.#...#...#.#...###.....#...###...#...###.#.....#...#.#.#
|
||||
#.###.#########.###.#.#####.#############.#.#.#.#########.###.#.#.###.#.#.#.###.###.#.###.#.###.#.#.#######.#.#######.###.###.#.###.#.###.#.#
|
||||
#...#.#...#.....#...#.....#.#...###.......#.#...###...#...#...#.#.#...#.#.#...#...#.#.#...#.#...#.#...#...#.#.....###...#.....#...#...###...#
|
||||
###.#.#.#.#.#####.#######.#.#.#.###.#######.#######.#.#.###.###.#.#.###.#.###.###.#.#.#.###.#.###.###.#.#.#.#####.#####.#########.###########
|
||||
###...#.#.#...#...#.......#...#...#.......#...#...#.#...#...###.#.#...#.#...#.#...#.#.#...#.#.###.#...#.#.#.#.....#...#.#...#...#...#...#...#
|
||||
#######.#.###.#.###.#############.#######.###.#.#.#.#####.#####.#.###.#.###.#.#.###.#.###.#.#.###.#.###.#.#.#.#####.#.#.#.#.#.#.###.#.#.#.#.#
|
||||
#.......#.....#...#.........#...#.#...#...#...#.#.#.....#.#...#.#.#...#.#...#.#.#...#.#...#.#...#.#...#.#.#.#.....#.#.#...#...#.....#.#...#.#
|
||||
#.###############.#########.#.#.#.#.#.#.###.###.#.#####.#.#.#.#.#.#.###.#.###.#.#.###.#.###.###.#.###.#.#.#.#####.#.#.###############.#####.#
|
||||
#.......#...#.....#...#...#...#.#...#.#.#...###.#.#...#.#.#.#.#.#.#...#.#.#...#.#.###.#.###.#...#...#.#.#...#...#...#...###...#...#...#...#.#
|
||||
#######.#.#.#.#####.#.#.#.#####.#####.#.#.#####.#.#.#.#.#.#.#.#.#.###.#.#.#.###.#.###.#.###.#.#####.#.#.#####.#.#######.###.#.#.#.#.###.#.#.#
|
||||
#...###...#...#.....#...#.....#.....#...#.#...#.#.#.#...#...#.#.#...#.#.#.#.#...#...#.#...#.#...#...#.#.#.....#.........#...#...#...#...#...#
|
||||
#.#.###########.#############.#####.#####.#.#.#.#.#.#########.#.###.#.#.#.#.#.#####.#.###.#.###.#.###.#.#.###############.###########.#######
|
||||
#.#.#...###...#.............#.#...#.....#...#.#.#.#...#.......#...#...#.#.#.#.#.....#...#.#.#...#...#.#.#.............###.#.......#...#...###
|
||||
#.#.#.#.###.#.#############.#.#.#.#####.#####.#.#.###.#.#########.#####.#.#.#.#.#######.#.#.#.#####.#.#.#############.###.#.#####.#.###.#.###
|
||||
#.#...#.....#.#...#...#.....#...#.......#.....#.#.#...#.....#...#...#...#.#.#.#.#...#...#...#.#...#.#.#.#.......#...#.....#.....#.#.....#...#
|
||||
#.###########.#.#.#.#.#.#################.#####.#.#.#######.#.#.###.#.###.#.#.#.#.#.#.#######.#.#.#.#.#.#.#####.#.#.###########.#.#########.#
|
||||
#.#.....#...#...#...#...#...#...#...#...#.....#.#.#.......#...#.#...#...#.#...#...#.#.....#...#.#...#...#.....#...#...#...#.....#...........#
|
||||
#.#.###.#.#.#############.#.#.#.#.#.#.#.#####.#.#.#######.#####.#.#####.#.#########.#####.#.###.#############.#######.#.#.#.#################
|
||||
#.#.#...#.#.........#...#.#.#.#.#.#...#.....#...#.#.....#.#.....#...###.#.#.........#...#.#.....#...........#.......#.#.#.#...#...#...#...###
|
||||
#.#.#.###.#########.#.#.#.#.#.#.#.#########.#####.#.###.#.#.#######.###.#.#.#########.#.#.#######.#########.#######.#.#.#.###.#.#.#.#.#.#.###
|
||||
#.#.#.....#.......#.#.#...#.#.#.#.#.......#.#.....#.###.#.#...#...#...#...#.....#...#.#...###...#.........#.#...#...#...#...#...#...#.#.#...#
|
||||
#.#.#######.#####.#.#.#####.#.#.#.#.#####.#.#.#####.###.#.###.#.#.###.#########.#.#.#.#######.#.#########.#.#.#.#.#########.#########.#.###.#
|
||||
#...###...#.....#.#...#.....#.#...#.....#.#.#.....#...#.#...#...#...#...#.......#.#.#...###...#...........#...#...#...#####...........#...#.#
|
||||
#######.#.#####.#.#####.#####.#########.#.#.#####.###.#.###.#######.###.#.#######.#.###.###.#######################.#.###################.#.#
|
||||
#...#...#.#.....#.#...#.......#.........#...###...#...#.#...#.......#...#.#.....#.#...#...#.#...#...#.....#...#...#.#...###...#...#...#...#.#
|
||||
#.#.#.###.#.#####.#.#.#########.###############.###.###.#.###.#######.###.#.###.#.###.###.#.#.#.#.#.#.###.#.#.#.#.#.###.###.#.#.#.#.#.#.###.#
|
||||
#.#.#...#.#.....#.#.#.#...###...#.............#.#...###.#.#...#...#...###.#.#...#...#.#...#...#...#.#.#...#.#.#.#...#...#...#...#...#...#...#
|
||||
#.#.###.#.#####.#.#.#.#.#.###.###.###########.#.#.#####.#.#.###.#.#.#####.#.#.#####.#.#.###########.#.#.###.#.#.#####.###.###############.###
|
||||
#.#.....#.......#...#...#...#...#.#...#.......#...#...#...#...#.#.#.....#...#.#...#.#.#.#...........#.#.....#...#.....#...#...#.....#...#...#
|
||||
#.#########################.###.#.#.#.#.###########.#.#######.#.#.#####.#####.#.#.#.#.#.#.###########.###########.#####.###.#.#.###.#.#.###.#
|
||||
#.....#...#.............#...###...#.#...#...#####...#.......#...#.#.....###...#.#.#.#...#...........#.###.....#...###...#...#...###...#.....#
|
||||
#####.#.#.#.###########.#.#########.#####.#.#####.#########.#####.#.#######.###.#.#.###############.#.###.###.#.#####.###.###################
|
||||
#...#...#.#.#...........#...#.......#...#.#...#...#.........###...#.......#...#.#.#.#.............#.#.#...#...#.......#...#...#...#.........#
|
||||
#.#.#####.#.#.#############.#.#######.#.#.###.#.###.###########.#########.###.#.#.#.#.###########.#.#.#.###.###########.###.#.#.#.#.#######.#
|
||||
#.#.....#...#.............#.#...#.....#...#...#...#.#...###...#...#.......###.#.#...#...........#.#...#...#...........#...#.#.#.#.#.....#...#
|
||||
#.#####.#################.#.###.#.#########.#####.#.#.#.###.#.###.#.#########.#.###############.#.#######.###########.###.#.#.#.#.#####.#.###
|
||||
#.#...#...###...#.........#...#...#...#...#.......#...#.#...#...#.#.....#.....#.....#.....#.....#.#...###...........#.....#.#...#.###...#...#
|
||||
#.#.#.###.###.#.#.###########.#####.#.#.#.#############.#.#####.#.#####.#.#########.#.###.#.#####.#.#.#############.#######.#####.###.#####.#
|
||||
#.#.#...#.....#...#.....#...#...#...#...#.#...#...#...#...#...#.#.#.....#.......#...#...#.#.....#.#.#...............#.......#.....#...#.....#
|
||||
#.#.###.###########.###.#.#.###.#.#######.#.#.#.#.#.#.#####.#.#.#.#.###########.#.#####.#.#####.#.#.#################.#######.#####.###.#####
|
||||
#.#.###.....#...#...###...#...#.#...#...#...#...#...#.#.....#.#.#.#.....#.......#.#.....#.#.....#...#...............#...#.....#...#...#.#...#
|
||||
#.#.#######.#.#.#.###########.#.###.#.#.#############.#.#####.#.#.#####.#.#######.#.#####.#.#########.#############.###.#.#####.#.###.#.#.#.#
|
||||
#.#.#.......#.#.#.#.......###.#.###...#.#...#.......#.#.....#...#.#...#.#...#...#.#.....#.#...........#.........#...###.#.......#.....#...#.#
|
||||
#.#.#.#######.#.#.#.#####.###.#.#######.#.#.#.#####.#.#####.#####.#.#.#.###.#.#.#.#####.#.#############.#######.#.#####.###################.#
|
||||
#...#.#...#...#...#.....#.....#.......#...#...#...#.#...#...#.....#.#.#.###.#.#...#.....#.....#.......#.......#.#.#.....#.........#...#...#.#
|
||||
#####.#.#.#.###########.#############.#########.#.#.###.#.###.#####.#.#.###.#.#####.#########.#.#####.#######.#.#.#.#####.#######.#.#.#.#.#.#
|
||||
#...#...#...#.......###...#.........#.#.....#...#...#...#...#.......#.#.#...#...###...#.....#...#...#.........#...#.#.....#.....#.#.#.#.#...#
|
||||
#.#.#########.#####.#####.#.#######.#.#.###.#.#######.#####.#########.#.#.#####.#####.#.###.#####.#.###############.#.#####.###.#.#.#.#.#####
|
||||
#.#...........#...#.......#...#.....#...###.#.....###.......#...#.....#.#...#...#.....#.###.......#.......#...#...#.#.......#...#...#...#...#
|
||||
#.#############.#.###########.#.###########.#####.###########.#.#.#####.###.#.###.#####.#################.#.#.#.#.#.#########.###########.#.#
|
||||
#.#.............#.........#...#...........#.#...#.............#.#.#.....###.#...#.#.....#...........#...#...#.#.#.#.#.....#...#...........#.#
|
||||
#.#.#####################.#.#############.#.#.#.###############.#.#.#######.###.#.#.#####.#########.#.#.#####.#.#.#.#.###.#.###.###########.#
|
||||
#...#...#.................#.###...#...#...#...#.#.......#.......#...#.......#...#...#.....#.......#...#.......#.#...#...#...###.#.......#...#
|
||||
#####.#.#.#################.###.#.#.#.#.#######.#.#####.#.###########.#######.#######.#####.#####.#############.#######.#######.#.#####.#.###
|
||||
#.....#...#...#.....#.....#.#...#...#...#...###.#.....#.#.....###...#.........#.......#...#.#...#.....#...#.....#.....#.........#.....#...###
|
||||
#.#########.#.#.###.#.###.#.#.###########.#.###.#####.#.#####.###.#.###########.#######.#.#.#.#.#####.#.#.#.#####.###.###############.#######
|
||||
#.#.....#...#...###...###...#.............#...#...#...#.......#...#...#...#...#.........#...#.#.#...#...#...#.....###.#.......#.......#...###
|
||||
#.#.###.#.###################################.###.#.###########.#####.#.#.#.#.###############.#.#.#.#########.#######.#.#####.#.#######.#.###
|
||||
#...###...#.......###...#...#.........#.......###...###...###...#.....#.#.#.#.#############...#...#.#...#...#.......#.#.....#...#.......#...#
|
||||
###########.#####.###.#.#.#.#.#######.#.###############.#.###.###.#####.#.#.#.#############.#######.#.#.#.#.#######.#.#####.#####.#########.#
|
||||
#...........#...#.#...#...#...#.....#.#...#...#...#...#.#.#...#...#...#.#.#.#S#############.......#...#...#...#...#.#.#...#...###.#.........#
|
||||
#.###########.#.#.#.###########.###.#.###.#.#.#.#.#.#.#.#.#.###.###.#.#.#.#.#####################.###########.#.#.#.#.#.#.###.###.#.#########
|
||||
#.....#.......#.#...#...#.......#...#.#...#.#.#.#...#.#.#.#...#.#...#.#.#.#.........#########...#.#.........#...#...#...#...#.....#.........#
|
||||
#####.#.#######.#####.#.#.#######.###.#.###.#.#.#####.#.#.###.#.#.###.#.#.#########.#########.#.#.#.#######.###############.###############.#
|
||||
#.....#.#.......#.....#...#...###...#...###.#.#.....#...#...#.#.#.#...#.#.#...#...#.#########.#...#.#.......#.............#...#.............#
|
||||
#.#####.#.#######.#########.#.#####.#######.#.#####.#######.#.#.#.#.###.#.#.#.#.#.#.#########.#####.#.#######.###########.###.#.#############
|
||||
#.#...#.#.........#.........#.......#.......#.....#...#.....#.#...#.....#.#.#.#.#.#.#########.....#.#.....#...#.......#...###.#.........#...#
|
||||
#.#.#.#.###########.#################.###########.###.#.#####.###########.#.#.#.#.#.#############.#.#####.#.###.#####.#.#####.#########.#.#.#
|
||||
#...#...#...........#...#...#.........#...........###.#.....#.........#...#.#.#.#...#############...#...#...#...#...#.#.#...#.#...#.....#.#.#
|
||||
#########.###########.#.#.#.#.#########.#############.#####.#########.#.###.#.#.#####################.#.#####.###.#.#.#.#.#.#.#.#.#.#####.#.#
|
||||
#.......#...#...#.....#...#.#.#.......#...........#...#.....#...#...#.#.#...#.#.....#####......E#.....#.......###.#.#...#.#.#.#.#.#.......#.#
|
||||
#.#####.###.#.#.#.#########.#.#.#####.###########.#.###.#####.#.#.#.#.#.#.###.#####.#####.#######.###############.#.#####.#.#.#.#.#########.#
|
||||
#.....#.###...#...#...###...#.#.#...#...#...#...#.#...#.#...#.#...#...#.#...#.#...#.#.....#.....#.................#.....#.#.#.#.#.#.....#...#
|
||||
#####.#.###########.#.###.###.#.#.#.###.#.#.#.#.#.###.#.#.#.#.#########.###.#.#.#.#.#.#####.###.#######################.#.#.#.#.#.#.###.#.###
|
||||
###...#...#.........#.....#...#...#...#...#...#...#...#...#.#.....#.....#...#.#.#...#.......#...#...#...#...#.....#.....#.#.#...#.#.#...#.###
|
||||
###.#####.#.###############.#########.#############.#######.#####.#.#####.###.#.#############.###.#.#.#.#.#.#.###.#.#####.#.#####.#.#.###.###
|
||||
#...#.....#.......#.........#.........#.....#.....#.....#...###...#.#...#...#.#.#.............#...#.#.#.#.#...###...#.....#.#...#...#...#...#
|
||||
#.###.###########.#.#########.#########.###.#.###.#####.#.#####.###.#.#.###.#.#.#.#############.###.#.#.#.###########.#####.#.#.#######.###.#
|
||||
#...#...#.........#.###...###.......###.#...#.#...#...#.#.#...#.#...#.#.###.#.#.#.###...###...#.#...#.#.#...#...#...#.#.....#.#.#.....#.#...#
|
||||
###.###.#.#########.###.#.#########.###.#.###.#.###.#.#.#.#.#.#.#.###.#.###.#.#.#.###.#.###.#.#.#.###.#.###.#.#.#.#.#.#.#####.#.#.###.#.#.###
|
||||
###...#.#.........#.#...#...#.......#...#.#...#.#...#...#.#.#.#.#...#.#.....#.#.#.....#.#...#.#.#.#...#...#...#...#...#.......#...#...#.#...#
|
||||
#####.#.#########.#.#.#####.#.#######.###.#.###.#.#######.#.#.#.###.#.#######.#.#######.#.###.#.#.#.#####.#########################.###.###.#
|
||||
#.....#.........#...#.....#...#...#...#...#.#...#...#.....#.#.#...#...###.....#.....#...#.###...#.#.###...#...#...#...#.............###...#.#
|
||||
#.#############.#########.#####.#.#.###.###.#.#####.#.#####.#.###.#######.#########.#.###.#######.#.###.###.#.#.#.#.#.#.#################.#.#
|
||||
#.....#...#...#.......###.#.....#.#.###...#.#...#...#.....#.#.#...#.......#...#...#.#...#.....###.#.#...#...#...#.#.#.#.............#.....#.#
|
||||
#####.#.#.#.#.#######.###.#.#####.#.#####.#.###.#.#######.#.#.#.###.#######.#.#.#.#.###.#####.###.#.#.###.#######.#.#.#############.#.#####.#
|
||||
#.....#.#...#.......#.....#.#.....#...###...#...#.......#...#.#.###.#.....#.#.#.#.#.#...#...#...#...#...#.###...#.#.#.#...#...#.....#.#...#.#
|
||||
#.#####.###########.#######.#.#######.#######.#########.#####.#.###.#.###.#.#.#.#.#.#.###.#.###.#######.#.###.#.#.#.#.#.#.#.#.#.#####.#.#.#.#
|
||||
#.....#.#...........#...#...#.....#...#.......#...#.....#.....#...#...#...#.#.#.#.#.#.#...#.#...#.......#.....#.#...#...#...#.#.....#...#.#.#
|
||||
#####.#.#.###########.#.#.#######.#.###.#######.#.#.#####.#######.#####.###.#.#.#.#.#.#.###.#.###.#############.#############.#####.#####.#.#
|
||||
#.....#.#...........#.#.#...###...#...#...#...#.#.#.....#...#...#.###...#...#.#.#.#.#.#.#...#.#...#.....#.....#.............#.#...#.....#.#.#
|
||||
#.#####.###########.#.#.###.###.#####.###.#.#.#.#.#####.###.#.#.#.###.###.###.#.#.#.#.#.#.###.#.###.###.#.###.#############.#.#.#.#####.#.#.#
|
||||
#...#...#...........#.#...#.#...#...#...#...#...#.#.....###.#.#.#.#...#...###.#.#...#...#...#.#.#...###.#...#.#...#.....#...#...#.......#...#
|
||||
###.#.###.###########.###.#.#.###.#.###.#########.#.#######.#.#.#.#.###.#####.#.###########.#.#.#.#####.###.#.#.#.#.###.#.###################
|
||||
###.#...#...........#.#...#.#...#.#...#.#.........#.###.....#.#.#.#...#.....#.#...#.......#.#.#.#...#...#...#.#.#.#...#.#...###.............#
|
||||
###.###.###########.#.#.###.###.#.###.#.#.#########.###.#####.#.#.###.#####.#.###.#.#####.#.#.#.###.#.###.###.#.#.###.#.###.###.###########.#
|
||||
#...#...###.........#.#.....#...#...#...#.........#...#.#.....#.#.###...#...#.....#.....#...#.#.#...#...#...#.#.#.#...#...#.....#...#...#...#
|
||||
#.###.#####.#########.#######.#####.#############.###.#.#.#####.#.#####.#.#############.#####.#.#.#####.###.#.#.#.#.#####.#######.#.#.#.#.###
|
||||
#.....#.....#.....#...#.......#.....#...#.........#...#.#...###.#.#.....#.#...###.......#...#.#.#.#.....#...#...#.#.....#.#.......#.#.#.#...#
|
||||
#######.#####.###.#.###.#######.#####.#.#.#########.###.###.###.#.#.#####.#.#.###.#######.#.#.#.#.#.#####.#######.#####.#.#.#######.#.#.###.#
|
||||
#.......#...#.#...#.###...#...#.....#.#.#.......#...###...#.#...#.#.....#...#...#...#...#.#.#.#.#.#.....#.....#...#.....#.#.......#...#...#.#
|
||||
#.#######.#.#.#.###.#####.#.#.#####.#.#.#######.#.#######.#.#.###.#####.#######.###.#.#.#.#.#.#.#.#####.#####.#.###.#####.#######.#######.#.#
|
||||
#...#...#.#.#.#...#...#...#.#.....#...#.#.......#.....#...#.#.#...#.....#.......###.#.#.#.#...#.#.#...#.#.....#...#.....#...#.....#.....#.#.#
|
||||
###.#.#.#.#.#.###.###.#.###.#####.#####.#.###########.#.###.#.#.###.#####.#########.#.#.#.#####.#.#.#.#.#.#######.#####.###.#.#####.###.#.#.#
|
||||
#...#.#.#.#.#.#...#...#.....#.....#.....#.#.....#.....#.#...#.#...#.#...#.......#...#.#.#.....#.#.#.#...#...#...#.#.....#...#.......#...#...#
|
||||
#.###.#.#.#.#.#.###.#########.#####.#####.#.###.#.#####.#.###.###.#.#.#.#######.#.###.#.#####.#.#.#.#######.#.#.#.#.#####.###########.#######
|
||||
#...#.#.#.#.#.#...#.#.......#.....#.....#.#.#...#.....#.#.###...#.#.#.#.#.....#.#.#...#...#...#.#.#...#.....#.#...#.....#.#...#.......#...###
|
||||
###.#.#.#.#.#.###.#.#.#####.#####.#####.#.#.#.#######.#.#.#####.#.#.#.#.#.###.#.#.#.#####.#.###.#.###.#.#####.#########.#.#.#.#.#######.#.###
|
||||
#...#.#.#.#.#.#...#.#.#...#.......#...#.#.#.#...#...#.#.#.#...#...#...#.#.###.#.#.#.....#.#.#...#...#.#.....#.#...#...#.#.#.#.#...#.....#...#
|
||||
#.###.#.#.#.#.#.###.#.#.#.#########.#.#.#.#.###.#.#.#.#.#.#.#.#########.#.###.#.#.#####.#.#.#.#####.#.#####.#.#.#.#.#.#.#.#.#.###.#.#######.#
|
||||
#.#...#...#.#.#.#...#...#...#...#...#.#.#.#...#.#.#.#.#.#...#...#.......#...#.#.#...#...#.#.#.#.....#.#.....#.#.#...#.#.#.#.#...#...#...#...#
|
||||
#.#.#######.#.#.#.#########.#.#.#.###.#.#.###.#.#.#.#.#.#######.#.#########.#.#.###.#.###.#.#.#.#####.#.#####.#.#####.#.#.#.###.#####.#.#.###
|
||||
#.#...#.....#.#.#.#.........#.#.#...#.#.#.#...#.#.#.#.#.#...#...#...#...#...#.#.#...#.#...#.#.#.#.....#.....#.#.....#.#.#.#...#...#...#.#...#
|
||||
#.###.#.#####.#.#.#.#########.#.###.#.#.#.#.###.#.#.#.#.#.#.#.#####.#.#.#.###.#.#.###.#.###.#.#.#.#########.#.#####.#.#.#.###.###.#.###.###.#
|
||||
#.....#.......#...#...........#.....#...#...###...#...#...#...#####...#...###...#.....#.....#...#...........#.......#...#.....###...###.....#
|
||||
#############################################################################################################################################
|
5
y2024/resources/21_input.txt
Normal file
5
y2024/resources/21_input.txt
Normal file
@@ -0,0 +1,5 @@
|
||||
340A
|
||||
149A
|
||||
582A
|
||||
780A
|
||||
463A
|
27
y2024/src/bin/d19.rs
Normal file
27
y2024/src/bin/d19.rs
Normal file
@@ -0,0 +1,27 @@
|
||||
use std::{fs, time::Instant};
|
||||
|
||||
use utils::time::get_elapsed_string;
|
||||
use y2024::days::d19;
|
||||
|
||||
fn main() {
|
||||
let now = Instant::now();
|
||||
println!("Part 1:");
|
||||
part1();
|
||||
println!("Ran in {}", get_elapsed_string(now.elapsed()));
|
||||
let now = Instant::now();
|
||||
println!("Part 2:");
|
||||
part2();
|
||||
println!("Ran in {}", get_elapsed_string(now.elapsed()));
|
||||
}
|
||||
|
||||
fn part1() {
|
||||
let root = env!("CARGO_MANIFEST_DIR");
|
||||
let content = fs::read_to_string(format!("{root}/resources/19_input.txt")).unwrap();
|
||||
println!("{}", d19::process_part1(&content));
|
||||
}
|
||||
|
||||
fn part2() {
|
||||
let root = env!("CARGO_MANIFEST_DIR");
|
||||
let content = fs::read_to_string(format!("{root}/resources/19_input.txt")).unwrap();
|
||||
println!("{}", d19::process_part2(&content));
|
||||
}
|
27
y2024/src/bin/d20.rs
Normal file
27
y2024/src/bin/d20.rs
Normal file
@@ -0,0 +1,27 @@
|
||||
use std::{fs, time::Instant};
|
||||
|
||||
use utils::time::get_elapsed_string;
|
||||
use y2024::days::d20;
|
||||
|
||||
fn main() {
|
||||
let now = Instant::now();
|
||||
println!("Part 1:");
|
||||
part1();
|
||||
println!("Ran in {}", get_elapsed_string(now.elapsed()));
|
||||
let now = Instant::now();
|
||||
println!("Part 2:");
|
||||
part2();
|
||||
println!("Ran in {}", get_elapsed_string(now.elapsed()));
|
||||
}
|
||||
|
||||
fn part1() {
|
||||
let root = env!("CARGO_MANIFEST_DIR");
|
||||
let content = fs::read_to_string(format!("{root}/resources/20_input.txt")).unwrap();
|
||||
println!("{}", d20::process_part1(&content));
|
||||
}
|
||||
|
||||
fn part2() {
|
||||
let root = env!("CARGO_MANIFEST_DIR");
|
||||
let content = fs::read_to_string(format!("{root}/resources/20_input.txt")).unwrap();
|
||||
println!("{}", d20::process_part2(&content));
|
||||
}
|
27
y2024/src/bin/d21.rs
Normal file
27
y2024/src/bin/d21.rs
Normal file
@@ -0,0 +1,27 @@
|
||||
use std::{fs, time::Instant};
|
||||
|
||||
use utils::time::get_elapsed_string;
|
||||
use y2024::days::d21;
|
||||
|
||||
fn main() {
|
||||
let now = Instant::now();
|
||||
println!("Part 1:");
|
||||
part1();
|
||||
println!("Ran in {}", get_elapsed_string(now.elapsed()));
|
||||
let now = Instant::now();
|
||||
println!("Part 2:");
|
||||
part2();
|
||||
println!("Ran in {}", get_elapsed_string(now.elapsed()));
|
||||
}
|
||||
|
||||
fn part1() {
|
||||
let root = env!("CARGO_MANIFEST_DIR");
|
||||
let content = fs::read_to_string(format!("{root}/resources/21_input.txt")).unwrap();
|
||||
println!("{}", d21::process_part1(&content));
|
||||
}
|
||||
|
||||
fn part2() {
|
||||
let root = env!("CARGO_MANIFEST_DIR");
|
||||
let content = fs::read_to_string(format!("{root}/resources/21_input.txt")).unwrap();
|
||||
println!("{}", d21::process_part2(&content));
|
||||
}
|
96
y2024/src/days/d19.rs
Normal file
96
y2024/src/days/d19.rs
Normal file
@@ -0,0 +1,96 @@
|
||||
use std::collections::HashMap;
|
||||
|
||||
use itertools::Itertools;
|
||||
|
||||
pub fn process_part1(input: &str) -> u64 {
|
||||
let (patterns, designs) = input.split_once("\n\n").unwrap();
|
||||
let patterns = patterns.split(", ").collect_vec();
|
||||
designs
|
||||
.lines()
|
||||
.map(|design| {
|
||||
if possible_design(design, &patterns) {
|
||||
1
|
||||
} else {
|
||||
0
|
||||
}
|
||||
})
|
||||
.sum()
|
||||
}
|
||||
|
||||
fn possible_design(design: &str, patterns: &[&str]) -> bool {
|
||||
for pattern in patterns {
|
||||
if design.starts_with(pattern) && design.len() == pattern.len() {
|
||||
return true;
|
||||
} else if design.starts_with(pattern) {
|
||||
if let Some(stripped) = design.strip_prefix(pattern) {
|
||||
if possible_design(stripped, patterns) {
|
||||
return true;
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
false
|
||||
}
|
||||
|
||||
fn possible_designs(design: &str, patterns: &[&str], memo: &mut HashMap<String, u64>) -> u64 {
|
||||
if design.is_empty() {
|
||||
return 0;
|
||||
}
|
||||
let mut num_possible_designs = 0;
|
||||
if let Some(count) = memo.get(design) {
|
||||
return *count;
|
||||
}
|
||||
for pattern in patterns {
|
||||
if design == *pattern {
|
||||
memo.insert(design.to_string(), 1);
|
||||
num_possible_designs += 1;
|
||||
}
|
||||
if design.starts_with(pattern) {
|
||||
if let Some(stripped) = design.strip_prefix(pattern) {
|
||||
let for_stripped = possible_designs(stripped, patterns, memo);
|
||||
memo.entry(stripped.to_string()).or_insert(for_stripped);
|
||||
num_possible_designs += for_stripped;
|
||||
}
|
||||
}
|
||||
}
|
||||
memo.insert(design.to_string(), num_possible_designs);
|
||||
num_possible_designs
|
||||
}
|
||||
|
||||
pub fn process_part2(input: &str) -> u64 {
|
||||
let (patterns, designs) = input.split_once("\n\n").unwrap();
|
||||
let patterns = patterns.split(", ").collect_vec();
|
||||
let mut memo = HashMap::new();
|
||||
designs
|
||||
.lines()
|
||||
.map(|design| possible_designs(design, &patterns, &mut memo))
|
||||
.sum()
|
||||
}
|
||||
|
||||
#[cfg(test)]
|
||||
mod tests {
|
||||
use super::*;
|
||||
|
||||
const INPUT: &str = "r, wr, b, g, bwu, rb, gb, br
|
||||
|
||||
brwrr
|
||||
bggr
|
||||
gbbr
|
||||
rrbgbr
|
||||
ubwu
|
||||
bwurrg
|
||||
brgr
|
||||
bbrgwb";
|
||||
|
||||
#[test]
|
||||
fn part1() {
|
||||
let result = process_part1(INPUT);
|
||||
assert_eq!(result, 6);
|
||||
}
|
||||
|
||||
#[test]
|
||||
fn part2() {
|
||||
let result = process_part2(INPUT);
|
||||
assert_eq!(result, 16);
|
||||
}
|
||||
}
|
232
y2024/src/days/d20.rs
Normal file
232
y2024/src/days/d20.rs
Normal file
@@ -0,0 +1,232 @@
|
||||
use std::{
|
||||
collections::{HashMap, HashSet},
|
||||
error::Error,
|
||||
};
|
||||
|
||||
use itertools::Itertools;
|
||||
|
||||
pub fn process_part1(input: &str) -> u32 {
|
||||
simulate_all(input, 100, 2).values().copied().sum()
|
||||
}
|
||||
|
||||
pub fn process_part2(input: &str) -> u32 {
|
||||
simulate_all(input, 100, 20).values().copied().sum()
|
||||
}
|
||||
|
||||
fn simulate_all(input: &str, time_to_save: usize, max_cheat_time: usize) -> HashMap<u32, u32> {
|
||||
let mut start = (0, 0);
|
||||
let grid = input
|
||||
.lines()
|
||||
.enumerate()
|
||||
.map(|(yidx, row)| {
|
||||
row.chars()
|
||||
.enumerate()
|
||||
.map(|(xidx, chara)| {
|
||||
let tile = GridTile::try_from(chara).unwrap();
|
||||
if tile == GridTile::Start {
|
||||
start = (xidx, yidx);
|
||||
}
|
||||
tile
|
||||
})
|
||||
.collect_vec()
|
||||
})
|
||||
.collect_vec();
|
||||
let no_cheat = simulate(&grid, start);
|
||||
let mut saved = HashMap::new();
|
||||
for (tile_idx, tile) in no_cheat[..no_cheat.len() - time_to_save].iter().enumerate() {
|
||||
for (cheat_idx, cheat) in no_cheat[tile_idx..].iter().enumerate() {
|
||||
let manhattan = tile.0.abs_diff(cheat.0) + tile.1.abs_diff(cheat.1);
|
||||
if manhattan <= max_cheat_time {
|
||||
let time_saved = cheat_idx - manhattan;
|
||||
if time_saved >= time_to_save {
|
||||
saved
|
||||
.entry(time_saved as u32)
|
||||
.and_modify(|count| *count += 1)
|
||||
.or_insert(1);
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
saved
|
||||
}
|
||||
|
||||
fn simulate(grid: &[Vec<GridTile>], start: (usize, usize)) -> Vec<(usize, usize)> {
|
||||
let mut visited = HashSet::new();
|
||||
visited.insert(start);
|
||||
let mut next_paths = vec![MazeRunner {
|
||||
coords: start,
|
||||
visited: visited.clone(),
|
||||
..Default::default()
|
||||
}];
|
||||
let mut visited = Vec::new();
|
||||
visited.push(start);
|
||||
let mut arrived: Vec<MazeRunner> = Vec::new();
|
||||
while !next_paths.is_empty() {
|
||||
next_paths = next_paths
|
||||
.iter()
|
||||
.map(|maze_runner| {
|
||||
let mut paths = Vec::new();
|
||||
if let Some(path) = maze_runner.get_next(grid, Direction::Up) {
|
||||
paths.push(path);
|
||||
}
|
||||
if let Some(path) = maze_runner.get_next(grid, Direction::Down) {
|
||||
paths.push(path);
|
||||
}
|
||||
if let Some(path) = maze_runner.get_next(grid, Direction::Left) {
|
||||
paths.push(path);
|
||||
}
|
||||
if let Some(path) = maze_runner.get_next(grid, Direction::Right) {
|
||||
paths.push(path);
|
||||
}
|
||||
paths
|
||||
})
|
||||
.collect_vec()
|
||||
.concat();
|
||||
for (idx, maze_runner) in next_paths.clone().iter().enumerate().rev() {
|
||||
if maze_runner.visited.contains(&maze_runner.coords)
|
||||
|| visited.contains(&maze_runner.coords)
|
||||
{
|
||||
next_paths.remove(idx);
|
||||
continue;
|
||||
}
|
||||
visited.push(maze_runner.coords);
|
||||
next_paths[idx].visited.insert(maze_runner.coords);
|
||||
if maze_runner.state == State::Arrived {
|
||||
let arrived_reindeer = next_paths.remove(idx);
|
||||
arrived.push(arrived_reindeer);
|
||||
}
|
||||
}
|
||||
}
|
||||
visited
|
||||
}
|
||||
|
||||
#[derive(Debug, Clone, PartialEq, Eq)]
|
||||
enum Direction {
|
||||
Up,
|
||||
Down,
|
||||
Left,
|
||||
Right,
|
||||
}
|
||||
|
||||
#[derive(Debug, Default, Clone, PartialEq, Eq)]
|
||||
enum State {
|
||||
#[default]
|
||||
Going,
|
||||
Arrived,
|
||||
}
|
||||
|
||||
#[derive(Debug, Default, Clone, PartialEq, Eq)]
|
||||
struct MazeRunner {
|
||||
coords: (usize, usize),
|
||||
visited: HashSet<(usize, usize)>,
|
||||
state: State,
|
||||
}
|
||||
|
||||
impl MazeRunner {
|
||||
fn get_next(&self, grid: &[Vec<GridTile>], direction: Direction) -> Option<MazeRunner> {
|
||||
let tile = match direction {
|
||||
Direction::Up => grid[self.coords.1 - 1][self.coords.0],
|
||||
Direction::Down => grid[self.coords.1 + 1][self.coords.0],
|
||||
Direction::Right => grid[self.coords.1][self.coords.0 + 1],
|
||||
Direction::Left => grid[self.coords.1][self.coords.0 - 1],
|
||||
};
|
||||
let coords = match direction {
|
||||
Direction::Up => (self.coords.0, self.coords.1 - 1),
|
||||
Direction::Down => (self.coords.0, self.coords.1 + 1),
|
||||
Direction::Left => (self.coords.0 - 1, self.coords.1),
|
||||
Direction::Right => (self.coords.0 + 1, self.coords.1),
|
||||
};
|
||||
if tile == GridTile::Wall {
|
||||
None
|
||||
} else if tile == GridTile::End {
|
||||
Some(MazeRunner {
|
||||
state: State::Arrived,
|
||||
coords,
|
||||
..self.clone()
|
||||
})
|
||||
} else {
|
||||
Some(MazeRunner {
|
||||
coords,
|
||||
..self.clone()
|
||||
})
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
#[derive(Debug, Default, Clone, Copy, Hash, PartialEq, Eq)]
|
||||
enum GridTile {
|
||||
Wall,
|
||||
#[default]
|
||||
Path,
|
||||
Start,
|
||||
End,
|
||||
}
|
||||
|
||||
impl TryFrom<char> for GridTile {
|
||||
type Error = Box<dyn Error>;
|
||||
|
||||
fn try_from(value: char) -> std::result::Result<GridTile, Box<dyn Error>> {
|
||||
match value {
|
||||
'#' => Ok(Self::Wall),
|
||||
'.' => Ok(Self::Path),
|
||||
'S' => Ok(Self::Start),
|
||||
'E' => Ok(Self::End),
|
||||
_ => Err(Box::from(format!("{value} is not a valid tile"))),
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
#[cfg(test)]
|
||||
mod tests {
|
||||
use std::time::Instant;
|
||||
|
||||
use utils::time::get_elapsed_string;
|
||||
|
||||
use super::*;
|
||||
|
||||
const INPUT: &str = "###############
|
||||
#...#...#.....#
|
||||
#.#.#.#.#.###.#
|
||||
#S#...#.#.#...#
|
||||
#######.#.#.###
|
||||
#######.#.#...#
|
||||
#######.#.###.#
|
||||
###..E#...#...#
|
||||
###.#######.###
|
||||
#...###...#...#
|
||||
#.#####.#.###.#
|
||||
#.#...#.#.#...#
|
||||
#.#.#.#.#.#.###
|
||||
#...#...#...###
|
||||
###############";
|
||||
|
||||
#[test]
|
||||
fn part1() {
|
||||
let now = Instant::now();
|
||||
println!("Test 2:");
|
||||
let result = simulate_all(INPUT, 2, 2);
|
||||
result
|
||||
.iter()
|
||||
.sorted_by(|a, b| a.0.cmp(b.0))
|
||||
.for_each(|(saved, count)| {
|
||||
println!("There are {count} cheats that saved {saved} picoseconds");
|
||||
});
|
||||
println!("Ran in {}", get_elapsed_string(now.elapsed()));
|
||||
assert_eq!(result.values().copied().sum::<u32>(), 44);
|
||||
}
|
||||
|
||||
#[test]
|
||||
fn part2() {
|
||||
let now = Instant::now();
|
||||
println!("Test 2:");
|
||||
let result = simulate_all(INPUT, 50, 20);
|
||||
result
|
||||
.iter()
|
||||
.sorted_by(|a, b| a.0.cmp(b.0))
|
||||
.for_each(|(saved, count)| {
|
||||
println!("There are {count} cheats that saved {saved} picoseconds");
|
||||
});
|
||||
println!("Ran in {}", get_elapsed_string(now.elapsed()));
|
||||
assert_eq!(result.values().copied().sum::<u32>(), 285);
|
||||
}
|
||||
}
|
344
y2024/src/days/d21.rs
Normal file
344
y2024/src/days/d21.rs
Normal file
@@ -0,0 +1,344 @@
|
||||
use std::{char, collections::HashMap, error::Error, sync::mpsc};
|
||||
|
||||
use rayon::iter::{IntoParallelRefIterator, ParallelIterator};
|
||||
|
||||
pub fn process_part1(input: &str) -> usize {
|
||||
let mut memo = HashMap::new();
|
||||
input
|
||||
.lines()
|
||||
.map(|line| {
|
||||
let numpad = Numpad::from(line);
|
||||
println!("first robot {}", numpad.sequence);
|
||||
let _ = Numpad::revert_from(&numpad.sequence);
|
||||
let keypad_1 = Keypad::from(numpad.sequence.as_str());
|
||||
println!("second robot {}", keypad_1.sequence);
|
||||
let _ = Keypad::revert_from(&keypad_1.sequence);
|
||||
let keypad_2 = Keypad::from(keypad_1.sequence.as_str());
|
||||
println!("me {}", keypad_2.sequence);
|
||||
let _ = Keypad::revert_from(&keypad_2.sequence);
|
||||
keypad_2.sequence.len() * numeric_part(line)
|
||||
})
|
||||
.sum()
|
||||
}
|
||||
|
||||
fn extend_sequence(
|
||||
sequence_parts: &[Vec<String>],
|
||||
memo: &mut HashMap<(char, char), Vec<String>>,
|
||||
) -> Vec<Vec<String>> {
|
||||
sequence_parts.iter().map(|possible_parts| {
|
||||
let (tx, rx) = mpsc::channel();
|
||||
let mut new_possible_parts = Vec::new();
|
||||
possible_parts.par_iter().for_each(|part| {
|
||||
let _ = tx.send();
|
||||
});
|
||||
drop(tx);
|
||||
while let Ok(part) = rx.recv() {
|
||||
new_possible_parts.extend_from_slice(part);
|
||||
}
|
||||
new_possible_parts
|
||||
})
|
||||
}
|
||||
|
||||
pub fn process_part2(input: &str) -> usize {
|
||||
0
|
||||
}
|
||||
|
||||
fn numeric_part(code: &str) -> usize {
|
||||
let code = &code[..code.len() - 1];
|
||||
code.parse().unwrap()
|
||||
}
|
||||
|
||||
#[derive(Debug, Clone, Copy)]
|
||||
enum NumpadState {
|
||||
Seven,
|
||||
Eight,
|
||||
Nine,
|
||||
Four,
|
||||
Five,
|
||||
Six,
|
||||
One,
|
||||
Two,
|
||||
Three,
|
||||
Zero,
|
||||
A,
|
||||
}
|
||||
|
||||
impl NumpadState {
|
||||
fn get_col(&self) -> i32 {
|
||||
match self {
|
||||
NumpadState::Seven | NumpadState::Four | NumpadState::One => 0,
|
||||
NumpadState::Eight | NumpadState::Five | NumpadState::Two | NumpadState::Zero => 1,
|
||||
NumpadState::Nine | NumpadState::Six | NumpadState::Three | NumpadState::A => 2,
|
||||
}
|
||||
}
|
||||
|
||||
fn get_row(&self) -> i32 {
|
||||
match self {
|
||||
NumpadState::Seven | NumpadState::Eight | NumpadState::Nine => 0,
|
||||
NumpadState::Four | NumpadState::Five | NumpadState::Six => 1,
|
||||
NumpadState::One | NumpadState::Two | NumpadState::Three => 2,
|
||||
NumpadState::Zero | NumpadState::A => 3,
|
||||
}
|
||||
}
|
||||
|
||||
fn get_sequences(&self, goto: NumpadState) -> Vec<String> {
|
||||
let row = self.get_row();
|
||||
let col = self.get_col();
|
||||
let goto_row = goto.get_row();
|
||||
let goto_col = goto.get_col();
|
||||
if row == goto_row && col == goto_col {
|
||||
return vec!["A".to_string()];
|
||||
}
|
||||
let row_diff = row.abs_diff(goto_row);
|
||||
let col_diff = col.abs_diff(goto_col);
|
||||
let mut sequence = String::new();
|
||||
let row_seq = match goto_row.cmp(&row) {
|
||||
std::cmp::Ordering::Less => vec!["^"; row_diff as usize].join(""),
|
||||
std::cmp::Ordering::Equal => "".to_string(),
|
||||
std::cmp::Ordering::Greater => vec!["v"; row_diff as usize].join(""),
|
||||
};
|
||||
let col_seq = match goto_col.cmp(&col) {
|
||||
std::cmp::Ordering::Less => vec!["<"; col_diff as usize].join(""),
|
||||
std::cmp::Ordering::Equal => "".to_string(),
|
||||
std::cmp::Ordering::Greater => vec![">"; col_diff as usize].join(""),
|
||||
};
|
||||
if (goto_col < col && row < 3) || col == 0 {
|
||||
sequence.push_str(&col_seq);
|
||||
sequence.push_str(&row_seq);
|
||||
} else {
|
||||
sequence.push_str(&row_seq);
|
||||
sequence.push_str(&col_seq);
|
||||
}
|
||||
sequence.push('A');
|
||||
sequence
|
||||
}
|
||||
}
|
||||
|
||||
impl TryFrom<char> for NumpadState {
|
||||
type Error = Box<dyn Error>;
|
||||
|
||||
fn try_from(value: char) -> Result<Self, Self::Error> {
|
||||
match value {
|
||||
'A' => Ok(NumpadState::A),
|
||||
'0' => Ok(NumpadState::Zero),
|
||||
'1' => Ok(NumpadState::One),
|
||||
'2' => Ok(NumpadState::Two),
|
||||
'3' => Ok(NumpadState::Three),
|
||||
'4' => Ok(NumpadState::Four),
|
||||
'5' => Ok(NumpadState::Five),
|
||||
'6' => Ok(NumpadState::Six),
|
||||
'7' => Ok(NumpadState::Seven),
|
||||
'8' => Ok(NumpadState::Eight),
|
||||
'9' => Ok(NumpadState::Nine),
|
||||
_ => Err(Box::from("Unrecognised keystate")),
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
impl TryFrom<(usize, usize)> for NumpadState {
|
||||
type Error = Box<dyn Error>;
|
||||
|
||||
fn try_from(value: (usize, usize)) -> Result<Self, Self::Error> {
|
||||
match value {
|
||||
(2, 3) => Ok(NumpadState::A),
|
||||
(1, 3) => Ok(NumpadState::Zero),
|
||||
(0, 2) => Ok(NumpadState::One),
|
||||
(1, 2) => Ok(NumpadState::Two),
|
||||
(2, 2) => Ok(NumpadState::Three),
|
||||
(0, 1) => Ok(NumpadState::Four),
|
||||
(1, 1) => Ok(NumpadState::Five),
|
||||
(2, 1) => Ok(NumpadState::Six),
|
||||
(0, 0) => Ok(NumpadState::Seven),
|
||||
(1, 0) => Ok(NumpadState::Eight),
|
||||
(2, 0) => Ok(NumpadState::Nine),
|
||||
(0, 3) => Err(Box::from("Robot arm hovering over numpad gap")),
|
||||
(x, y) => {
|
||||
let err = format!("Unrecognised numpad key coord ({x}, {y})");
|
||||
Err(err.into())
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
impl From<NumpadState> for char {
|
||||
fn from(value: NumpadState) -> Self {
|
||||
match value {
|
||||
NumpadState::Seven => '7',
|
||||
NumpadState::Eight => '8',
|
||||
NumpadState::Nine => '9',
|
||||
NumpadState::Four => '4',
|
||||
NumpadState::Five => '5',
|
||||
NumpadState::Six => '6',
|
||||
NumpadState::One => '1',
|
||||
NumpadState::Two => '2',
|
||||
NumpadState::Three => '3',
|
||||
NumpadState::Zero => '0',
|
||||
NumpadState::A => 'A',
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
#[derive(Debug, Clone, Copy)]
|
||||
enum KeypadState {
|
||||
Up,
|
||||
A,
|
||||
Left,
|
||||
Down,
|
||||
Right,
|
||||
}
|
||||
|
||||
impl KeypadState {
|
||||
fn get_col(&self) -> i32 {
|
||||
match self {
|
||||
KeypadState::Left => 0,
|
||||
KeypadState::Up | KeypadState::Down => 1,
|
||||
KeypadState::A | KeypadState::Right => 2,
|
||||
}
|
||||
}
|
||||
|
||||
fn get_row(&self) -> i32 {
|
||||
match self {
|
||||
KeypadState::Up | KeypadState::A => 0,
|
||||
KeypadState::Left | KeypadState::Down | KeypadState::Right => 1,
|
||||
}
|
||||
}
|
||||
|
||||
fn get_sequence(&self, goto: KeypadState) -> Vec<String> {
|
||||
let row = self.get_row();
|
||||
let col = self.get_col();
|
||||
let goto_row = goto.get_row();
|
||||
let goto_col = goto.get_col();
|
||||
if row == goto_row && col == goto_col {
|
||||
return vec!["A".to_string()];
|
||||
}
|
||||
let row_diff = row.abs_diff(goto_row);
|
||||
let col_diff = col.abs_diff(goto_col);
|
||||
let mut sequence = String::new();
|
||||
let row_seq = match goto_row.cmp(&row) {
|
||||
std::cmp::Ordering::Less => vec!["^"; row_diff as usize].join(""),
|
||||
std::cmp::Ordering::Equal => "".to_string(),
|
||||
std::cmp::Ordering::Greater => vec!["v"; row_diff as usize].join(""),
|
||||
};
|
||||
let col_seq = match goto_col.cmp(&col) {
|
||||
std::cmp::Ordering::Less => vec!["<"; col_diff as usize].join(""),
|
||||
std::cmp::Ordering::Equal => "".to_string(),
|
||||
std::cmp::Ordering::Greater => vec![">"; col_diff as usize].join(""),
|
||||
};
|
||||
if (goto_col < col && row == 1) || col == 0 {
|
||||
sequence.push_str(&col_seq);
|
||||
sequence.push_str(&row_seq);
|
||||
} else {
|
||||
sequence.push_str(&row_seq);
|
||||
sequence.push_str(&col_seq);
|
||||
}
|
||||
sequence.push('A');
|
||||
sequence
|
||||
}
|
||||
}
|
||||
|
||||
impl TryFrom<char> for KeypadState {
|
||||
type Error = Box<dyn Error>;
|
||||
|
||||
fn try_from(value: char) -> Result<Self, Self::Error> {
|
||||
match value {
|
||||
'A' => Ok(KeypadState::A),
|
||||
'<' => Ok(KeypadState::Left),
|
||||
'>' => Ok(KeypadState::Right),
|
||||
'v' => Ok(KeypadState::Down),
|
||||
'^' => Ok(KeypadState::Up),
|
||||
_ => Err(Box::from("Unrecognised keystate")),
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
impl TryFrom<(usize, usize)> for KeypadState {
|
||||
type Error = Box<dyn Error>;
|
||||
|
||||
fn try_from(value: (usize, usize)) -> Result<Self, Self::Error> {
|
||||
match value {
|
||||
(2, 0) => Ok(KeypadState::A),
|
||||
(0, 1) => Ok(KeypadState::Left),
|
||||
(2, 1) => Ok(KeypadState::Right),
|
||||
(1, 1) => Ok(KeypadState::Down),
|
||||
(1, 0) => Ok(KeypadState::Up),
|
||||
(0, 0) => Err(Box::from("Robot arm hovering over keypad gap")),
|
||||
(x, y) => {
|
||||
let err = format!("Unrecognised key coord ({x}, {y})");
|
||||
Err(err.into())
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
impl From<KeypadState> for char {
|
||||
fn from(value: KeypadState) -> Self {
|
||||
match value {
|
||||
KeypadState::A => 'A',
|
||||
KeypadState::Up => '^',
|
||||
KeypadState::Left => '<',
|
||||
KeypadState::Down => 'v',
|
||||
KeypadState::Right => '>',
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
#[cfg(test)]
|
||||
mod tests {
|
||||
use super::*;
|
||||
|
||||
const INPUT_1: &str = "029A";
|
||||
const INPUT_2: &str = "980A";
|
||||
const INPUT_3: &str = "179A";
|
||||
const INPUT_4: &str = "456A";
|
||||
const INPUT_5: &str = "379A";
|
||||
|
||||
const INPUT_1_BACK: &str =
|
||||
"<vA<AA>>^AvAA<^A>A<v<A>>^AvA^A<vA>^A<v<A>^A>AAvA^A<v<A>A>^AAAvA<^A>A";
|
||||
const INPUT_2_BACK: &str = "<v<A>>^AAAvA^A<vA<AA>>^AvAA<^A>A<v<A>A>^AAAvA<^A>A<vA>^A<A>A";
|
||||
const INPUT_3_BACK: &str =
|
||||
"<v<A>>^A<vA<A>>^AAvAA<^A>A<v<A>>^AAvA^A<vA>^AA<A>A<v<A>A>^AAAvA<^A>A";
|
||||
const INPUT_4_BACK: &str = "<v<A>>^AA<vA<A>>^AAvAA<^A>A<vA>^A<A>A<vA>^A<A>A<v<A>A>^AAvA<^A>A";
|
||||
const INPUT_5_BACK: &str = "<v<A>>^AvA^A<vA<AA>>^AAvA<^A>AAvA^A<vA>^AA<A>A<v<A>A>^AAAvA<^A>A";
|
||||
|
||||
#[test]
|
||||
fn part1_full() {
|
||||
let result = process_part1(&[INPUT_1, INPUT_2, INPUT_3, INPUT_4, INPUT_5].join("\n"));
|
||||
assert_eq!(result, 126384);
|
||||
}
|
||||
|
||||
#[test]
|
||||
fn part1_1() {
|
||||
let result = process_part1(INPUT_1);
|
||||
assert_eq!(result, 29 * 68);
|
||||
}
|
||||
|
||||
#[test]
|
||||
fn part1_2() {
|
||||
let result = process_part1(INPUT_2);
|
||||
assert_eq!(result, 60 * 980);
|
||||
}
|
||||
|
||||
#[test]
|
||||
fn part1_3() {
|
||||
let result = process_part1(INPUT_3);
|
||||
assert_eq!(result, 68 * 179);
|
||||
}
|
||||
|
||||
#[test]
|
||||
fn part1_4() {
|
||||
let result = process_part1(INPUT_4);
|
||||
assert_eq!(result, 64 * 456);
|
||||
}
|
||||
|
||||
#[test]
|
||||
fn part1_5() {
|
||||
let result = process_part1(INPUT_5);
|
||||
assert_eq!(result, 64 * 379);
|
||||
}
|
||||
|
||||
#[test]
|
||||
fn part2() {
|
||||
let result = process_part2(INPUT_1);
|
||||
assert_eq!(result, 0);
|
||||
}
|
||||
}
|
@@ -25,3 +25,9 @@ pub mod d16;
|
||||
pub mod d17;
|
||||
|
||||
pub mod d18;
|
||||
|
||||
pub mod d19;
|
||||
|
||||
pub mod d20;
|
||||
|
||||
pub mod d21;
|
||||
|
Reference in New Issue
Block a user