Compare commits
3 Commits
main
...
6a204e5f59
| Author | SHA1 | Date | |
|---|---|---|---|
| 6a204e5f59 | |||
| 00ae1c3f7d | |||
| 085a02b2d5 |
56
Cargo.lock
generated
56
Cargo.lock
generated
@@ -11,31 +11,6 @@ dependencies = [
|
|||||||
"memchr",
|
"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]]
|
[[package]]
|
||||||
name = "either"
|
name = "either"
|
||||||
version = "1.13.0"
|
version = "1.13.0"
|
||||||
@@ -67,26 +42,6 @@ version = "2.7.4"
|
|||||||
source = "registry+https://github.com/rust-lang/crates.io-index"
|
source = "registry+https://github.com/rust-lang/crates.io-index"
|
||||||
checksum = "78ca9ab1a0babb1e7d5695e3530886289c18cf2f87ec19a575a0abdce112e3a3"
|
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]]
|
[[package]]
|
||||||
name = "regex"
|
name = "regex"
|
||||||
version = "1.11.1"
|
version = "1.11.1"
|
||||||
@@ -174,17 +129,6 @@ name = "y2024"
|
|||||||
version = "0.1.0"
|
version = "0.1.0"
|
||||||
dependencies = [
|
dependencies = [
|
||||||
"itertools",
|
"itertools",
|
||||||
"rayon",
|
|
||||||
"regex",
|
|
||||||
"utils",
|
|
||||||
]
|
|
||||||
|
|
||||||
[[package]]
|
|
||||||
name = "y2025"
|
|
||||||
version = "0.1.0"
|
|
||||||
dependencies = [
|
|
||||||
"itertools",
|
|
||||||
"rayon",
|
|
||||||
"regex",
|
"regex",
|
||||||
"utils",
|
"utils",
|
||||||
]
|
]
|
||||||
|
|||||||
@@ -16,7 +16,6 @@ members = [
|
|||||||
"y2022",
|
"y2022",
|
||||||
"y2023",
|
"y2023",
|
||||||
"y2024",
|
"y2024",
|
||||||
"y2025",
|
|
||||||
]
|
]
|
||||||
|
|
||||||
[workspace.dependencies]
|
[workspace.dependencies]
|
||||||
@@ -24,4 +23,3 @@ utils = { path = "../utils" }
|
|||||||
itertools = "0.13.0"
|
itertools = "0.13.0"
|
||||||
regex = "1.11.1"
|
regex = "1.11.1"
|
||||||
md5 = "0.7.0"
|
md5 = "0.7.0"
|
||||||
rayon = "1.10"
|
|
||||||
|
|||||||
26
test.py
Normal file
26
test.py
Normal file
@@ -0,0 +1,26 @@
|
|||||||
|
# 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,4 +7,3 @@ edition = "2021"
|
|||||||
regex = "1.11.1"
|
regex = "1.11.1"
|
||||||
utils = { workspace = true }
|
utils = { workspace = true }
|
||||||
itertools = { workspace = true }
|
itertools = { workspace = true }
|
||||||
rayon = { workspace = true }
|
|
||||||
|
|||||||
@@ -1,402 +0,0 @@
|
|||||||
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
|
|
||||||
@@ -1,141 +0,0 @@
|
|||||||
#############################################################################################################################################
|
|
||||||
#...###.....#...#...#...#...#...#...###...#.....#.........#...#.......#...#.....#...#.........###...#.....#.............#...#...#.......#...#
|
|
||||||
#.#.###.###.#.#.#.#.#.#.#.#.#.#.#.#.###.#.#.###.#.#######.#.#.#.#####.#.#.#.###.#.#.#.#######.###.#.#.###.#.###########.#.#.#.#.#.#####.#.#.#
|
|
||||||
#.#.#...#...#.#...#...#...#...#...#...#.#...#...#.#.......#.#.#.#.....#.#.#...#...#.#.#.......#...#...#...#.#.....#.....#.#.#.#.#.#.....#.#.#
|
|
||||||
#.#.#.###.###.#######################.#.#####.###.#.#######.#.#.#.#####.#.###.#####.#.#.#######.#######.###.#.###.#.#####.#.#.#.#.#.#####.#.#
|
|
||||||
#.#.#...#.###.....#.............#...#.#.#...#.#...#.#...###.#...#.......#.#...#...#.#.#.###.....#.....#.....#.###...#.....#.#.#...#.......#.#
|
|
||||||
#.#.###.#.#######.#.###########.#.#.#.#.#.#.#.#.###.#.#.###.#############.#.###.#.#.#.#.###.#####.###.#######.#######.#####.#.#############.#
|
|
||||||
#.#.....#.#...#...#...#.....###...#.#.#.#.#...#...#...#...#.#...#.........#.....#.#...#...#.......#...#...#...#...###.....#.#.#.............#
|
|
||||||
#.#######.#.#.#.#####.#.###.#######.#.#.#.#######.#######.#.#.#.#.###############.#######.#########.###.#.#.###.#.#######.#.#.#.#############
|
|
||||||
#.......#.#.#.#.......#...#...#.....#.#.#.#...###.#.......#...#.#.#.......#...#...#.......#.....###.#...#...###.#...#.....#...#...#.........#
|
|
||||||
#######.#.#.#.###########.###.#.#####.#.#.#.#.###.#.###########.#.#.#####.#.#.#.###.#######.###.###.#.#########.###.#.###########.#.#######.#
|
|
||||||
#...#...#.#.#.#...###...#...#.#.....#.#.#...#.#...#.#...###.....#...#.....#.#.#.#...###...#...#.#...#.#...#...#...#...#...........#.#.......#
|
|
||||||
#.#.#.###.#.#.#.#.###.#.###.#.#####.#.#.#####.#.###.#.#.###.#########.#####.#.#.#.#####.#.###.#.#.###.#.#.#.#.###.#####.###########.#.#######
|
|
||||||
#.#.#...#.#.#.#.#...#.#...#.#.#...#.#.#.#.....#.#...#.#...#.....#.....###...#...#.#...#.#.#...#.#...#.#.#...#...#...#...#...#.....#.#.......#
|
|
||||||
#.#.###.#.#.#.#.###.#.###.#.#.#.#.#.#.#.#.#####.#.###.###.#####.#.#######.#######.#.#.#.#.#.###.###.#.#.#######.###.#.###.#.#.###.#.#######.#
|
|
||||||
#.#.....#.#.#.#.#...#...#...#...#...#...#.......#.....#...#...#.#.......#.....#...#.#.#.#.#...#.###.#.#.....#...#...#.....#...#...#.#.......#
|
|
||||||
#.#######.#.#.#.#.#####.###############################.###.#.#.#######.#####.#.###.#.#.#.###.#.###.#.#####.#.###.#############.###.#.#######
|
|
||||||
#.......#...#.#.#...###...#...#.....#...#.............#.#...#.#.#.......#.....#.....#.#.#.#...#...#.#.###...#.###.#.............#...#.......#
|
|
||||||
#######.#####.#.###.#####.#.#.#.###.#.#.#.###########.#.#.###.#.#.#######.###########.#.#.#.#####.#.#.###.###.###.#.#############.#########.#
|
|
||||||
#.....#.....#.#.#...#...#...#.#.#...#.#.#.#.....#...#...#...#...#.....#...#...........#.#.#.....#...#.#...#...#...#.......###...#.#.........#
|
|
||||||
#.###.#####.#.#.#.###.#.#####.#.#.###.#.#.#.###.#.#.#######.#########.#.###.###########.#.#####.#####.#.###.###.#########.###.#.#.#.#########
|
|
||||||
#...#.......#...#...#.#.#...#...#.....#.#.#.#...#.#...###...#.........#...#...#.....#...#.#.....#...#.#...#.#...#...#.....#...#.#.#.#.......#
|
|
||||||
###.###############.#.#.#.#.###########.#.#.#.###.###.###.###.###########.###.#.###.#.###.#.#####.#.#.###.#.#.###.#.#.#####.###.#.#.#.#####.#
|
|
||||||
###.#.....#.......#...#.#.#.....#.......#...#.....#...#...#...#.....#...#.#...#...#.#.#...#...#...#...#...#...#...#.#...###...#...#...#...#.#
|
|
||||||
###.#.###.#.#####.#####.#.#####.#.#################.###.###.###.###.#.#.#.#.#####.#.#.#.#####.#.#######.#######.###.###.#####.#########.#.#.#
|
|
||||||
#...#.###...###...#...#...#.....#.........#...#.....###...#...#.#...#.#.#.#.###...#.#.#...#...#.#...###.....#...###...#...###.#.....#...#.#.#
|
|
||||||
#.###.#########.###.#.#####.#############.#.#.#.#########.###.#.#.###.#.#.#.###.###.#.###.#.###.#.#.#######.#.#######.###.###.#.###.#.###.#.#
|
|
||||||
#...#.#...#.....#...#.....#.#...###.......#.#...###...#...#...#.#.#...#.#.#...#...#.#.#...#.#...#.#...#...#.#.....###...#.....#...#...###...#
|
|
||||||
###.#.#.#.#.#####.#######.#.#.#.###.#######.#######.#.#.###.###.#.#.###.#.###.###.#.#.#.###.#.###.###.#.#.#.#####.#####.#########.###########
|
|
||||||
###...#.#.#...#...#.......#...#...#.......#...#...#.#...#...###.#.#...#.#...#.#...#.#.#...#.#.###.#...#.#.#.#.....#...#.#...#...#...#...#...#
|
|
||||||
#######.#.###.#.###.#############.#######.###.#.#.#.#####.#####.#.###.#.###.#.#.###.#.###.#.#.###.#.###.#.#.#.#####.#.#.#.#.#.#.###.#.#.#.#.#
|
|
||||||
#.......#.....#...#.........#...#.#...#...#...#.#.#.....#.#...#.#.#...#.#...#.#.#...#.#...#.#...#.#...#.#.#.#.....#.#.#...#...#.....#.#...#.#
|
|
||||||
#.###############.#########.#.#.#.#.#.#.###.###.#.#####.#.#.#.#.#.#.###.#.###.#.#.###.#.###.###.#.###.#.#.#.#####.#.#.###############.#####.#
|
|
||||||
#.......#...#.....#...#...#...#.#...#.#.#...###.#.#...#.#.#.#.#.#.#...#.#.#...#.#.###.#.###.#...#...#.#.#...#...#...#...###...#...#...#...#.#
|
|
||||||
#######.#.#.#.#####.#.#.#.#####.#####.#.#.#####.#.#.#.#.#.#.#.#.#.###.#.#.#.###.#.###.#.###.#.#####.#.#.#####.#.#######.###.#.#.#.#.###.#.#.#
|
|
||||||
#...###...#...#.....#...#.....#.....#...#.#...#.#.#.#...#...#.#.#...#.#.#.#.#...#...#.#...#.#...#...#.#.#.....#.........#...#...#...#...#...#
|
|
||||||
#.#.###########.#############.#####.#####.#.#.#.#.#.#########.#.###.#.#.#.#.#.#####.#.###.#.###.#.###.#.#.###############.###########.#######
|
|
||||||
#.#.#...###...#.............#.#...#.....#...#.#.#.#...#.......#...#...#.#.#.#.#.....#...#.#.#...#...#.#.#.............###.#.......#...#...###
|
|
||||||
#.#.#.#.###.#.#############.#.#.#.#####.#####.#.#.###.#.#########.#####.#.#.#.#.#######.#.#.#.#####.#.#.#############.###.#.#####.#.###.#.###
|
|
||||||
#.#...#.....#.#...#...#.....#...#.......#.....#.#.#...#.....#...#...#...#.#.#.#.#...#...#...#.#...#.#.#.#.......#...#.....#.....#.#.....#...#
|
|
||||||
#.###########.#.#.#.#.#.#################.#####.#.#.#######.#.#.###.#.###.#.#.#.#.#.#.#######.#.#.#.#.#.#.#####.#.#.###########.#.#########.#
|
|
||||||
#.#.....#...#...#...#...#...#...#...#...#.....#.#.#.......#...#.#...#...#.#...#...#.#.....#...#.#...#...#.....#...#...#...#.....#...........#
|
|
||||||
#.#.###.#.#.#############.#.#.#.#.#.#.#.#####.#.#.#######.#####.#.#####.#.#########.#####.#.###.#############.#######.#.#.#.#################
|
|
||||||
#.#.#...#.#.........#...#.#.#.#.#.#...#.....#...#.#.....#.#.....#...###.#.#.........#...#.#.....#...........#.......#.#.#.#...#...#...#...###
|
|
||||||
#.#.#.###.#########.#.#.#.#.#.#.#.#########.#####.#.###.#.#.#######.###.#.#.#########.#.#.#######.#########.#######.#.#.#.###.#.#.#.#.#.#.###
|
|
||||||
#.#.#.....#.......#.#.#...#.#.#.#.#.......#.#.....#.###.#.#...#...#...#...#.....#...#.#...###...#.........#.#...#...#...#...#...#...#.#.#...#
|
|
||||||
#.#.#######.#####.#.#.#####.#.#.#.#.#####.#.#.#####.###.#.###.#.#.###.#########.#.#.#.#######.#.#########.#.#.#.#.#########.#########.#.###.#
|
|
||||||
#...###...#.....#.#...#.....#.#...#.....#.#.#.....#...#.#...#...#...#...#.......#.#.#...###...#...........#...#...#...#####...........#...#.#
|
|
||||||
#######.#.#####.#.#####.#####.#########.#.#.#####.###.#.###.#######.###.#.#######.#.###.###.#######################.#.###################.#.#
|
|
||||||
#...#...#.#.....#.#...#.......#.........#...###...#...#.#...#.......#...#.#.....#.#...#...#.#...#...#.....#...#...#.#...###...#...#...#...#.#
|
|
||||||
#.#.#.###.#.#####.#.#.#########.###############.###.###.#.###.#######.###.#.###.#.###.###.#.#.#.#.#.#.###.#.#.#.#.#.###.###.#.#.#.#.#.#.###.#
|
|
||||||
#.#.#...#.#.....#.#.#.#...###...#.............#.#...###.#.#...#...#...###.#.#...#...#.#...#...#...#.#.#...#.#.#.#...#...#...#...#...#...#...#
|
|
||||||
#.#.###.#.#####.#.#.#.#.#.###.###.###########.#.#.#####.#.#.###.#.#.#####.#.#.#####.#.#.###########.#.#.###.#.#.#####.###.###############.###
|
|
||||||
#.#.....#.......#...#...#...#...#.#...#.......#...#...#...#...#.#.#.....#...#.#...#.#.#.#...........#.#.....#...#.....#...#...#.....#...#...#
|
|
||||||
#.#########################.###.#.#.#.#.###########.#.#######.#.#.#####.#####.#.#.#.#.#.#.###########.###########.#####.###.#.#.###.#.#.###.#
|
|
||||||
#.....#...#.............#...###...#.#...#...#####...#.......#...#.#.....###...#.#.#.#...#...........#.###.....#...###...#...#...###...#.....#
|
|
||||||
#####.#.#.#.###########.#.#########.#####.#.#####.#########.#####.#.#######.###.#.#.###############.#.###.###.#.#####.###.###################
|
|
||||||
#...#...#.#.#...........#...#.......#...#.#...#...#.........###...#.......#...#.#.#.#.............#.#.#...#...#.......#...#...#...#.........#
|
|
||||||
#.#.#####.#.#.#############.#.#######.#.#.###.#.###.###########.#########.###.#.#.#.#.###########.#.#.#.###.###########.###.#.#.#.#.#######.#
|
|
||||||
#.#.....#...#.............#.#...#.....#...#...#...#.#...###...#...#.......###.#.#...#...........#.#...#...#...........#...#.#.#.#.#.....#...#
|
|
||||||
#.#####.#################.#.###.#.#########.#####.#.#.#.###.#.###.#.#########.#.###############.#.#######.###########.###.#.#.#.#.#####.#.###
|
|
||||||
#.#...#...###...#.........#...#...#...#...#.......#...#.#...#...#.#.....#.....#.....#.....#.....#.#...###...........#.....#.#...#.###...#...#
|
|
||||||
#.#.#.###.###.#.#.###########.#####.#.#.#.#############.#.#####.#.#####.#.#########.#.###.#.#####.#.#.#############.#######.#####.###.#####.#
|
|
||||||
#.#.#...#.....#...#.....#...#...#...#...#.#...#...#...#...#...#.#.#.....#.......#...#...#.#.....#.#.#...............#.......#.....#...#.....#
|
|
||||||
#.#.###.###########.###.#.#.###.#.#######.#.#.#.#.#.#.#####.#.#.#.#.###########.#.#####.#.#####.#.#.#################.#######.#####.###.#####
|
|
||||||
#.#.###.....#...#...###...#...#.#...#...#...#...#...#.#.....#.#.#.#.....#.......#.#.....#.#.....#...#...............#...#.....#...#...#.#...#
|
|
||||||
#.#.#######.#.#.#.###########.#.###.#.#.#############.#.#####.#.#.#####.#.#######.#.#####.#.#########.#############.###.#.#####.#.###.#.#.#.#
|
|
||||||
#.#.#.......#.#.#.#.......###.#.###...#.#...#.......#.#.....#...#.#...#.#...#...#.#.....#.#...........#.........#...###.#.......#.....#...#.#
|
|
||||||
#.#.#.#######.#.#.#.#####.###.#.#######.#.#.#.#####.#.#####.#####.#.#.#.###.#.#.#.#####.#.#############.#######.#.#####.###################.#
|
|
||||||
#...#.#...#...#...#.....#.....#.......#...#...#...#.#...#...#.....#.#.#.###.#.#...#.....#.....#.......#.......#.#.#.....#.........#...#...#.#
|
|
||||||
#####.#.#.#.###########.#############.#########.#.#.###.#.###.#####.#.#.###.#.#####.#########.#.#####.#######.#.#.#.#####.#######.#.#.#.#.#.#
|
|
||||||
#...#...#...#.......###...#.........#.#.....#...#...#...#...#.......#.#.#...#...###...#.....#...#...#.........#...#.#.....#.....#.#.#.#.#...#
|
|
||||||
#.#.#########.#####.#####.#.#######.#.#.###.#.#######.#####.#########.#.#.#####.#####.#.###.#####.#.###############.#.#####.###.#.#.#.#.#####
|
|
||||||
#.#...........#...#.......#...#.....#...###.#.....###.......#...#.....#.#...#...#.....#.###.......#.......#...#...#.#.......#...#...#...#...#
|
|
||||||
#.#############.#.###########.#.###########.#####.###########.#.#.#####.###.#.###.#####.#################.#.#.#.#.#.#########.###########.#.#
|
|
||||||
#.#.............#.........#...#...........#.#...#.............#.#.#.....###.#...#.#.....#...........#...#...#.#.#.#.#.....#...#...........#.#
|
|
||||||
#.#.#####################.#.#############.#.#.#.###############.#.#.#######.###.#.#.#####.#########.#.#.#####.#.#.#.#.###.#.###.###########.#
|
|
||||||
#...#...#.................#.###...#...#...#...#.#.......#.......#...#.......#...#...#.....#.......#...#.......#.#...#...#...###.#.......#...#
|
|
||||||
#####.#.#.#################.###.#.#.#.#.#######.#.#####.#.###########.#######.#######.#####.#####.#############.#######.#######.#.#####.#.###
|
|
||||||
#.....#...#...#.....#.....#.#...#...#...#...###.#.....#.#.....###...#.........#.......#...#.#...#.....#...#.....#.....#.........#.....#...###
|
|
||||||
#.#########.#.#.###.#.###.#.#.###########.#.###.#####.#.#####.###.#.###########.#######.#.#.#.#.#####.#.#.#.#####.###.###############.#######
|
|
||||||
#.#.....#...#...###...###...#.............#...#...#...#.......#...#...#...#...#.........#...#.#.#...#...#...#.....###.#.......#.......#...###
|
|
||||||
#.#.###.#.###################################.###.#.###########.#####.#.#.#.#.###############.#.#.#.#########.#######.#.#####.#.#######.#.###
|
|
||||||
#...###...#.......###...#...#.........#.......###...###...###...#.....#.#.#.#.#############...#...#.#...#...#.......#.#.....#...#.......#...#
|
|
||||||
###########.#####.###.#.#.#.#.#######.#.###############.#.###.###.#####.#.#.#.#############.#######.#.#.#.#.#######.#.#####.#####.#########.#
|
|
||||||
#...........#...#.#...#...#...#.....#.#...#...#...#...#.#.#...#...#...#.#.#.#S#############.......#...#...#...#...#.#.#...#...###.#.........#
|
|
||||||
#.###########.#.#.#.###########.###.#.###.#.#.#.#.#.#.#.#.#.###.###.#.#.#.#.#####################.###########.#.#.#.#.#.#.###.###.#.#########
|
|
||||||
#.....#.......#.#...#...#.......#...#.#...#.#.#.#...#.#.#.#...#.#...#.#.#.#.........#########...#.#.........#...#...#...#...#.....#.........#
|
|
||||||
#####.#.#######.#####.#.#.#######.###.#.###.#.#.#####.#.#.###.#.#.###.#.#.#########.#########.#.#.#.#######.###############.###############.#
|
|
||||||
#.....#.#.......#.....#...#...###...#...###.#.#.....#...#...#.#.#.#...#.#.#...#...#.#########.#...#.#.......#.............#...#.............#
|
|
||||||
#.#####.#.#######.#########.#.#####.#######.#.#####.#######.#.#.#.#.###.#.#.#.#.#.#.#########.#####.#.#######.###########.###.#.#############
|
|
||||||
#.#...#.#.........#.........#.......#.......#.....#...#.....#.#...#.....#.#.#.#.#.#.#########.....#.#.....#...#.......#...###.#.........#...#
|
|
||||||
#.#.#.#.###########.#################.###########.###.#.#####.###########.#.#.#.#.#.#############.#.#####.#.###.#####.#.#####.#########.#.#.#
|
|
||||||
#...#...#...........#...#...#.........#...........###.#.....#.........#...#.#.#.#...#############...#...#...#...#...#.#.#...#.#...#.....#.#.#
|
|
||||||
#########.###########.#.#.#.#.#########.#############.#####.#########.#.###.#.#.#####################.#.#####.###.#.#.#.#.#.#.#.#.#.#####.#.#
|
|
||||||
#.......#...#...#.....#...#.#.#.......#...........#...#.....#...#...#.#.#...#.#.....#####......E#.....#.......###.#.#...#.#.#.#.#.#.......#.#
|
|
||||||
#.#####.###.#.#.#.#########.#.#.#####.###########.#.###.#####.#.#.#.#.#.#.###.#####.#####.#######.###############.#.#####.#.#.#.#.#########.#
|
|
||||||
#.....#.###...#...#...###...#.#.#...#...#...#...#.#...#.#...#.#...#...#.#...#.#...#.#.....#.....#.................#.....#.#.#.#.#.#.....#...#
|
|
||||||
#####.#.###########.#.###.###.#.#.#.###.#.#.#.#.#.###.#.#.#.#.#########.###.#.#.#.#.#.#####.###.#######################.#.#.#.#.#.#.###.#.###
|
|
||||||
###...#...#.........#.....#...#...#...#...#...#...#...#...#.#.....#.....#...#.#.#...#.......#...#...#...#...#.....#.....#.#.#...#.#.#...#.###
|
|
||||||
###.#####.#.###############.#########.#############.#######.#####.#.#####.###.#.#############.###.#.#.#.#.#.#.###.#.#####.#.#####.#.#.###.###
|
|
||||||
#...#.....#.......#.........#.........#.....#.....#.....#...###...#.#...#...#.#.#.............#...#.#.#.#.#...###...#.....#.#...#...#...#...#
|
|
||||||
#.###.###########.#.#########.#########.###.#.###.#####.#.#####.###.#.#.###.#.#.#.#############.###.#.#.#.###########.#####.#.#.#######.###.#
|
|
||||||
#...#...#.........#.###...###.......###.#...#.#...#...#.#.#...#.#...#.#.###.#.#.#.###...###...#.#...#.#.#...#...#...#.#.....#.#.#.....#.#...#
|
|
||||||
###.###.#.#########.###.#.#########.###.#.###.#.###.#.#.#.#.#.#.#.###.#.###.#.#.#.###.#.###.#.#.#.###.#.###.#.#.#.#.#.#.#####.#.#.###.#.#.###
|
|
||||||
###...#.#.........#.#...#...#.......#...#.#...#.#...#...#.#.#.#.#...#.#.....#.#.#.....#.#...#.#.#.#...#...#...#...#...#.......#...#...#.#...#
|
|
||||||
#####.#.#########.#.#.#####.#.#######.###.#.###.#.#######.#.#.#.###.#.#######.#.#######.#.###.#.#.#.#####.#########################.###.###.#
|
|
||||||
#.....#.........#...#.....#...#...#...#...#.#...#...#.....#.#.#...#...###.....#.....#...#.###...#.#.###...#...#...#...#.............###...#.#
|
|
||||||
#.#############.#########.#####.#.#.###.###.#.#####.#.#####.#.###.#######.#########.#.###.#######.#.###.###.#.#.#.#.#.#.#################.#.#
|
|
||||||
#.....#...#...#.......###.#.....#.#.###...#.#...#...#.....#.#.#...#.......#...#...#.#...#.....###.#.#...#...#...#.#.#.#.............#.....#.#
|
|
||||||
#####.#.#.#.#.#######.###.#.#####.#.#####.#.###.#.#######.#.#.#.###.#######.#.#.#.#.###.#####.###.#.#.###.#######.#.#.#############.#.#####.#
|
|
||||||
#.....#.#...#.......#.....#.#.....#...###...#...#.......#...#.#.###.#.....#.#.#.#.#.#...#...#...#...#...#.###...#.#.#.#...#...#.....#.#...#.#
|
|
||||||
#.#####.###########.#######.#.#######.#######.#########.#####.#.###.#.###.#.#.#.#.#.#.###.#.###.#######.#.###.#.#.#.#.#.#.#.#.#.#####.#.#.#.#
|
|
||||||
#.....#.#...........#...#...#.....#...#.......#...#.....#.....#...#...#...#.#.#.#.#.#.#...#.#...#.......#.....#.#...#...#...#.#.....#...#.#.#
|
|
||||||
#####.#.#.###########.#.#.#######.#.###.#######.#.#.#####.#######.#####.###.#.#.#.#.#.#.###.#.###.#############.#############.#####.#####.#.#
|
|
||||||
#.....#.#...........#.#.#...###...#...#...#...#.#.#.....#...#...#.###...#...#.#.#.#.#.#.#...#.#...#.....#.....#.............#.#...#.....#.#.#
|
|
||||||
#.#####.###########.#.#.###.###.#####.###.#.#.#.#.#####.###.#.#.#.###.###.###.#.#.#.#.#.#.###.#.###.###.#.###.#############.#.#.#.#####.#.#.#
|
|
||||||
#...#...#...........#.#...#.#...#...#...#...#...#.#.....###.#.#.#.#...#...###.#.#...#...#...#.#.#...###.#...#.#...#.....#...#...#.......#...#
|
|
||||||
###.#.###.###########.###.#.#.###.#.###.#########.#.#######.#.#.#.#.###.#####.#.###########.#.#.#.#####.###.#.#.#.#.###.#.###################
|
|
||||||
###.#...#...........#.#...#.#...#.#...#.#.........#.###.....#.#.#.#...#.....#.#...#.......#.#.#.#...#...#...#.#.#.#...#.#...###.............#
|
|
||||||
###.###.###########.#.#.###.###.#.###.#.#.#########.###.#####.#.#.###.#####.#.###.#.#####.#.#.#.###.#.###.###.#.#.###.#.###.###.###########.#
|
|
||||||
#...#...###.........#.#.....#...#...#...#.........#...#.#.....#.#.###...#...#.....#.....#...#.#.#...#...#...#.#.#.#...#...#.....#...#...#...#
|
|
||||||
#.###.#####.#########.#######.#####.#############.###.#.#.#####.#.#####.#.#############.#####.#.#.#####.###.#.#.#.#.#####.#######.#.#.#.#.###
|
|
||||||
#.....#.....#.....#...#.......#.....#...#.........#...#.#...###.#.#.....#.#...###.......#...#.#.#.#.....#...#...#.#.....#.#.......#.#.#.#...#
|
|
||||||
#######.#####.###.#.###.#######.#####.#.#.#########.###.###.###.#.#.#####.#.#.###.#######.#.#.#.#.#.#####.#######.#####.#.#.#######.#.#.###.#
|
|
||||||
#.......#...#.#...#.###...#...#.....#.#.#.......#...###...#.#...#.#.....#...#...#...#...#.#.#.#.#.#.....#.....#...#.....#.#.......#...#...#.#
|
|
||||||
#.#######.#.#.#.###.#####.#.#.#####.#.#.#######.#.#######.#.#.###.#####.#######.###.#.#.#.#.#.#.#.#####.#####.#.###.#####.#######.#######.#.#
|
|
||||||
#...#...#.#.#.#...#...#...#.#.....#...#.#.......#.....#...#.#.#...#.....#.......###.#.#.#.#...#.#.#...#.#.....#...#.....#...#.....#.....#.#.#
|
|
||||||
###.#.#.#.#.#.###.###.#.###.#####.#####.#.###########.#.###.#.#.###.#####.#########.#.#.#.#####.#.#.#.#.#.#######.#####.###.#.#####.###.#.#.#
|
|
||||||
#...#.#.#.#.#.#...#...#.....#.....#.....#.#.....#.....#.#...#.#...#.#...#.......#...#.#.#.....#.#.#.#...#...#...#.#.....#...#.......#...#...#
|
|
||||||
#.###.#.#.#.#.#.###.#########.#####.#####.#.###.#.#####.#.###.###.#.#.#.#######.#.###.#.#####.#.#.#.#######.#.#.#.#.#####.###########.#######
|
|
||||||
#...#.#.#.#.#.#...#.#.......#.....#.....#.#.#...#.....#.#.###...#.#.#.#.#.....#.#.#...#...#...#.#.#...#.....#.#...#.....#.#...#.......#...###
|
|
||||||
###.#.#.#.#.#.###.#.#.#####.#####.#####.#.#.#.#######.#.#.#####.#.#.#.#.#.###.#.#.#.#####.#.###.#.###.#.#####.#########.#.#.#.#.#######.#.###
|
|
||||||
#...#.#.#.#.#.#...#.#.#...#.......#...#.#.#.#...#...#.#.#.#...#...#...#.#.###.#.#.#.....#.#.#...#...#.#.....#.#...#...#.#.#.#.#...#.....#...#
|
|
||||||
#.###.#.#.#.#.#.###.#.#.#.#########.#.#.#.#.###.#.#.#.#.#.#.#.#########.#.###.#.#.#####.#.#.#.#####.#.#####.#.#.#.#.#.#.#.#.#.###.#.#######.#
|
|
||||||
#.#...#...#.#.#.#...#...#...#...#...#.#.#.#...#.#.#.#.#.#...#...#.......#...#.#.#...#...#.#.#.#.....#.#.....#.#.#...#.#.#.#.#...#...#...#...#
|
|
||||||
#.#.#######.#.#.#.#########.#.#.#.###.#.#.###.#.#.#.#.#.#######.#.#########.#.#.###.#.###.#.#.#.#####.#.#####.#.#####.#.#.#.###.#####.#.#.###
|
|
||||||
#.#...#.....#.#.#.#.........#.#.#...#.#.#.#...#.#.#.#.#.#...#...#...#...#...#.#.#...#.#...#.#.#.#.....#.....#.#.....#.#.#.#...#...#...#.#...#
|
|
||||||
#.###.#.#####.#.#.#.#########.#.###.#.#.#.#.###.#.#.#.#.#.#.#.#####.#.#.#.###.#.#.###.#.###.#.#.#.#########.#.#####.#.#.#.###.###.#.###.###.#
|
|
||||||
#.....#.......#...#...........#.....#...#...###...#...#...#...#####...#...###...#.....#.....#...#...........#.......#...#.....###...###.....#
|
|
||||||
#############################################################################################################################################
|
|
||||||
@@ -1,5 +0,0 @@
|
|||||||
340A
|
|
||||||
149A
|
|
||||||
582A
|
|
||||||
780A
|
|
||||||
463A
|
|
||||||
@@ -1,27 +0,0 @@
|
|||||||
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));
|
|
||||||
}
|
|
||||||
@@ -1,27 +0,0 @@
|
|||||||
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));
|
|
||||||
}
|
|
||||||
@@ -1,27 +0,0 @@
|
|||||||
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));
|
|
||||||
}
|
|
||||||
@@ -1,96 +0,0 @@
|
|||||||
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);
|
|
||||||
}
|
|
||||||
}
|
|
||||||
@@ -1,232 +0,0 @@
|
|||||||
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);
|
|
||||||
}
|
|
||||||
}
|
|
||||||
@@ -1,344 +0,0 @@
|
|||||||
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,9 +25,3 @@ pub mod d16;
|
|||||||
pub mod d17;
|
pub mod d17;
|
||||||
|
|
||||||
pub mod d18;
|
pub mod d18;
|
||||||
|
|
||||||
pub mod d19;
|
|
||||||
|
|
||||||
pub mod d20;
|
|
||||||
|
|
||||||
pub mod d21;
|
|
||||||
|
|||||||
@@ -1,10 +0,0 @@
|
|||||||
[package]
|
|
||||||
name = "y2025"
|
|
||||||
version = "0.1.0"
|
|
||||||
edition = "2024"
|
|
||||||
|
|
||||||
[dependencies]
|
|
||||||
regex = "1.11.1"
|
|
||||||
utils = { workspace = true }
|
|
||||||
itertools = { workspace = true }
|
|
||||||
rayon = { workspace = true }
|
|
||||||
File diff suppressed because it is too large
Load Diff
@@ -1 +0,0 @@
|
|||||||
8284583-8497825,7171599589-7171806875,726-1031,109709-251143,1039-2064,650391-673817,674522-857785,53851-79525,8874170-8908147,4197684-4326484,22095-51217,92761-107689,23127451-23279882,4145708930-4145757240,375283-509798,585093-612147,7921-11457,899998-1044449,3-19,35-64,244-657,5514-7852,9292905274-9292965269,287261640-287314275,70-129,86249864-86269107,5441357-5687039,2493-5147,93835572-94041507,277109-336732,74668271-74836119,616692-643777,521461-548256,3131219357-3131417388
|
|
||||||
@@ -1,200 +0,0 @@
|
|||||||
2343453422641331233623444434443422422234243434644344344333436434324443344243444547343426444313413747
|
|
||||||
2855855566364334765666447534635566585837457546445758633538786145597524554776646675584566565455656556
|
|
||||||
5455463424234236523423334345455444634544436464346444233423443324545464444642452442343353644334535444
|
|
||||||
2124233254222341223234331212414222235244222662443314232452232262232235554242154423622425435654322324
|
|
||||||
2332248233225212525222222222422224122233225221134111212423421231224222932121353232232432223211532422
|
|
||||||
4522542214443113224544155153312551232133415534125211224524241324115411325151311354453135113331246789
|
|
||||||
2241242252322221242223222222132212223241123122222222332211424232112242322221222221222222213322231242
|
|
||||||
7558353283677636733775864478467854665632468768617383354484675381162763838872387571737687774846684654
|
|
||||||
3344484433233643346335641434344332343384262314353743523322353211665123643238344431443575325633536323
|
|
||||||
3147453132344582341523322733213313453222322212633252634358623552534426832257242225622235213224635634
|
|
||||||
3237235525534242412132322246222232812264423245522122342232122211131513224222325212729244233245131124
|
|
||||||
4333336434124353433333343333323366534353664383233333523826239336333433413543623643323534478813453535
|
|
||||||
2766235215236263132162732763741151462251562371176157453722631453144613175242354351673253677254421489
|
|
||||||
3413253442324513647314443433354345443432553234452534443623342426643234434349356333244333349324812364
|
|
||||||
2212222243123221262342242212233143231222222222522123133114132321231222333222633122322222232224232231
|
|
||||||
3232415412132232421512323622232425324222473321336122143421623323221422137322245226231332232225214234
|
|
||||||
2253424182211233232241541273352121734324726255222514222332219441571224324264222212211912495321532427
|
|
||||||
7232352323134372249422321225261243243223255231333422225362662321263682332643365223623342135225622435
|
|
||||||
1555255555344553546445826521266331452544523334523353344154474464345334457434535357553444345423654434
|
|
||||||
5537524812673574646632245334349593676339361575654433333226337553652447744445329678745522254574556752
|
|
||||||
4332543748231224333359532233342222323534352641222342434352435333423613344635343432244225557245144152
|
|
||||||
3212113222216224552454254125123222222524224422325122265262426226232131555132344362165455234225255412
|
|
||||||
5545773276222653395365823596435838555937337443533621555822767282435283214925323134882243331558775558
|
|
||||||
7434233344426443414745383444445281433534444224544434364456254234444445433344432134644423344127663443
|
|
||||||
2613243233332242164312332361332423222362342323232133225322333335263323325222262313122632352223325222
|
|
||||||
2223432333362215331532333343332235334622312321353413642632322322623225323234634213363333433332222335
|
|
||||||
4312424322755333343543452253542541226232431525646422322234362124332552251325655213421522442744522423
|
|
||||||
5897273566379433451223339476376542424217232367225273573257987533594789893665739731781863424833771362
|
|
||||||
3423262121432212263544264655433244243336453472674232265234546422135445472235524541124313441123232533
|
|
||||||
2636534453363663634445344564326643344253235574433453654634435923445495656654542795539532232555465393
|
|
||||||
2254271735834672683332374644393773648253547338465332353324736226624562577324349348432363445445334546
|
|
||||||
3377446237663363646946545735433942818724376343147741848477529447745384834548384753336567634223764767
|
|
||||||
3444544614365554343354444424354134434443349443244464434454454455553444654424434433444444372465344744
|
|
||||||
2233473362334422333733133234243234363636333333333133333342232352343343433433323323233733313333334343
|
|
||||||
2525427674556342375442823591327563445225172346422543523315235543332133322417435412434362435332333425
|
|
||||||
3252345314463233542663242265722441426263624263632333362633136367342256322566452446143323344422322425
|
|
||||||
6345563336362334322534451552334419323323363272333286925462735424664334238734112363522323583534433223
|
|
||||||
2221222431555226214114227622733212222312224771622623222361223319224322322222262212222124221232312223
|
|
||||||
5444453434133323373146342345553434532363433344534625533355754433425332523353344435753333444423335448
|
|
||||||
4562894651264437434643452646227346638154452413661221564553643451164534272373247443573466674224631434
|
|
||||||
1222712242222222223225222222222232232222222223244911231122223212313212224213312212212222132229223222
|
|
||||||
2432334332464444733314224232342343333444443432441233244444332433444324334532223333634333323362342231
|
|
||||||
1331211442311324142232241343324444432441211444431442312321314421121233432441133243222331142221256789
|
|
||||||
3423143422334244551465344432414221122252212553444321228442344243325244244445424442733334542343412133
|
|
||||||
4233344264833422423454123186424323623245326143335343271212423431733444333174223133434422432232233336
|
|
||||||
3748457795547753473644647796774756667765796447574677646786677547497787486775694849859649466477895776
|
|
||||||
2123332234222133312222328231363332221332221224322211213232232233222332611131226332223222342133325243
|
|
||||||
2222252244452256123223322251221692332222243924546241253822655228225153864212723223255322424123852425
|
|
||||||
8422112277227422222265263925523626414155352122811747711329144776232625171534225682395244535322642881
|
|
||||||
6368656453953669934545339796965735949381454645537897765556377129998839756579714745557429955558748565
|
|
||||||
3322224425221252131222221224332222247225892222222222532522122222122321377222112224126323822221732222
|
|
||||||
3335645455344232223343127345643233233273322221452312354493333412332323222264533323343322393224222345
|
|
||||||
4241413543324233313223234429483222322147227232633444421224442423343254326243221244332315243322324322
|
|
||||||
5574237447375775621363828563471836176181324458837744833462486566764446487554615821131367112148212469
|
|
||||||
6534573266233533276565211675443236734572626837145323442495971334372252936422625743235636534751325323
|
|
||||||
1233424432322212334422342449212243232461232226444233132334532323243426233524514231214432343114312223
|
|
||||||
4354555443232413265445532666543337533264345374733576543456247234443324526132445323433333646364544562
|
|
||||||
2534234436317222732222822131932225512215232232236662322343522723232222533334222224222732332722352312
|
|
||||||
3452343435344422434335333335344344344433253434333463444363334433344432334441423253353333455444245442
|
|
||||||
3737633682743282872722232722522232221432222723522124252224112242882222228247723172271122552349583212
|
|
||||||
2771223222232332222322322422262333214313133223143122332222332323121222222422233422331222221442322242
|
|
||||||
2422211225231221242242132122314222822222222222212272216252421422222122122622293121251331282134322246
|
|
||||||
2222222221223242212223212122222222222122322221222122222222222122222222222222222123222222223212232121
|
|
||||||
2222322125225232242242222221422222224123332422212232233122224232122214211232322212232121124422241122
|
|
||||||
3122223324324232333313332112321332333333132433333233333432323323323422222242222324332332244322223322
|
|
||||||
1754365457465529653213846457756246255489665345623644352243546864661855453846968245755486351156346559
|
|
||||||
3335332413222222242324343443422322334332371423443333324313222143334332343333344412311431343333233326
|
|
||||||
1534433243425444743484333435384414344234734244342333332324445945238334451222354423243241432544524543
|
|
||||||
2322233223335221423252223322232232353422133133132332334612522352824233231142234423222132433322225323
|
|
||||||
2233344362433332443264533233433842272631223433423951223432123233433843323334345235337346261238375837
|
|
||||||
3244222242252342262264232242312122324327242244442132344223423323142228334223114322132232333123222323
|
|
||||||
4222412222222222222122512621222122122328226222221422222223222262222225322421224122234222211112222244
|
|
||||||
2132231232112432463312333333133151254422212252422223223323232232342239627232322272373122333333323422
|
|
||||||
6796447426869544576625778745446655742364774763674665744845574467153343745635846624563663617776626546
|
|
||||||
1332377852358533652353422333645933534424834853376443445469325234453734733853375454343333763532563453
|
|
||||||
1522257412442212575237222125272242222231213423426493623212532322195136226714452241451231412225357233
|
|
||||||
4222533312252211232332331244233223333334513321232432222433322322624122431122722415223332333415322242
|
|
||||||
2524352221221334242342241433722251221124453721222332242235322453345324224414545241437355521429243433
|
|
||||||
3242232223622123224335232132123223336122324213322422223222322231222222135222312122133222323222223251
|
|
||||||
5832462422453335543333333435353352438537434353533374333323352323363833233542533574344446413446431553
|
|
||||||
6588484555555555513599692555778385555553755555453566564555844645849855544655955543254555566515856557
|
|
||||||
2241322452438433332252242363252331223225422122265322123314324212222632323223225565123445211233342222
|
|
||||||
3655447233543637292965466985423322455935425425252554339536672539522467682855634377344536545594534564
|
|
||||||
2411514322424227212232125545544212332122232221125522514222254292126122452121242412221742212565521122
|
|
||||||
2363763424225125326235566565624632625365226263334674144662662542624357344246956727554231435225222436
|
|
||||||
2552442235423354432343243531744444455242535254646232341244443332242431665344432346343642363343245444
|
|
||||||
3224224338462322441443334422214322132212333344226451232324224222347132423238324324327227132232422552
|
|
||||||
3333433233333233323433423323333223334333343334422333122333333423333333235233333333333323133232333334
|
|
||||||
6566273357637664663763666346678374675694635874799635474568677565737877579559546323663653457432875584
|
|
||||||
5534231432364243372346335363226542237153375222325324371374721243244336624634232777532553448656644323
|
|
||||||
6343338344333143455372344135233232233336276133335323363237334323863233833543522734323353335362733323
|
|
||||||
7744556355597685874673673764568755758373766334784734845674963473335796648778365637647366473344758434
|
|
||||||
2213546516252854516422226532192312212342243252555363425234223343354538657245534168555132242366758244
|
|
||||||
2223251232232168524236431213322222256225544222123516222223252275725362323381926231332542531764322237
|
|
||||||
2322232332322233323224332221234322332212332232472223231293433323422223233432422331313211232562213313
|
|
||||||
2224144174433753323212724187982228146442211422922437222483211443934432233834293224222222237151252124
|
|
||||||
6564453313487332263646733648222445665357223544243434674574435338583255333344574631567736274725571443
|
|
||||||
5254222222265223526321512223113323522224542244247226222223222228312214322133233545242422231242222212
|
|
||||||
2222444354363533827352245422523223223232324384223333425342427334512333348233413328456343423323764433
|
|
||||||
4424644423232313434422335432333533133223324433314422234324432213343242415262244232432341324571423233
|
|
||||||
6362545755588453455853768234465888547656656556657575355254435655865355656874647355265754654452555764
|
|
||||||
4424244132142252122313322233215122323122227112232324622422121144212533225332222213422223322323252235
|
|
||||||
8324424343462334943935427256229244623324232319324554244223433315235422222819214473923321144634224422
|
|
||||||
2343334463222343543343333233344343235453335333154642553422323334333333336224243544323334433233223334
|
|
||||||
5622125462312421515665231253315266217262328722234222313232633234123232722222463146621744653356142224
|
|
||||||
3233533232223423244643332435552543433222347442231335537143243413431333333333235354255433434852255453
|
|
||||||
1545211254135316354413322122543161335216134366461314551424411115516665161554621135163264243524342789
|
|
||||||
2112322232122212131211232222112222222311212122222152222112221221222323393331162152222222222221222232
|
|
||||||
2423322232233133223123233633323243213113151332211223343132233222226271334222623333232323232213375332
|
|
||||||
8539945379743134534782852443322259494415551439346468277535684323385394596743573467814532643446334469
|
|
||||||
3217222222222213221313532231524123113223222723332522222115221422222223222122213252112222212322382213
|
|
||||||
4769797556895859326665476278466859386486766484833559676436383847888376379573795764527895778756555866
|
|
||||||
2312222222212242221242112221232331222211322242422122214222221412221222122314241223211224212262225222
|
|
||||||
4393377633346336436336334623463665635543777582453626246133337429335337543541337636746633937915438473
|
|
||||||
4464472544443433743453334433446635561452377546424463334433334864274441442735536455333532734624257634
|
|
||||||
2322222531323222323324313322241123235232222321141242132122323322122242112221243232242124233232332342
|
|
||||||
2223332222245242372225215322232231315136222332132232222224241322323123422232232323332222234344223312
|
|
||||||
2746333543453325833485455238452332448735157333631582785254652745526425755425425584678834275396252573
|
|
||||||
4444444435434433335333243431566434444233333234642633434443433432526334132354433324433344233434633433
|
|
||||||
4655565545553655445656325555555555554645456453444555644545366446554555654555547652566665554357656545
|
|
||||||
1223234222321331393212332325241221294321222412224322233222423392222324112834124222222312362223442272
|
|
||||||
3326225243484722436725227463266722172243634373333722723564333133754237523133335357554612221323225312
|
|
||||||
2222222216325112222412225222322422232124123122272227214242222522225221342122222222223262222212622132
|
|
||||||
5343335445543544543341323435445235433323314434833454294433343552533354253525643135343364551332814454
|
|
||||||
4554753424724266354564344736755587267565958786274747366475882726376678677483339735785733572846585434
|
|
||||||
5145132435463444436463434634445434343644365444355346863479445333876623535333334343746636294634343644
|
|
||||||
4242333434243464553425434444123444343533344482332346655443434433445422435324564422334541422443444323
|
|
||||||
4424434344324558542454443344354554425125734545344234322345553454533964552654345443323333443423433323
|
|
||||||
4346445384342232435436465246434331474344436624614844745443434335444333464443947943344444444844446143
|
|
||||||
4775467655388846666366656666466346456656385866656648563566555575574655744645434755535457555675766655
|
|
||||||
3627232324233222344224224222421545432324214432112334434442224234623322222233436141331311346423322242
|
|
||||||
7735429124135653424268213146643241455965577261243733222724444414362143243535712322332252364572615223
|
|
||||||
8584326558526657567134262566656416123532665357444326284645152161461465336562563376235222624927725433
|
|
||||||
5165293733124224422322555234639215522553988527543525454755725242323444954354353242241322195158554372
|
|
||||||
3392662245353337737322535332334542636584648636365547343373155533263446314676652364266134323234436243
|
|
||||||
2127522289122222222225222242785242293222241252321327352226228275224282226252682121524547212222492232
|
|
||||||
4476675867785865646473557576266868886665464746657496582746996445346577144747536544494348346587584476
|
|
||||||
4342376334563624433458434272133353545474233543342443374576532334224362542433333332762224233333333533
|
|
||||||
5252252324212232212125352234224722224222324254211222381222122522422222411144321255222422141423212222
|
|
||||||
1313346552363223221322122211354362212433622422532125326215252523555212323322611216482222234124212212
|
|
||||||
2212323222122123221234222222322214322442222262211532124223222222332211123212132142243122422422123122
|
|
||||||
3223518342212862222533322722532222211243652211431814512525222442412411442342132123222224242215222142
|
|
||||||
2333223213223223261242433331622335233323222221232212321122413233331532224272236212212213222223246332
|
|
||||||
3222143233135334342432232362341332324243724522532221234424722132241423331234533334323332234443342243
|
|
||||||
4355343342354334425433324534513533433274344143313344355444544533443343454355432433314643444446444153
|
|
||||||
3923223252352517354222432112253243322445394345144223443323253273453342462352333233438331331412332235
|
|
||||||
3233125324616753252422337231933421267233223842322132222211623425223233232373613321563242222632433233
|
|
||||||
2543224823243445343433422443222424444331242624221222451422423333121628522322722328226122822223441334
|
|
||||||
2243132222124232222211224322313321243262212323512322122213523121222422322432232222133212161122222224
|
|
||||||
3429376727259635133541228222462577721462169685519922652473662652725736325445147425245244333423645645
|
|
||||||
5211535234437522233534433415224552355734323354313214556375315735632331254632712585433337181242383224
|
|
||||||
2333333333232342444123142434233221224623533253232323833422312333435334333342242234323213333334341323
|
|
||||||
5743223626322733473433463247236634664357335333436322515263132533722337253343513337242333324332342361
|
|
||||||
1934446965833831875835524541555358437946537488651524522447255569328347227465455693455469844534265459
|
|
||||||
2224323152322226322113212322212321234222221222122251222223221731311222222322522221322222222211222222
|
|
||||||
3324543225244234222333323343524444223341543222242448344224123423456432522322214453432222232263342433
|
|
||||||
3322333222333343334232331323311232232313323233343231322312432434322323233321332333222132335233231332
|
|
||||||
2321223362323212325225224222333342133212431142324432222235222222223223243262222222223142215232221223
|
|
||||||
3333336223432333433232224333433433543333133256432443333225433443122334323433233144344233321343334333
|
|
||||||
5276752595424547755633443385664543424854147528464348252547552254439224511942355486737692934729755533
|
|
||||||
3545445434524848473834544564533533544443748536454544472426773667244553544255444754454377447544474548
|
|
||||||
7754785884583737439724256838747637644436874474436148938376547746475473678457473536663447755565766346
|
|
||||||
3344423343434344123142445244322444434354215433363733444483142123534334332945442432335344313333344423
|
|
||||||
2232315225222244442225342263333623221127453252252332225344126232523452752162235475255272426242223484
|
|
||||||
5124342352712322136213673211223622242224341232232222642212547223247252268344322383522221423225383324
|
|
||||||
2112152511222522212242212222431232222232122222222242123222222212323212214212213212225222274332222212
|
|
||||||
2358536133134561546554344579333442145642357253937248432223352422323212255392266232284429436256539652
|
|
||||||
5534354234222243343123124324332233412244422227344434223313424322224222323124531222782232414322322232
|
|
||||||
2122452322163132222223263222223352215123223215421223431223234223323322422222322431224121323213222222
|
|
||||||
5988687788785775547857727647837554867656767415977688375476377753756566678767864687583587775463775427
|
|
||||||
3329324531334134832931653522432723733323545413243834431832512414335252353453413242114583232532432154
|
|
||||||
2532222421724322224323244422431197324612367244121222254243323416222382122422235444224632422322133421
|
|
||||||
3332223233411334322132234338343332333332132344332433332132231433232212331321323323233333532143333324
|
|
||||||
6682435538385848746983558647687676448557393346376775557823838782355455764554689848966445283878153934
|
|
||||||
4355654955552546643536545434754575435615478554185226643654254674225535512563653326257564224563335456
|
|
||||||
3333333411332344233233233335222222432223321523222744323234221532214323346232134522333374324225343124
|
|
||||||
3425222322234222132132222322213211345252232232322222231323212213223221326232232933132222222313282114
|
|
||||||
2222223222233222233241232322133222222233224222333331323223623352232212322313234332132223213123222223
|
|
||||||
2233233123831331526333243253333333253333281332253234333332343234323341333333713323333292233334313323
|
|
||||||
4556343454644445454444685754445334555686553552255654445756545333245554544546554452455546541335353533
|
|
||||||
4437142437348769764346723736355554789755533646855344785359265549925278742748321326453347655425464487
|
|
||||||
6334643334655433654235345144543743574434235243444546333356443335433545344431354234733635336235348343
|
|
||||||
2122212322242322322221424522242314322422242222212422212222212221221222222444212632242113242412422142
|
|
||||||
3247133333323422232322322313213349332433323341332345443624232333232332223313333431644333314364294333
|
|
||||||
3823222223322232322333327332233322233313243212242223233222232233323323162223123633232123223222322333
|
|
||||||
4222372222193245612422435623322432112225534326312222221362223222343324324262422421623336333193332332
|
|
||||||
2223232222222223232243231231222212132332222122232221232322232222222212222223332323222222212212231121
|
|
||||||
4243242323533263324524532233434224344453413433433244344334423333324335155324422522223332433344628423
|
|
||||||
3333313323631323333433222222223324132343333322343233322333242133433352513443325332321122223263223333
|
|
||||||
2222223252242422115233222353244223234223342225222343531213321412122124224224433232433126422453142333
|
|
||||||
2433122342342112233223232213242333233324233323323233342223332222332233322233223363333333222122333213
|
|
||||||
4644632653554444545534364373444367554344444735444733525537455733494446427853434315444534343436475234
|
|
||||||
1428224462633222477623242844261625122336225127353242424245822452326632542223434332672272423135615343
|
|
||||||
5352535366355445324444321365583732643533336333225333533833636365448454474442343533264323471324514573
|
|
||||||
3344422424434442232335334316322843323343126434442642322346443441343534442426436268333353324331133346
|
|
||||||
2228222222221211222222212222222123122222123232312323126222222122312322222731242222222332212212223322
|
|
||||||
5542633458433333458444866435543665114232423741474346622564352596325571548628782448539633233555134463
|
|
||||||
1222221124342222532224522423451344642232241522323221222122232222521422211262912553221222222812221642
|
|
||||||
5222226213136333254226233333236642323223525242212226532243132253233223511133262133213652323223123221
|
|
||||||
3231436336286233253431145233333352232333241321323353332243534632332333233223337312631632364632233332
|
|
||||||
@@ -1,135 +0,0 @@
|
|||||||
@@@.@@.@@@@.@@@@@@@@.@.@@.@..@@@.@.@.@@@@...@.@.@.@.@@@.@@@@..@@@.@@.@.@@@.@..@@@...@@..@@@@.@@@.@.@@@@.@.@@...@...@@@@@@@.@..@@@.@@..@
|
|
||||||
@@@@.@@@...@.@@@...@@@@@.@@.@@@.@..@@.@@@@@.@@@@.@@.@@@.@@@@@@@@@@@@@@@@@@..@..@@.@.@@@@@@.@@@..@@..@...@@.@.@@@...@@.@@@@@@.@@.@@@..@@
|
|
||||||
.@.@.@@.@..@@.@@.@@.@@@@@@@.@..@@.@@.@@..@...@.@..@.@.@@@.@@@@.@...@..@.@@@@@..@@.@..@@.@.@@.@@...@@@@.@@@@@@@@@@.@.@@@@@@.@@@.@...@@@@
|
|
||||||
@@@.@@.@..@.@.@.....@@..@@@@.@@@.@@..@.@@@@@@@..@.@@@@@.@.@.@.@@@@@@@..@@@@.@.@.@@..@..@.@.@@@.@@..@.@.@@@@@..@@@@@.@.@..@@@@@@@.@@..@@
|
|
||||||
@..@@@@...@@.@@@..@.@@@..@@..@@@@.@..@.@.@@..@@.@@@@..@.@@@@@@@@@.@@.@..@@@@@..@@@@@@.@@@@@.@.@@.@@.@@...@@@.@@@.@.@@@.@....@.@.@.@@.@@
|
|
||||||
@@@@..@@.@.@.@..@..@@.@.@@@..@@@.@.@@@.@@@@@.@@@@@.@@....@..@@..@.@..@@@.@@.@..@@@...@@..@..@@@..@@@@@@@..@@@@...@@@@@.@@.@@@@.@@@@..@@
|
|
||||||
.@@...@.@@...@@.@@@@@@.@..@.@@@@@..@@...@..@@@.@..@@@@@@@@..@@@.@.@@.@@@.@@......@@@@@.@.@@.@@@@@@@.@.@@...@@@.@..@@@@@@@@.@@.@@@@@@...
|
|
||||||
@.@@..@..@.@@.@@@.@..........@..@@@@@@@.@.@.@@@.@@@@@@@...@@@@.@...@....@..@@@@@.@@..@@@@@@..@..@@@@@@@@@.@.@@.@..@@@..@.@.@..@@@.@@@@.
|
|
||||||
@@.@@@@...@@@@@@..@...@@.@@@.@@@@@@@@.@@...@@@.@@@@.@@@.@@@@@@.@@..@@@@@@.@..@@@@..@@@@@@..@@@.@@@@.@@@@@@@.@@@.@@@@@.@..@@..@@@@@@@.@.
|
|
||||||
..@@@@.@@@..@@..@@..@@..@.@.@.@...@@@@@@@@.@@@@..@@@@@@@@@@@@@@.@@@@.@.@.@...@@@@@..@.@@.@@...@@@@@@@@.@..@.@@@@@@.@..@@@@.@..@@..@@@@.
|
|
||||||
@@.@..@@@..@@@..@.@@.@@@@@.@@@...@@..@@@@@@..@.@@@@@.@@@@@..@@@.@@@@@@@@.@@@.@@......@@@@@.@@@@@@@@@@.@.@.@@@@@..@.@@@@@@@.@@@....@.@@.
|
|
||||||
@.@@.@@@@@.@@..@@.@@@@.@@..@..@...@@..@@@@@@@..@.@.@.....@@@@@@..@.@@.@@@@@..@@.@@@.@.@@@@.@.@@.....@@@.@.@@@@.@..@.@@@@@.@@.@@@.@.@..@
|
|
||||||
@.@.@@.@@@.@.....@.@@....@.@@@@@@@@@.@@@.@.@.@.@@@@@@@..@@@@.@@.@@.@@@....@.@@.@@@@@@@@...@@@....@@@..@@@.@@@@.@.@.@@.@@@@@.@@@@@@.@.@@
|
|
||||||
.@.@.@@@@.@@.@@@@@@@.@@.@@..@@@.@..@@@.@..@@@@.@.@.@.@@..@@@.@@@@.@.@.@...@@@@...@@@@@@@@.@@@.@@@.....@@@.@@..@.@..@@@.@@@@@@@@@@@@@.@@
|
|
||||||
..@..@@.@@...@@...@..@@@...@@@.@@@...@@..@@@...@@@@...@.@@@@@@.@@@.@@@..@.@....@@.@@.@@@@@@.@@@..@@..@@@.@@...@.@.@.@@@.@@@@.@@@@.@..@.
|
|
||||||
@.@@@.@.@.@@@..@@@@@@@.@@@@..@.@.@...@.@@@@.@.@..@.@@@@@@@.@@.@.@@.@...@..@..@@.....@@@@@..@@@@.@@@.@@.@.@@@@.@@@@@@@@@@@..@..@.@@@@.@.
|
|
||||||
@@.@.@..@@@..@@@@@.@@@@.@@@@.@@@.@@@@@@@...@.@.@@..@@@..@@.@@...@@@@@.@@@.@.....@@@...@.@@@@.@.@@@.@@.@@@.@@@@.@@@@@.@@..@@@@@@@@@.@@@@
|
|
||||||
@@@@@@..@...@@@@......@@@@.@..@@@.@.@..@@.@@@@@@@.@@.@.@@..@@@@@@@@@@.@@@@@..@@@@@@@@@....@@@.@@@@@......@@@...@@.@@@.@.@...@@.@@@.@@..
|
|
||||||
@@@..@.@@@@..@@@..@.@@@.@.@@@..@..@@@@@.@@@.@.@..@@@@@@@@@@.@....@...@.@.@...@.@@@.@.@@.@@@@@..@..@@@...@@@..@@@...@..@...@.@.@@..@.@@.
|
|
||||||
@@.@@.@.@..@@@@@.@.@@@.@.@@@.@.@@.@@@.@.@.@@.@....@.@@@....@.@@...@@@@.@@.@...@@@@@@@.@@@@@@.@@@@@@.@.@..@.@@..@@@@@.@@@@..@.@.@.@.@@.@
|
|
||||||
@.@@.@..@@@@@......@@...@.....@@@@@.@@.@@@.@@@@.@@.@@@@.@@@..@@@@@@....@@@@@@@@@.@@.@@@@@.@@@....@.@@@...@.@@@@.@@.@...@.@@.@@.@@@@.@@@
|
|
||||||
@@@@.@.@@...@@@.@.@@.@.@@@.@.@@@@@@@.@@.@.@.@.@@@@@.@@@@@@.@....@.@@@@@.@@.@@@..@@.@@..@.@@@.@@@.@@@.@@.@@@@.@@.@@@@@@@@.@@.@..@@..@.@@
|
|
||||||
@@@@@@@@@.@@...@.@@@.@@.@@@.@@@..@@@@.@.@.@@@.@...@.@..@@@.@.@@@@.@@@@@@@@......@@.@@@@..@@@...@@@@@@@.@.@@@@@@..@@@@.@@@@@@@@@@.@@@@@@
|
|
||||||
..@@@@.@@@.@@.@@@@.@@@.@@.@@...@.@@@@@@@.@@.@@@..@@@@@@@@.@@@..@@.@@@@@.@.@@.@@.@@@@..@@...@@@@@@@@@@@@.@@@@@@@.@..@@@@...@.@@@@@@.@@@@
|
|
||||||
@@@@@@@.@@.@@@.@@@@.@@@@@@.@@...@@...@.@...@@@@.@@..@@@@@@@@.@@@.@.@..@.@.@.@...@@@.@@@@@@@@@@.@..@@.@@..@..@...@@..@@...@@..@@@@.@.@@@
|
|
||||||
@....@.@@@.@@@@@@@@.@.@.@@@@@@@@.@@@@@@.......@@.@.@..@@@@.@@@@.@@@@@@@@@@@@..@..@@.@@@@...@.@..@@@@@@@@..@...@@..@.@@@@@@....@@...@@@@
|
|
||||||
.@.@@.@.@......@@@@@@.@@@@@@@.@.@.@@@@@@.@@@@.@.@.@@@@.@...@@.@@@@..@.@@@..@@@@@.@.@@@@@.@@..@@..@@@@@@@@@@@@@@@@@..@.@@@..@@.@@.@.@@..
|
|
||||||
@@..@.@@.@@@.@..@..@@@@.@.@@@@.@.@@.@@.@..@@@@@@@@@.@@@@@@....@@@@@.@.@.@@@@@@@.@.@.@@@@@@..@..@@@....@...@.@@@@@@.@@@@@@.@.@@@...@@.@@
|
|
||||||
@@..@.@@@.@...@@@@.@@.@@@.@@@..@..@@..@@@@.@@@.@@...@...@@@@@@@@...@@@@@.@@.@.@.@@....@@@@@@@@...@@@..@..@@@@.@.@@.@.@@@.@@....@..@.@@@
|
|
||||||
@.@.@@.@@@..@...@@.@@.@.@.@@..@@.@@@@.@@@.@@....@@@@@.@@@.@.@@.@....@@@@@.@.@@@...@@@..@..@@@@@@.@@@@@..@....@..@@@..@@.@.@@@.@@.@@@@@@
|
|
||||||
@@..@...@@.@@@@@....@.@..@@@..@......@@@..@.@@@@@@@@.@@.@@..@@@@@@@...@@@@.@@.@..@.@.@@@@..@..@..@@@@..@@@@@@@@.@...@@@@..@..@@.@@..@@@
|
|
||||||
...@@@@.@@@.@@@@.....@@@@@.@...@@@@.@@..@@@@@@..@@@@@@@.@@@.@@@@.@..@@@@@@@...@@@@@@@...@@@.@@@.@@@@.@.@@@@..@@@@@@.@@.@@@..@@@@@@@@@..
|
|
||||||
@@@@@@@@@@@@.@@..@.@@@.@@@@@@@@..@@.@@....@.@.@.....@@@..@.@..@@.@@@@@.@@@.@@.@.@.@@@..@@@@@@.@@.@@@.@@@@@@@.@@@.@.@@@.@@.@@@.@@@@...@@
|
|
||||||
@@@.@@@..@.@...@@.@..@@@@....@@.@...@.@@@@@@@@....@@.@@..@@.@.@@.@@@@...@@@..@.@@@@..@@.@@@@..@@@@..@@.@@@@@@.@@@@..@@.@.@@.@.@@@.@.@@@
|
|
||||||
@..@@@@.@..@@.@@..@@@.@.@.@@.@.@@@.@@.@@.@@..@.@@@@..@@@@@..@@.@@@@.@@..@@@@@.@..@.@.@....@.@@@.@@@@@.@@.@.@..@@@@@@.@@@@.@@..@@@.@.@@@
|
|
||||||
@@.@@@@@@@@@@.@@..@@..@@@@@@.@@@@@@@.@..@...@@@.@@@.@.@@@..@@@@.@@@.@@.@.@@@..@.@@@@@@@@@@@@@.@@..@.@@@.....@@.@.@.@@@...@.@.@@@.....@.
|
|
||||||
@@.@.@@@@.@@@.@.@..@@@.@...@.@@@@.@@...@@@.@@@@@@@@.@@@@@@.@@@@.@@@.@@@@@@..@..@@@.@.@..@@@.@@@.@@@@.@@@..@.@@@.@@@.@.@@@@@@...@@.@.@@.
|
|
||||||
.@@.@.@@@@@@@@@.@@.@@@.@..@@@..@@.@@@@.@@.@@@.@@@@@.@@@.@.@@.@.@@.@.@@@..@@@@...@.@@.@@@@@@@.@.@.@.@@@.@.@@@@@@@@...@@@.@.@..@@@..@.@..
|
|
||||||
@@.@@@@.@@@.@@..@@.@.@...@.@..@@@..@.@.@@@@.@.@@..@.@@.....@@@@@@@@.@.@@@@..@@@..@@@@@.@@@@@@@@@.@@@.@.@...@.@@@.@@@@@@@@.@..@@.@.@.@@@
|
|
||||||
..@@@@..@..@..@.@@@..@..@.@.@.@.@@@@@.@@.@.@@@.@@@@.@@@..@.@@.@@@..@.@@@@@.@@@.@@@.@@..@.@@@@@.@.@@@@@@.@@..@@.@@@@@@@@.@.@@@.@@@@.@@..
|
|
||||||
.@...@@@@@@@@..@@.@@.@.@..@@.@@@@..@.@@...@@...@....@@@@.@@@.@@..@@@.@@@@.@@@@@@.@@@.@@.@....@@@.@@@@@@..@..@.@@@..@@@@@@.@@@@@.@@..@@.
|
|
||||||
@@@@@@@@@@.@@...@@@.@.@.@.@@@..@@@@@@@@.@.@.@@.@.@@.@@@@@@..@@@@@@.@@@..@..@@.@@@@@@@@@@@@..@@@.@@@.@...@@@.@.@..@@.@@.@@.@@@@@@@..@.@.
|
|
||||||
@...@@@@@..@@.@@.@.@@@.@.@.@@..@@@@.@..@@.@@@..@@@@@@...@@...@@@@..@@@@..@..@..@..@@@@..@.@@..@@@.@@@@.@.@@@@@.@@@@..@..@..@.@.@@@@@@@@
|
|
||||||
@.@@@..@@..@..@@@.@@.@@@@.@@..@@@@@@@@@.@..@.@@@@@@@@@.@@@.@..@@@@....@@.@@.@.@@.@@@@@@..@@@...@..@@@@@@@.@@@@@@.@@@@.@@.@@.@@.@@...@@.
|
|
||||||
@.@@.@@.@....@@.@@.@.@@@@..@@.@@@@@@@@..@.@@@@.@@@@.@@.@..@.@@@.@@@@@@.@.@@.@@.@.@.@@@@@@@@.@@@..@@.@@@..@.@@.@.@.@@@@@@@@@.@@@@@@...@.
|
|
||||||
...@@...@.@@.@@@@@..@@@@.@.@@..@.@@@.@@....@@@@.@.@.@.@@.@.@.@.@.@.@.@@..@..@@.@@@@.@@...@@@.@@@@@@@.@.@.@.@@@.@.@@.@@@@@@@@@...@@@@@@@
|
|
||||||
.@@@@@..@@@..@.@@..@.@@...@.@.@@@@..@@@@.@.@...@..@@@.@..@@@@.@.@.@.@..@@.@@@..@.@.@@@@@@@....@@...@@@.@.@@@@..@@...@@@@@@@.@@@.@@@@@@.
|
|
||||||
.@..@@.@@@@.@@@@...@.@@@@@@@@@...@..@@@@.@@@.@@.@..@.@.@@@@@@@@@@@@@@@@..@@.@@..@@.@.@.@@@@@@@@.@@@@@@@@@@.@@.@@@.@..@.@.@...@.@@.@..@@
|
|
||||||
.@.@..@.@@..@@@.@...@.@@@@.@@@@@@.@.@@.@.@..@@@@@.@..@@..@.@@.@..@@@@@@..@@.@@@@@.@@@.@@@@@@@@@.@..@@@@..@@@.@@@.@@@@.@@..@..@@@@@.@.@.
|
|
||||||
@.@@.@@..@@.@@@@@@@.@.@.@@..@@@.@..@@@@@.@.@@..@@@.@@@@@@.@@........@@@@.@@@.@@@..@@.@@@@.@@..@@@..@..@@@@.@..@@@@@.@@@@..@@@.@.@..@@@@
|
|
||||||
@.@@@@@@..@@@@@..@.@@@@@@.@@..@.@..@...@...@@@.@.@@@@.@@@@@@...@.@.@@.@.@..@@@@@...@@@@@.@@@.@@.@@.@..@.@@@.@@@..@@.@....@.@..@.@@.@@.@
|
|
||||||
@@@@.@@..@....@@@..@@.@@.@@.@@.@...@@.@@.@@@@@@.@@@@..@@@..@@@@@@@@@.@@@@.@@@@@.@.@@..@.@@...@@@.@@@@@.@@@@@@@.@.@.@@@@@@...@@@@@@.@@@@
|
|
||||||
@.@@@..@@@@..@@@.@@@@@.@@@@@@.@@@@.@.@@@@..@@@@.@@..@@.@@.@@.@@.@@..@@..@.@@@@..@.@.@@..@@.@@@..@@@...@.@@@@@@@.@@@@.@@@@@.@.@@@@.@@.@.
|
|
||||||
@.@@@@.@@@@@@@@@.@..@.@@..@@.@@@@@@@@@@@@@...@@..@@.@.@@@.@@@@.@@@@.@.@.@@@@@.@@@@@.@.@...@@.@@@@@.@@.@@.@@@@.@..@..@@..@@@@@@@@.@@.@@.
|
|
||||||
@@...@@@...@.@@@@.@@@@@..@@.@@@.@.@@@..@@@.@..@@@@.@@.@@@@....@@@...@@.@@..@@@@@@.@@@@@@@.@@@@@.@.@@@....@@.@..@@@@@@@@@..@@.@@@@@@@@@@
|
|
||||||
@@@...@@@@@@@@@@@@@.@@@.@@@@.@@.@@@@.@..@@@..@@@......@.@..@@@..@@@@@@.@@@@@.@@@@.@@@@@@@@@@@@@@.@.@@@@@.@@.@.@@@@.@.@@@@@@.@.@.@.....@
|
|
||||||
.@@...@@@.@..@@@@@@@.@@@@....@.@@....@@@@@@@@@...@.@..@@@...@@@@@@.@@.@@.@@.@@@..@@..@.@@@.@@..@@@@@.@@@....@@.@@.@@@@.@@@.@@.@@@@..@.@
|
|
||||||
@.@@.@@..@.@@@.@@...@@@@@.@@@@.@@@..@@@@.@@@@.@@@@@@.@.@..@@.@@@.@@.@@.@@@.@@..@@@@@@@@..@....@..@@..@@@......@..@@@@@.@@.@@.@@.@@.@@..
|
|
||||||
@.@@.@..@@@.@@@..@@@@.@..@@@@@@@@.@.@@.@@@@.@.@@.@@@.@@.@.@..@@.@@.@@.@@.@@@.@@@@..@@@@@@@@@.@@@@@@@@@.@...@@@...@@@.@@@@...@@@.@@@..@.
|
|
||||||
@@@@@@..@@@@.@.@..@@@.@.@@@@@@@....@.@@@@@.@@@@@..@.@@@@..@@.@.@@@@@@.@@@.@@@@@.@@.@@@...@@@@.@@@.@@@@@@.@@..@..@@@.@@@.@.@..@@.@@.@@.@
|
|
||||||
@.@@..@@.@@.@@..@@@@@@@@..@...@@.@..@@@.@.@@@.@...@@@.@.@@@..@.@@.@.@@@.@.@@.@.@..@@@@@@@.@@..@@@@@@@@.@.@.@@@@@.@.....@@.@@@@@@.@@@@@@
|
|
||||||
.@@@@.@@@@.@@@@@.@.@..@@@..@@@@@@.@@@@@..@.@...@.@@@.@@@@@@@@@@@@.@@.@.@@..@....@@@@.@@@@@@@@@@@@@@@@..@@@@.@@@.@@.@@.@@@@.@@@.@.@@@...
|
|
||||||
@@.@@@.@@@@.@.@@@@@.@@@.@@@@..@@@.@@.@@@@@.@@@@.@@@@@@@.@@@@..@@.@.@@@@@.@.@.@@@.@@@.@.@@@.@@@.@@.@@.@@@.@.@...@@@.@@..@@.@...@@@.@@.@@
|
|
||||||
@@@@@@.@@.@.@.@...@@@@@@@.@@@@@@@@@@.@.@@.@@@.@..@@@..@.@@@..@@.@@.....@@.@.@..@@.@.@@@@@@@.@@@.@.....@@@.@@@.@...@..@@@@@.@.@.@@@..@@.
|
|
||||||
@@.@@..@@.@.@.@@.@@@.@@@.@....@..@@@@..@@@@@@@.@@@.@.@@.@@@@@@....@@@.@.@.@.@.@...@@@@.....@.@..@.@@..@.@@.@.@@..@@.@.@.@.@@@@@@.@@..@.
|
|
||||||
@@.@..@@@@@@..@@...@..@@@@@@.@@@@@...@@.@.....@@.@@..@@@@@@@@@@@@..@.@@.@....@@.@..@@@@@.@.@@@@@@.@@.@.@.@.@...@@@@@.@@..@@@.@@@@@@@@@@
|
|
||||||
@@..@...@@@..@@@@@.@..@..@.@.@@.@@@@@..@@@.@@@@@@@.@@.@..@@@.@@@@@@..@@.@@@@@@@..@@.@.@.@@@.@@@..@@@.@@@...@@..@@.@@@@@@@@@.@@@@@.@@@@@
|
|
||||||
@..@@@@...@@@@@..@@@@@..@@..@@....@.@@..@@@@@@@@.@@....@@.@@@...@@@@@.@@.@@@@.@.@@.@@.@@...@...@@@.@..@@@@@@@@...@@@..@@@..@@.@.@..@@@@
|
|
||||||
.@@@@.@@@@..@@@@@@.@..@@.@@@.@@@...@@@@@@.@..@@.@@@@.....@..@....@@@.@.@.@.@@@.@@@@@@..@@@@@@@.@@.@@.@..@.@@.@.@@@..@@@.@@@.@..@@@@.@@.
|
|
||||||
@...@.@@.@..@.@..@.@@@@@.@@@@@@@.@@@.@@.@@@@@.@.@.@@@@@..@@.@@@@@@@@@..@@@@@@@....@@@@.@@..@..@.@@..@@@@@@.@.@@@@@..@@.@@.@@@@..@@@@@.@
|
|
||||||
@@.@.@@.@@.@@.@@.@@@.@@@@@.@@.@.@..@...@.@.@@@@@.@..@@@@@@..@@@.@..@@@@..@@.@@@@@@@.@..@@@...@@@.@.@@.@@@.@.@.@@.@..@@@@@..@@@@..@@@.@.
|
|
||||||
.@..@@@@@@@@@@.@@@@.@@..@@.@.@.@.@...@@@@.@.@@@.@..@@@.@@@@.@..@@@.@.@@@@@@@@@.@.@..@@.@.@@@@.@@.@.@@@..@@@.@@@@@.@@@@@@@.@@.@@@..@.@@.
|
|
||||||
@@@@...@@@@@@.@@@@@@.@@.@...@@@@.@@@@@@@.@..@@.@.@@@@..@@..@@@@.@@@.@@@@@@.@@@@.@.@.@.@.@.@@@@@..@@@.@.@@@@..@@@@@@.@@@@@.@@@....@@@.@@
|
|
||||||
@@@..@@@@.@.@@....@@@@@@.@@@@.@@@@@...@@@@@.@.@@@.@@@@@@@..@@.@.@@.@@@@....@@.@.@@@...@@..@@..@..@.@@@@@@@.@@.@@.@.@@.@.@.@@@.@@@@@@.@.
|
|
||||||
.@@@@@@@@..@.@@.@@..@@@@@.@.@.@...@.@.@@@@@@.@@.@@..@@.@.@@@.@....@@@@@@@.@.@@.@@...@.@@....@@@.@@.@..@@@.@@@@@@@..@@@@@@@@@@@@..@@@@@@
|
|
||||||
@@@@@..@@@@.@@....@@@.@@@@@..@@@@@@@@..@@@@@.@@@..@@..@.@@.@@@@@@.@...@@@@.@@..@.@@.@@@@@.@@@.@@..@.@@.@@@@.@@@@.@@@@.@..@@.@@@.@@@@.@@
|
|
||||||
@.@@@...@@@.@....@@.@@.@@@@..@@.@@@.@@@@.@@@.@@@.@@.@@@@@@@@@.@.@@.@@@@@@@.@@@@@@@@.@@@.@..@@.@.@@@..@.@.@.@@@@@@.@.@.@@@@@@@@@.@@@.@@@
|
|
||||||
@@@@@@...@...@@@@.@.@.@@@..@@@@.@@...@.@@.@@.@@.@@.@.@.@....@@@..@.@@@@@@@....@@@@.@.@..@.@@@@@.@@@.@@.@@@@..@..@.@@@@.@@@@@.@@@@@..@@@
|
|
||||||
@.@.@..@.@..@@.@@@@@....@..@@@@..@@..@@@@@.@@.@@@@@@.@@@@@.@.@@@@@@@@@.@@@@@@@.@@@@@.@@@..@.@@@.@...@.@@@@@@@@..@@.@.@.@@@@.@@@..@@@.@@
|
|
||||||
....@@@...@@@.@.@.@@@@@..@.@.@@@@@@@@@.@.@.@@@@@@@.@@@@@@@@@@.@.@@@@@.@.@@@@@@.@@@@@@.@..@@@@.@.@.@@@.@@@.@@@@.@.@@@.@@.@...@@@@@@.@@@@
|
|
||||||
@@@.@@@@.@@@@@@@@@.@.@@@@@..@@@@@...@@@.@@@.@.@.@@@@@@@.@@@@@@@@..@@.@@@@@@@@@@@@.@@..@@@@@@@.@@@@@.@@@@..@@@@....@.@@@@@@@@@@...@@@@@@
|
|
||||||
@@...@.@@.@.@...@@@.@@.@@@@@@@.@.@@.@@@@..@@@.@.@@@.@.@@@@.@.@@..@@@@.@@@.@@@@@..@.@..@.....@.@@@@.@.@@@@@@@@@.@.@@.@@@@...@....@@.@..@
|
|
||||||
.@.@@@@.@@.@@.@@@...@@@.@.@@@@..@@@....@@@.@..@@@.@@@......@@@@@@...@.@.@.@@@.@..@@@@...@@.@@.@@.@@@@@@@.@@..@@@...@.@@@@@@@@@.@.@.@@@@
|
|
||||||
@@.@..@.@.@@@@..@@@@@..@..@@@.@@@@@@@.@...@@@.....@.@@@@@..@@@@..@.@@..@.@@@.@.@.@@@@.@@@.@.@.@....@@.@@@@.@.@@...@.@@.@..@.@.@@.@..@@@
|
|
||||||
....@.@@@@@@.@..@@@@@.@...@@@@.@@..@.@....@.@@@@@@.@.@@@@..@@..@..@@@@..@@@.@.@@@..@@@@@@@@@...@@@..@@..@@..@@@@@@.@.@@@@@..@@@@...@@..
|
|
||||||
@.@@.@@.@.@@@.@...@@@....@@@..@@...@.@..@.@@@..@@...@@@@@@@@..@@.@.@@@@@@@@@@@.@@...@@@@.@@@@@..@@.@....@.@@@@.@@@...@@@.@.@@@@.@@@.@@.
|
|
||||||
.@@@@.@@@.@@@@@@@@@..@@.@@@.@..@@@@@@.@@@@.@@@@.@@...@..@@@.@@.@@.@@.@@...@@@..@..@@@@@......@..@@@@.@.@@@..@@@.@...@@.@@@@@.@...@@.@@@
|
|
||||||
.@.@@..@@@.@.@@@@@@@@@@@....@@@@@@@@@@@.@@@@@..@@@@.@@@.@@@@.@@@@.@@@.@.@...@...@@@.@...@@.@@@@@@@@@....@.@..@@@@..@@.@@@@@.@@@@@@.@@@@
|
|
||||||
.@.@@....@@@@@.@@@@@.@....@.@.@.@@@@@@@@@@@@@@@@@.@@@.@@@@@@@@...@@.@@@@.@@@@@.@.@.@@..@@@.@@@@@@@.@.@.@..@@@@@@@@@@@@@@@.@@.@.@.@@@@.@
|
|
||||||
.@@.@.@.@.@@@@@@..@@@@@.@@.@..@@.@@@..@..@@..@@@@.@@@@@.@@@@@.@@@@@.@@.@@@@..@@@@@@@@@.@@...@..@@.@..@@.@@@@.@..@@...@.@@@@@@@..@.@@@.@
|
|
||||||
@@..@@@@@..@@@@@@@.@@@..@@@.@.@@...@@.@@..@@@..@@@.@@@@@@@@...@.@@@..@..@@.@.@.@..@@.@.@@.@@.@@@..@.@@..@@...@@..@@.@.@@@@@@@@@@@@@@@..
|
|
||||||
@...@@.@.@..@@@..@@.@@.@.@@@@@..@@.@@@@@@@@@@@@..@.@.@.@..@@@.@...@@...@.@@@.@@.@...@.@.@.@.@@..@@@@@.@@@.@@..@@@.@@@@@@.@.@.@@@@..@@@@
|
|
||||||
.@@@@.@@.@@@@@.@@...@.@@@@@@@.@@@@@@@.@@.@@@.@@@@@@.@.@.@..@..@..@@@.@@..@@@@..@@.@@@.@@.@@@@@.@.@@@@@@@.@@.@@@.@@@@@@@.@@@@@@@@@.@.@@@
|
|
||||||
@@@@@@@@..@@@..@@@@...@@@@@...@@...@@@@@@@@@@@@@..@@@@@@@.@.@....@..@.@@@...@@@@...@@@.@@...@...@@@.@@.@.@@..@@.@@@@@.@@.@@.@@@@@@@@@..
|
|
||||||
@@..@.@@.@..@...@..@@@@.@@@@@@@@@@..@@@@.@@@.@@@.@@..@.@@@@@.@.@..@.....@@..@@@@@@@@.@.@.@@.@@@@@@@.@@@.@..@@@@.@@.@.@@.@@@.@@...@.@@.@
|
|
||||||
...@...@@@.@@@.@.@@.@@@@.@..@..@@@@..@@...@@....@@@.@.@@...@@..@@@@@@@@@.@.@..@@@.@@@.@@@@@.@..@@@@.@..@@..@.@@@@.@.@@.@@@@@.@@@@@.@@.@
|
|
||||||
@@.@@.@@@@.@.@.@@@.@.@.@@@@@@...@.@@..@@..@@@@@@..@@@@@@@@@@@@@@@@.@.@@.@...@@.@@@...@@@@@@@@@.@@..@@@.@@@...@@@@@@.@..@@@.@@@.@..@..@.
|
|
||||||
.@@@.@@@.@@@@.@@.@@@.@@@@@@..@..@..@.@@@@@....@@@@@@@@.@.@@@@@.@@.@@@..@..@...@....@@@..@@@@.@...@.@..@@.@.@@@.@..@.@@@.@@@@.@.@@@@@.@@
|
|
||||||
@.@@@.@@@@..@..@@@@..@@@@@@@.@@..@@@@..@.@@...@.@@@@@@@.@@..@@@@@@.@@@@@..@@.@@@@@@..@.@@.@@..@.@@@@..@@@@@@@..@.@.@.@@@.@.@....@..@@.@
|
|
||||||
@...@.@...@..@.@.@@.@@@@.@@@@@@@@@@@.@@@@@@@...@..@@@@@@.....@.@@.@..@@.@@.@.@@@@.@@@@@.@@@.@.@.@..@@.@.....@....@@.@@.@..@.@@.@.@@@@.@
|
|
||||||
@.@@@.@@@@...@@@.@.@..@.@@@@@@@@@..@@@.@.@@.@@.@@.@@.@..@@@.@.@@.@@...@@.@@@.@...@@@@@.@@.@@@.@@@@@@@@.@@@@.@@@.@@.@@@@@@..@@@@@.@..@@@
|
|
||||||
@.@@@.@@@@.@@@@.@@..@.@@@@..@.@.@..@@@@.@@@@@.@.@.@.@..@@@..@@@..@@.@..@@@@.@@@@@.@@@@.@@@...@@@@.@@@...@@@@.@.@@@...@..@.@@@@@@@@@@@@@
|
|
||||||
@@@@@@@@@@@@@.@...@@@@..@.@@@@..@@@.@@@@@@@@.@@@.@.@@@.@@.@@.@.@..@@@.@@@.@@.@@..@...@.@...@.@.@@@@@@@.@@.@@@.@@.@.@..@.@@.@.@@@@@.@@.@
|
|
||||||
@@..@.@@@@.@@@.@@@.@@@..@@@@@.@@...@@.@@.@@@.@@@.@@@@@.@@.@@.@.@.@..@@.@.@@@@@.@@.@.@@..@@...@.@@@@@...@@@.@@@@.@.@@@@.@@.@@@@@.@@.@@@@
|
|
||||||
@@@@@@@@@@@@.@@.@.@..@@@..@.....@.@@.@@.@@@@.@.@@@..@@..@@.@@.@@@@.@..@@.@@@@@@@@@@@@@@@@@@.@.@@.@.@.@@@.@@@@@.@@...@.@.@.@...@@@@..@@@
|
|
||||||
@@.@@.@..@@@.@..@@@@@...@..@@@@@.@.@@...@@@.@@.@.@.@@@@@@@@.@@.@@@.@@@.@@.@.@@@.@@.@..@..@@.@@@@.@@@@@@@@@...@@@@.@..@@.@@@@.@@.@@@...@
|
|
||||||
@.@@.@@.@@@@@.@.@@@.@@@@@@@.@@@@@@@@@@@@.@@@.@.@.@@.@.@@@@@@..@@@.@@.@.@@@....@@@@.@@@@@@.@@@..@@@.@.@@@@@@@@@...@@..@@@@@@..@@@@@.@@.@
|
|
||||||
.@.@@@@@@@.@@@@@@@@.@@@@.@@@@@@.@.@@@@..@.@..@@@..@@@@@.@@@.@@@@@@@@@@@@...@@@@@@@.@@@@@..@.@@.@@@..@@...@..@...@@.@@.@@@@@@.@@@@.@...@
|
|
||||||
@@@@@...@@@@@@@.@...@.@@@.@@.@.@@..@@.@@.@@@.@.@.@..@@..@@..@...@@.@@.@.@@@@.@@@.@@@@@@.@@@@@@.@.@@.@@@@@@..@.@@@@@@@.....@@.@@@@..@@@@
|
|
||||||
.@@.@@@..@@@.@.@@@.@@@.@.@@@@@@.@..@@@@.@@.@@.@@@.@@@@@..@..@@@@.@..@@.@@@@.@.@@@..@@@@...@@.@@@@@@...@@@@@@@@@.@.@@@@@@@@@...@.@.@@@..
|
|
||||||
@.@@@@..@.@@..@..@.@@@@@@@.@@...@@.@@@@@@@@.@.@.@.@.@@@@@....@..@.@@@.@.@@..@@@@..@.@@@@.@..@.@@@.@@.@.@.@@@@@@@@..@@.@..@..@@@@.@...@.
|
|
||||||
@@@@@@@@@.@.@@@@.@@@.@@...@@@@@@@.@@.@@@@@@@@@.@.@@@..@@.@@@@.@@..@...@@@.@@.@..@@@@..@@.@@.@.@@@.@.@..@..@@.@@@@@..@@@@.@@..@@.@@@.@@@
|
|
||||||
@.@.@.@@.@@@@....@@@.@....@@.@.@.@@@.@@.@@@..@@..@..@@.@@@@@.@@@..@@.....@@..@.@@@@@..@..@@@.@@.@...@@@@@@.@.@@@..@...@@@@@@.@..@@@@...
|
|
||||||
@@.@@@@@@@@@@@.@@.@.@.@@@.@@...@@.@@.@.@@@.@.@@@@.....@@@.@@@@@.@....@@.@.@@@@@@@@@.@@@@@@@.@.@@.@@..@@.@.@@@@@@.@@@@@@@@.@@..@@@@@.@.@
|
|
||||||
@.@.@@..@.@.@@@@@@@@.@.@.@@...@@...@@.@.@.@@.@@@@@@@@@@@@...@@@@.@@@.@@@@@@@@@@@.@.@.@..@.@.@@@@@..@@@..@@@.....@.@@..@@@@.@.@.@@@@@@@@
|
|
||||||
.@.@@@@@.@..@.@.@@@@@@@@.@.@@@@@..@@.@.@@@@@@.@.@@..@@@@@@@@..@@@.@@@..@..@@@...@.@@.@@.@@@@..@.@..@.@@@@@@@@@@@@@@@..@@@@@@.@@@@..@@@@
|
|
||||||
@@@@@@.@@@.@.@@.@.@@@@.@@.@@@.@..@@@@@@.@.@.@@@@..@.@@.@.@@.@.@@@@.@@@@.@@.@@...@..@@@@@@.@.@@@@@@.@..@@.@.@.@.@@.....@@..@.@@..@.@.@@@
|
|
||||||
@@@@.@.@@@@.@.@@.@@@..@@@@@@@@.@@.@@@....@.@@@@.@@@@@.@.@@.@@@@.@.@.@.@...@.@@@.@.@.@@.@.@.@@@.@@@.@@..@@.@@@@.@..@.@@@.@..@@@.@.@@@.@@
|
|
||||||
.@@@@@.@.....@@@@.@.@@@@.@.@@@.@..@.@.@@.@@..@.@@@@.@@..@..@..@...@@@@.@@@@@@@@@..@@@@@@.@@.@@@@.@.@@@.@@@...@@@@.@@....@.@@.@@.@@@@@@@
|
|
||||||
@@@@.@@.@....@.@@@@@...@@.@..@@..@..@@.@@@@.@.@.@@@.@@..@@@.@@@@.@@@.@.@@.@@@@@@.@@@@.@.@.@@....@@..@@@@.@@@@@@...@@@.@@@@.@@@@@.@@@@@@
|
|
||||||
@.@..@.@.@@..@@....@@@...@@.@@.@@..@@.@...@@@@@@@@.@@@@..@.@@.@@@.@.@@@@@.@@@@@@@@@@@@@.@@.@@@.@.@.@@.@..@.@@@@@@...@@.@@@@@@@@@@@..@.@
|
|
||||||
@@@@..@@@@..@.@@.@@.@.@.@@..@@.@@.@.@.@@@.@@.@@@@@@@@@@@@@@.@@@.@.@@@@@@@.@@.@@..@@.@.@@.@@@@..@.@.@@.@.@.@@@@@@@@.@.@..@@.@@@.@@@@@.@@
|
|
||||||
@@@.@.@@@@@.@@.@....@.@@...@@@.@..@@@.@.@@@@..@.@@.@.@.@.....@@@@@.@.....@@@@@..@@@@.@@@@@@@.@..@@..@@@@@@@.@.@.@@@@@@@..@.@.@@.@...@@.
|
|
||||||
.@..@.@@@..@@..@@@@.@.@.@.@.@@@@@.@@@@@.@@@@@..@@@@@@.@@@.@@@@@@....@@@..@.@...@@..@..@...@.@@...@@@.@...@@@@.@.@...@@@.@.@@@@@@@.@@@.@
|
|
||||||
.@@@@.@.@..@@@..@@@.@.@@@@@.@@@@@.@@@@.@@@...@@@@@@.@..@.@@.@.@..@@@@.@.@..@@@@@.@...@@@.@@@@.@...@.@@..@.@@@@.@.@.@@..@@@....@.@@@@@@@
|
|
||||||
@@.@@@@..@@@@..@.@@..@.@.@@.@@.@@@@@.@@@.@@@@.@.@.@@@...@@.@@@@...@@@...@.@@@@.@@@.@@.@...@@@@..@.@@@@@@@@.@@.@@@@.@.@@@.@@@..@.@..@@.@
|
|
||||||
@...@.@@@@@@.@..@@@.@.@.@.@@@@@@@@@....@...@@.@@@@@.@@@@@@@@@@@@.@@...@@@.@@.@@@@@@...@@@.@@...@@@@.@..@@@@@.@@.@.@@@...@.@.@.@@@@@@..@
|
|
||||||
...@@@@..@@@@@.@@..@@@@.@@.@..@@@...@@.@@.@..@@@.@.@@...@@@@..@@.@...@@.@@@@@@@@@@.@@@....@.@.@@@...@@@@.@@@@..@.@@@@@@.@@.@.@@.@.@@.@@
|
|
||||||
@@.@@@@...@@@..@@.@...@@..@@..@..@...@@@@.....@@@@@@..@@@.@.@@...@@@@@@@@....@@@.@@@@@..@@.@.@.@.@@@.@.@@@@@@@@@@.@@@@@@.@.@..@@@@@...@
|
|
||||||
.@.@.@@@.@.@.@@..@@@.@...@@..@.@@@.@.@@@..@...@@@@.@@@@@@@@@.@@.@@@@.@@@.@.@@@..@@.@.@@@@@@@@@...@@@.@@.@@..@@@@@.@....@.@..@@.@@@@@.@.
|
|
||||||
@....@@@@@..@@.@@@.@...@..@..@.@@.@@.@..@.@@..@@@@@@@@@@.@.@.@..@@@.@.@.@@@@@@@@..@@@@@.@@@@.@@@@.@@@@@@@.@..@@..@.@.@@.@@@@@.@@@.@@@@@
|
|
||||||
@@@@@@@@@@.@@@@@@@..@@...@.@@@@.@@.@@@@.@.@@@.@.@@@.@...@@@@.@.@@.@@@.@.@.@..@@..@@@.@@.@.@@@@@@..@.@@@@.@@.@@@.@.@@@.@@@@.@@@@....@@@.
|
|
||||||
@@@@@@.@.@@@.@@@@@..@@@...@..@.@@.@@.@@...@.@..@@@.@.@..@@@@.@@@@.@@@@..@.@@@@@@@.@@@@@@.@@@.@..@.@..@@.@@@@@.@@@@@..@@@@.@@@.@.@@.@@..
|
|
||||||
@@@@@...@.@@....@@@.@@@@..@@@.@@@@@@..@@@@.@@..@....@@@@...@.@@@.@@@.@@@.@@@@@.@@@@.@@@.@.@@@@.@@.@.@@@.@@@..@@@@@.@.@.@@@.@@@@@@@@...@
|
|
||||||
@@@@.@@.@...@@@.@..@@@@@@@@@@@@@@.@@@@@@@@@.@@@@..@@@@@@@@@@@..@@@.@..@.@@@..@@.@@.@@..@@...@..@@.@...@.@@@@@@@@@.@....@.@.@.@@@.@.@.@@
|
|
||||||
File diff suppressed because it is too large
Load Diff
@@ -1,27 +0,0 @@
|
|||||||
use std::{fs, time::Instant};
|
|
||||||
|
|
||||||
use utils::time::get_elapsed_string;
|
|
||||||
use y2025::days::d1;
|
|
||||||
|
|
||||||
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/1_input.txt")).unwrap();
|
|
||||||
println!("{}", d1::process_part1(&content));
|
|
||||||
}
|
|
||||||
|
|
||||||
fn part2() {
|
|
||||||
let root = env!("CARGO_MANIFEST_DIR");
|
|
||||||
let content = fs::read_to_string(format!("{root}/resources/1_input.txt")).unwrap();
|
|
||||||
println!("{}", d1::process_part2(&content));
|
|
||||||
}
|
|
||||||
@@ -1,27 +0,0 @@
|
|||||||
use std::{fs, time::Instant};
|
|
||||||
|
|
||||||
use utils::time::get_elapsed_string;
|
|
||||||
use y2025::days::d2;
|
|
||||||
|
|
||||||
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/2_input.txt")).unwrap();
|
|
||||||
println!("{}", d2::process_part1(&content));
|
|
||||||
}
|
|
||||||
|
|
||||||
fn part2() {
|
|
||||||
let root = env!("CARGO_MANIFEST_DIR");
|
|
||||||
let content = fs::read_to_string(format!("{root}/resources/2_input.txt")).unwrap();
|
|
||||||
println!("{}", d2::process_part2(&content));
|
|
||||||
}
|
|
||||||
@@ -1,27 +0,0 @@
|
|||||||
use std::{fs, time::Instant};
|
|
||||||
|
|
||||||
use utils::time::get_elapsed_string;
|
|
||||||
use y2025::days::d3;
|
|
||||||
|
|
||||||
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/3_input.txt")).unwrap();
|
|
||||||
println!("{}", d3::process_part1(&content));
|
|
||||||
}
|
|
||||||
|
|
||||||
fn part2() {
|
|
||||||
let root = env!("CARGO_MANIFEST_DIR");
|
|
||||||
let content = fs::read_to_string(format!("{root}/resources/3_input.txt")).unwrap();
|
|
||||||
println!("{}", d3::process_part2(&content));
|
|
||||||
}
|
|
||||||
@@ -1,27 +0,0 @@
|
|||||||
use std::{fs, time::Instant};
|
|
||||||
|
|
||||||
use utils::time::get_elapsed_string;
|
|
||||||
use y2025::days::d4;
|
|
||||||
|
|
||||||
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/4_input.txt")).unwrap();
|
|
||||||
println!("{}", d4::process_part1(&content));
|
|
||||||
}
|
|
||||||
|
|
||||||
fn part2() {
|
|
||||||
let root = env!("CARGO_MANIFEST_DIR");
|
|
||||||
let content = fs::read_to_string(format!("{root}/resources/4_input.txt")).unwrap();
|
|
||||||
println!("{}", d4::process_part2(&content));
|
|
||||||
}
|
|
||||||
@@ -1,27 +0,0 @@
|
|||||||
use std::{fs, time::Instant};
|
|
||||||
|
|
||||||
use utils::time::get_elapsed_string;
|
|
||||||
use y2025::days::d5;
|
|
||||||
|
|
||||||
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/5_input.txt")).unwrap();
|
|
||||||
println!("{}", d5::process_part1(&content));
|
|
||||||
}
|
|
||||||
|
|
||||||
fn part2() {
|
|
||||||
let root = env!("CARGO_MANIFEST_DIR");
|
|
||||||
let content = fs::read_to_string(format!("{root}/resources/5_input.txt")).unwrap();
|
|
||||||
println!("{}", d5::process_part2(&content));
|
|
||||||
}
|
|
||||||
@@ -1,95 +0,0 @@
|
|||||||
pub fn process_part1(input: &str) -> i32 {
|
|
||||||
let mut current = 50;
|
|
||||||
let mut zeroes = 0;
|
|
||||||
for line in input.lines() {
|
|
||||||
let (direction, distance) = line.split_at(1);
|
|
||||||
let distance = distance.parse::<i32>().unwrap() % 100;
|
|
||||||
match direction {
|
|
||||||
"L" => current -= distance,
|
|
||||||
"R" => current += distance,
|
|
||||||
_ => panic!("Invalid direction"),
|
|
||||||
};
|
|
||||||
if current < 0 {
|
|
||||||
current += 100;
|
|
||||||
} else if current > 99 {
|
|
||||||
current -= 100;
|
|
||||||
}
|
|
||||||
if current == 0 {
|
|
||||||
zeroes += 1;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
return zeroes;
|
|
||||||
}
|
|
||||||
|
|
||||||
pub fn process_part2(input: &str) -> i32 {
|
|
||||||
let mut current = 50;
|
|
||||||
let mut zeroes = 0;
|
|
||||||
for line in input.lines() {
|
|
||||||
let is_zero = current == 0;
|
|
||||||
let (direction, distance) = line.split_at(1);
|
|
||||||
let distance = distance.parse::<i32>().unwrap();
|
|
||||||
let mut rotations = {
|
|
||||||
if direction == "L" {
|
|
||||||
if current - distance < 0 && !is_zero {
|
|
||||||
(current - distance).abs() / 100 + 1
|
|
||||||
} else if current - distance < 0 && is_zero {
|
|
||||||
(current - distance).abs() / 100
|
|
||||||
} else {
|
|
||||||
0
|
|
||||||
}
|
|
||||||
} else {
|
|
||||||
if current + distance > 99 {
|
|
||||||
(current + distance) / 100
|
|
||||||
} else {
|
|
||||||
0
|
|
||||||
}
|
|
||||||
}
|
|
||||||
};
|
|
||||||
match direction {
|
|
||||||
"L" => current -= distance % 100,
|
|
||||||
"R" => current += distance % 100,
|
|
||||||
_ => panic!("Invalid direction"),
|
|
||||||
};
|
|
||||||
if current < 0 {
|
|
||||||
current += 100;
|
|
||||||
} else if current > 99 {
|
|
||||||
current -= 100;
|
|
||||||
}
|
|
||||||
if current == 0 {
|
|
||||||
zeroes += 1;
|
|
||||||
if rotations > 0 {
|
|
||||||
rotations -= 1;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
zeroes += rotations;
|
|
||||||
}
|
|
||||||
return zeroes;
|
|
||||||
}
|
|
||||||
|
|
||||||
#[cfg(test)]
|
|
||||||
mod tests {
|
|
||||||
use super::*;
|
|
||||||
|
|
||||||
const INPUT: &str = "L68
|
|
||||||
L30
|
|
||||||
R48
|
|
||||||
L5
|
|
||||||
R60
|
|
||||||
L55
|
|
||||||
L1
|
|
||||||
L99
|
|
||||||
R14
|
|
||||||
L82";
|
|
||||||
|
|
||||||
#[test]
|
|
||||||
fn part1() {
|
|
||||||
let result = process_part1(INPUT);
|
|
||||||
assert_eq!(result, 3);
|
|
||||||
}
|
|
||||||
|
|
||||||
#[test]
|
|
||||||
fn part2() {
|
|
||||||
let result = process_part2(INPUT);
|
|
||||||
assert_eq!(result, 6);
|
|
||||||
}
|
|
||||||
}
|
|
||||||
@@ -1,91 +0,0 @@
|
|||||||
use itertools::Itertools;
|
|
||||||
|
|
||||||
pub fn process_part1(input: &str) -> i64 {
|
|
||||||
input
|
|
||||||
.split(',')
|
|
||||||
.map(|range| range.split_once('-').unwrap())
|
|
||||||
.map(|(start, end)| {
|
|
||||||
(
|
|
||||||
start
|
|
||||||
.parse::<i64>()
|
|
||||||
.expect(&format!("Cannot parse start from {start}")),
|
|
||||||
end.trim_end()
|
|
||||||
.parse::<i64>()
|
|
||||||
.expect(&format!("Cannot parse end from {end}")),
|
|
||||||
)
|
|
||||||
})
|
|
||||||
.map(|(start, end)| {
|
|
||||||
(start..=end)
|
|
||||||
.map(|id| {
|
|
||||||
let id_str = format!("{id}");
|
|
||||||
if id_str.starts_with('0') {
|
|
||||||
return 0;
|
|
||||||
}
|
|
||||||
let (left, right) = id_str.split_at(id_str.len() / 2);
|
|
||||||
if left == right {
|
|
||||||
return id;
|
|
||||||
}
|
|
||||||
0
|
|
||||||
})
|
|
||||||
.sum::<i64>()
|
|
||||||
})
|
|
||||||
.sum()
|
|
||||||
}
|
|
||||||
|
|
||||||
pub fn process_part2(input: &str) -> i64 {
|
|
||||||
input
|
|
||||||
.split(',')
|
|
||||||
.map(|range| range.split_once('-').unwrap())
|
|
||||||
.map(|(start, end)| {
|
|
||||||
(
|
|
||||||
start
|
|
||||||
.parse::<i64>()
|
|
||||||
.expect(&format!("Cannot parse start from {start}")),
|
|
||||||
end.trim_end()
|
|
||||||
.parse::<i64>()
|
|
||||||
.expect(&format!("Cannot parse end from {end}")),
|
|
||||||
)
|
|
||||||
})
|
|
||||||
.map(|(start, end)| {
|
|
||||||
(start..=end)
|
|
||||||
.map(|id| {
|
|
||||||
let id_str = format!("{id}");
|
|
||||||
if id_str.starts_with('0') {
|
|
||||||
return 0;
|
|
||||||
}
|
|
||||||
for num_parts in 2..=id_str.len() {
|
|
||||||
let parts = id_str
|
|
||||||
.chars()
|
|
||||||
.chunks(id_str.len() / num_parts)
|
|
||||||
.into_iter()
|
|
||||||
.map(|chunk| chunk.collect::<String>())
|
|
||||||
.collect::<Vec<String>>();
|
|
||||||
if parts.iter().all_equal() {
|
|
||||||
return id;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
0
|
|
||||||
})
|
|
||||||
.sum::<i64>()
|
|
||||||
})
|
|
||||||
.sum()
|
|
||||||
}
|
|
||||||
|
|
||||||
#[cfg(test)]
|
|
||||||
mod tests {
|
|
||||||
use super::*;
|
|
||||||
|
|
||||||
const INPUT: &str = "11-22,95-115,998-1012,1188511880-1188511890,222220-222224,1698522-1698528,446443-446449,38593856-38593862,565653-565659,824824821-824824827,2121212118-2121212124";
|
|
||||||
|
|
||||||
#[test]
|
|
||||||
fn part1() {
|
|
||||||
let result = process_part1(INPUT);
|
|
||||||
assert_eq!(result, 1227775554);
|
|
||||||
}
|
|
||||||
|
|
||||||
#[test]
|
|
||||||
fn part2() {
|
|
||||||
let result = process_part2(INPUT);
|
|
||||||
assert_eq!(result, 4174379265);
|
|
||||||
}
|
|
||||||
}
|
|
||||||
@@ -1,158 +0,0 @@
|
|||||||
pub fn process_part1(input: &str) -> u32 {
|
|
||||||
input
|
|
||||||
.lines()
|
|
||||||
.map(|line| {
|
|
||||||
let line_len = line.len();
|
|
||||||
let nums = line.chars().map(|char| char.to_digit(10).unwrap());
|
|
||||||
let mut highest = (0, 0);
|
|
||||||
for (idx, num) in nums.enumerate() {
|
|
||||||
if num > highest.0 && idx + 1 != line_len {
|
|
||||||
highest.0 = num;
|
|
||||||
highest.1 = 0;
|
|
||||||
} else if num > highest.1 {
|
|
||||||
highest.1 = num;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
highest.0 * 10 + highest.1
|
|
||||||
})
|
|
||||||
.sum()
|
|
||||||
}
|
|
||||||
|
|
||||||
pub fn process_part2(input: &str) -> u64 {
|
|
||||||
input
|
|
||||||
.lines()
|
|
||||||
.map(|line| {
|
|
||||||
let line_len = line.len();
|
|
||||||
let nums = line.chars().map(|char| char.to_digit(10).unwrap() as u64);
|
|
||||||
let mut highest = (0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0);
|
|
||||||
for (idx, num) in nums.enumerate() {
|
|
||||||
if num > highest.0 && idx + 1 < line_len - 10 {
|
|
||||||
highest.0 = num;
|
|
||||||
highest.1 = 0;
|
|
||||||
highest.2 = 0;
|
|
||||||
highest.3 = 0;
|
|
||||||
highest.4 = 0;
|
|
||||||
highest.5 = 0;
|
|
||||||
highest.6 = 0;
|
|
||||||
highest.7 = 0;
|
|
||||||
highest.8 = 0;
|
|
||||||
highest.9 = 0;
|
|
||||||
highest.10 = 0;
|
|
||||||
highest.11 = 0;
|
|
||||||
} else if num > highest.1 && idx + 1 < line_len - 9 {
|
|
||||||
highest.1 = num;
|
|
||||||
highest.2 = 0;
|
|
||||||
highest.3 = 0;
|
|
||||||
highest.4 = 0;
|
|
||||||
highest.5 = 0;
|
|
||||||
highest.6 = 0;
|
|
||||||
highest.7 = 0;
|
|
||||||
highest.8 = 0;
|
|
||||||
highest.9 = 0;
|
|
||||||
highest.10 = 0;
|
|
||||||
highest.11 = 0;
|
|
||||||
} else if num > highest.2 && idx + 1 < line_len - 8 {
|
|
||||||
highest.2 = num;
|
|
||||||
highest.3 = 0;
|
|
||||||
highest.4 = 0;
|
|
||||||
highest.5 = 0;
|
|
||||||
highest.6 = 0;
|
|
||||||
highest.7 = 0;
|
|
||||||
highest.8 = 0;
|
|
||||||
highest.9 = 0;
|
|
||||||
highest.10 = 0;
|
|
||||||
highest.11 = 0;
|
|
||||||
} else if num > highest.3 && idx + 1 < line_len - 7 {
|
|
||||||
highest.3 = num;
|
|
||||||
highest.4 = 0;
|
|
||||||
highest.5 = 0;
|
|
||||||
highest.6 = 0;
|
|
||||||
highest.7 = 0;
|
|
||||||
highest.8 = 0;
|
|
||||||
highest.9 = 0;
|
|
||||||
highest.10 = 0;
|
|
||||||
highest.11 = 0;
|
|
||||||
} else if num > highest.4 && idx + 1 < line_len - 6 {
|
|
||||||
highest.4 = num;
|
|
||||||
highest.5 = 0;
|
|
||||||
highest.6 = 0;
|
|
||||||
highest.7 = 0;
|
|
||||||
highest.8 = 0;
|
|
||||||
highest.9 = 0;
|
|
||||||
highest.10 = 0;
|
|
||||||
highest.11 = 0;
|
|
||||||
} else if num > highest.5 && idx + 1 < line_len - 5 {
|
|
||||||
highest.5 = num;
|
|
||||||
highest.6 = 0;
|
|
||||||
highest.7 = 0;
|
|
||||||
highest.8 = 0;
|
|
||||||
highest.9 = 0;
|
|
||||||
highest.10 = 0;
|
|
||||||
highest.11 = 0;
|
|
||||||
} else if num > highest.6 && idx + 1 < line_len - 4 {
|
|
||||||
highest.6 = num;
|
|
||||||
highest.7 = 0;
|
|
||||||
highest.8 = 0;
|
|
||||||
highest.9 = 0;
|
|
||||||
highest.10 = 0;
|
|
||||||
highest.11 = 0;
|
|
||||||
} else if num > highest.7 && idx + 1 < line_len - 3 {
|
|
||||||
highest.7 = num;
|
|
||||||
highest.8 = 0;
|
|
||||||
highest.9 = 0;
|
|
||||||
highest.10 = 0;
|
|
||||||
highest.11 = 0;
|
|
||||||
} else if num > highest.8 && idx + 1 < line_len - 2 {
|
|
||||||
highest.8 = num;
|
|
||||||
highest.9 = 0;
|
|
||||||
highest.10 = 0;
|
|
||||||
highest.11 = 0;
|
|
||||||
} else if num > highest.9 && idx + 1 < line_len - 1 {
|
|
||||||
highest.9 = num;
|
|
||||||
highest.10 = 0;
|
|
||||||
highest.11 = 0;
|
|
||||||
} else if num > highest.10 && idx + 1 < line_len {
|
|
||||||
highest.10 = num;
|
|
||||||
highest.11 = 0;
|
|
||||||
} else if num > highest.11 {
|
|
||||||
highest.11 = num;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
let res = highest.0 * 100000000000
|
|
||||||
+ highest.1 * 10000000000
|
|
||||||
+ highest.2 * 1000000000
|
|
||||||
+ highest.3 * 100000000
|
|
||||||
+ highest.4 * 10000000
|
|
||||||
+ highest.5 * 1000000
|
|
||||||
+ highest.6 * 100000
|
|
||||||
+ highest.7 * 10000
|
|
||||||
+ highest.8 * 1000
|
|
||||||
+ highest.9 * 100
|
|
||||||
+ highest.10 * 10
|
|
||||||
+ highest.11;
|
|
||||||
res
|
|
||||||
})
|
|
||||||
.sum()
|
|
||||||
}
|
|
||||||
|
|
||||||
#[cfg(test)]
|
|
||||||
mod tests {
|
|
||||||
use super::*;
|
|
||||||
|
|
||||||
const INPUT: &str = "987654321111111
|
|
||||||
811111111111119
|
|
||||||
234234234234278
|
|
||||||
818181911112111";
|
|
||||||
|
|
||||||
#[test]
|
|
||||||
fn part1() {
|
|
||||||
let result = process_part1(INPUT);
|
|
||||||
assert_eq!(result, 357);
|
|
||||||
}
|
|
||||||
|
|
||||||
#[test]
|
|
||||||
fn part2() {
|
|
||||||
let result = process_part2(INPUT);
|
|
||||||
assert_eq!(result, 3121910778619);
|
|
||||||
}
|
|
||||||
}
|
|
||||||
@@ -1,109 +0,0 @@
|
|||||||
use itertools::Itertools;
|
|
||||||
|
|
||||||
fn neighbors(grid: &Vec<Vec<char>>, position: (isize, isize)) -> i32 {
|
|
||||||
let width = grid[0].len() as isize;
|
|
||||||
let height = grid.len() as isize;
|
|
||||||
let mut num_tp = 0;
|
|
||||||
for y_offset in -1..=1 {
|
|
||||||
for x_offset in -1..=1 {
|
|
||||||
let search_position = (position.0 + x_offset, position.1 + y_offset);
|
|
||||||
if search_position == position
|
|
||||||
|| search_position.0 < 0
|
|
||||||
|| search_position.0 >= width
|
|
||||||
|| search_position.1 < 0
|
|
||||||
|| search_position.1 >= height
|
|
||||||
{
|
|
||||||
continue;
|
|
||||||
}
|
|
||||||
let cell = grid[search_position.1 as usize][search_position.0 as usize];
|
|
||||||
if cell == '@' {
|
|
||||||
num_tp += 1;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
num_tp
|
|
||||||
}
|
|
||||||
|
|
||||||
pub fn process_part1(input: &str) -> i32 {
|
|
||||||
let grid = input
|
|
||||||
.lines()
|
|
||||||
.map(|line| line.chars().collect_vec())
|
|
||||||
.collect_vec();
|
|
||||||
let width = grid[0].len() as isize;
|
|
||||||
let height = grid.len() as isize;
|
|
||||||
let mut accessible_tp = 0;
|
|
||||||
for y in 0..height {
|
|
||||||
for x in 0..width {
|
|
||||||
if grid[y as usize][x as usize] != '@' {
|
|
||||||
continue;
|
|
||||||
}
|
|
||||||
let neighbors = neighbors(&grid, (x, y));
|
|
||||||
if neighbors < 4 {
|
|
||||||
accessible_tp += 1;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
accessible_tp
|
|
||||||
}
|
|
||||||
|
|
||||||
pub fn process_part2(input: &str) -> i32 {
|
|
||||||
let mut grid = input
|
|
||||||
.lines()
|
|
||||||
.map(|line| line.chars().collect_vec())
|
|
||||||
.collect_vec();
|
|
||||||
let width = grid[0].len() as isize;
|
|
||||||
let height = grid.len() as isize;
|
|
||||||
let mut accessible_tp_total = 0;
|
|
||||||
loop {
|
|
||||||
let mut accessible_tp = 0;
|
|
||||||
let mut new_grid = grid.clone();
|
|
||||||
for y in 0..height {
|
|
||||||
for x in 0..width {
|
|
||||||
if grid[y as usize][x as usize] != '@' {
|
|
||||||
continue;
|
|
||||||
}
|
|
||||||
let neighbors = neighbors(&grid, (x, y));
|
|
||||||
if neighbors < 4 {
|
|
||||||
accessible_tp += 1;
|
|
||||||
new_grid[y as usize][x as usize] = '.';
|
|
||||||
} else {
|
|
||||||
new_grid[y as usize][x as usize] = '@';
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
if accessible_tp == 0 {
|
|
||||||
break;
|
|
||||||
}
|
|
||||||
grid = new_grid;
|
|
||||||
accessible_tp_total += accessible_tp;
|
|
||||||
}
|
|
||||||
accessible_tp_total
|
|
||||||
}
|
|
||||||
|
|
||||||
#[cfg(test)]
|
|
||||||
mod tests {
|
|
||||||
use super::*;
|
|
||||||
|
|
||||||
const INPUT: &str = "..@@.@@@@.
|
|
||||||
@@@.@.@.@@
|
|
||||||
@@@@@.@.@@
|
|
||||||
@.@@@@..@.
|
|
||||||
@@.@@@@.@@
|
|
||||||
.@@@@@@@.@
|
|
||||||
.@.@.@.@@@
|
|
||||||
@.@@@.@@@@
|
|
||||||
.@@@@@@@@.
|
|
||||||
@.@.@@@.@.";
|
|
||||||
|
|
||||||
#[test]
|
|
||||||
fn part1() {
|
|
||||||
let result = process_part1(INPUT);
|
|
||||||
assert_eq!(result, 13);
|
|
||||||
}
|
|
||||||
|
|
||||||
#[test]
|
|
||||||
fn part2() {
|
|
||||||
let result = process_part2(INPUT);
|
|
||||||
assert_eq!(result, 43);
|
|
||||||
}
|
|
||||||
}
|
|
||||||
@@ -1,89 +0,0 @@
|
|||||||
use itertools::Itertools;
|
|
||||||
|
|
||||||
fn find_in_ranges(ranges: &[(i64, i64)], value: i64) -> Option<(i64, i64)> {
|
|
||||||
ranges
|
|
||||||
.iter()
|
|
||||||
.find(|(lower, upper)| *lower <= value && value <= *upper)
|
|
||||||
.copied()
|
|
||||||
}
|
|
||||||
|
|
||||||
const DELIMITER: &str = "\n\n";
|
|
||||||
pub fn process_part1(input: &str) -> i32 {
|
|
||||||
let pos = input.find(DELIMITER).unwrap();
|
|
||||||
let (ranges, available) = input.split_at(pos);
|
|
||||||
let ranges = ranges
|
|
||||||
.lines()
|
|
||||||
.map(|line| line.split_once('-').unwrap())
|
|
||||||
.map(|(lower, upper)| (lower.parse::<i64>().unwrap(), upper.parse::<i64>().unwrap()))
|
|
||||||
.collect_vec();
|
|
||||||
let available = available
|
|
||||||
.lines()
|
|
||||||
.skip(2)
|
|
||||||
.map(|line| line.parse::<i64>().unwrap())
|
|
||||||
.collect_vec();
|
|
||||||
available
|
|
||||||
.iter()
|
|
||||||
.map(|ingredient| {
|
|
||||||
if find_in_ranges(&ranges, *ingredient).is_some() {
|
|
||||||
1
|
|
||||||
} else {
|
|
||||||
0
|
|
||||||
}
|
|
||||||
})
|
|
||||||
.sum()
|
|
||||||
}
|
|
||||||
|
|
||||||
pub fn process_part2(input: &str) -> i64 {
|
|
||||||
let pos = input.find(DELIMITER).unwrap();
|
|
||||||
let (ranges, _available) = input.split_at(pos);
|
|
||||||
let mut ranges = ranges
|
|
||||||
.lines()
|
|
||||||
.map(|line| line.split_once('-').unwrap())
|
|
||||||
.map(|(lower, upper)| (lower.parse::<i64>().unwrap(), upper.parse::<i64>().unwrap()))
|
|
||||||
.collect_vec();
|
|
||||||
ranges.sort();
|
|
||||||
let mut new_ranges: Vec<(i64, i64)> = Vec::new();
|
|
||||||
new_ranges.push(ranges[0]);
|
|
||||||
for (lower, upper) in ranges.iter() {
|
|
||||||
let last_new_idx = new_ranges.len() - 1;
|
|
||||||
let (_last_lower, last_upper) = new_ranges[last_new_idx];
|
|
||||||
if *lower <= last_upper + 1 && upper >= &last_upper {
|
|
||||||
new_ranges[last_new_idx].1 = *upper;
|
|
||||||
} else if *lower > last_upper + 1 {
|
|
||||||
new_ranges.push((*lower, *upper));
|
|
||||||
}
|
|
||||||
}
|
|
||||||
new_ranges
|
|
||||||
.iter()
|
|
||||||
.map(|(lower, upper)| upper - lower + 1)
|
|
||||||
.sum()
|
|
||||||
}
|
|
||||||
|
|
||||||
#[cfg(test)]
|
|
||||||
mod tests {
|
|
||||||
use super::*;
|
|
||||||
|
|
||||||
const INPUT: &str = "3-5
|
|
||||||
10-14
|
|
||||||
16-20
|
|
||||||
12-18
|
|
||||||
|
|
||||||
1
|
|
||||||
5
|
|
||||||
8
|
|
||||||
11
|
|
||||||
17
|
|
||||||
32";
|
|
||||||
|
|
||||||
#[test]
|
|
||||||
fn part1() {
|
|
||||||
let result = process_part1(INPUT);
|
|
||||||
assert_eq!(result, 3);
|
|
||||||
}
|
|
||||||
|
|
||||||
#[test]
|
|
||||||
fn part2() {
|
|
||||||
let result = process_part2(INPUT);
|
|
||||||
assert_eq!(result, 14);
|
|
||||||
}
|
|
||||||
}
|
|
||||||
@@ -1,9 +0,0 @@
|
|||||||
pub mod d1;
|
|
||||||
|
|
||||||
pub mod d2;
|
|
||||||
|
|
||||||
pub mod d3;
|
|
||||||
|
|
||||||
pub mod d4;
|
|
||||||
|
|
||||||
pub mod d5;
|
|
||||||
@@ -1 +0,0 @@
|
|||||||
pub mod days;
|
|
||||||
Reference in New Issue
Block a user