Compare commits
15 Commits
experiment
...
master
| Author | SHA1 | Date | |
|---|---|---|---|
| e2931282dc | |||
| d48df9336f | |||
| 9e6cefba9e | |||
| 423f683374 | |||
| acaf136814 | |||
| 006eb5f19e | |||
| ff2a2c5bb3 | |||
| 9967283916 | |||
| 040965a034 | |||
| b118845a5e | |||
| e80edae003 | |||
| 55a53e14f7 | |||
| 1b1fe127c3 | |||
| 9684b28a65 | |||
| 4a8c5580ff |
7
Cargo.lock
generated
7
Cargo.lock
generated
@@ -6,7 +6,6 @@ version = "0.1.0"
|
||||
dependencies = [
|
||||
"lazy_static",
|
||||
"regex",
|
||||
"usize_cast",
|
||||
]
|
||||
|
||||
[[package]]
|
||||
@@ -56,9 +55,3 @@ checksum = "d40c6d1b69745a6ec6fb1ca717914848da4b44ae29d9b3080cbee91d72a69b14"
|
||||
dependencies = [
|
||||
"lazy_static",
|
||||
]
|
||||
|
||||
[[package]]
|
||||
name = "usize_cast"
|
||||
version = "1.1.0"
|
||||
source = "registry+https://github.com/rust-lang/crates.io-index"
|
||||
checksum = "810f3a98a85147e3ad2a1331aa6dac66490e802d65fa0ab283c383058e3f9751"
|
||||
|
||||
@@ -8,5 +8,4 @@ edition = "2018"
|
||||
|
||||
[dependencies]
|
||||
regex = "1"
|
||||
lazy_static = "1.4.0"
|
||||
usize_cast = "1.0.0"
|
||||
lazy_static = "1.4.0"
|
||||
795
input/day12.txt
Normal file
795
input/day12.txt
Normal file
@@ -0,0 +1,795 @@
|
||||
N5
|
||||
W1
|
||||
F61
|
||||
W2
|
||||
R90
|
||||
F50
|
||||
N2
|
||||
F40
|
||||
E4
|
||||
F48
|
||||
R180
|
||||
F17
|
||||
W4
|
||||
N5
|
||||
F3
|
||||
W3
|
||||
F1
|
||||
R90
|
||||
S2
|
||||
F23
|
||||
L90
|
||||
S3
|
||||
W3
|
||||
S4
|
||||
E4
|
||||
L90
|
||||
W3
|
||||
S3
|
||||
E4
|
||||
N2
|
||||
F28
|
||||
S2
|
||||
W2
|
||||
L180
|
||||
E3
|
||||
R90
|
||||
E3
|
||||
F83
|
||||
W5
|
||||
S4
|
||||
W3
|
||||
N2
|
||||
W5
|
||||
F90
|
||||
N2
|
||||
F82
|
||||
N2
|
||||
F2
|
||||
S4
|
||||
L90
|
||||
N3
|
||||
L90
|
||||
S2
|
||||
F12
|
||||
S3
|
||||
F40
|
||||
L90
|
||||
F56
|
||||
N1
|
||||
F29
|
||||
W2
|
||||
S2
|
||||
R270
|
||||
S4
|
||||
F14
|
||||
E4
|
||||
R90
|
||||
E2
|
||||
S2
|
||||
E2
|
||||
F82
|
||||
L90
|
||||
N3
|
||||
R180
|
||||
R90
|
||||
S1
|
||||
W1
|
||||
L90
|
||||
S2
|
||||
F78
|
||||
W2
|
||||
F52
|
||||
N4
|
||||
W5
|
||||
F38
|
||||
L90
|
||||
W2
|
||||
S2
|
||||
L90
|
||||
F66
|
||||
R90
|
||||
F62
|
||||
E3
|
||||
S5
|
||||
L90
|
||||
F99
|
||||
F2
|
||||
E4
|
||||
R90
|
||||
N3
|
||||
W4
|
||||
N1
|
||||
F71
|
||||
E2
|
||||
N3
|
||||
N2
|
||||
R90
|
||||
E2
|
||||
F66
|
||||
S4
|
||||
R90
|
||||
E5
|
||||
F29
|
||||
E5
|
||||
L90
|
||||
W2
|
||||
N2
|
||||
E3
|
||||
F18
|
||||
L180
|
||||
F17
|
||||
W1
|
||||
R90
|
||||
W3
|
||||
S5
|
||||
R90
|
||||
S3
|
||||
R180
|
||||
N5
|
||||
F69
|
||||
W1
|
||||
W3
|
||||
L180
|
||||
F72
|
||||
W5
|
||||
N1
|
||||
R180
|
||||
W3
|
||||
W4
|
||||
F85
|
||||
W4
|
||||
L90
|
||||
E4
|
||||
N5
|
||||
F73
|
||||
R90
|
||||
F70
|
||||
E4
|
||||
F79
|
||||
S5
|
||||
R180
|
||||
E2
|
||||
F35
|
||||
E4
|
||||
L270
|
||||
W2
|
||||
L90
|
||||
N5
|
||||
R90
|
||||
N4
|
||||
F64
|
||||
W2
|
||||
R270
|
||||
F33
|
||||
N5
|
||||
E4
|
||||
F94
|
||||
W1
|
||||
N1
|
||||
R90
|
||||
F79
|
||||
F46
|
||||
E1
|
||||
R180
|
||||
S3
|
||||
W3
|
||||
F72
|
||||
E1
|
||||
W4
|
||||
F95
|
||||
W2
|
||||
L90
|
||||
N3
|
||||
L90
|
||||
F85
|
||||
W3
|
||||
W1
|
||||
F54
|
||||
N3
|
||||
E1
|
||||
N4
|
||||
E5
|
||||
L90
|
||||
F61
|
||||
W2
|
||||
F7
|
||||
L180
|
||||
F87
|
||||
N4
|
||||
W1
|
||||
F87
|
||||
F3
|
||||
E3
|
||||
F63
|
||||
R90
|
||||
S4
|
||||
R180
|
||||
S4
|
||||
R180
|
||||
R90
|
||||
R90
|
||||
E5
|
||||
N4
|
||||
E2
|
||||
F86
|
||||
S3
|
||||
F98
|
||||
N4
|
||||
F70
|
||||
L90
|
||||
E4
|
||||
F26
|
||||
W4
|
||||
F19
|
||||
L90
|
||||
S4
|
||||
W4
|
||||
F84
|
||||
N1
|
||||
E4
|
||||
L180
|
||||
S2
|
||||
F74
|
||||
S1
|
||||
F86
|
||||
R90
|
||||
S2
|
||||
F78
|
||||
N4
|
||||
S2
|
||||
W1
|
||||
N5
|
||||
E2
|
||||
F38
|
||||
W4
|
||||
N1
|
||||
F75
|
||||
S1
|
||||
E1
|
||||
N3
|
||||
S1
|
||||
F54
|
||||
N3
|
||||
F88
|
||||
N5
|
||||
L180
|
||||
F15
|
||||
S2
|
||||
S2
|
||||
E2
|
||||
N3
|
||||
F97
|
||||
S3
|
||||
N3
|
||||
E3
|
||||
N5
|
||||
E3
|
||||
R90
|
||||
F87
|
||||
L90
|
||||
F15
|
||||
L90
|
||||
E5
|
||||
R90
|
||||
F70
|
||||
N3
|
||||
W2
|
||||
F47
|
||||
W2
|
||||
W3
|
||||
F17
|
||||
R90
|
||||
F95
|
||||
E4
|
||||
F28
|
||||
W4
|
||||
R90
|
||||
E2
|
||||
R180
|
||||
N4
|
||||
R180
|
||||
W4
|
||||
R270
|
||||
F73
|
||||
W1
|
||||
N2
|
||||
L90
|
||||
S1
|
||||
F65
|
||||
E1
|
||||
F42
|
||||
N2
|
||||
F74
|
||||
R90
|
||||
F21
|
||||
W5
|
||||
S1
|
||||
N5
|
||||
R90
|
||||
E4
|
||||
N5
|
||||
S5
|
||||
F99
|
||||
W4
|
||||
L180
|
||||
W1
|
||||
F83
|
||||
N2
|
||||
W2
|
||||
F87
|
||||
E2
|
||||
S3
|
||||
W1
|
||||
L180
|
||||
F89
|
||||
S1
|
||||
W2
|
||||
E2
|
||||
L90
|
||||
S2
|
||||
W1
|
||||
S5
|
||||
R180
|
||||
E5
|
||||
N1
|
||||
F82
|
||||
S3
|
||||
F7
|
||||
L90
|
||||
F31
|
||||
L90
|
||||
N3
|
||||
F84
|
||||
W3
|
||||
N4
|
||||
F100
|
||||
N1
|
||||
E2
|
||||
R90
|
||||
F90
|
||||
N3
|
||||
F43
|
||||
R90
|
||||
F2
|
||||
W4
|
||||
L90
|
||||
F87
|
||||
L90
|
||||
E3
|
||||
F71
|
||||
L180
|
||||
N1
|
||||
L90
|
||||
E4
|
||||
N3
|
||||
F31
|
||||
W1
|
||||
F80
|
||||
R270
|
||||
N1
|
||||
E4
|
||||
N1
|
||||
F22
|
||||
N4
|
||||
E1
|
||||
F57
|
||||
R90
|
||||
N3
|
||||
W2
|
||||
L180
|
||||
N3
|
||||
L180
|
||||
W4
|
||||
F59
|
||||
S4
|
||||
F10
|
||||
N5
|
||||
L90
|
||||
S3
|
||||
L90
|
||||
E1
|
||||
F96
|
||||
E4
|
||||
N3
|
||||
F54
|
||||
L180
|
||||
F47
|
||||
W1
|
||||
N4
|
||||
E1
|
||||
S4
|
||||
R180
|
||||
L90
|
||||
N1
|
||||
R90
|
||||
N3
|
||||
R90
|
||||
N4
|
||||
R90
|
||||
S3
|
||||
F59
|
||||
N5
|
||||
L90
|
||||
E4
|
||||
F72
|
||||
W4
|
||||
F76
|
||||
R90
|
||||
E3
|
||||
F70
|
||||
L180
|
||||
N3
|
||||
W2
|
||||
R90
|
||||
F65
|
||||
L90
|
||||
F71
|
||||
S3
|
||||
F43
|
||||
R90
|
||||
W2
|
||||
N2
|
||||
R90
|
||||
W1
|
||||
R90
|
||||
S4
|
||||
R180
|
||||
S1
|
||||
E3
|
||||
F72
|
||||
L90
|
||||
F61
|
||||
L90
|
||||
F75
|
||||
S1
|
||||
S5
|
||||
F15
|
||||
R90
|
||||
E3
|
||||
N2
|
||||
L270
|
||||
F48
|
||||
N1
|
||||
R180
|
||||
W2
|
||||
F69
|
||||
E4
|
||||
R90
|
||||
R90
|
||||
W1
|
||||
S5
|
||||
W5
|
||||
R90
|
||||
S4
|
||||
S3
|
||||
F51
|
||||
F43
|
||||
E2
|
||||
N5
|
||||
L180
|
||||
F89
|
||||
W1
|
||||
R90
|
||||
F59
|
||||
R90
|
||||
E2
|
||||
F51
|
||||
R90
|
||||
F91
|
||||
W4
|
||||
S5
|
||||
E4
|
||||
L90
|
||||
S5
|
||||
R90
|
||||
F44
|
||||
F47
|
||||
E4
|
||||
W1
|
||||
F77
|
||||
S5
|
||||
R90
|
||||
N2
|
||||
F87
|
||||
N4
|
||||
R90
|
||||
W5
|
||||
R90
|
||||
W5
|
||||
F89
|
||||
L90
|
||||
F61
|
||||
E2
|
||||
F29
|
||||
N4
|
||||
R90
|
||||
F31
|
||||
S1
|
||||
L90
|
||||
E5
|
||||
N2
|
||||
F7
|
||||
L180
|
||||
S4
|
||||
F63
|
||||
W4
|
||||
N5
|
||||
S2
|
||||
N1
|
||||
E5
|
||||
F87
|
||||
S5
|
||||
R180
|
||||
F14
|
||||
W4
|
||||
R180
|
||||
E1
|
||||
L90
|
||||
F67
|
||||
E2
|
||||
L90
|
||||
E5
|
||||
S2
|
||||
L90
|
||||
W2
|
||||
R90
|
||||
F94
|
||||
W4
|
||||
R90
|
||||
W3
|
||||
S3
|
||||
R90
|
||||
N5
|
||||
F55
|
||||
L90
|
||||
F43
|
||||
L90
|
||||
N5
|
||||
F16
|
||||
E4
|
||||
N2
|
||||
L270
|
||||
W3
|
||||
E1
|
||||
N2
|
||||
R180
|
||||
F51
|
||||
N5
|
||||
N1
|
||||
F36
|
||||
W4
|
||||
F38
|
||||
N5
|
||||
W1
|
||||
F29
|
||||
R180
|
||||
L90
|
||||
N1
|
||||
W3
|
||||
E1
|
||||
F78
|
||||
E1
|
||||
N1
|
||||
E2
|
||||
F57
|
||||
E4
|
||||
F83
|
||||
W5
|
||||
F32
|
||||
N3
|
||||
W4
|
||||
F36
|
||||
N2
|
||||
E3
|
||||
F74
|
||||
N4
|
||||
F54
|
||||
W5
|
||||
L90
|
||||
S1
|
||||
F42
|
||||
W4
|
||||
S5
|
||||
E3
|
||||
F64
|
||||
W2
|
||||
R180
|
||||
S2
|
||||
E1
|
||||
N2
|
||||
R90
|
||||
W3
|
||||
F36
|
||||
N3
|
||||
R90
|
||||
S2
|
||||
F53
|
||||
W2
|
||||
F85
|
||||
E5
|
||||
N2
|
||||
F9
|
||||
E1
|
||||
F83
|
||||
L90
|
||||
E5
|
||||
F44
|
||||
L90
|
||||
F92
|
||||
W5
|
||||
R270
|
||||
E4
|
||||
S1
|
||||
F6
|
||||
L90
|
||||
F96
|
||||
R90
|
||||
N1
|
||||
E4
|
||||
N1
|
||||
W3
|
||||
S2
|
||||
S4
|
||||
F39
|
||||
E1
|
||||
S1
|
||||
F82
|
||||
S3
|
||||
F78
|
||||
L90
|
||||
N4
|
||||
E1
|
||||
N2
|
||||
R90
|
||||
F63
|
||||
S3
|
||||
L180
|
||||
F52
|
||||
W2
|
||||
F49
|
||||
W2
|
||||
L270
|
||||
N1
|
||||
R180
|
||||
E3
|
||||
F79
|
||||
F73
|
||||
N1
|
||||
R90
|
||||
N3
|
||||
R180
|
||||
S2
|
||||
F35
|
||||
S1
|
||||
F43
|
||||
S1
|
||||
R90
|
||||
S4
|
||||
W4
|
||||
F12
|
||||
S1
|
||||
F2
|
||||
N3
|
||||
E4
|
||||
L90
|
||||
F51
|
||||
R90
|
||||
N4
|
||||
F90
|
||||
R90
|
||||
F99
|
||||
E3
|
||||
N1
|
||||
R90
|
||||
S3
|
||||
L270
|
||||
W5
|
||||
L90
|
||||
R270
|
||||
F50
|
||||
N5
|
||||
F33
|
||||
S3
|
||||
F18
|
||||
L90
|
||||
E4
|
||||
L180
|
||||
W4
|
||||
R90
|
||||
F21
|
||||
W4
|
||||
F24
|
||||
W2
|
||||
E5
|
||||
N3
|
||||
W1
|
||||
R90
|
||||
W3
|
||||
S3
|
||||
F82
|
||||
W1
|
||||
S1
|
||||
F12
|
||||
N3
|
||||
L90
|
||||
F37
|
||||
R180
|
||||
F36
|
||||
F27
|
||||
E3
|
||||
S3
|
||||
F36
|
||||
W4
|
||||
S1
|
||||
F6
|
||||
R90
|
||||
F59
|
||||
S1
|
||||
E1
|
||||
R180
|
||||
S2
|
||||
W3
|
||||
L90
|
||||
F45
|
||||
R90
|
||||
E1
|
||||
F29
|
||||
S5
|
||||
W3
|
||||
S5
|
||||
W4
|
||||
L270
|
||||
S2
|
||||
F13
|
||||
E4
|
||||
F28
|
||||
R90
|
||||
F80
|
||||
S4
|
||||
E1
|
||||
S2
|
||||
F62
|
||||
R90
|
||||
F26
|
||||
L180
|
||||
F19
|
||||
W2
|
||||
L180
|
||||
W5
|
||||
F15
|
||||
N1
|
||||
F68
|
||||
E4
|
||||
F75
|
||||
S2
|
||||
F58
|
||||
S4
|
||||
R180
|
||||
E3
|
||||
N1
|
||||
L90
|
||||
S2
|
||||
F12
|
||||
R90
|
||||
E5
|
||||
S5
|
||||
W4
|
||||
N5
|
||||
W1
|
||||
R180
|
||||
S1
|
||||
F70
|
||||
R90
|
||||
F97
|
||||
L90
|
||||
E3
|
||||
S3
|
||||
L270
|
||||
E1
|
||||
F51
|
||||
N4
|
||||
L180
|
||||
N1
|
||||
R90
|
||||
F42
|
||||
5
input/day12_example.txt
Normal file
5
input/day12_example.txt
Normal file
@@ -0,0 +1,5 @@
|
||||
F10
|
||||
N3
|
||||
F7
|
||||
R90
|
||||
F11
|
||||
2
input/day13.txt
Normal file
2
input/day13.txt
Normal file
@@ -0,0 +1,2 @@
|
||||
1006605
|
||||
19,x,x,x,x,x,x,x,x,x,x,x,x,37,x,x,x,x,x,883,x,x,x,x,x,x,x,23,x,x,x,x,13,x,x,x,17,x,x,x,x,x,x,x,x,x,x,x,x,x,797,x,x,x,x,x,x,x,x,x,41,x,x,x,x,x,x,x,x,x,x,x,x,x,x,x,x,x,x,29
|
||||
7
input/day13_example.txt
Normal file
7
input/day13_example.txt
Normal file
@@ -0,0 +1,7 @@
|
||||
939
|
||||
3,7919
|
||||
7,31
|
||||
67,7,x,59,61
|
||||
1789,37,47,1889
|
||||
7,13,x,x,59,x,31,19
|
||||
67,x,7,59,61
|
||||
567
input/day14.txt
Normal file
567
input/day14.txt
Normal file
@@ -0,0 +1,567 @@
|
||||
mask = X111000X0101100001000000100011X0000X
|
||||
mem[4812] = 133322396
|
||||
mem[39136] = 1924962
|
||||
mem[35697] = 29912136
|
||||
mem[41065] = 2558851
|
||||
mask = 11001101X110000X010X01101100X1X0X001
|
||||
mem[38134] = 481
|
||||
mem[53084] = 5470
|
||||
mem[37619] = 2696
|
||||
mem[12248] = 262787806
|
||||
mask = 011011000111X1000100010X00XXX0X010X0
|
||||
mem[47555] = 417868017
|
||||
mem[43020] = 11374336
|
||||
mem[9849] = 677
|
||||
mem[10472] = 2780071
|
||||
mem[6278] = 44095
|
||||
mem[61339] = 4820103
|
||||
mask = 0001X1X0111101X0000000101110101XX010
|
||||
mem[54969] = 910
|
||||
mem[39162] = 100172
|
||||
mem[17392] = 11619
|
||||
mask = 110111X10111010X00000X1X10011X00X001
|
||||
mem[45516] = 1541
|
||||
mem[4373] = 50557596
|
||||
mem[59075] = 12671
|
||||
mask = 110111XX0X100100000011011001XX0XX100
|
||||
mem[62464] = 171815
|
||||
mem[46196] = 148784
|
||||
mem[20537] = 616
|
||||
mem[21990] = 737337799
|
||||
mem[5155] = 1869813
|
||||
mem[55244] = 25386
|
||||
mask = 1X011XXX0X110X000000111111X0010X1100
|
||||
mem[14027] = 131770871
|
||||
mem[35273] = 329
|
||||
mem[27168] = 13145
|
||||
mem[15552] = 20442
|
||||
mask = 000011110X1X1110100011XX010X0X0X00XX
|
||||
mem[45041] = 535
|
||||
mem[41349] = 2943
|
||||
mem[32249] = 13150
|
||||
mem[42109] = 12648516
|
||||
mem[38042] = 469004
|
||||
mem[31535] = 3710
|
||||
mem[36786] = 4985
|
||||
mask = 01XX01X10111X0X1XX0X011111101110X000
|
||||
mem[21541] = 149981598
|
||||
mem[55577] = 358503898
|
||||
mask = 010XXXX10X100000010010010001011XX1XX
|
||||
mem[61804] = 6027
|
||||
mem[31021] = 7248
|
||||
mem[13164] = 3531
|
||||
mem[44086] = 3037407
|
||||
mem[36788] = 692
|
||||
mask = 000X1111011XX0100000X1011101X110XX00
|
||||
mem[54870] = 3410195
|
||||
mem[56040] = 124015462
|
||||
mem[44086] = 7010
|
||||
mem[12761] = 1494532
|
||||
mem[19537] = 46357
|
||||
mask = 1100110X01101100X0001100111X000110X0
|
||||
mem[22275] = 64052559
|
||||
mem[44465] = 140458063
|
||||
mem[40841] = 137069
|
||||
mem[3249] = 32613
|
||||
mask = 01011X010010011X01011001000000X01X00
|
||||
mem[39991] = 823052
|
||||
mem[9454] = 18550503
|
||||
mem[46196] = 49070
|
||||
mask = 00001X110011X1110XX0X011XX0X00100111
|
||||
mem[24003] = 69183
|
||||
mem[51214] = 1231
|
||||
mem[11159] = 190497327
|
||||
mem[60674] = 2663233
|
||||
mem[45359] = 221181147
|
||||
mem[24393] = 6821
|
||||
mask = 0X00XXX1011100XX0100X11110X001110001
|
||||
mem[2424] = 16287
|
||||
mem[62077] = 204882244
|
||||
mem[51144] = 1552
|
||||
mask = 0X011X11001101X00000000X10010101X000
|
||||
mem[52533] = 814
|
||||
mem[62367] = 2681
|
||||
mem[15329] = 2524
|
||||
mem[5958] = 33152916
|
||||
mem[5169] = 14940999
|
||||
mem[7316] = 16737491
|
||||
mem[46594] = 82304549
|
||||
mask = X0011111X11X0010X0X000000X0X01000000
|
||||
mem[33860] = 9277
|
||||
mem[40193] = 5247776
|
||||
mem[21536] = 5090
|
||||
mem[55159] = 525789978
|
||||
mem[7272] = 1947
|
||||
mem[43269] = 1262
|
||||
mem[60321] = 366
|
||||
mask = 0001111100111X10000X0X0001XX0110X001
|
||||
mem[39371] = 20355
|
||||
mem[20076] = 130194
|
||||
mem[62464] = 165608
|
||||
mem[5363] = 12798999
|
||||
mem[23392] = 172431
|
||||
mem[26007] = 1025238334
|
||||
mem[31848] = 2690303
|
||||
mask = 01000001XX1X0000010010X0001X1111X001
|
||||
mem[47846] = 67159609
|
||||
mem[20937] = 4060
|
||||
mem[25317] = 2498
|
||||
mem[3297] = 10289
|
||||
mem[24930] = 32257217
|
||||
mem[18446] = 224279204
|
||||
mask = 1X01111100X1010X00X0001100011001010X
|
||||
mem[13122] = 14370686
|
||||
mem[4812] = 1894
|
||||
mem[6609] = 52772339
|
||||
mem[14721] = 1976711
|
||||
mask = 01X1X111X011X000X000000X00X10100X000
|
||||
mem[40113] = 2623234
|
||||
mem[323] = 652
|
||||
mem[1945] = 7426
|
||||
mem[57708] = 9306
|
||||
mask = 11011X101X100100000001110100X111000X
|
||||
mem[33159] = 2659
|
||||
mem[22884] = 64195
|
||||
mem[834] = 833
|
||||
mem[45165] = 9968
|
||||
mem[28935] = 4681138
|
||||
mem[44677] = 505010306
|
||||
mask = 1101110X0X11010000001X010X001X000X00
|
||||
mem[16970] = 183048247
|
||||
mem[42799] = 257494062
|
||||
mem[13112] = 533254525
|
||||
mem[62010] = 512202
|
||||
mem[20033] = 426
|
||||
mem[43020] = 400947
|
||||
mem[48764] = 118538673
|
||||
mask = 0001X1X10011111000X1000X101XX010X0X0
|
||||
mem[27241] = 68762
|
||||
mem[32235] = 3226
|
||||
mem[20033] = 371335116
|
||||
mask = 0100110101110000X1X1XX11X011X01X1100
|
||||
mem[54774] = 1707102
|
||||
mem[53424] = 1648856
|
||||
mem[15029] = 167830926
|
||||
mask = 11X11101X01000000100010XX00101100100
|
||||
mem[56937] = 2076568
|
||||
mem[44446] = 3568
|
||||
mask = 0X01011XX11XX1X000001X11000100010010
|
||||
mem[26707] = 257188
|
||||
mem[20837] = 1147
|
||||
mem[35774] = 8287058
|
||||
mem[59176] = 31911785
|
||||
mem[50627] = 323142
|
||||
mem[51555] = 112545
|
||||
mem[13400] = 2049087
|
||||
mask = 010101010111000001X0X010X01101X10100
|
||||
mem[2294] = 1466
|
||||
mem[31885] = 1602
|
||||
mem[59859] = 61908
|
||||
mask = X0001001011100X10X0011X1X0X0X11110X1
|
||||
mem[27773] = 7111614
|
||||
mem[39484] = 7001259
|
||||
mem[31946] = 84116977
|
||||
mem[39162] = 96247952
|
||||
mem[51914] = 12595221
|
||||
mem[49298] = 71588604
|
||||
mask = X0X0X100101101XX0000001X100000000001
|
||||
mem[48415] = 80182
|
||||
mem[59003] = 7049
|
||||
mem[6017] = 2787426
|
||||
mask = 0X0X1X1101100010000X10000110111X0000
|
||||
mem[24393] = 4269
|
||||
mem[23336] = 64391144
|
||||
mem[46643] = 130406
|
||||
mem[59662] = 113947
|
||||
mask = 01X0XX0X01110X00010X0100001X01X0X001
|
||||
mem[25720] = 322160
|
||||
mem[57525] = 111148340
|
||||
mem[43480] = 1919
|
||||
mask = 010XX111001100X0000X0001000101X00X11
|
||||
mem[33465] = 911366523
|
||||
mem[13169] = 81794
|
||||
mem[57515] = 1697
|
||||
mem[4419] = 29555
|
||||
mem[4240] = 416685
|
||||
mem[26177] = 28183
|
||||
mask = X001X11X111100100XX010000X0101X00000
|
||||
mem[65077] = 6440266
|
||||
mem[33028] = 10910
|
||||
mask = 100110111110001X100000011X00X110X000
|
||||
mem[8931] = 10038533
|
||||
mem[53984] = 2831
|
||||
mem[17466] = 14082894
|
||||
mem[38326] = 49428809
|
||||
mem[4156] = 9647963
|
||||
mask = 01001001011XX0X101X0111111001XX01X10
|
||||
mem[28561] = 7722001
|
||||
mem[53427] = 179659
|
||||
mem[37705] = 1016
|
||||
mem[32033] = 1659677
|
||||
mem[42597] = 97610103
|
||||
mem[40939] = 126093
|
||||
mask = X001111X00X110100000001X010101110000
|
||||
mem[39162] = 1420260
|
||||
mem[49152] = 2802
|
||||
mem[54774] = 2549
|
||||
mem[6401] = 1061
|
||||
mem[25048] = 791
|
||||
mem[21448] = 56382
|
||||
mask = 0X011X1X1110X01XX010000101010XXX0000
|
||||
mem[12854] = 4443
|
||||
mem[16736] = 3097
|
||||
mem[15329] = 2868
|
||||
mask = X1011X0100100XX001X1X001X10XX1101110
|
||||
mem[22173] = 146697
|
||||
mem[11532] = 4316
|
||||
mem[41112] = 143103
|
||||
mem[35929] = 36019
|
||||
mem[14185] = 18987
|
||||
mask = 010011X1011X00000X0X1110000X0X1X100X
|
||||
mem[51323] = 196738
|
||||
mem[20861] = 775
|
||||
mem[49853] = 5614963
|
||||
mem[4852] = 4092504
|
||||
mem[34732] = 10160
|
||||
mem[63865] = 552463
|
||||
mem[53015] = 35092
|
||||
mask = 110111X00011X1X00X1000X110010000X000
|
||||
mem[59891] = 1040
|
||||
mem[14027] = 831
|
||||
mem[14721] = 431731202
|
||||
mem[43480] = 136732740
|
||||
mem[62010] = 53198026
|
||||
mem[52533] = 65
|
||||
mask = X1011110001X01XX00X000X0X0011X0X0000
|
||||
mem[63869] = 7097798
|
||||
mem[65485] = 43091
|
||||
mem[12625] = 258935
|
||||
mask = 1001111111100101000X00111XX100110X11
|
||||
mem[29081] = 743
|
||||
mem[11697] = 449089661
|
||||
mem[27440] = 361017403
|
||||
mask = 1X01111111X1001010X00X000X1X11100000
|
||||
mem[61025] = 167531331
|
||||
mem[42074] = 92704
|
||||
mem[18402] = 472
|
||||
mem[40360] = 280090
|
||||
mem[5198] = 87354676
|
||||
mem[9957] = 234433
|
||||
mask = 0X001001011XX01101101111111X110010X1
|
||||
mem[50537] = 346959
|
||||
mem[21274] = 2621975
|
||||
mem[4434] = 22182688
|
||||
mem[14816] = 111642816
|
||||
mem[45030] = 1047
|
||||
mask = X10111010X100000010XX001110X0X0X11X0
|
||||
mem[54995] = 10747901
|
||||
mem[56949] = 580474160
|
||||
mem[13122] = 1836825
|
||||
mem[53718] = 320640
|
||||
mem[46066] = 20031967
|
||||
mem[9592] = 496370249
|
||||
mask = 011X000101X1X000010XX00XX0X001110X00
|
||||
mem[63634] = 58
|
||||
mem[6549] = 125465708
|
||||
mem[65227] = 106568
|
||||
mem[7157] = 119628
|
||||
mem[53879] = 3596
|
||||
mem[24737] = 2988756
|
||||
mem[28613] = 30239165
|
||||
mask = 0000X1X10011011100001111110X000011X1
|
||||
mem[20783] = 23844666
|
||||
mem[60525] = 119787833
|
||||
mem[25174] = 31103270
|
||||
mask = 1101110X011X000X000011111111110X1101
|
||||
mem[45272] = 46518537
|
||||
mem[3148] = 1496883
|
||||
mem[42109] = 267291213
|
||||
mem[45414] = 29326966
|
||||
mask = 0X0010010111X011010011X0X11001101101
|
||||
mem[55042] = 14456992
|
||||
mem[30328] = 1191922
|
||||
mem[51217] = 39478
|
||||
mem[1322] = 2415193
|
||||
mem[24047] = 687485
|
||||
mask = X1011001XX1X00000X1110011100X110101X
|
||||
mem[42521] = 44802983
|
||||
mem[45188] = 10474
|
||||
mem[14816] = 1004064
|
||||
mask = X00111XX1110010X000001X11XX000010XX1
|
||||
mem[64649] = 1321
|
||||
mem[27940] = 9780
|
||||
mem[10759] = 1316
|
||||
mem[42260] = 637
|
||||
mask = 000001XXX110X000011X00X0X11111X1011X
|
||||
mem[8130] = 586439
|
||||
mem[20778] = 6114
|
||||
mem[41065] = 69134521
|
||||
mem[57668] = 25104
|
||||
mask = 0001111000XX010000000001X0X110000001
|
||||
mem[10566] = 242598767
|
||||
mem[10513] = 341510032
|
||||
mem[4240] = 11342
|
||||
mem[39251] = 1852
|
||||
mem[52533] = 505
|
||||
mem[62768] = 1846627
|
||||
mem[41273] = 78405
|
||||
mask = 110111X000X101000X00X001111X11000001
|
||||
mem[33847] = 843
|
||||
mem[61025] = 231
|
||||
mem[32862] = 3139142
|
||||
mem[39477] = 104793
|
||||
mem[48709] = 22758
|
||||
mem[34944] = 81906
|
||||
mem[60884] = 922756598
|
||||
mask = 01XX10X1X0X00110011100X1001000X01110
|
||||
mem[34411] = 14772
|
||||
mem[9081] = 3144
|
||||
mem[61341] = 5637589
|
||||
mem[50639] = 938779
|
||||
mem[50087] = 920425693
|
||||
mask = 00001X1100111X1XX0000011X00000000101
|
||||
mem[20861] = 406200
|
||||
mem[59075] = 9157990
|
||||
mem[21990] = 505513
|
||||
mem[9592] = 413
|
||||
mem[17466] = 858
|
||||
mem[8519] = 949888
|
||||
mask = 0110X1X00111X1000X0010100010110XX100
|
||||
mem[49665] = 865148
|
||||
mem[4812] = 68414685
|
||||
mem[34425] = 226483883
|
||||
mem[63865] = 2137555
|
||||
mask = 000111100110010000XXX11110110100X001
|
||||
mem[8335] = 716
|
||||
mem[46594] = 986
|
||||
mem[50399] = 186
|
||||
mem[10648] = 865
|
||||
mem[22244] = 24152
|
||||
mem[34859] = 58911
|
||||
mask = 11011X00001X0100001001111X10X0010101
|
||||
mem[57303] = 25331540
|
||||
mem[51255] = 24
|
||||
mem[47101] = 73094
|
||||
mem[33918] = 1216
|
||||
mem[29564] = 1997625
|
||||
mask = 0001111X1X1X0X1000X00XXX0101X0100000
|
||||
mem[41256] = 6851204
|
||||
mem[64098] = 3891136
|
||||
mem[4192] = 1119
|
||||
mem[63634] = 412948
|
||||
mem[7034] = 184980285
|
||||
mask = 0X11X00101111000X10001100100011X1011
|
||||
mem[52085] = 320289
|
||||
mem[61015] = 172827015
|
||||
mem[58495] = 1213483
|
||||
mem[31021] = 8612509
|
||||
mem[33625] = 36389
|
||||
mem[24830] = 609539269
|
||||
mask = 1001111X0001010XXX0000X01X0011X10000
|
||||
mem[4652] = 50833
|
||||
mem[14676] = 853672
|
||||
mask = 110011XX0110XX000X001100XX001X010X00
|
||||
mem[2230] = 13635
|
||||
mem[26596] = 1541
|
||||
mem[48691] = 3294711
|
||||
mem[54923] = 402638
|
||||
mem[16937] = 5998214
|
||||
mem[45115] = 914360
|
||||
mask = 0X1011000111XX00010011011X00010X0X01
|
||||
mem[45320] = 48783
|
||||
mem[26007] = 8905339
|
||||
mem[17200] = 675445941
|
||||
mem[16192] = 2472925
|
||||
mem[32043] = 18546
|
||||
mask = 0X0X010XX110X0X001X0X010110111000110
|
||||
mem[13424] = 2992684
|
||||
mem[36655] = 2952618
|
||||
mem[15191] = 15889
|
||||
mem[46410] = 4107
|
||||
mem[10930] = 254266
|
||||
mem[17174] = 25
|
||||
mask = 01X1010101X000XX010X1X01001101X10000
|
||||
mem[46463] = 136939958
|
||||
mem[12384] = 35808
|
||||
mem[25429] = 58008820
|
||||
mem[45359] = 87512582
|
||||
mask = 010X1X100011X1X10X0000000001000X0XX1
|
||||
mem[46605] = 1230722
|
||||
mem[25174] = 437033994
|
||||
mem[12673] = 730
|
||||
mem[19856] = 1681
|
||||
mask = 000X11X0X0110100000000011X11100X0XX1
|
||||
mem[11408] = 935967
|
||||
mem[20861] = 1048829
|
||||
mem[24219] = 67911289
|
||||
mask = X1X1110X00X1X0000000111110100XX10000
|
||||
mem[40028] = 1018
|
||||
mem[59183] = 14694
|
||||
mem[2921] = 862972454
|
||||
mem[13885] = 4679694
|
||||
mem[43628] = 19289
|
||||
mask = 000X111X0011X11000010X01X00000101XX1
|
||||
mem[12269] = 3866
|
||||
mem[17658] = 614591
|
||||
mem[9957] = 408492346
|
||||
mem[11396] = 4758
|
||||
mem[12897] = 14036510
|
||||
mask = 01011X100X11010000000X01000111000X01
|
||||
mem[19856] = 191255190
|
||||
mem[12106] = 3753509
|
||||
mem[6353] = 57008
|
||||
mem[39019] = 12566363
|
||||
mem[48517] = 12346
|
||||
mem[8240] = 83254479
|
||||
mem[50020] = 11399
|
||||
mask = 00011111001X100X0000110000X1X1101X01
|
||||
mem[52533] = 2830
|
||||
mem[1266] = 7910
|
||||
mem[61174] = 2820
|
||||
mem[20861] = 95813054
|
||||
mem[56965] = 862485
|
||||
mem[62822] = 41372
|
||||
mem[47420] = 11474585
|
||||
mask = 0101111110X001000XXXX0101X1X01000100
|
||||
mem[10414] = 48452289
|
||||
mem[7061] = 23575482
|
||||
mem[8503] = 63531
|
||||
mem[42733] = 4606968
|
||||
mask = 11XX11100010010X000000110000X000XX01
|
||||
mem[25088] = 120084812
|
||||
mem[3201] = 6845180
|
||||
mem[9592] = 1020
|
||||
mem[4433] = 22837
|
||||
mask = XX01111XXX1X01000000001110010X010X01
|
||||
mem[4240] = 23113
|
||||
mem[12224] = 858638082
|
||||
mem[17504] = 317
|
||||
mask = 0000111100111110X00XX101XX0XX1X110X1
|
||||
mem[745] = 904
|
||||
mem[53504] = 162
|
||||
mem[31021] = 45256
|
||||
mask = XXX11100001X01000010X1X1X0X1111110X1
|
||||
mem[46463] = 38058788
|
||||
mem[31885] = 2525105
|
||||
mem[62077] = 13891952
|
||||
mem[56140] = 1865
|
||||
mem[4652] = 800219
|
||||
mem[43269] = 240797
|
||||
mem[35058] = 29633574
|
||||
mask = 01010101011X000001XX00X01X010001XX1X
|
||||
mem[32862] = 187905
|
||||
mem[15688] = 239625041
|
||||
mem[3826] = 7177029
|
||||
mem[45414] = 1397
|
||||
mem[3363] = 1396790
|
||||
mem[21976] = 10750
|
||||
mask = 00X0111100X1X110X00X0100X00XX0111X11
|
||||
mem[6233] = 565
|
||||
mem[51991] = 1735
|
||||
mem[28206] = 1317648
|
||||
mem[25174] = 880610
|
||||
mask = 110111110X1X0000000010000110010XXX11
|
||||
mem[32463] = 8176
|
||||
mem[8050] = 6174
|
||||
mem[55638] = 3675533
|
||||
mem[46594] = 178473
|
||||
mask = X00X1X111110001010X000011000001XXX00
|
||||
mem[27567] = 1662437
|
||||
mem[10759] = 6467
|
||||
mem[8908] = 1030
|
||||
mem[6248] = 2655
|
||||
mask = 0100100001110000010110XX00001XX0010X
|
||||
mem[2639] = 8577236
|
||||
mem[34870] = 65836
|
||||
mem[4053] = 222391
|
||||
mem[57945] = 855831793
|
||||
mask = 1X011101011X00X0010X0XX1001101111100
|
||||
mem[55806] = 1749
|
||||
mem[14816] = 56071
|
||||
mem[64085] = 451286812
|
||||
mem[36655] = 539840
|
||||
mask = 0X0X11110X11XXX000000XX1000001000X00
|
||||
mem[28935] = 1035091
|
||||
mem[28017] = 7410228
|
||||
mem[17504] = 6484
|
||||
mem[63869] = 56633
|
||||
mask = X10X010X0010X00000010011011101001X10
|
||||
mem[20976] = 391341
|
||||
mem[13770] = 245061
|
||||
mask = X10X110X011000000XXX0101111011001001
|
||||
mem[55892] = 6223387
|
||||
mem[13408] = 26636189
|
||||
mem[18959] = 15512439
|
||||
mem[13486] = 547061
|
||||
mem[51417] = 1732
|
||||
mem[47710] = 191002
|
||||
mask = 0100111XX110X000X00XX011X0X000101100
|
||||
mem[59547] = 6680490
|
||||
mem[53421] = 32962554
|
||||
mem[4053] = 54327681
|
||||
mask = X100X10101100000000XX1X00000X11010X0
|
||||
mem[43106] = 972
|
||||
mem[16979] = 1712450
|
||||
mem[21809] = 60684
|
||||
mem[7034] = 32377
|
||||
mem[62077] = 1144693
|
||||
mask = 110001X1X11000X0X0X0100010000110XX00
|
||||
mem[45989] = 43960
|
||||
mem[26220] = 2635467
|
||||
mem[16394] = 88577466
|
||||
mask = 000XX1XX01X0010000000X0010100100XX00
|
||||
mem[29081] = 10123
|
||||
mem[24649] = 319
|
||||
mem[13486] = 1774
|
||||
mem[46037] = 182
|
||||
mem[17651] = 48948
|
||||
mask = 00X111110011110000000X00010X0X000000
|
||||
mem[12407] = 3445366
|
||||
mem[26177] = 40338
|
||||
mem[13408] = 867129107
|
||||
mask = 01001X01011000X00X00010100101XX1X010
|
||||
mem[36968] = 115095
|
||||
mem[5759] = 178851
|
||||
mem[27773] = 191592
|
||||
mem[35287] = 2056
|
||||
mem[26888] = 386883
|
||||
mem[20525] = 34626
|
||||
mask = 00X1X1100110X100X00001101000010000X0
|
||||
mem[27168] = 686235562
|
||||
mem[25070] = 380483
|
||||
mem[18945] = 1696
|
||||
mem[4979] = 15419
|
||||
mask = 00XX111100X0010000X0X01X1011X0X1000X
|
||||
mem[15024] = 101402
|
||||
mem[6571] = 734201087
|
||||
mask = 010XX101001000000X01001101XX00001110
|
||||
mem[8062] = 974626
|
||||
mem[3308] = 45423
|
||||
mem[12897] = 147472
|
||||
mem[54774] = 247807
|
||||
mem[51694] = 1156
|
||||
mem[8908] = 615
|
||||
mask = 01X011000111110XX1X0011001X101X01001
|
||||
mem[1998] = 8383268
|
||||
mem[9454] = 105136
|
||||
mem[39479] = 6515
|
||||
mem[1360] = 239170
|
||||
mem[62970] = 13188849
|
||||
mask = X001X1110X100100000000111X0100X100XX
|
||||
mem[23516] = 899356468
|
||||
mem[58739] = 449
|
||||
mem[7316] = 4769
|
||||
mem[9857] = 373639523
|
||||
mem[48106] = 1417
|
||||
mask = 1100110101X00000XX011000010111111X01
|
||||
mem[8712] = 500891722
|
||||
mem[16579] = 431756695
|
||||
mem[34425] = 3712
|
||||
mem[40112] = 426
|
||||
mem[36630] = 610
|
||||
mem[20554] = 933886
|
||||
mem[48342] = 177911
|
||||
mask = 00011X11011X010X00000011X10010X10111
|
||||
mem[6531] = 1493325
|
||||
mem[35058] = 21547
|
||||
mem[13400] = 5230289
|
||||
4
input/day14_example.txt
Normal file
4
input/day14_example.txt
Normal file
@@ -0,0 +1,4 @@
|
||||
mask = XXXXXXXXXXXXXXXXXXXXXXXXXXXXX1XXXX0X
|
||||
mem[8] = 11
|
||||
mem[7] = 101
|
||||
mem[8] = 0
|
||||
1
input/day15.txt
Normal file
1
input/day15.txt
Normal file
@@ -0,0 +1 @@
|
||||
17,1,3,16,19,0
|
||||
1
input/day15_example.txt
Normal file
1
input/day15_example.txt
Normal file
@@ -0,0 +1 @@
|
||||
0,3,6
|
||||
262
input/day16.txt
Normal file
262
input/day16.txt
Normal file
@@ -0,0 +1,262 @@
|
||||
departure location: 50-692 or 705-969
|
||||
departure station: 35-540 or 556-965
|
||||
departure platform: 27-776 or 790-974
|
||||
departure track: 48-903 or 911-955
|
||||
departure date: 33-814 or 836-953
|
||||
departure time: 34-403 or 421-966
|
||||
arrival location: 37-489 or 510-963
|
||||
arrival station: 46-128 or 150-960
|
||||
arrival platform: 45-75 or 97-959
|
||||
arrival track: 28-535 or 541-952
|
||||
class: 38-340 or 349-966
|
||||
duration: 42-308 or 316-969
|
||||
price: 49-324 or 340-970
|
||||
route: 31-627 or 648-952
|
||||
row: 38-878 or 893-955
|
||||
seat: 39-54 or 71-967
|
||||
train: 36-597 or 615-960
|
||||
type: 41-438 or 453-959
|
||||
wagon: 42-370 or 389-971
|
||||
zone: 36-114 or 127-965
|
||||
|
||||
your ticket:
|
||||
107,157,197,181,71,113,179,109,97,163,73,53,101,193,173,151,167,191,127,103
|
||||
|
||||
nearby tickets:
|
||||
460,805,566,621,266,233,771,202,368,751,150,558,184,248,457,424,351,184,821,623
|
||||
181,792,526,790,876,286,436,893,566,195,168,619,911,190,895,803,679,346,323,914
|
||||
198,396,154,361,573,941,264,591,596,365,416,191,512,422,813,871,340,912,750,202
|
||||
726,194,756,858,569,924,732,592,726,479,650,189,477,268,834,455,732,692,776,97
|
||||
228,58,182,728,763,308,290,912,871,686,475,208,593,250,733,729,463,803,360,307
|
||||
216,652,486,597,289,188,291,739,300,111,357,359,161,166,745,102,66,520,688,715
|
||||
349,265,286,852,869,474,277,261,716,368,403,397,564,850,663,165,356,602,208,355
|
||||
283,615,859,258,264,164,714,458,434,723,483,161,226,653,531,750,860,674,906,805
|
||||
292,284,177,622,726,768,784,895,203,896,305,663,807,456,188,661,677,648,531,323
|
||||
797,877,472,801,612,213,681,392,666,568,398,557,717,813,112,595,927,169,489,679
|
||||
804,485,843,563,514,726,299,537,189,754,256,749,278,203,843,299,482,306,158,738
|
||||
360,790,810,399,534,192,182,810,686,512,929,791,291,584,529,418,531,760,866,128
|
||||
314,919,923,678,656,859,671,942,568,564,241,619,712,460,153,245,276,685,229,456
|
||||
989,943,666,917,291,803,205,579,254,489,524,183,461,894,424,895,865,759,802,938
|
||||
370,603,736,619,427,197,618,511,199,267,318,322,916,525,659,656,927,854,393,169
|
||||
794,616,185,689,796,258,288,100,705,932,712,801,103,725,238,514,730,590,344,271
|
||||
902,924,709,317,874,803,216,305,468,596,941,517,841,288,526,781,205,710,98,654
|
||||
513,292,427,860,304,221,277,669,458,581,945,58,264,320,561,292,921,678,459,259
|
||||
790,615,203,320,128,477,313,203,431,797,719,588,323,857,851,299,199,715,895,430
|
||||
928,480,591,740,274,929,279,844,984,651,937,715,282,238,466,257,170,734,240,54
|
||||
650,768,201,875,474,523,58,243,900,306,185,801,790,170,749,842,765,298,852,207
|
||||
596,688,432,230,667,648,666,652,949,316,894,718,276,920,322,121,730,844,903,162
|
||||
862,205,71,219,454,210,801,996,51,316,322,464,719,725,228,281,461,922,222,723
|
||||
753,903,760,706,513,898,420,350,772,165,900,320,939,559,741,320,253,521,224,623
|
||||
483,155,792,462,261,221,748,206,813,182,520,774,727,239,343,396,679,912,660,435
|
||||
573,252,560,108,458,277,468,467,132,488,217,112,936,362,398,322,946,718,927,668
|
||||
185,737,233,721,112,288,296,869,233,584,750,187,588,986,164,216,563,301,423,191
|
||||
689,945,353,575,221,774,518,235,557,529,454,455,916,436,799,907,209,54,800,256
|
||||
533,562,558,678,567,565,721,729,511,243,228,368,345,527,306,812,689,390,257,684
|
||||
66,189,579,515,474,655,591,208,240,733,662,237,257,850,291,473,227,846,558,768
|
||||
218,688,651,918,931,461,531,320,173,240,775,114,241,803,909,719,523,684,170,220
|
||||
468,370,913,591,280,753,675,477,582,608,937,942,250,900,157,303,805,746,690,485
|
||||
182,477,685,669,153,360,366,533,254,288,243,228,395,62,799,853,718,590,937,615
|
||||
590,268,807,790,154,576,867,663,294,315,365,946,303,692,768,896,736,939,838,760
|
||||
599,592,474,203,190,291,651,431,914,349,715,944,666,197,286,806,488,799,713,101
|
||||
471,713,579,232,556,283,915,185,927,167,354,591,560,560,171,353,584,296,10,679
|
||||
353,757,179,101,982,805,213,438,303,914,851,799,556,72,469,275,741,249,360,655
|
||||
267,459,460,940,708,589,528,575,285,841,623,585,769,436,652,298,251,997,107,114
|
||||
911,255,661,935,286,663,150,680,270,812,751,257,162,127,934,364,764,60,573,717
|
||||
360,894,516,664,359,276,600,361,107,432,859,585,288,876,863,166,624,107,453,917
|
||||
531,266,199,235,597,246,162,740,70,690,894,729,734,936,201,685,712,172,236,872
|
||||
71,532,668,483,680,469,266,392,691,625,361,482,195,752,586,257,234,732,693,935
|
||||
114,565,299,437,735,710,930,429,350,799,434,567,293,392,590,64,283,531,518,764
|
||||
434,216,72,368,263,597,658,944,949,400,763,128,676,428,122,659,841,924,773,303
|
||||
399,931,922,874,870,744,804,424,679,67,228,184,206,166,938,163,689,575,356,900
|
||||
915,934,767,930,71,338,483,166,194,591,511,192,237,859,227,574,767,323,219,183
|
||||
569,192,773,676,255,176,423,194,842,865,160,667,916,681,894,545,398,581,150,258
|
||||
369,50,666,211,595,579,661,71,483,672,712,597,519,737,310,168,836,238,689,580
|
||||
945,239,152,108,878,773,720,530,663,727,523,694,754,390,528,261,472,767,233,671
|
||||
715,570,368,809,534,282,101,234,98,510,647,734,811,897,691,365,705,100,427,487
|
||||
278,357,54,598,773,648,179,247,709,738,474,859,852,627,392,650,615,259,913,752
|
||||
686,484,113,247,282,428,871,843,196,368,297,487,804,870,779,293,224,527,769,722
|
||||
894,369,474,569,217,567,770,906,157,400,195,933,357,562,171,805,727,287,256,204
|
||||
101,928,670,944,729,113,757,521,587,582,105,433,744,666,726,877,898,389,101,23
|
||||
844,843,842,776,775,851,272,349,187,516,925,683,438,851,356,108,192,725,55,657
|
||||
510,532,588,320,863,864,615,703,208,462,210,733,899,422,923,667,656,663,755,841
|
||||
710,907,390,268,273,271,875,922,530,664,770,725,742,767,742,170,306,587,483,560
|
||||
428,922,521,421,728,658,762,465,583,903,898,668,918,945,857,864,229,311,269,874
|
||||
841,164,705,204,648,535,771,800,285,288,658,739,686,574,692,945,197,902,291,604
|
||||
347,293,294,290,571,569,669,365,839,597,238,708,755,903,300,716,862,240,731,770
|
||||
893,436,206,814,67,150,218,288,841,762,758,214,479,463,535,231,530,453,732,239
|
||||
659,943,253,806,268,904,392,173,870,845,836,752,468,941,355,838,400,590,51,868
|
||||
187,914,323,943,459,127,717,317,399,169,356,206,216,648,239,243,608,810,689,653
|
||||
171,303,689,433,357,874,731,758,370,256,540,207,557,941,627,864,281,216,458,318
|
||||
774,760,522,249,877,675,347,231,368,168,319,153,561,186,302,262,400,425,580,481
|
||||
150,313,473,616,162,237,869,485,188,619,925,324,182,802,340,256,470,850,356,685
|
||||
281,183,862,487,519,195,595,652,975,169,730,776,98,235,619,163,926,576,155,581
|
||||
293,222,472,651,150,595,763,519,470,437,262,768,474,358,360,702,836,162,877,154
|
||||
585,651,902,224,245,215,300,478,122,193,276,288,940,200,875,74,686,429,458,219
|
||||
684,247,527,766,915,574,556,729,203,668,268,474,394,771,231,933,668,475,537,656
|
||||
948,167,988,196,802,250,462,364,362,291,488,389,619,941,594,901,623,207,471,709
|
||||
588,111,155,662,977,53,806,215,727,246,265,718,596,367,437,271,725,453,322,916
|
||||
557,597,850,811,721,242,238,854,682,295,259,300,568,278,903,278,433,577,784,532
|
||||
731,624,101,900,802,934,565,429,670,453,757,322,208,73,251,366,344,465,728,871
|
||||
172,650,807,459,673,392,752,263,488,845,517,319,515,155,232,809,948,245,761,997
|
||||
485,103,159,532,272,895,101,277,917,708,9,220,396,152,587,422,911,753,754,588
|
||||
390,767,561,467,583,763,741,506,574,770,487,621,232,287,737,160,236,758,458,655
|
||||
106,307,660,430,249,306,542,533,453,912,233,869,800,735,431,280,899,257,162,299
|
||||
103,365,731,623,749,775,98,898,763,560,316,431,197,153,222,267,621,493,930,286
|
||||
737,761,725,223,945,153,562,717,893,480,869,899,557,902,107,859,685,236,413,480
|
||||
272,876,992,217,295,747,843,359,836,485,758,103,692,560,738,323,462,174,620,862
|
||||
233,484,621,292,534,461,869,863,457,457,121,733,114,739,72,585,798,916,242,680
|
||||
577,586,911,158,351,934,978,558,164,233,795,179,924,852,278,305,740,107,772,557
|
||||
748,661,932,668,743,929,218,394,933,170,161,724,336,659,592,204,556,517,289,669
|
||||
659,573,988,522,591,763,151,933,359,201,913,427,155,214,196,234,340,402,253,98
|
||||
271,262,273,669,156,538,804,859,713,653,873,594,168,847,113,219,667,211,352,152
|
||||
899,678,364,766,390,432,863,812,660,622,652,235,585,677,669,366,103,621,146,218
|
||||
433,236,625,567,852,351,211,922,395,681,935,52,354,362,652,765,203,905,560,792
|
||||
733,731,254,101,217,761,709,708,917,393,627,755,461,240,540,302,297,307,516,865
|
||||
247,862,842,688,486,227,928,398,831,168,742,514,733,308,110,127,285,571,424,202
|
||||
290,665,469,192,863,101,759,80,435,652,759,223,114,213,858,477,466,481,390,263
|
||||
476,192,864,896,458,933,983,840,292,650,263,150,931,867,71,525,215,525,482,875
|
||||
294,847,160,231,99,236,463,836,763,798,751,396,570,156,610,913,588,858,930,845
|
||||
798,878,197,301,224,110,352,621,766,925,195,654,310,837,434,215,667,209,355,174
|
||||
585,287,189,568,425,618,267,924,517,810,687,718,391,466,21,238,396,843,862,517
|
||||
170,103,811,511,719,896,622,937,204,658,156,909,774,363,359,474,867,399,224,534
|
||||
168,776,285,858,265,65,757,270,530,203,914,151,427,112,593,665,317,756,157,734
|
||||
622,513,424,287,99,220,855,947,623,792,153,425,558,765,358,338,453,763,213,433
|
||||
156,398,799,675,857,480,755,622,234,425,872,730,767,293,993,72,278,168,340,671
|
||||
246,618,206,102,794,792,873,396,457,737,916,214,946,987,365,422,398,256,877,152
|
||||
587,690,263,151,582,624,513,560,854,263,890,218,212,841,520,233,754,588,531,151
|
||||
626,943,916,749,771,619,709,751,432,364,894,591,66,876,895,262,937,151,431,349
|
||||
949,690,871,875,519,243,619,733,458,235,344,264,476,898,754,240,869,733,761,166
|
||||
810,592,654,706,174,943,167,560,810,575,392,316,716,309,173,434,854,155,842,459
|
||||
521,436,166,808,431,774,567,947,795,225,230,201,991,866,232,764,840,740,790,295
|
||||
269,919,587,484,855,794,286,269,733,181,284,322,844,920,903,263,751,391,506,298
|
||||
804,896,460,469,163,207,658,916,572,218,172,268,876,708,738,300,394,696,737,864
|
||||
280,353,457,103,574,397,903,614,580,840,858,291,650,871,210,464,913,340,71,391
|
||||
162,919,488,657,768,812,492,926,397,203,107,520,297,251,181,794,814,170,856,246
|
||||
480,462,528,391,393,565,818,793,715,283,324,577,205,811,233,158,510,768,922,732
|
||||
934,162,182,401,251,920,758,878,333,72,648,570,874,839,755,673,511,306,154,281
|
||||
933,285,663,229,837,776,672,582,472,684,97,460,114,612,839,655,182,162,428,322
|
||||
459,243,153,250,726,104,294,621,158,796,164,160,248,621,222,164,875,335,269,913
|
||||
226,100,100,288,839,653,238,194,703,478,674,292,284,566,219,278,365,624,179,801
|
||||
711,867,234,849,670,359,458,326,108,877,370,760,430,582,672,593,185,212,114,239
|
||||
912,737,814,357,214,262,368,451,353,673,460,919,656,596,267,251,662,760,487,725
|
||||
840,808,152,513,671,769,166,792,462,480,849,335,364,350,269,854,520,316,946,455
|
||||
363,897,745,154,216,457,390,161,214,995,726,204,896,741,237,287,421,392,474,897
|
||||
582,582,863,727,802,240,185,567,867,844,724,186,499,938,477,586,710,652,749,264
|
||||
161,293,844,172,734,233,241,195,808,583,300,776,164,163,193,579,985,400,296,207
|
||||
396,216,896,424,663,870,672,107,942,532,509,559,808,246,895,356,859,913,361,558
|
||||
349,100,705,849,618,467,657,401,356,326,767,110,776,652,854,186,734,942,912,532
|
||||
306,651,477,800,114,523,478,917,451,743,279,652,731,355,257,288,772,915,727,275
|
||||
747,250,390,668,568,949,266,162,721,355,478,464,271,425,305,153,315,935,340,390
|
||||
305,622,192,395,390,808,455,890,728,431,242,237,177,850,424,728,351,586,319,846
|
||||
571,235,594,473,216,735,474,529,942,453,846,900,620,795,563,273,758,831,127,323
|
||||
172,733,585,707,282,674,105,468,357,108,533,245,179,984,393,649,585,191,206,759
|
||||
791,453,924,728,945,697,354,324,863,181,206,205,893,709,876,430,804,521,582,928
|
||||
930,293,253,174,843,453,283,765,173,247,369,935,364,337,854,470,593,518,761,861
|
||||
617,580,656,485,945,895,176,731,280,173,746,774,687,561,162,941,624,926,10,913
|
||||
359,156,176,272,395,520,513,51,209,272,809,914,707,184,674,470,537,165,848,719
|
||||
898,672,393,246,872,515,226,571,223,217,238,914,680,290,316,496,565,573,355,259
|
||||
281,189,577,901,683,523,812,216,913,173,329,75,322,864,795,396,685,673,924,184
|
||||
251,740,425,349,422,204,681,680,236,466,808,536,218,804,50,561,718,665,263,895
|
||||
878,623,801,167,653,157,526,776,584,289,441,654,654,798,298,270,465,357,354,287
|
||||
670,911,690,912,652,519,289,720,311,463,265,219,286,251,232,565,721,736,180,272
|
||||
894,793,467,871,204,756,73,948,243,804,725,752,772,172,395,100,678,668,435,977
|
||||
675,687,239,175,720,930,199,656,366,731,695,912,794,182,53,217,852,177,155,713
|
||||
648,518,715,324,556,784,935,851,468,894,479,759,389,322,299,488,296,272,845,868
|
||||
575,475,162,918,172,681,857,617,672,558,100,295,615,878,755,720,177,154,4,217
|
||||
945,262,745,588,588,762,112,484,946,872,857,508,851,403,277,265,159,299,681,526
|
||||
937,73,710,454,659,174,211,487,358,770,841,562,677,759,485,23,523,523,165,849
|
||||
732,922,745,525,688,589,655,316,606,839,590,804,756,53,202,295,866,617,483,764
|
||||
717,920,682,766,739,362,188,342,208,476,873,421,237,470,940,847,526,686,913,280
|
||||
183,863,18,485,682,304,100,50,581,297,523,340,625,843,672,625,559,351,467,813
|
||||
167,362,747,559,192,316,517,756,859,797,396,272,732,17,661,594,742,590,218,901
|
||||
894,285,516,774,251,796,949,625,273,873,152,488,582,300,477,425,700,797,151,676
|
||||
358,257,566,895,523,729,593,662,767,265,900,922,317,154,899,176,560,349,549,916
|
||||
240,252,104,844,758,942,909,844,580,561,877,740,227,914,435,922,711,364,172,182
|
||||
947,281,682,716,664,247,73,158,191,769,433,586,771,626,878,932,796,415,655,273
|
||||
987,483,511,394,195,101,277,557,470,711,661,318,565,421,866,744,686,903,175,278
|
||||
562,681,278,618,587,730,540,859,227,275,316,431,245,254,278,863,427,929,437,592
|
||||
158,198,652,196,935,74,837,310,425,250,682,221,721,180,284,510,217,675,197,466
|
||||
364,455,680,748,626,317,249,322,456,435,311,435,217,894,318,396,725,665,874,423
|
||||
235,588,666,267,390,584,366,848,263,364,573,592,937,758,494,727,275,858,425,461
|
||||
776,350,809,433,152,462,896,281,202,303,782,649,688,177,296,104,52,525,101,808
|
||||
479,422,933,72,111,928,389,366,653,347,477,681,523,210,485,756,921,690,583,427
|
||||
712,901,241,461,773,596,486,657,811,367,573,310,268,798,668,582,389,52,279,525
|
||||
353,662,567,316,841,651,400,247,905,517,471,356,932,183,99,482,239,464,556,209
|
||||
748,345,587,54,684,247,739,587,767,796,594,776,210,230,913,705,911,211,654,901
|
||||
773,158,521,322,277,948,800,763,896,529,361,865,869,573,239,558,826,267,593,106
|
||||
949,167,525,0,580,424,102,530,935,362,251,223,227,717,128,241,750,226,899,757
|
||||
796,436,529,279,435,312,767,671,229,714,719,529,426,901,803,207,357,793,322,184
|
||||
854,724,455,232,155,157,335,672,297,306,262,742,793,251,71,203,201,689,660,749
|
||||
921,659,584,571,217,191,226,99,567,403,720,662,902,858,361,312,475,216,583,282
|
||||
720,744,479,667,705,361,527,295,10,172,73,934,291,255,705,362,934,559,581,206
|
||||
750,933,179,67,400,200,425,948,776,240,201,180,71,189,751,680,430,726,569,709
|
||||
361,851,74,214,933,866,712,686,750,227,191,914,536,322,101,462,678,263,766,389
|
||||
714,201,227,843,682,103,173,799,578,281,478,151,614,656,197,594,627,721,556,873
|
||||
806,798,929,243,289,230,656,648,359,302,394,340,903,744,158,675,247,540,556,581
|
||||
715,813,759,794,244,344,191,844,354,481,573,615,726,234,171,616,710,110,656,285
|
||||
756,845,483,16,530,557,197,790,202,250,894,691,296,587,795,289,747,220,859,921
|
||||
51,739,184,298,155,257,73,897,850,871,667,323,865,319,773,715,328,460,235,214
|
||||
203,760,870,345,153,319,803,469,686,705,714,856,220,433,619,428,755,729,475,281
|
||||
763,468,361,675,478,222,258,750,482,290,217,767,900,345,583,801,866,185,254,161
|
||||
515,944,662,297,486,178,401,17,105,584,843,427,569,284,71,427,617,207,746,369
|
||||
194,510,227,233,651,469,229,914,112,840,578,53,748,401,428,426,747,369,314,935
|
||||
596,51,878,194,836,211,945,763,278,708,744,948,800,424,63,427,669,740,849,865
|
||||
241,50,717,658,735,718,424,899,553,656,911,436,715,170,112,579,461,761,305,294
|
||||
353,401,842,865,842,738,945,129,709,759,532,244,518,895,519,723,866,870,616,588
|
||||
511,798,294,238,713,204,290,619,186,580,652,389,357,496,594,355,523,931,792,684
|
||||
324,672,253,271,273,687,859,712,802,160,605,718,164,573,665,239,255,318,254,521
|
||||
230,288,280,666,279,190,929,421,558,706,833,725,190,435,389,843,353,128,810,358
|
||||
154,681,359,425,762,400,571,927,536,591,753,471,320,487,718,483,349,770,657,185
|
||||
204,103,761,708,240,263,101,565,853,933,518,346,429,717,438,558,840,474,654,300
|
||||
654,463,911,792,187,182,518,175,933,207,517,849,473,934,394,539,473,203,518,855
|
||||
105,655,913,183,621,945,798,616,420,870,400,911,481,422,170,254,214,73,364,158
|
||||
753,867,292,160,687,174,589,560,661,711,519,175,899,308,459,823,873,867,671,653
|
||||
128,716,946,278,580,235,657,363,98,428,521,474,649,105,927,858,154,937,604,218
|
||||
589,150,940,71,263,741,352,648,800,680,566,530,465,457,420,287,712,173,170,223
|
||||
274,735,596,900,662,321,486,241,767,154,725,617,99,918,264,201,557,782,751,429
|
||||
943,334,457,518,475,438,159,948,741,308,247,236,591,186,938,273,723,187,307,583
|
||||
807,931,720,195,238,304,167,406,170,734,593,349,212,797,893,937,392,842,399,252
|
||||
586,281,152,294,876,266,911,189,183,927,141,160,283,181,927,753,478,488,470,427
|
||||
916,112,103,282,356,159,901,723,153,808,762,936,194,942,153,110,686,3,250,678
|
||||
395,762,281,996,765,239,239,516,278,864,623,178,483,709,529,240,804,560,482,231
|
||||
666,857,581,290,913,770,366,584,877,648,474,937,193,865,721,875,907,283,863,560
|
||||
595,928,926,207,840,423,573,801,280,292,905,427,716,741,776,574,716,430,192,293
|
||||
269,536,562,765,689,170,72,402,198,760,864,307,765,99,255,867,868,713,948,479
|
||||
97,837,243,649,192,708,856,58,711,190,426,716,582,649,877,269,187,616,679,903
|
||||
893,215,71,485,667,900,911,930,163,660,308,352,214,933,916,203,494,340,946,483
|
||||
154,435,728,843,856,928,483,167,936,735,244,861,175,560,917,464,167,160,891,458
|
||||
807,722,567,719,874,690,154,657,874,755,586,838,482,431,857,760,870,680,473,982
|
||||
859,469,806,422,562,795,176,568,353,291,896,776,863,866,154,587,928,902,655,10
|
||||
772,813,253,806,237,610,774,947,104,360,460,425,100,806,597,174,726,50,531,687
|
||||
762,176,530,864,306,212,915,153,249,746,552,917,303,261,525,842,752,569,686,876
|
||||
513,105,531,799,856,725,252,948,285,217,722,741,165,727,333,176,866,114,922,925
|
||||
304,194,583,275,872,930,72,424,75,470,847,876,922,300,148,234,570,527,525,691
|
||||
296,74,390,437,877,823,902,758,683,578,688,872,868,768,728,937,867,863,298,255
|
||||
743,867,292,595,932,587,915,763,808,249,242,594,717,466,874,896,724,535,167,980
|
||||
153,722,184,903,227,460,770,755,732,209,60,756,684,422,187,467,616,840,322,858
|
||||
618,928,105,454,355,622,424,306,522,936,866,320,357,943,702,302,156,318,369,455
|
||||
649,501,403,532,844,585,255,112,799,162,430,846,650,689,810,947,871,707,737,353
|
||||
561,568,620,571,290,725,857,781,895,456,459,844,453,52,690,303,394,262,360,246
|
||||
156,761,751,730,257,109,293,947,153,758,316,203,855,259,170,581,574,925,439,234
|
||||
249,574,368,111,708,936,895,524,720,765,806,658,586,841,998,687,275,896,217,929
|
||||
814,768,617,484,275,751,321,649,784,848,155,272,776,692,206,200,319,296,921,219
|
||||
940,576,350,841,661,754,662,930,980,593,706,323,395,930,153,246,920,360,276,916
|
||||
808,306,736,191,565,152,626,820,357,716,471,871,569,563,940,480,791,914,356,911
|
||||
393,875,758,173,662,455,804,934,508,893,523,252,159,435,290,747,462,307,859,469
|
||||
112,430,356,866,264,502,218,256,533,770,431,654,108,763,562,288,746,159,751,238
|
||||
758,649,526,102,157,298,248,160,286,682,304,424,301,255,474,615,367,999,516,71
|
||||
233,403,724,741,235,166,512,639,212,895,627,350,398,814,922,665,619,918,112,727
|
||||
853,224,999,431,796,839,479,280,894,193,520,922,397,318,127,927,291,903,580,854
|
||||
177,653,401,575,623,369,677,238,742,228,483,252,239,453,390,16,438,674,596,838
|
||||
685,318,872,152,809,653,686,126,477,533,718,925,105,624,473,925,764,213,511,368
|
||||
803,107,809,903,706,218,697,321,236,857,657,848,294,750,186,74,208,765,237,369
|
||||
594,323,735,764,688,210,279,353,840,842,263,915,235,940,511,342,73,920,278,899
|
||||
210,570,753,679,807,524,761,181,732,295,585,200,191,657,554,927,487,765,752,473
|
||||
463,229,183,721,432,114,72,106,343,791,838,354,927,740,688,746,535,560,150,870
|
||||
793,732,811,572,679,228,574,168,919,280,589,6,296,477,352,283,523,284,203,370
|
||||
867,466,757,735,473,763,579,543,737,560,516,392,398,299,318,194,234,915,558,223
|
||||
512,705,690,365,939,393,581,192,914,357,865,106,858,725,840,105,863,467,118,681
|
||||
250,464,362,993,712,712,626,897,914,256,218,169,848,425,228,841,739,295,671,233
|
||||
753,268,756,286,224,678,181,183,254,360,423,604,534,216,235,222,423,914,471,365
|
||||
620,238,587,295,771,836,251,159,685,795,206,533,299,230,773,598,352,682,898,937
|
||||
244,274,430,751,814,675,676,276,97,913,294,454,72,513,533,773,301,360,336,308
|
||||
12
input/day16_example.txt
Normal file
12
input/day16_example.txt
Normal file
@@ -0,0 +1,12 @@
|
||||
class: 1-3 or 5-7
|
||||
row: 6-11 or 33-44
|
||||
seat: 13-40 or 45-50
|
||||
|
||||
your ticket:
|
||||
7,1,14
|
||||
|
||||
nearby tickets:
|
||||
7,3,47
|
||||
40,4,50
|
||||
55,2,20
|
||||
38,6,12
|
||||
11
input/day16_example2.txt
Normal file
11
input/day16_example2.txt
Normal file
@@ -0,0 +1,11 @@
|
||||
class: 0-1 or 4-19
|
||||
row: 0-5 or 8-19
|
||||
seat: 0-13 or 16-19
|
||||
|
||||
your ticket:
|
||||
11,12,13
|
||||
|
||||
nearby tickets:
|
||||
3,9,18
|
||||
15,1,5
|
||||
5,14,9
|
||||
8
input/day17.txt
Normal file
8
input/day17.txt
Normal file
@@ -0,0 +1,8 @@
|
||||
..##.#.#
|
||||
.#####..
|
||||
#.....##
|
||||
##.##.#.
|
||||
..#...#.
|
||||
.#..##..
|
||||
.#...#.#
|
||||
#..##.##
|
||||
3
input/day17_example.txt
Normal file
3
input/day17_example.txt
Normal file
@@ -0,0 +1,3 @@
|
||||
.#.
|
||||
..#
|
||||
###
|
||||
373
input/day18.txt
Normal file
373
input/day18.txt
Normal file
@@ -0,0 +1,373 @@
|
||||
(4 + (2 * 7) * 4) + (6 * 9 + 8 * 4 + 7 * 3) * 3 * 5
|
||||
5 * 9 + (5 * 9) * (6 + 2) + 3 + 7
|
||||
8 + 5 * 9 * 9 + 9 + 5
|
||||
(7 + 9 * 8 + 4 * 6) + 6 * ((9 + 9 + 5 * 7 + 4) * 8 * 2 + 5 * 6 + 2) + 2 * 6
|
||||
(6 * (5 + 8 * 7 * 8 + 4) * (7 + 7 * 3 * 5)) + 5 * (8 + (8 + 3 + 5 + 5) + (3 + 2 + 7 * 2 * 9) + 6 * 5 + (2 * 6)) * ((4 * 3) + 3) + 9 * (3 + 6 * 2 + 3 * 8)
|
||||
2 * 9 + (6 * 2 + 6 + (9 + 6 + 8 + 5 + 5) + (8 + 7 * 4 + 3) + 8) * (4 + 4 * 2 + 6)
|
||||
5 + 4 + 5 + (7 + (9 + 7 + 4 + 4 + 4 + 5) + 2 * 4) + 4 * 9
|
||||
9 + (7 * 8 + (6 + 3 + 4)) + (5 * 9)
|
||||
2 * 4 + 8 + (5 + 8) * 9 * (9 + (5 + 3) + 3)
|
||||
8 * 6 * 5 + 8 + (8 * (2 + 8 * 7 * 5 + 3 + 5)) * 2
|
||||
6 * ((3 + 4 * 3 * 7 * 8) * 8 + (9 + 5 + 2 * 3) * 3 * 2) + 7 + 8 * 8 + 4
|
||||
9 + 3 + 7 * 8
|
||||
(9 + (4 + 9 + 3 + 5 * 5 + 5) * 5 + 9 * 6) * 3 * 2 * 6 * 5
|
||||
7 * 9 * 6
|
||||
(5 + 2 * 8) * 8 + 3 + 8
|
||||
9 * 5 * (5 + (5 * 4 + 8 + 6 * 5) * (9 * 7 + 5)) * 3 * 9
|
||||
(6 * (8 * 3 * 7 + 2) * (3 + 9 + 5 + 5) + 3) + 7 * 3
|
||||
7 + 9 + (4 + 9 * (4 * 6 + 3 * 8 * 5) + 8 + 9 + 3) + 6 * (6 + 8 + 7 * 9 * 6 + 6) + 7
|
||||
2 * (5 * 5 + 6 + (5 + 5 * 5 + 6)) * 4 + 5 + 2
|
||||
8 + 2 * (8 * 7 * 4 + 8) * 9
|
||||
9 + 5 * (4 * 8 + 9 * 6 + (3 * 3) + 2) + 5 + (4 * 5 + 2 * 2)
|
||||
(5 * 7 + 2) + 3 + 9
|
||||
7 * 9 + 8
|
||||
3 * 7 * (7 + 5 + 8 * 5 * 8)
|
||||
(7 + (3 * 6 + 6 * 9 + 2) * 8 * 6 + 6 + 2) * 6
|
||||
4 * (7 * 5 * (6 + 8) * 7 * (5 * 3 * 2 * 9 + 2 * 4) * 6) * 2 + 2 * 5
|
||||
((3 * 3 * 9 + 8) + 2 + 5 + 8) + 6 * (6 + 9 * 2) + 7 * 9 * ((9 + 4 + 4) * 4 + 4 + 9)
|
||||
7 * (4 * 2 + 3 + 7 + 5) * (8 + 2 + (5 * 9) * 2 + 3 * 5)
|
||||
7 + (8 + 3 + 8 * 4 * 2 * 2) + 7 * 2 + ((3 + 5 * 3 + 5) * 8 + 3) + 8
|
||||
7 + 2 + 9 * 9 + 5
|
||||
((6 + 4 + 2) * 2 + 9) + 3 * 6 * (6 + 4 + 9 + 2 + 6) * 9
|
||||
6 + 6 * (9 * 9 + 6 + 6) + 2 * 6
|
||||
2 + 5 * ((4 * 4) * 6) + (3 * 3 + 2) * 9 + 5
|
||||
9 * 4 + 8 * 5 * ((6 * 5 * 4) + (3 + 8 * 7 + 6 * 7) * (6 * 6 + 7) * 8 + 4 + 7)
|
||||
3 * 8 + (4 + (7 * 7 + 9 * 8 * 6 + 7) * (8 * 4 + 4 * 6 * 4 + 4) + 2 * 9)
|
||||
3 + 6 * 2 * 3 * (4 + 7 + (3 * 6 + 7 * 8) * 7 + 9 * 8)
|
||||
2 + 8 + (5 * 4 * 2 * 5 + 5) * 4 + 3 * 4
|
||||
6 + 4 + (5 + 5)
|
||||
6 * 3 + 8 + (8 + 2 + 9 * 3) * ((6 * 8 + 6) + 6 + (7 * 4 * 3) * 4 + 9 + 3)
|
||||
((9 + 7 + 9 + 2 * 7 * 7) + 8 * 6) + 2 + 7
|
||||
6 * (6 + 9 * 2 + 4 * 7 + 8) + 5 * 9
|
||||
((2 + 5 + 6 * 3) + 7 + (7 * 6 * 8 * 3 + 8 * 3)) + (8 * 6 * 8 * 9 * 5)
|
||||
6 * 7 * 5 + 5 * (2 * 9) * 4
|
||||
(8 * 7) * (2 * (7 + 3) + 3) + 8
|
||||
(7 * 9 + 7 + 7 + 7 + 7) + (7 * 5 * 8 + 4 * 5) + 6
|
||||
5 * (6 * 7 * 8 * 5) * 6
|
||||
5 * (2 + (6 * 7) * 8 * 3 + 6 * 2) + 2 * 4 + 8 + 3
|
||||
3 * 5 + 6 + 6
|
||||
((9 * 9) * 6) + (4 + 9 * 6 + 4 * 9 + 7)
|
||||
(3 + 9 + 2) * (3 * 7 * 7 * 7 * (8 * 8 * 4 + 3 + 8)) + 2
|
||||
6 * 6 + 8
|
||||
((9 + 5 + 8) + 9) + 7 + ((9 * 5) * 3 * (3 * 4 * 4 + 3) * 7) + ((5 + 6 + 2) * (7 * 2 * 9 * 8) * 5)
|
||||
6 + (8 * 7 * 6 + 5) + 9 * 7 * 7 * 7
|
||||
2 + (4 * 9 * 3 * 9 + 8) + 2 * 7 * 3 + 4
|
||||
7 + 3 + (5 + 7 * (4 + 4 * 8) + 2 + 8 * 6) * 2
|
||||
(2 * 5 * (4 * 7) * 9 * (3 + 7)) + 3 * 4 * (2 * 3 * 8 * 4) * ((6 + 2 * 2) + (6 * 5 * 7 * 6) + 9 * (8 + 4))
|
||||
((9 + 3 + 5) + 8) * 2
|
||||
2 + 4 + 7 + 5 * (6 * 7 + 8 * (4 * 3 + 6 * 4 + 7) * (7 + 3 + 7 + 3 * 2) + 8)
|
||||
5 + (9 * 8 + 5)
|
||||
(2 + (9 + 7 * 8) + (6 + 7) + 6) * 5 + 3 * 2
|
||||
7 + (9 + (8 * 7 * 9)) * 8 + 3
|
||||
9 * (9 + 4 * 2 * 3 + (6 + 7 * 8 + 9)) + 6 * ((7 * 4 + 7 * 4) + 2 * 6 * 5 + 6 * 6)
|
||||
((3 * 3 + 4 * 9) + 7 + 7 + 3) * 8
|
||||
9 + 8 * (2 + 6 + 8 * 6 + 3 + (8 * 6 * 6 * 4 * 6))
|
||||
3 * (9 + 2 * (9 + 2 * 8) + 3 + 8 * 5) + (9 + 8 + (6 * 9 + 2 + 8 * 5 + 7) * 7) * 2
|
||||
((2 + 9) + 3) * 6 * 2 * 2 * 4 + 7
|
||||
2 * 3 + 4 + (7 + (7 * 5 * 5 + 5) * 9 + (3 + 3 * 5) + 3 * 8)
|
||||
4 * (8 + 2 + (3 * 7 + 4 + 2 * 6 + 2) * 8 + 7)
|
||||
4 + (5 * 9 * (8 + 3 * 9 + 9 + 5) * (3 * 8 + 9 * 8)) * 8 + 9
|
||||
4 * 5 * (2 + 2 + 7 + (3 * 7 * 4 * 2) + 3) * 6
|
||||
((8 * 8 * 4 + 4 + 5) + 6) + 9 * (3 * 3) * 4
|
||||
9 * (8 + (6 + 2 * 7 + 3 + 8 * 8) * 3 * (9 + 3) * (3 + 7 * 3) + 5)
|
||||
9 * 3
|
||||
6 * (7 + 8 * 8 * 4) * 6 * 9 + (4 * 7) * 4
|
||||
4 * (3 * (4 * 9 * 6) + 5 + 5) * 4 * 6 * 6 * ((9 + 3 * 6 + 5 + 8) + 4)
|
||||
5 * 2 * (4 * 3 + (8 * 4 + 2 + 2) * 6 * (8 * 8 * 2 + 7 + 9) + 3) * 5 + (4 + 6)
|
||||
3 + (5 + 6 * 5 * 9) * 9 + 7
|
||||
((3 + 6 + 8) * 7 * 3 + 4 + 4 * 8) * 2 * 2
|
||||
2 + ((9 + 9 * 4 + 2 + 3) * 4 + 9 + 5 + (7 + 3 * 9)) + 8 + 7 * 3
|
||||
5 * 5 * (5 * 6 * 6 + (3 + 4 * 8 + 7) * 2) * 6 + 4 + 3
|
||||
4 + 3 * (5 + (6 * 5 + 6 * 2) * 4) + 9 + 7 * (5 * 5 + 9 * 5)
|
||||
2 + (6 * 7) + 7 + 3 * 7
|
||||
5 * 7 * (6 + (9 * 5)) * 4 + 2
|
||||
((7 * 7 * 3) + 2 + 2 + (9 + 8 + 3)) * (3 * 8 + 6) + ((6 + 2 * 6) * (2 * 4 + 3 + 8 + 2)) * 8
|
||||
((8 + 3 + 8 + 5 + 8 * 3) * 2 + 4 * (6 + 4)) * 8 * 2 * 5 + 9
|
||||
7 + 6 * 3 + 3 + (5 * 7 + 3 + 3 + 8) * 6
|
||||
8 + 7 + ((5 * 9 * 3 + 3 + 4 + 6) + (6 * 6 + 2 + 6) + 8)
|
||||
5 + 5
|
||||
6 + (6 * 5 * 7 + 8)
|
||||
(8 + (9 + 2 + 8 + 2 + 2) * 4 + 7 * 6) * 9 * 6 * (6 * 6 * 5 + 5 * 4) + 7 + 9
|
||||
3 + 8 + (3 + (6 * 9 + 9 * 2 * 3 * 4) * 3 + 9 * (4 * 2) + (3 * 2 * 9 + 2))
|
||||
(5 * 8 + 7 * 8 + (2 + 3 * 8) * (8 + 4 * 7)) * 3
|
||||
8 + 2 * (2 + (6 * 6 + 9 * 3 + 6) + (9 * 2 * 4) + 6 * 4 * (6 * 3 + 2 + 6 + 3 + 5)) + 8 + 4 * 9
|
||||
8 + 8 + (4 * 9 + 9)
|
||||
5 + 5 * (5 + 8 + (3 * 9 * 9 + 8 + 8 * 2) * 5) * (8 + 7 + 7 + 8 + (2 + 7 * 4 * 8))
|
||||
6 * 3 + 6 + ((9 * 5 * 4 + 6 + 5 + 5) * 6) * 2 + (6 * 5 + 5 * 7 * 8 * (3 + 7 * 7 * 9))
|
||||
4 + (3 + 4 + 5 * (4 * 2 + 7 * 9 + 6 + 6)) + (7 + 7)
|
||||
2 * (6 + 2 + 6 * 3 + 4) + (6 + 5 * 4 * 8 + 3 + 7) + 8 + 3 * 5
|
||||
((5 + 3 + 7 * 2 + 9 * 5) + 7 * 7 * (4 + 7 + 9) + 8 + 6) + 3
|
||||
((9 * 9 + 2 * 7 * 5 * 6) + 8 * 7 * 4 * 2 + 6) * 5 * 9
|
||||
((3 * 3 * 2 + 5 + 6) * 7 + (3 * 6 * 2) * 3 + 3) + 9 * 7 + 5
|
||||
(7 + (4 + 7 + 6 * 8 + 9 * 9) + 7 * 2 * 2) * 7
|
||||
(9 * 3 * 9) + ((2 * 6 * 6 + 9 * 7) * 3) + 3 + 8 + 8
|
||||
2 + (3 * 5) * (2 + 8 + 8 * 3 * 6 + 6) * 6 * 9
|
||||
(4 * 7 * 7 + 3 + 4) * 3 * 9 + 6 * (2 + 5 * 4)
|
||||
(8 * 4 + 3 * 8) * 4 * 5
|
||||
(7 + 5 + (4 + 2) + 4) + (2 * 5 * 9 * 2 * 6)
|
||||
9 * 4 + 3 + 8 * (2 * 4 + 7 * 2 * 2) * (2 + 6 + 5 + 9 + 5)
|
||||
8 + 3 * (6 * 8) + (2 * 4 + 7 * 8)
|
||||
(9 + 6 + 3) * 5 + (9 * 8) * 5 + 6 * 5
|
||||
((6 * 2 + 6 * 2) + 3 + 7 + 5 * 8) * 2 + 2
|
||||
2 + (9 * 3 * 9) * (4 + (6 + 4 + 7) + 5) + 9
|
||||
(3 + 4) + 5 + 7 + 7
|
||||
9 + 8 + 8 + 7 + 5 + ((2 + 7 * 9 * 7 * 6 * 9) * 8 * 8 + 7 * 3 + 9)
|
||||
(8 * 7 * (8 * 7)) * 9 + (4 * (4 + 9) * (7 * 9 + 9 + 6 * 5 + 5) + 7)
|
||||
(6 + 7 * 9 + 5 + 5) * 5 * (2 + 6 + (3 * 6) + (7 + 3 + 5 * 5) + 9)
|
||||
2 + ((7 + 8 * 2 + 8) * 4 + 2) * 9 * 9 + 8
|
||||
8 * 8 * 7 * 2 + 2
|
||||
7 * 2 + 9 + ((5 * 2 + 6 * 9 + 8 + 7) + 6 * 2 + 8 + 4 * (3 * 2 * 3 * 2))
|
||||
5 * (7 * 5 + (7 * 9) * 4 * 6 * (8 + 7 + 3 + 9 + 9)) * 4
|
||||
8 * ((3 + 7 + 5) + 7) + 5 + (6 + 4 + 6 + 4 * 4) + ((2 * 6) * 3) + 9
|
||||
3 * 3
|
||||
4 * (5 + 5 + 6 + 2 + 7) + 7 * 6
|
||||
(7 + 4 + 5 * 9 + 5 + 8) * 8 * (7 * 9 * 9) + 4
|
||||
3 + (9 * (7 * 7 + 3 * 4 + 8 + 5) * 7 * (2 * 4) + 9 + 5) * (4 + 7)
|
||||
6 * (5 * (6 * 2) + 6 + (4 * 8 + 9) + 3 * (2 * 4 + 4)) * 6 * 5 + 6 + 3
|
||||
(9 * 3 * 9) * 8 * 5 * (8 + 3 + 2 + 9)
|
||||
(8 + 8 * (8 * 9) + 2 + 7) + 8 * (5 * 7 + 6 + 2 * 4 * 2) + 6 * (3 * 8 + 6) * 2
|
||||
2 * (8 * 5 + 7) * 8 + 7 * 9
|
||||
4 * 4 * (5 + (5 * 4 + 2 * 9 + 5 + 7)) * 8 * ((4 * 9 + 4) + 6 * (7 + 2 + 4 * 8 * 9))
|
||||
4 * 6 + (4 * 8 * 3 * (9 + 8) * 7 * 9)
|
||||
(6 + 9 + 3 * 2 + 8 * 8) * 6
|
||||
(8 + (3 + 3 + 2 * 3) + (6 + 7 * 6) + 7 * 4 + (9 * 5 * 4 * 6 + 2)) * 2 + 5
|
||||
4 * 6 + 2 * 5 * 2 + (5 + 3 + 2 + (5 * 3 * 3 + 7 * 6 + 2) + 8)
|
||||
9 + 2 + (7 * 7 + 7 + 9)
|
||||
5 + 8 + (8 + (5 + 9 + 6 * 2 * 4 * 4)) * 9
|
||||
(2 + 4 + 8 + 7 * 8 * 5) + 3 + 3 + (9 + 9 + (9 * 2 + 6 + 4 + 4) + 6 * 2) + 2
|
||||
7 + (6 + 5 * 2 * 9 + 7 + (9 + 7)) * (3 + 6 + 2 * 5 * 3)
|
||||
8 + (9 + (4 * 3 * 7 * 7) * 7) + 9 * 6
|
||||
6 * 9 * ((8 + 5) + 9) * 7 * 8
|
||||
(2 * 9 + 2) + (6 * 3 * 3 + 6 * 7 + 9)
|
||||
7 * 5 * (4 * 4 + 7 * 4 + 8 + 3)
|
||||
3 * (6 + (5 + 3) + 5) * 3
|
||||
(7 * (9 * 5 * 9 + 2 + 4) + 3 * 8 + (9 + 7) + (2 * 9 + 5)) * (6 + 3 * 9 + 3 + (7 + 4 * 9 + 5) + 9) * (8 * 2 + (2 * 9 + 7 + 5 * 4) * 4)
|
||||
4 + 7 + 5 + 6 * 8
|
||||
5 + 4 + 3
|
||||
9 * (6 * 2 + 7 + 5) * 3 * 2 * 2
|
||||
7 * 4 + ((6 * 7 * 6 * 8 + 6 * 9) * 7 * 3) + 8
|
||||
9 * 5 + 4 + 8 + 8 * 8
|
||||
(3 + 6) * 2 * 7 * (2 * 7 + 2 + 6 + 3)
|
||||
5 * 2 + 8 * 7 + (4 + 8 + (3 * 6 + 7 * 2 + 4 + 7))
|
||||
6 + (8 + 6 * (9 * 7 + 2 + 2 + 3 + 4) * (4 * 7 + 2 + 4 * 3) * 3)
|
||||
(8 + 5 * 2) * (9 * 4) + 5
|
||||
3 * (4 * 5 * (4 + 3 + 4) + 5 * (3 + 6 + 3 * 7 * 7)) * 3
|
||||
2 + 7 + (8 + 3) + 8
|
||||
8 * (9 * 8 * 3) + 4
|
||||
(2 * 6) * 3
|
||||
((9 * 6 + 3 + 3 * 9 + 7) + 2 * (2 + 9 * 8 + 2 * 4) + 9 * 8 + 6) + (5 * 9 * (2 + 7) + 7 * 9) + 7
|
||||
4 + 7 * ((3 * 7 + 2) * 9 * 7 * 2 + 4 + 3) * 4 * (3 + 8 * 9) + 6
|
||||
9 * (9 + (9 * 6 + 2 * 7 + 6) + 7 * 2 + 2)
|
||||
(9 * 2 + 4 + 8 + 6 * 8) * (4 + 8 + 7) * 5 + (4 * 2 + 2) * ((4 * 5) * 8) * 2
|
||||
(5 * 9 + 9 + 2) * 3 + ((7 * 5 + 9 * 3) + 2 + 3 + 6 + 7) + 4 * 6 * 6
|
||||
9 * 8 + 3 * 4 * (9 + 5 + 7 + 5) * (6 * (7 + 4 * 6 * 7) + 6 * (6 * 5 * 3 + 9 + 4) + (2 * 3 + 3 + 6))
|
||||
7 * 6 * 2 + (8 * 9 + (6 * 7 * 8 + 6 + 9 * 8) * 3 + 6)
|
||||
5 + 7 * 8 + 2 + ((2 + 4) * 7)
|
||||
2 * 5 + 6 * 6 * (3 * 6)
|
||||
6 * 6 * 6 * (6 * (4 * 4 + 5) * 4 + 3 + 9) + 4
|
||||
((3 * 4 * 7) * 5 * 9 + 7 * 6 + 5) + 2 * 2 * 6 + 4 * 8
|
||||
7 * 2 * (3 + (6 * 9 * 9) * 4) * (5 * 8 * 7 * 6 + 2 * 9) * 7
|
||||
9 + (6 + 6 + (8 + 8 * 3 + 6 + 6))
|
||||
5 * 2 + 7 + 3 * (9 + 9 * 9 * 9 * (4 * 4)) * 2
|
||||
4 + 6 + 3 + (2 + 2 * 7 * 2) + 5 + 7
|
||||
7 * 9 * 9 * 2 * 4 + 7
|
||||
6 + (6 + 5 + 5) + 7 + 4
|
||||
9 + (9 * (7 * 3 + 9 + 7 + 8 * 8) * 6 * 5) + 2 * 5
|
||||
8 + 6 * 8
|
||||
8 * (9 * 6 + 4 + 8 + 8)
|
||||
((8 + 3) + 8 * 2) + (3 * 6 * 7 + 7 + 4 + 2) * 9 * 5
|
||||
6 * (4 * 5 + 6 * 7 * 4) + (2 * 8 + 4 + 7 + 7 + 6) + 9 + 5
|
||||
9 * 8 * (2 + 7 + 9 + 4 + 5) + (8 * (3 * 8 + 3 * 6)) + ((7 * 2) * 7) + 2
|
||||
9 + 4 + 9 * 2 * (5 * 2 + 6 + (9 * 5 + 8 + 2 * 5) + 6 + 6) + 7
|
||||
9 + 9 * ((3 * 6) + (5 + 5 + 7 * 9 * 4 + 9) + 2 * 6 * 6) * 5
|
||||
(9 * (3 * 2) + 8 * 2) * (6 * (8 + 3 * 8 + 5 * 5 * 9) + 4 + 9 * 6) * 5 + 9 * 6
|
||||
7 * 9 * (2 * 9 + 4 * (3 * 2 * 6 * 9 + 5 + 6) + 2) + 7 * 6 + 3
|
||||
9 + (5 * (3 * 9) + 4 * 6 + 6) + 9 + 8 * 5
|
||||
8 + 8 * 8 + (9 + 4 * (5 + 3 * 8 * 3 * 4 * 4) + 2 * 8 * (9 * 6 * 4 * 6 + 9))
|
||||
(6 + 6 * 3 + (5 + 8 * 4 + 4) + 3) * (3 + 7) * (6 + 5 * 4 * 6 + 6 + (5 * 7))
|
||||
(9 + 7 + 6 + (8 * 8) * 4 * 6) + 3 * 5
|
||||
5 * 2 * 3 + (3 + (6 + 9 * 2) * 3 * 3)
|
||||
2 + (8 * 7 * (4 * 8 * 2 + 6 * 7)) * 5 + 5 + (8 * 5)
|
||||
9 * 6 * 4 * 2 * ((6 * 3 + 9 * 8) * 5) * 3
|
||||
((8 + 6) + 6 * (8 * 5 * 5 * 7) + (2 + 9 + 6 * 7) * 7 * (2 + 9 * 7 * 3)) * ((7 * 5 + 2 * 5) + (8 * 7))
|
||||
(7 + 8) * 6 * 9 + 6 + 6 * 8
|
||||
7 * 8 + (8 * 2) * 7 * 8 * 9
|
||||
9 * ((8 + 6 * 9 + 2 + 3 * 2) * 2 + 4 + 3 + 7) * 2 * 6
|
||||
2 + (8 + (2 + 9) * 7 * 4 + (8 * 6 + 8 * 6 * 4 + 5) + 6) + 4 * (9 + (3 + 4) * (3 * 9 * 7 * 6 + 9 + 7) + 9 * 6 * 3)
|
||||
2 + (8 + (8 * 2 + 3 * 8 * 4 + 2)) + 3 * 6
|
||||
(5 * 5 + (3 + 5 * 6 * 9 + 4 * 4)) * 8 * (7 * 7 + 3 * 7)
|
||||
9 + 6 * (9 * 2 + 2 * (9 + 6 * 8 + 5 + 3))
|
||||
5 * 5 + 5 * (7 * 3 * 3 * 5) + 6
|
||||
7 * 5 * 7 * ((6 * 3 + 5 * 8 * 6) * 7 + 4 * 5) + 7
|
||||
(5 * 4 + 8) * 3 + 6 + 9 + 6
|
||||
(7 + 7 + 4 + 8) * (2 * 7 + 9) * 2 * 4
|
||||
2 + ((7 + 2 + 9 * 4 + 2) * 6 + 9)
|
||||
9 + 2 + (7 + 6 + 4) * 3 * 8
|
||||
5 + 7 * 2 + 2 * (3 * 4 + 4 * 6) + 2
|
||||
2 + (7 + 2 + (9 * 3 * 5 + 7 + 7) + 5 * (7 + 7 * 2 * 4 * 7 * 4) + 5) * (6 + 2 * 5 + (4 * 6 + 4 * 8 * 4) + 7) * 2 * 5
|
||||
((5 * 9) * 9) * 2 + 4 + ((3 + 6) + (9 + 3 + 6 + 3) * 3 * 5 + (9 + 9 + 6 * 7) + 7) * 2 + 9
|
||||
4 + (4 + 4 + 6) + 6 + 5 * 9 + 8
|
||||
(3 * 8 * (7 * 5 * 7 * 5 * 7 + 2)) * 7 * 4 + 3 + 2 + 4
|
||||
(4 * 8 + 7 + 8 * 5 * 9) + 2 * (5 * 2 * 3 * 9) + 7 + 7 * 2
|
||||
6 * 3 * (4 + 6) + 7 + 2
|
||||
(5 + 4 + 4 * 8 + (4 * 6 * 5 + 7 * 4 * 2)) * 9 * 6 * 6 * (3 + 5 + 9 * 7)
|
||||
4 * (5 * 2 + 8 * 9 * 3) + 3
|
||||
7 * 3 + 7 + 5 + ((6 * 8 * 8 + 8 + 2 * 4) * 8 * 2 * 9)
|
||||
4 * 2 + 6 + 2
|
||||
(2 * 2 + 2 * 9 * 6) + (5 + 9) * 3 * 9 * 5
|
||||
(5 + 5 * (3 + 3 + 7) * (3 * 7 * 7)) + 4
|
||||
9 + 7 + 9 + 5 * 6
|
||||
(6 + 9 + (4 + 7 * 7 * 4) + (9 * 2 + 9 + 5 + 6)) + 7 * 8
|
||||
5 + (5 * (6 * 5 + 8 + 2) + (4 * 7 * 4 * 7 * 7 * 8) * 8)
|
||||
4 + (6 + 6 * 2 + 9) + 7 * ((3 + 8) * (3 * 5 + 5 * 3 * 3 * 6) + (4 + 9 * 3 + 3 * 2 + 9))
|
||||
(7 * (7 + 7 + 5) * 8 * 2 * 8 + 3) + (2 * 4 + 8 * 7 + 3 + 2) + 7 * (7 + 2 + 2)
|
||||
(3 * 7 * 4) * 5 + 4 * 7 * 8 * 4
|
||||
7 * 3 * (2 * 7 * 9 * 7 * (8 + 4 + 2) * 3) + 7
|
||||
7 * (9 + 2 + 5 + 5 + 7 * 5)
|
||||
5 + 2 * 9 * (8 * 6 * 8 + 2 * 7)
|
||||
4 + (2 + (2 * 5 * 7 * 5) + 3 + 6) + 8 * ((3 + 4 * 4 + 5 * 3 + 6) + 2 + (5 * 8)) + 8 + 3
|
||||
2 * (9 * 7 * 3) + (8 + 7 + 8 + 2 * 3 + 9) + 8 + 9
|
||||
8 * (7 + 5 * 3 + (2 * 6 * 6 * 4) + 9) + 3 * 4
|
||||
3 + 4 * 8 * 9 + (6 + (5 + 7 * 7 * 4)) + 7
|
||||
(5 + 6 + 8 + 5 * 7) * 2 + 5 * (9 * (9 * 9 + 8 + 5) + 7 * 4)
|
||||
8 + (8 * 2 * 4 * 2 + 3 * 2) * (3 * 3) * 6 + 8
|
||||
(6 * 2 * (6 + 5 * 9 * 3) * 6 * 2 + 7) + 7 * 8 + 2 * 4
|
||||
5 + (2 + 4 + 5 * 4 + 6) + 9 * (5 * (5 + 9) * 9 * 9 * 2 + 8) * 5
|
||||
7 * 4 + 9 * (9 + (5 * 7 + 8 * 7 * 5) + 9 + 2 + 2 + (2 * 4 * 7 + 5))
|
||||
7 + 2 + (4 + (8 + 8 + 5 * 9)) + 9
|
||||
(8 * 3 * 9 + 6) * 8 + 8 + 7
|
||||
(2 + 3 * 9 * 4) * 7 + (8 * 6 * 9) * (8 + 6 + 9 + 4)
|
||||
((7 * 6 + 4) + 6 + 6) + 5 * 4 + 3 * 4
|
||||
5 * (2 + (3 * 9 + 9 * 6) + (7 + 3 + 2 * 4 + 9)) + 7 + 8 * 5 * 5
|
||||
7 * 9 * (5 + 6 + (7 * 6) + 4 + 4 + 3) * 2 + 9
|
||||
(3 * 2 + 5) * 8 * (2 + 4 + 2 + 8 + 7 * (8 * 9))
|
||||
((2 + 7 * 8 * 9) * 4 * 3 + 6 * 7) + 9 * 8 + 5 + 9
|
||||
5 + 4 + 9 + 8
|
||||
7 + 7 + 9 + 2 + 5 + ((6 * 3 + 3 + 6) * 4 * (4 + 4))
|
||||
(9 * 4) + 8 * 4
|
||||
3 * 9 * (9 + 5 * 4) + 8 + 9 * 3
|
||||
3 + (9 * 8 * (6 + 4 + 6 + 5 * 2) + 9 + (4 * 7 * 7) + (3 + 4 + 6 * 8 + 9)) * (2 + 8) + 7 * 5 * 6
|
||||
9 + 6
|
||||
6 * 8 * 8 + 6 * 6 * ((9 + 3) + (4 + 2 * 8 + 8 * 2 + 5) * 2)
|
||||
4 + (4 * (2 + 2)) + 7 + 4 + (4 * (8 + 8 + 4 + 4 + 2) + (3 + 2) * 9 + 8) + (4 + 9 * 9)
|
||||
(2 * (3 * 7 + 6 + 2)) + (4 * 6) + 6 + (6 + 9 + (2 * 2 * 2 + 6 + 4) * 4) * 5 + (4 + 2 * 5 * 8 + 6 * 2)
|
||||
4 * ((5 + 5 + 9 + 3 * 5) * 7 * (7 + 9 * 5 * 7 + 2) + 5 * (4 + 7)) + 7 * 9 * 6 * 4
|
||||
4 * 7 + 4 + ((4 + 8 * 6 * 3 + 2) + 3 + 8 * (6 * 7 * 2 * 8) * 7) * 9 + 6
|
||||
4 * 6 * ((3 * 6) + 4 + (2 * 2 * 2 * 7) + 9 + 8) * (3 + 8 * 2 * 4 * 2 * 3) + (4 + 3 * (7 + 5) + 6 + 9) + 5
|
||||
(7 + 2 + (8 + 6 * 4)) + 8 + (7 + 5 + (2 * 5 + 9) * 5)
|
||||
(7 * 8 + 5 + 8 + 8 * 2) * 6 + (5 + (8 + 3 + 4 * 5) * 9)
|
||||
8 * (4 + 5 * 9 + 6 + 8 * 7) * 3 * 6 + 4 * 5
|
||||
6 + ((6 * 3 * 4) + (8 * 8 * 2 * 5 * 8 + 2)) + 3
|
||||
9 * 3 + 6 + 5 + ((5 * 2 + 9 * 5 + 6) + (4 * 9)) + (4 * 2 * 3 + 7)
|
||||
6 + 8 + (6 + 2 + 8 + 2) * (5 + 8 + 5 * 5 + (4 + 9 + 3))
|
||||
(2 * 7) + (6 + 4 + (8 + 6 + 5 + 9 * 4 + 7))
|
||||
8 * 3 + 3 * (3 * 5) * 6 + 2
|
||||
9 + 4 + ((5 * 4 + 2 + 6) + 5) * 5 + 6 + 4
|
||||
(9 * 9 * 3 + 5 * 3 * 4) * 3 + (2 + 3 * 5 + (3 + 6 * 6 + 2) * 8 + 3)
|
||||
(6 + 9 * 9 + 7 * 6) + 7
|
||||
4 + 6 * (3 * 3 * 7 * 7 * 5 + 2) * (7 + 7 * 2 * 5 + 4 + 9) + (8 * 2 + (8 + 8 * 4 + 7 + 3 + 5) * 7) + 9
|
||||
4 + 8 + 6 * 7 * 7 + (2 * 8 + 3 + 5)
|
||||
4 * 8 * 4 * (9 * 9 * 5) + 9
|
||||
8 * 5 + (2 + 3 + 2 + 8 * (3 + 5 + 8 + 7 * 9))
|
||||
3 * ((8 * 6 + 9 * 8 * 5) + 9 * 6 + 6) * 6
|
||||
5 * 8 + 6 * (5 * 2 * 8)
|
||||
8 + (6 + 7 + 7 * (6 + 7 + 3) * (5 + 2 * 7) + 7) + (2 * 8)
|
||||
6 + 5 + 4 + 2 + ((3 + 8) * (5 + 4 * 9) * (4 + 9 + 3 + 9 + 9 * 7) + (5 + 2 + 9 + 3) + (6 + 6) + 3)
|
||||
3 * (2 + 5 * (5 * 6 * 5 + 9) + 9 * 5) * 8 * 5 + 4
|
||||
2 * 4 + 6 + (9 * 4 * 3 * 4)
|
||||
(4 * 6 * (3 + 9) + (3 * 5 + 8 * 5 * 9) + 6) + 9 + 8
|
||||
(3 * 5 + 8) + 8 * 8 * 7 + 8 * (9 + 6)
|
||||
(5 * 4 * 6 + 3 + 3) * (3 * 8 * (7 + 2 * 9 * 6)) + ((9 * 9 * 4 + 8 * 7 * 7) + 4 * 4) + 8 * 6
|
||||
3 + 5 * 5 * 6 * ((3 + 3) * 8 + (6 + 9 + 2 + 6 * 7)) * 4
|
||||
9 + ((4 * 7 + 2 + 2 * 6) + 8 * (4 * 6 + 7 * 5) * 7 + 4) + 6 + 6
|
||||
(9 + 9 * (8 * 2 + 9 + 5) * 3 * 4 * 4) + 5 * ((3 + 6 * 3 * 7) + 6 * 4) * (3 + 8 * 9 + 6 + (4 + 3 * 4 + 2) + 6)
|
||||
5 * 5 * (9 + 8 * 3 * 3 + 3) * 4 + 8
|
||||
3 + (6 * 9 * 8) + 9 + (3 + 3 + 2 + 5 + 2)
|
||||
3 + 4 * (4 * 8 + 2 * (3 + 3 + 4 + 9 * 7) + 4 + (6 + 9 + 4 * 6 + 9))
|
||||
6 * 5 * 9 * ((6 + 9 * 6 + 7) + (6 * 4 + 2 * 4 * 6 * 6) + 9 + 6 + 8)
|
||||
7 + 7 * 2 * 4 + 7 * 2
|
||||
2 + 8 * (7 + 3 * 3 + 2) + 6 + 3 * 7
|
||||
2 * 2 * 9 + 8 + 8
|
||||
9 + 5 + 4 * (6 * 7 * 5 * 7 * 4 * 3) * 3
|
||||
7 * 5 * 7 * 6 + 4 * 9
|
||||
((9 + 7 + 9 + 7 * 7 * 4) * 6 * 5) + 5 + (8 + (2 + 6 * 9 * 7 * 9 + 9) * (9 * 3 * 8 + 9 * 6 * 2) + 6 * 7) * (2 + 6 + (3 * 4 + 4) * 6 * 5) * 9 * 5
|
||||
(7 * 5 * (3 + 2 + 6 * 5 + 9) + 5 + (2 + 9) + 2) + 2 * 6 + (5 * (7 * 2 + 3 + 8 * 9) * 7 + 6 + 6 * (5 + 3 + 9)) * (4 * 6 + (9 + 7 + 4))
|
||||
((3 + 5) + 7 + 3) + 6
|
||||
3 * 4 + 4 * 6 + (5 + 8 * 2)
|
||||
7 + (7 * (4 + 4)) * 3 + 7 * 4
|
||||
(5 + 4 * 6 + 3 * 9 + 7) * (7 * 3 * 5) + 6
|
||||
3 + 4 * (8 + 2) + ((6 * 7) + 8 + 8 * (9 * 3 + 2) * 9)
|
||||
7 + (7 + 9 * 2 * 9 * 2 * (2 + 5 + 9 * 6)) * 4
|
||||
(7 + 6 + 3 + 5 * 2) + 2 * 3 + 4 * (3 + 4 * 5 * (3 + 7) + (7 + 2 * 7 * 6) + 8) * 8
|
||||
4 + (9 * 2 * 6 * (6 + 6 * 7 * 7 + 5) * 9) * 9 + (4 + 8 * 7) * 4 + 4
|
||||
6 * 6 * 2 + (4 * 2 + 7 + 4 + (2 + 2 * 5)) + 2
|
||||
8 + 2 + 3 + 3 + 8 + (6 + 4)
|
||||
8 + 9 + 2 + ((3 * 9 * 3 * 5) * 3 + (2 + 2 + 8 + 6 + 9 + 7)) + 9
|
||||
6 * (3 * (5 * 4 + 4 * 4 * 4 + 4)) * 8 * (5 + (5 + 2 * 7 + 8) * 3)
|
||||
3 + ((3 + 7) + 2 + (5 * 3 + 4 * 9))
|
||||
4 + 5 * 6 * (7 * 5 + 6 * 5 * 5 + (4 * 6 * 9 * 6)) + 7 + 3
|
||||
7 * 4 * 7 * 5 * (3 + (5 + 6 + 9 * 9 * 3 * 7) * 2 * 8 + 2 + 6)
|
||||
5 * 4 + (4 * 7 * (3 + 8 + 9)) + 4
|
||||
(7 + (3 * 5 * 7 + 5 * 8) * (6 + 9 * 6 * 7) * (3 + 9 * 8 + 4) + 8 + 7) * 2 + 4
|
||||
8 + 7 + (9 + 6 + 7 + 9 + 6 + 4) + (7 * 8 * 6 * 5 * 3) + (3 * 4 * 3 * 8)
|
||||
7 * ((4 + 4 + 9 + 3 * 3) + (9 * 6 * 8 * 7 * 3 + 6) * 7 + (7 + 2 * 3 + 6 * 2)) + 3 + (5 * 8) + (4 + 9 * 6 * (2 * 5 + 7 * 3 * 5) * 3 * 8)
|
||||
8 + (3 + (8 + 3 * 4 + 4)) * 2 * 4 * (3 + 4)
|
||||
(4 + 9 + 4 + (4 + 7 * 3 * 2 * 5 + 7)) * 2
|
||||
2 * 8
|
||||
6 * (7 * 5 + (4 * 5 * 2))
|
||||
(3 + 3 * 4 * 3 + 7 + 4) + 8 + 2 + 4 * 4 * 5
|
||||
7 * 2 * 5 + (2 * (9 + 6) * (3 * 8 + 4) + 3) * 9
|
||||
(6 * 9 * (6 + 6 + 7 + 7) * (5 * 7 + 8 * 5 + 2 * 8) + 5 + 8) * 9 * 9 + 3 * 2 + 7
|
||||
(2 * 3 + 8 + (4 * 2 + 7 * 2 + 7 + 7) + 3 + 6) * 3 * (6 + (9 + 7 * 2 + 2) + 6) + (4 + 3) * 3
|
||||
4 * (6 * (8 * 8 + 7) + 7) * 6 * 9 * (4 * (6 * 4 * 3 * 2 + 6) + (8 * 9) + (9 + 3) * 4)
|
||||
5 * 7 * 2 * (2 * 2 * 5 * (8 + 6))
|
||||
(8 * (7 + 7 + 8)) + 2 + 9 * 9 + 9 * 4
|
||||
6 + 6 + 5 + (2 * (8 * 7 + 3 * 6) + 9) * 7 + 6
|
||||
8 + 6 + (8 * 4 * 8 * 2 + (6 * 6 + 9 * 3 + 6)) + 3
|
||||
9 * 5 * 4 * (5 + (3 + 7) + (4 + 4 * 5 + 5 * 8 * 9) * 5)
|
||||
5 + 4 * 9 * ((2 * 4 + 8 * 2 * 7 + 2) + 4) * 9 * 3
|
||||
3 + 6 * (6 + 2 + 3 * 2) + (3 + 5) + ((3 * 6 + 5 + 7 + 8 * 8) * 9 + (5 + 8 * 7 + 6 * 8 + 7) + 7 + 8 + 5)
|
||||
7 * ((7 + 5 * 3 * 5 + 4) + 7 + (6 * 3 * 6 * 6 * 7 * 7))
|
||||
((5 + 7 * 9 * 2 + 3) * 2 + 9 * 3) * (4 + 6) * (4 * 7 * (9 + 6 * 8 + 5) * (3 + 8 + 9) + 9 * (8 + 6 * 9 + 6)) * 6 + 4
|
||||
2 * (6 * 3 + 4 + 4 * 2) + 6 + 7 + 5
|
||||
2 + 7 + 5 + 5 * ((7 * 6 + 2) * 8 * 8) + (2 * 5 * 4 * 5)
|
||||
3 + (7 * 8 * 5) + 5 + (5 + (4 * 4 + 7 + 2) + 6 + (8 + 3) * 9 + 4)
|
||||
6 * (9 + 5 + 6) * 5 + 5 * (7 * (3 * 5 + 6 + 2 * 5) * 2)
|
||||
(9 + 6 + (9 + 7 * 5 + 6 * 7) * 7 * 3) + 3 + 4 + 6
|
||||
7 * ((5 + 4 + 6) + 7) + 2 * 3 + (6 + 9 * (6 * 4 * 8 * 3 + 4 * 2) + 7) + 3
|
||||
7 * (8 + 9 + 5 * (9 * 7 * 9) + 2) + (7 + 7 + (7 + 3 + 2 * 2) + 4 * 2)
|
||||
3 * (2 * (4 + 6) * 8)
|
||||
8 + ((6 * 4 * 8 + 4) + 7) * 7
|
||||
(7 + (2 + 8 * 8 * 6 * 2)) + 7 * 2
|
||||
(4 * 2 + 4 * 8 + 4) + (3 * 9 + (2 * 4 + 2 * 7) * 9 + 7) * (5 + 9) * (7 + (3 * 4 * 4 * 6) + 8 * 7) + 8 + 8
|
||||
8 + (2 + 2 * 8 * 7 + 7) + 2 + 4 * 3 + (8 + 9 * 9)
|
||||
3 + 2 + 8 + (9 + 3 * (3 + 2 + 9 + 7) + 4 * 4 * 7) * 3
|
||||
5 * 4 * 7 * 3 + (9 * (6 * 6 + 2 * 4) * 8 + 2 * 9)
|
||||
4 * 7 * (3 + 6 * 6 + 4 + 8) + 5
|
||||
(8 + (8 + 2 * 9 + 3 * 3) * 8 * 8 * (9 * 6 + 2 * 6)) * 9 + 5 * 2 + 5
|
||||
5 + 6 + 3 + 4 * 9 + (4 + (4 + 3 + 9 * 2) + 4)
|
||||
3 * (5 + 3) * 7 + 6
|
||||
((3 * 2 + 2 * 6 + 5 + 3) + 4) + (4 * (8 + 2 + 9 * 2) * 8 + (8 * 3 + 6 + 2 + 6) * 2) + 7 + 2 * 9
|
||||
6 * 8 * ((8 * 8 + 3 * 7 + 8 * 4) * 4 + 9) + (8 * 7 * (6 * 8 * 3 * 2) * 3) * 2 * 8
|
||||
(2 * 7 + 4) * 2 * (5 * 4 + 2 + 5 + (7 + 5) * (4 * 3 + 6 * 8 * 5 + 9)) * 5
|
||||
(6 * 8) * (7 * 7 + 8 * 3 * 3) * (5 * 8 + 2)
|
||||
(6 + 6 * 2) * 5 + ((7 * 6 * 8) * 8 * 9 * 4)
|
||||
(8 * 4 * 9) + ((5 * 3 + 6 * 3) + (9 + 9 + 9 * 2 * 2) * (4 + 9 * 7 + 2 * 2 + 3) + 6) * 7 * 6 * 6
|
||||
((4 + 3) * (2 * 5 + 8 * 2 * 4) * 9) + 6 + (6 + (5 * 4 * 5 * 3 + 3) * 6 * (5 * 3 + 7 * 2 + 4 + 8)) + 4 + 7
|
||||
(6 * 9 + 9 + 7) * (6 * 2 * (4 * 7 * 4 + 4 * 5 + 7) + (7 + 5 * 8 * 4 + 9 + 6)) * 7 + 8 * 5 + (9 * 5 * 2 + 7)
|
||||
6 * 6 + ((2 + 9) * 5 + 2 * 3 + 3 * 3) + 9 * ((4 * 7) + 5 + 8 + 4)
|
||||
5 + (4 * 5 + 5 * 3 + 7) * 6 * 5 + (2 + (9 + 7 + 8 + 4))
|
||||
(2 * 4 + 5 + 8 + 6 * 9) + 3 + 6
|
||||
9 + (9 + 8 * 3) * (3 + 8 + 6 + 5) * 5
|
||||
(3 + 9 * 5 + 7) + 2
|
||||
((9 + 5 * 2) * 5 + (4 + 2 * 7) + 9) * 8
|
||||
(4 + 4) * 9 + 3 + 2 * 8
|
||||
(3 + 4 * 8 + 9 * 6 + 6) * 5 + 8 + 9
|
||||
3 * 8 + 9 * (3 * 4)
|
||||
6 + 7 * 6 * 7
|
||||
3 * 3 + (8 * 8 * 9 + 3 * 8 + 2) * 3 + 8 * 2
|
||||
5 + ((6 + 2 * 6) * 8 + 6 * 5) + ((7 + 3) + 2 * 5 + 7 + 6 + 5) + (8 + 2 * 7 + 4 + 2 * 3) * 2 * 5
|
||||
(6 * (6 * 7) * 7 + 3) * 9 + 6 * 3
|
||||
(5 * 9 + 7) + 8
|
||||
(3 + 9 * 3 * 9 * 2) * 9 * 5
|
||||
5 + (6 * 3)
|
||||
7
input/day18_example.txt
Normal file
7
input/day18_example.txt
Normal file
@@ -0,0 +1,7 @@
|
||||
1 + (2 * 3) + (4 * (5 + 6))
|
||||
1 + 2 * 3 + 4 * 5 + 6
|
||||
2 * 3 + (4 * 5)
|
||||
5 + (8 * 3 + 9 + 3 * 4 * 3)
|
||||
5 * 9 * (7 * 3 * 3 + 9 * 3 + (8 + 6 * 4))
|
||||
((2 + 4 * 9) * (6 + 9 * 8 + 6) + 6) + 2 + 4 * 2
|
||||
6 * ((3 + 4 * 3 * 7 * 8) * 8 + (9 + 5 + 2 * 3) * 3 * 2) + 7 + 8 * 8 + 4
|
||||
578
input/day19.txt
Normal file
578
input/day19.txt
Normal file
@@ -0,0 +1,578 @@
|
||||
77: 30 112 | 20 13
|
||||
121: 43 20 | 123 30
|
||||
42: 57 30 | 101 20
|
||||
30: "a"
|
||||
50: 65 20 | 134 30
|
||||
37: 89 20 | 43 30
|
||||
106: 16 30 | 54 20
|
||||
17: 30 84 | 20 35
|
||||
129: 89 20 | 96 30
|
||||
123: 30 30 | 20 95
|
||||
20: "b"
|
||||
115: 20 70 | 30 93
|
||||
112: 30 90 | 20 123
|
||||
4: 20 55 | 30 5
|
||||
72: 20 90 | 30 123
|
||||
51: 30 20 | 20 95
|
||||
24: 131 30 | 7 20
|
||||
94: 121 20 | 15 30
|
||||
117: 133 30 | 102 20
|
||||
92: 28 20 | 43 30
|
||||
70: 87 30 | 96 20
|
||||
88: 109 20 | 36 30
|
||||
35: 20 36 | 30 61
|
||||
96: 30 95 | 20 20
|
||||
47: 96 20 | 66 30
|
||||
6: 20 55 | 30 123
|
||||
130: 30 29 | 20 88
|
||||
68: 5 20 | 89 30
|
||||
66: 95 95
|
||||
75: 96 30 | 55 20
|
||||
3: 20 90 | 30 5
|
||||
7: 20 53 | 30 123
|
||||
86: 30 5 | 20 53
|
||||
105: 20 87
|
||||
46: 134 20 | 87 30
|
||||
102: 30 111 | 20 103
|
||||
93: 87 20 | 87 30
|
||||
79: 116 20 | 71 30
|
||||
8: 42
|
||||
33: 5 20 | 87 30
|
||||
107: 96 20 | 123 30
|
||||
90: 20 30
|
||||
110: 20 59 | 30 32
|
||||
16: 30 68 | 20 39
|
||||
52: 4 20 | 38 30
|
||||
71: 96 30 | 51 20
|
||||
38: 96 20 | 90 30
|
||||
28: 20 30 | 30 30
|
||||
27: 30 64 | 20 24
|
||||
91: 30 27 | 20 113
|
||||
1: 20 90 | 30 134
|
||||
54: 105 20 | 18 30
|
||||
0: 8 11
|
||||
73: 65 20 | 55 30
|
||||
132: 30 17 | 20 19
|
||||
41: 20 51 | 30 22
|
||||
45: 22 30 | 53 20
|
||||
14: 124 20 | 73 30
|
||||
22: 30 30
|
||||
23: 87 30 | 55 20
|
||||
10: 30 89 | 20 134
|
||||
120: 56 30 | 9 20
|
||||
11: 42 31
|
||||
109: 95 134
|
||||
127: 30 53 | 20 123
|
||||
61: 20 53 | 30 90
|
||||
103: 127 30 | 23 20
|
||||
116: 90 20 | 87 30
|
||||
134: 20 20 | 30 20
|
||||
114: 20 63 | 30 41
|
||||
64: 20 118 | 30 25
|
||||
12: 30 48 | 20 3
|
||||
111: 20 23 | 30 72
|
||||
60: 79 30 | 120 20
|
||||
59: 20 28 | 30 87
|
||||
65: 20 30 | 20 20
|
||||
44: 89 30 | 28 20
|
||||
18: 65 20 | 43 30
|
||||
32: 95 123
|
||||
83: 30 66 | 20 22
|
||||
63: 20 123 | 30 55
|
||||
48: 30 134 | 20 43
|
||||
99: 20 12 | 30 125
|
||||
43: 20 20
|
||||
133: 20 100 | 30 110
|
||||
80: 20 50 | 30 44
|
||||
125: 20 98 | 30 86
|
||||
135: 128 30 | 130 20
|
||||
131: 20 55 | 30 134
|
||||
122: 97 30 | 60 20
|
||||
25: 30 43 | 20 51
|
||||
95: 20 | 30
|
||||
55: 30 95 | 20 30
|
||||
13: 43 20 | 43 30
|
||||
21: 20 76 | 30 80
|
||||
98: 89 30 | 65 20
|
||||
81: 106 30 | 85 20
|
||||
53: 30 30 | 20 20
|
||||
78: 45 30 | 37 20
|
||||
89: 20 30 | 30 20
|
||||
9: 96 30 | 43 20
|
||||
31: 2 20 | 82 30
|
||||
56: 5 20 | 96 30
|
||||
76: 1 20 | 23 30
|
||||
62: 92 30 | 10 20
|
||||
58: 30 22 | 20 43
|
||||
85: 77 20 | 67 30
|
||||
26: 30 58 | 20 6
|
||||
101: 30 81 | 20 91
|
||||
29: 83 30 | 47 20
|
||||
126: 20 53 | 30 55
|
||||
2: 122 20 | 135 30
|
||||
15: 5 30 | 51 20
|
||||
34: 20 37 | 30 116
|
||||
82: 30 104 | 20 132
|
||||
19: 40 20 | 62 30
|
||||
108: 21 20 | 119 30
|
||||
36: 30 22 | 20 87
|
||||
104: 69 30 | 99 20
|
||||
100: 20 7 | 30 61
|
||||
39: 89 20
|
||||
87: 30 20
|
||||
113: 52 30 | 34 20
|
||||
5: 30 30 | 30 20
|
||||
40: 4 30 | 107 20
|
||||
97: 20 26 | 30 78
|
||||
67: 30 131 | 20 126
|
||||
118: 20 134 | 30 66
|
||||
124: 96 30 | 22 20
|
||||
128: 30 114 | 20 14
|
||||
119: 30 49 | 20 74
|
||||
84: 129 30 | 33 20
|
||||
74: 30 6 | 20 46
|
||||
49: 30 38 | 20 75
|
||||
57: 117 30 | 108 20
|
||||
69: 20 94 | 30 115
|
||||
|
||||
aaabbaababbababbabaabbbaaabbbbaa
|
||||
baabaabaaaabbabbbbbaaabb
|
||||
aabbbaaabaaaabbbbaabbaaa
|
||||
bababbbabbabbaaaaabababbbbaaaaaaaaabbaabaaaaabababaaabbaababbaab
|
||||
baababbbbbbaaaababaaaababbabbaaaaabbbbbbbabaabaaaaabbbbb
|
||||
abbaaabababbaaaabbaabababbbabbaa
|
||||
aaabaaabaaabaaaaaaabbbab
|
||||
abaaabaabbababababaaabba
|
||||
aabbbbbbaaabbaaaabbabbbb
|
||||
aabbbabaaaababaabbbababb
|
||||
aaabbabbbaabbabbabaabbba
|
||||
bbbaaaabbbabbbaaababbaabaaabaaaabbbbabba
|
||||
babbbbaaaaabaaaabaaababbbabbaabbbaababbaabaaabab
|
||||
aabaaaaabbaaaaaabbababbbbabaaaaabbaaaabb
|
||||
bbbbababaaabbaaaaababbaa
|
||||
baabaaabbbbbababababaabbaaabbabbaabbbaab
|
||||
bbaabbabbbabbbaababbbbbabaabaabbbababababaaabaaa
|
||||
baabbbbbaaaabbbabbbbbbbb
|
||||
bbabbaabbbabbaaabbbaabaabaaabbbbaababaaa
|
||||
babbbaababbbabbababaabbb
|
||||
aabbbbbabbbbaaaabbbaabababababbb
|
||||
aabbabaababababababbaaabaaabaabb
|
||||
aabababbaaaaaaaababbbbaaabaaaaaa
|
||||
abbbababaaabbaabababababbaaabbbbaaabaabb
|
||||
baabbabaaabaaaaabbbbbaabababaaaa
|
||||
abbbbabbbababbababbaabbbbaaaabba
|
||||
abababbababaaabbabaabbbb
|
||||
aaaabbbaaaaaabaabaaabbba
|
||||
bbaabaababaaaabbaaaaaabb
|
||||
aaabbabbaabaabbbaabbaaba
|
||||
aaaaabaabbaabaababbabaaa
|
||||
bbabbbbabbbaabbbabbbbaab
|
||||
aaabbabbbaaabbbbbaabaabbbabababbaaaaaababbbbaabb
|
||||
abaabbabbabaaabababaababaabbabbbabbbbaaaaabbbbaabbaaaaababbbabbaabbbbbabaabaabbabbbbbaabaaaabbab
|
||||
bbbaababaaaabababaaaaaab
|
||||
bbbbabbbaaababbbaabbbbbb
|
||||
babbbaabaababbbaabbbbbaa
|
||||
abababbabbbabbabbbbabaaa
|
||||
abaabaaaaabaabbabaaabbbbbbababab
|
||||
abababbaaabababbbababaaa
|
||||
baaabbabbbbbbabababbaaababbbbabbbaababbbaabbbbabbbaaabbabbbbbbab
|
||||
aababbbaabababaaaaaaabab
|
||||
baaabbababbaaaababbabbbabaaabaaabaabbbbaaabbabaabbbaabbbabbabbabaabbaaab
|
||||
baaaabaabbababbbbbbbbababaaabaab
|
||||
bbabbaababbabaabaaabaaabaaaabbaaabbbbaab
|
||||
bbbaaaaaabbaaaaabaaaaaaa
|
||||
bbabbbaababbbaaaababababbbaabaabbbbbababbaaabbbaabbaaaabbaaaaaaa
|
||||
abbbbabbaabbabbbaaaaabba
|
||||
babbababbaaabbabbabbaabaaaaaaaba
|
||||
bbbbababbababbbbabbababbaaababab
|
||||
abbaaaababbabbbbbabbaaabaababaab
|
||||
aabbbbbbabaabababbbabaaa
|
||||
aaaaaaaababaaabaabaabbaaabbabbbaabaaaaaabbaabbba
|
||||
abbbababaaaaabaaaababbbaaaabbaaa
|
||||
bbbbbabbaabaaaaaaabaabbaaaaabbaa
|
||||
ababbabababbbaabababbbaaabaabbbb
|
||||
ababaabaabbabbbabbbabbbabbaaaababaabbaaa
|
||||
ababaabaaaababbbbaaaabaabababbaaabbababb
|
||||
aaabbbaabaabbbbbbaaababbaaaabbbabbbbbbbb
|
||||
aaababbbaaaabaabbababaab
|
||||
aabbbabaababbbabbaaaabab
|
||||
abaabbbbbbabaabaaababababbbabaabbaabbaabaabababbabbaaaababaaaaaa
|
||||
abbaaaababaaaabaabbbbbabbbaaabaaaabbabaa
|
||||
babaaaaabbbaabababaaabbb
|
||||
abbbbbbaabaabaaabbaaaaaabbabbbaabbabbbbbaabbbbababbababb
|
||||
baabbababbbabbababbbbbaa
|
||||
bbabaababbbabbabaabbbaab
|
||||
ababbbabbbbbabaabaaaaabb
|
||||
babbbbbbbaaaabbbabbbbaba
|
||||
babbabaabaaabbababaababaababaaab
|
||||
aaaababaaaababaaabbbabbaabbaaaabaaaabbab
|
||||
abbaabbbbbabbabbababbbbbbbbabbaabaaaababbbbaabbabaaaabbbbabaaaabaaaabbab
|
||||
baabbbbabaabbbbabaaabaaa
|
||||
aaabbaaaaaabbabaabaaaaab
|
||||
abbabaabbaaababbaabbabab
|
||||
aabaabbbbaababbabbbbbaaabbbaaabb
|
||||
aaaaaaaaaabbabbbaabaaabbabaaabababbbaababbaaabababbbbaaaaaabbbababaaaaaa
|
||||
babbabababaaaababaaaabba
|
||||
abbaaaaaaaabbaaabbbaabaaabaaaabbabaabaaabbbaabbbbbbaabbbbbaabababababaab
|
||||
bbabaababaabbabbbbaaaaba
|
||||
bbabbbaaaabaaabbbbbabbbaaabbbbba
|
||||
babbbaaaaabbaaaababbbabb
|
||||
bababbabbbaabaabbbbaaaaabaabbbab
|
||||
bbbaaaaabababbaabaaaaaab
|
||||
babababbbaabaaaaaaaabbbaabbbabbb
|
||||
aaaaabaabbabbababbaabbba
|
||||
aabababbabbabbaabbbaabbb
|
||||
baaababbaabbaaaaaabbbabb
|
||||
bbaababbaaabbbaababababbaabbaaabaaababab
|
||||
baaaabaaababababaabbabbbabababbaaababbbbbbbaabba
|
||||
babbbbabbbabbababaabaaabbbbaaaabababaaab
|
||||
baaaaabaaabbbbaaabbaabbaabaabbbabababbabbaaabaaaaaabaaababaabbabbabaaaaaaaabbbbb
|
||||
babbbaaaabbbbbbbaaaababbaabbbbbbbbbaaaabbbabbbbabaababaa
|
||||
baabbbbbabababbaabababaabaabaabaaababbbbbbaabbaa
|
||||
babaaababaaaaabaaabaabbabaaabbabbaaaabaabbbaabbbbbabaaabaaaaabbabbbabaab
|
||||
abbabaaababaabaaabaaabaaababbbaababbababbaaabaaababbaaaa
|
||||
ababaabaabbababaaaabbbbb
|
||||
baababbabaabbbbbbbbaabaaababaaabbbbbbbaa
|
||||
aabbaaabbbbababbababbaaa
|
||||
babaabbabbbbbabbabbbbaba
|
||||
abbbabbbbaaababbabaabbaabbbabaaa
|
||||
babbbaaabaaaabaaaaabaaabbaaabbbbbabbaabaabaaabba
|
||||
bbbbabbbbabbaababbabbbbb
|
||||
bbbbaaaabaabbbabbbbabbaaaabbbaab
|
||||
babbbbbababababaaaaabaaa
|
||||
babbaabbbabaabbababaaaab
|
||||
abbbabbabbababbbaabbbbaa
|
||||
aaabbaababbbabbbbbaabaaa
|
||||
babbaabaabaabaaaaaaaaaaabababbba
|
||||
aabaaaababaaaabaababbbababbbababaabababa
|
||||
bbbabbbbaaababbaabbbaaaabbbbbaabbabbbbbaaaabbbbaabbbaabb
|
||||
abbabababbabbaaaabaabbba
|
||||
abbaaaabbaaaabbabbbababaabbbabaa
|
||||
abbaaabbbbaaababbbbaaaabbabbbbbabbbababbaababbab
|
||||
baaababbababaababbbbabaaaabbababbaaabaaa
|
||||
babbaaabbaabbbbbaabaaaaababbabaabaaabaabaabbbabbbabaabaa
|
||||
aaababbbaaaababaababbaab
|
||||
baaaabbbbaabbbaaabbaabbb
|
||||
babbbaabaabbabababaaaaabaabbaabababaabbb
|
||||
abbabbbbabababbababbaabaaaaaaaababbaaabbabbbbbaabbbabbabbbbababb
|
||||
baaabbbbabbbaaaabbbaabba
|
||||
abababaabaabaabbbbbabbbaaaabbababaabbbaabbababab
|
||||
aaaabaababababbaaababbbabbabbaabaabbbbabbbbbbbaaabaaaaaa
|
||||
aabaaabababbbaabbbbbbbaa
|
||||
aabaaaabbaabaaaaaaaaabba
|
||||
babababbaabbbaaaabbaaaba
|
||||
abbabbbaaaababaaaabaaaaaaabbbbbbabaaabbb
|
||||
bbbaaabaaabaababbbbaabba
|
||||
bbabaababbbbbabbaaaababaaabaaaaaabbbbaaabbaabaaa
|
||||
aaaababbbababbababbbbbbaaaabaaaaabbaaabaabbbbbaabababaab
|
||||
baabbbbbaabaaaababbabbaaaaaabaaa
|
||||
bbbbbaabbbbbabaababbbaaabababbbbbbbaaaaaabbbbaba
|
||||
ababbaabaabbaabbaaaabbbb
|
||||
bbbbbaabaabbbbbbbaaaaaaa
|
||||
bbbbbaaabbbbabbbaabaaabbbabaabbb
|
||||
bbbbbaabaaababbaaaabbaaabbbbababbabaabbabbbaaabbaaaaabbb
|
||||
baabbbaabaabbababbababbabaaaabab
|
||||
abaababbabbabbaaababbbba
|
||||
aaabbaababbabababababaaabbabbbbb
|
||||
aaababbbbabbabaaabaabaaabbbbaaba
|
||||
baaababbbabbaaabbaabaaaabbbababb
|
||||
abbbbbbaabbbabbaaabaaaabbbababbbaaabbbab
|
||||
bbbbbababbbaababbababaab
|
||||
aaaababababbbaaaabababbb
|
||||
bbabbaababbababaaabaaababbbbababbbbbbbabbbaaabbb
|
||||
abbbbbbbaabaabbaaabbbaab
|
||||
bbbaababbbbbbaaaaaaabbab
|
||||
babbbbbaaaaababbaaaaaabb
|
||||
baabbbaabaabbababbabbabb
|
||||
baabbababbbaababaabbabba
|
||||
baababbabaaabbabbaaababbbabbbbbbbaababbbbabbbabbbababaab
|
||||
bbaaabaaaaababbaaaabbbab
|
||||
babaabbaabbbbbbbbabaabbb
|
||||
ababaabaaaabbbaaabababaaaabaaabbbaaaaabb
|
||||
baabbabbaabbaabbaaaabababbabaaab
|
||||
aabaabbbaaababbbabbbbaab
|
||||
bbbbbaaaaaabbabababbbbaaaabbbabb
|
||||
baaabaabbaaabbbabaabaaababaabababbbababababbaaababaabaabbbbabbabaaabbabbaabbaaabaaabaaab
|
||||
aabbbbbbaabaaabbbbabbaaabaaaaabaabbbaaaababaabaa
|
||||
aaaabaabbababbabbbbabbbbaabbbababbbaaabaababaaaaabbabbab
|
||||
babaababaaaabaabbaabaabbbaabbababbabbbbb
|
||||
bbbaababbbbaabaaabbbabbbabbaaaba
|
||||
baaaabbabbbbaaaaaaaaabbbbbabababbbbababaaababbbabbababababbbbbba
|
||||
abbbabaaabaabbbaaabaabaabbbbbbab
|
||||
babaaaaabaabaabaaaabaabb
|
||||
aabababbabaabaaaaaaabbbabbaabbabaaaabbabbaaabbba
|
||||
ababbbabbbbbbaaaaaabbaababbbaaaaaaaaabba
|
||||
baabbabbbbabbaababbabbaaabaabbba
|
||||
bbaaababbabbabbabbabbaabaaaaaababaabaaabaababaaa
|
||||
baabbbbbbbbaabaaabbabaaa
|
||||
abbabababaaabbabbaaaabab
|
||||
ababbababaabaaabaabbbbbbbbbabaab
|
||||
baabababbaaaabbababbaaaaabaabbaa
|
||||
abbaaabbabbabbabaaaaabbbbabbbbaaababbbbbaababbabbaababbaabbbabba
|
||||
abbbbababbabaabaabbaaaabbaabbabaaabbaababaaabaababaaaabbabababba
|
||||
babbaaabbbabbabaaaabbbab
|
||||
aabbbaaaabbbbabbaaabbbbb
|
||||
baababbbbaaabbababbbabbbbbaaabaaaabbaaaaaaaabbab
|
||||
babaabababababbababbbbbaabbabaaa
|
||||
babaaabaaaabbabbaabaaababbaabaabbaababbbabaabbbabbbbabbaabbaabaa
|
||||
baababbabababbabbbabbaabbaabbbaabbbababb
|
||||
baabaabbababaabbaabbaaaaaaaaabba
|
||||
aaaababbbabbaababbbbaaba
|
||||
bbbabbbaaaaababbaabbbbaa
|
||||
abaaaabaaaaaaaaaaaabbaaaabaabbab
|
||||
ababbaabbabbaaaabbbbaaab
|
||||
baaabbbbabbbaabababaabababaabbbb
|
||||
baabaabaaabaaabbbbbaabaaaabaababaabbbbba
|
||||
bbbbabaababbbaabaaaaaabbbaaababa
|
||||
abbabababaabbabbababbabb
|
||||
babababababaaaaaabbbbbaa
|
||||
aabbbbbbbabaaaaabbbaaaaaabababbbabbbaabbababbaaa
|
||||
babababaabaababaababaaab
|
||||
baababbabaabbbbaaaabbbaabaaabbabababaababaaabaabababbbbbbbabababbaaabbaa
|
||||
abbbaabaaabbbabaaaabbbbb
|
||||
bbabbabaabbabbbaaabbabbbaababbababbabaaa
|
||||
abbaababaaababbbabbbbbab
|
||||
aaababbababaaabbabbababb
|
||||
baaaaabababaaabbbaabbbaabaaabaaa
|
||||
aabaaaabbbbbababaaababbb
|
||||
abaaaabbbabbabbaabbbbbbbabbaabbb
|
||||
bababaaababbbbaaaaaabababaaaababbaabbbabbaaabbabaabaaaaababaaaabaabaabbabbbaaabbaababaab
|
||||
aabbabbbabbaaaaaaaababab
|
||||
bbbaaaaaababbaabababbbba
|
||||
ababababbbababbbaaabbaabbababbbabbaabbaa
|
||||
aabbabaabaaabaabaaabaabaaaabaabbbbababbaaaababababbbbbabbbaabaaababbaabababaaaabbaaaaaba
|
||||
abbbbabbbbaaaaaabbaabaaa
|
||||
aaaababbbabaaabbbabaababaaabaaabaaaaabbb
|
||||
ababbbaaabbabbaabbaaabbb
|
||||
abaaaabbbaabbbaaaaabaaabbbabbbba
|
||||
aaabaaaaaaabbabaabbabbaababbbbbaabaabbbb
|
||||
aaabbabbbabbbaababaababbaaaaabbbaababbbb
|
||||
aabaabaabaaaabbabaaabbaaabbabaaaaabbabbbbbabaaaabbbababbaabaabbb
|
||||
abaabbaababbaaabbabaaabbbabaabbabbabbabaabbbbbabaababbaa
|
||||
ababbbabbbbabbbbbaaaabbbabbabbbaaaaaaaab
|
||||
abbbabbabaaabbababbbababaaabbaabaaaaabba
|
||||
abaaaabababaaaaabbaabaabaababaaa
|
||||
bbbbbbabbabbbbaaaaabbbabbbaaaabaaabaabab
|
||||
bbbaaaaaabbbbbbbaabababa
|
||||
baabaaaabbbabbbaabababbb
|
||||
aabbbabaaaaaabaabbbabbaa
|
||||
babaaabbaaaaabaaabbbbbbbbabaaabbaaaaabab
|
||||
bababbbbbaabbabbbbaaabbb
|
||||
bbaabbbaabbabbbbaabbbabb
|
||||
abbabaabbabbaabaaababaaa
|
||||
bababbaabaabaabbabbabbab
|
||||
bbbaababbabbabaabaabbbbabaaaaabbbbbbaaab
|
||||
bbbaababbabbbbaabababbba
|
||||
babbaabbbabbabaaaabbabbbbabaaaabbbbababb
|
||||
bbaabaababaabaaaababaaababaaabbaababbbbb
|
||||
abbbabbbaababaaaaaabbabbabababaaaaababaaaaababbabbaababb
|
||||
abbaaabbbaabbabbabaabbaaaababbbabbaabaabababbbabaaabbbab
|
||||
abbbaaaaaabbbaaabbaaabbb
|
||||
bbbbbabbabbabbaaabbabbbb
|
||||
baabbabaaaaabababaaaaaab
|
||||
aaaababbbbbabbbaaaababaabababbbb
|
||||
abbbabaabbbababbbbabbbaaaaaaabaaaaaaabbbaaababab
|
||||
baaabbbbaaabbaabbaaabbababbaababbbbaaaba
|
||||
bbaababbbbbbbababaaababbabbabbbaaabbbabaabbbabbbbaaabaabaaabaaba
|
||||
aaabaaaabbbbabbbbabbbabb
|
||||
bbabbaababaababababbabbb
|
||||
babbaaababbbbabbabbbaaabaabbabba
|
||||
bbabbaabbabbabaababaaaaaaababbabbaaabbaababbbbbaababbbabaababbabbbabbbaabbbabbbbabaabbab
|
||||
baabaaaaabaaaabbabbbbbbbaabbbaaabaaabbabbabbabbaaaaaaababaaababaaaaaabbb
|
||||
bbaabbabbbaaabaabbaababa
|
||||
aababbbabbbaabaaaaabbbab
|
||||
baabbbbaabbabbaabbaaaabb
|
||||
bbabbaabbaaaabaaaaaabbbb
|
||||
baabaabaaabaabbaabababbb
|
||||
abaabbaabbaabaabbbaabbabaaabbbaaaaaaabbb
|
||||
bbbbbababbaaababbaabbaaa
|
||||
bbaabbabbbabbaaabaabbbab
|
||||
bbbaaaaaabbbbbbbaabbabaa
|
||||
bbaaababbbabaabbaabbaaaaaaabbbbbbaaababaabbbbbbbbabaabaaaabbabab
|
||||
aabbaabbbabbaaabaabbaaaabbababab
|
||||
abbbabbaaaababbaabbaaaaa
|
||||
aaabbabbbbaabaabbbabbaaaabbaaabbbabbbaba
|
||||
abaabaaababbababaaababbbaabbbabb
|
||||
abaaaabababbbbbbaaabaaaaabababbaaabbbbab
|
||||
abbaabbbbbabbbbabbbaaababbabaaabbbabbbab
|
||||
babbbbbbbabaabbabaababbaabaabaaaabbbabaababbbbab
|
||||
bbbabbbbaabbaaaaabbaabaa
|
||||
bbbbbaaababababbbaaababa
|
||||
baabbbaabaabbababbbaababbbababbbabaabbbb
|
||||
bbaababbbabaaabbabbbaaab
|
||||
baabaaaaabbaaaaabbbaaaabbabbabbaaabbbaaaaabaabbbbbbbaaba
|
||||
abbbababaaaaabaaababbabb
|
||||
aaaaabaababbaaabaaaababbbaaabbbbababaaaa
|
||||
ababbaababbabbbababbabbabbabbaababaaaaabbbbbaaaabbbaaaba
|
||||
baaabaaabbbbabaaaababbaabbbaaabaababbabbaaabaaba
|
||||
bababbaaababababaabbabbbaabaabaaabaaabbaabbbaaaaabbbabaa
|
||||
abbaaabbabbaababbbaaaaaabbaaaabb
|
||||
bbaabaabbbbaaaaabababababbabbbaaaaabbbba
|
||||
bbaababbabbababaabbbaababbabbabbbbabaaab
|
||||
abababaaabbbaaaabababbaaabbbaaababaaaaab
|
||||
abbabaababbbbabbbbaabbbb
|
||||
ababbaabbabbabababaaabbb
|
||||
aababbbabababaababbbbbbaababbabbaababbbbbbbbaaaababbaabbbaaaaabb
|
||||
abbbaaaaaabababbababbbba
|
||||
babbabaaaaabbbaabaaabbaa
|
||||
aabaaababaabbbaaaabaaababaaababbabbbaaaaaaaabbaa
|
||||
bbaabbabbbabbabaaabbaaba
|
||||
bababbaabbbaababbaaaabaaabbbbaab
|
||||
bbbabbbabbbabbababbbaaab
|
||||
abbbbbbbaabbabbbaaaabaabaabbaaabaaaabbbb
|
||||
bbbbbabbbaababbbaabbaaba
|
||||
ababababababababababbabb
|
||||
baaaaaaabbabbaababaaabbb
|
||||
bababbaaabbabababababbabaabaabbabbaababaababbbbb
|
||||
bbabbaaabbbbaabaababababaabbbbabbabaabbbbaabbbaabbaaaababaabaabb
|
||||
abbababaabaaaabbbabaaaab
|
||||
bbabaabababbaabbbabbbbbbabbbbaabaabaabaa
|
||||
bababbaaaabaaaaabbbbaabb
|
||||
bbaabbabaabaabbbbabaabbaababaaababbaaaab
|
||||
babaaabaaabaaaabababaabababbbaba
|
||||
babbbbbaabababbaaaabbaabbabbabaabbaabbbb
|
||||
abbababaabababaababaaababbbabbaa
|
||||
aabaaaaaabbabbaabbabaababaababbaabaaabbb
|
||||
abaabbaabbbbbaaaabbaabba
|
||||
babaabbabaabbbbbbbabbbaababbbaabbbbababbaabbbaaabababbbbbaaababaabbbabbabbaaaabbaababaabaaaabbba
|
||||
aaaabbbabbaaababaaabbaaaabababaababbbbababbaabbb
|
||||
baabbabaabbaababaabbabab
|
||||
ababaabbaabaaabaabbababb
|
||||
aabbbababbaabbabaaaaabaa
|
||||
ababaababbbabbbbbaaaabab
|
||||
ababaababaaaaababbbabbbaabbbabaa
|
||||
abaabbaaabbabababbbbabba
|
||||
babbbbbabbaaaaaaaaaaabab
|
||||
bbabbababbbabbbbababbbbb
|
||||
abaababbabbaaabbbbbbababbbbbaaaa
|
||||
abaaaabbbababbbbaababbbb
|
||||
baabaababababbbbababbabb
|
||||
baaaabaaaaabbabbabbabababaabbababbbbabaaabaaababbabbaaaa
|
||||
aaaaaaaabbbabaaabbabbabaaabbbbaaabaaababababbabbabababab
|
||||
bbbaaaabaaabaaaaaabaabbbbababaab
|
||||
baabbbbabaaaaabaabbbaabb
|
||||
abaaaabaabbaaaaaabaababbbaaabbba
|
||||
ababbbaabbbaabaaaaababab
|
||||
aaababbabbbbbabbabbbaaaabababaab
|
||||
bbbbabbbbababbabaabbbbba
|
||||
baaabbbbbbbbbaaabbaaabaaabaaabbaaababbab
|
||||
bbabbaabababbbbbbbbaaabbabbbaaba
|
||||
aaabbababaabaaabbaababbbbbaabbababbaaabbbbabbabbaabbbbab
|
||||
abbaaaaabbabbaaaabbababb
|
||||
baabaabbbaabbabababbaaabbaaaaababaaaabbabbbbbbaa
|
||||
babbaabaaabababbbabbabaaabaaaaabbbaaabbb
|
||||
babababbaabbaabbbbbbaaab
|
||||
babaaababbbaabaaaaaabaabbbbaaaabababbaaa
|
||||
aaabbbbbbbabababaabbabba
|
||||
baaabbaaaaabbbbaaababbaaabbaaaaabbabbbbbabbbabbbbbbaaaaabbaaaababaaabbbbbaabbaababbbbbbababbaaaa
|
||||
ababbababaabbabaababbbababaababbabbbaaaabbbbbbaaabbababb
|
||||
babababababababaaaaabbab
|
||||
aaabbaaaabbbbabbabaaabbb
|
||||
babbbaaabababbaabaabaabaabbaababaaaabaaaababaaab
|
||||
babaaaaaabbbbabbbbaabbba
|
||||
bbabbaabaabbbaaaaabaaabaabbbababaabbaabaababaaaaababbbba
|
||||
aabbbabaabbabbbababbaaaa
|
||||
baaaabaababbabaabbbaabbb
|
||||
aaabbabaaaabaaabaabbaaaabbaabbaa
|
||||
abaabaaaabbabbaabbaababbabababbabbbbaabbbbaabbba
|
||||
bbbaaaaabbabbabaabaaabaa
|
||||
ababbbabbabbaababbaabbaa
|
||||
aaabbaaaababbbabbaabbaaa
|
||||
aaaaabaaabbabbaaabbbbaab
|
||||
bbbaaaababaabaaabbbabbbabaabaaaabaabbbaaabbabaabaaaabbbb
|
||||
babaaabababbbbbaaaaabbaa
|
||||
baabaabbbabaabaabbaaaaab
|
||||
baababbbbaaabbabaababbbb
|
||||
bbaababbbbababbabbabbbbb
|
||||
abbaababaabaabbaabbbbbbbbbaabbbbbbaababa
|
||||
babaaaaaaaababbaabaaabab
|
||||
babaaaaabbaabbaabaabbaabbbaabaaabbbbaabbbbbaabba
|
||||
bbbaaabaaabbbabbabbaabbb
|
||||
bbbbabababbaaaaaaabbbaaabbbbabaabbaaaaaabbbbaaaa
|
||||
bbbaaaaaabaabaaabaaababa
|
||||
aaabbababaaabbabbabaaaaaaaababababbbbaab
|
||||
babbbbbabababbababaaabbb
|
||||
aabababbaabbabbbbbbbbbba
|
||||
abbabbaaabaababbbabbabbaaaaabaabaabbbbba
|
||||
babbabbaabababbabababbbbaaababaaabbaaabbaabaabaa
|
||||
aaaaaaaabbbabbbaabaaabba
|
||||
baaaabaaabbbbbbaaabaabbbbbbbaaaa
|
||||
abbbaaaabababaaabbbbbabbabaaabaaaaababbbabaababaabaaaaaa
|
||||
abaababbabbbbbbaaabbabbbabbaaaab
|
||||
abbabbbababbaaabbbabaaaabaababaaabbaabba
|
||||
aaaabaabbbababbbbabbbbaabbbabbababaaaaab
|
||||
abbaaabbabaababbbaabaababaaababa
|
||||
abababababbaaabbbaaabbababaabaab
|
||||
baaabbabaabaabbaaabababa
|
||||
bbaaabaaaaaaabaababbaabb
|
||||
ababbabaaabbabaaaabababa
|
||||
babbbbaabbbbbaabbbaababa
|
||||
babaaaababaabbababbabbbaabaaabababbabbaaaabbaabb
|
||||
baaababbaaabaaabaabbabbbbaaaaaab
|
||||
abaabbaabbabbaabaabababbabbabbbb
|
||||
bbbaababaababbbabbababab
|
||||
baababbabaaaabaaabababbababaaaab
|
||||
babbaababbabaaaaababbaaa
|
||||
aababbbaaabababbaabaabab
|
||||
bbaabbabaabbbbbbbbababbbaaaabbbabbbbaaba
|
||||
bbaaababbbaaabaabbbaaabaababbbbababbbabbababbbbaabaabbba
|
||||
bbabaaaaaabbbababbaaabbb
|
||||
baaaabaabaabbababaabaaababbbaabbbbabbaabbbbabbabaaababaaaabbaaaaaaaabbabaabbbabaabbabbaa
|
||||
abaaaabbaabbabaaaabbbababbabaaaaaabbaaba
|
||||
baaaaaabbbabbbbaabbbbbbbbbabaabbbabbabababaabababbbbaaabaaaabbbababbbbaa
|
||||
aaaaaaaaaabbbabaaabbaaab
|
||||
aababbbababaabbaaaabbbababbbaabb
|
||||
abbbbabbaaabbbaaababaabbbabababa
|
||||
aaaaabaabaaaabaaabbaabaa
|
||||
bababbabbabaababbabbbabb
|
||||
abbbbabbbaabbbabbbbaabaabbbaabbaaaaababaaaaaaaaababaaaba
|
||||
aabaaababbbaabaabaabaaaabbbbaaababbbbaba
|
||||
abbabaabbbaaababaaabaaba
|
||||
bbaaababbbbbbaababbbabaa
|
||||
bbabaaaababbbaaaabaaaaaa
|
||||
aaabbaaabbabaababaaaabba
|
||||
baabbabaaabbaaaaabbbbaba
|
||||
baabaabababbaabbbbababaa
|
||||
aaaabaabbbaaababaabbaabbabbbaaaaabaabaab
|
||||
aaababbbaabaaaabbaaaabbbbabbbbba
|
||||
aaabbbaababbaababbaaaaba
|
||||
bbbabbbababbbaabbbaababa
|
||||
abbbaaaabbabbbaaabbaabaa
|
||||
aaaaaabbbbabbaaaabbabbbabaabbbabbbaaabaabaaaabaa
|
||||
abababaaaaaaaaaaabbbaababaaaabbabbaabbabbabaabaaaabaabaababaabbabaabbbbb
|
||||
ababbbaaabaabbaaabaababaabbbbbaa
|
||||
abbabbbaababbababbbbbabaaabaabbabaabbabbbbaaaabaabaaabaa
|
||||
ababbaabababbbabbbbbaaab
|
||||
babbabaababaaabbbaabaabb
|
||||
bbababbbaaabbaabbabbabaaaabaabaa
|
||||
abaababbbaabbababaaababbbabaababbaaaaabaabbabbbb
|
||||
ababababaaababaabbaaaabb
|
||||
bbbaaaaaababbaababaabbba
|
||||
babbbaababbbabbabbabaababaababbabbaababa
|
||||
baabaabbbbaaaaaabbbaaabb
|
||||
abbbaababbbbbabababbaabaaaaaabaaabbaaaaaabbbbaabaabbbbaaaabbbbabaababaab
|
||||
ababaabbaabababbbbabbaabaaababaabaaaaababaaaabba
|
||||
ababbbbbaabbaababababaababaaaaaaabbaaaaabbabbbaa
|
||||
abbaaabbabaaaabbbbbabbbbbabbaabbbbbaaaaaabbbabbbbbbaabba
|
||||
aaababbaaaaabaabbbaaababaaaabbbb
|
||||
aabaaababbbbbbabaaabbabaabbaaaaabbbbbbbbababababbbaababbbabbabab
|
||||
bbbaababbaaabbaabbbbbbaaabaaaaabaabbaababbaaaaab
|
||||
aaaabbbaababbaabbabaabbababaaabbbaabbaab
|
||||
bbbabababbababababbaabaa
|
||||
bbbbabaabbaababbaaaabbbaabbbbbab
|
||||
aaabbaaaaaaabbbaabbbbbbaabaaaabababbbaaabbaababbbaaaaaaaababbbbabababaaa
|
||||
aaaaabbababbababbbababbbbaaababbabaabbaaaababbaabbaabbaa
|
||||
bbabbabaaaaaabaabababbbbaaabbbba
|
||||
ababbbaabbababbaaaaaaaab
|
||||
babaaabbbaabbabaaaabaabb
|
||||
babbababbbbbabaabababaab
|
||||
bababbabbbaabaabbbbabaab
|
||||
abbbaabaaabbbbbbaabbbbbbaabaaabbbbbbbaaaababbaaaaababaaabaaabaaa
|
||||
abaabaaaabaababababaaabaaaabbbaabbabaaab
|
||||
ababbbabaaaaaaaababbbbab
|
||||
bbabbbbaabbbbabaaaaaabbbbababbaaabbbbbbbbbaabbbabbaaababababbbbbabbaabbabbabaaaabbbabbba
|
||||
abaaaabbaaabbaabaaabaaaabbbabbbbababbbaabaabbbab
|
||||
aabbbbbbbabbaababaabbababaabbbba
|
||||
baaaabbbbababbabbbaabbba
|
||||
abbbaaaaababbbababbabaaa
|
||||
bbbabbbaaaababbaabaabbaaabaababaabbabababbaaabbaaaaaaabbabaabbabbbbaabbb
|
||||
12
input/day19_example.txt
Normal file
12
input/day19_example.txt
Normal file
@@ -0,0 +1,12 @@
|
||||
0: 4 1 5
|
||||
1: 2 3 | 3 2
|
||||
2: 4 4 | 5 5
|
||||
3: 4 5 | 5 4
|
||||
4: "a"
|
||||
5: "b"
|
||||
|
||||
ababbb
|
||||
bababa
|
||||
abbbab
|
||||
aaabbb
|
||||
aaaabbb
|
||||
1727
input/day20.txt
Normal file
1727
input/day20.txt
Normal file
File diff suppressed because it is too large
Load Diff
107
input/day20_example.txt
Normal file
107
input/day20_example.txt
Normal file
@@ -0,0 +1,107 @@
|
||||
Tile 2311:
|
||||
..##.#..#.
|
||||
##..#.....
|
||||
#...##..#.
|
||||
####.#...#
|
||||
##.##.###.
|
||||
##...#.###
|
||||
.#.#.#..##
|
||||
..#....#..
|
||||
###...#.#.
|
||||
..###..###
|
||||
|
||||
Tile 1951:
|
||||
#.##...##.
|
||||
#.####...#
|
||||
.....#..##
|
||||
#...######
|
||||
.##.#....#
|
||||
.###.#####
|
||||
###.##.##.
|
||||
.###....#.
|
||||
..#.#..#.#
|
||||
#...##.#..
|
||||
|
||||
Tile 1171:
|
||||
####...##.
|
||||
#..##.#..#
|
||||
##.#..#.#.
|
||||
.###.####.
|
||||
..###.####
|
||||
.##....##.
|
||||
.#...####.
|
||||
#.##.####.
|
||||
####..#...
|
||||
.....##...
|
||||
|
||||
Tile 1427:
|
||||
###.##.#..
|
||||
.#..#.##..
|
||||
.#.##.#..#
|
||||
#.#.#.##.#
|
||||
....#...##
|
||||
...##..##.
|
||||
...#.#####
|
||||
.#.####.#.
|
||||
..#..###.#
|
||||
..##.#..#.
|
||||
|
||||
Tile 1489:
|
||||
##.#.#....
|
||||
..##...#..
|
||||
.##..##...
|
||||
..#...#...
|
||||
#####...#.
|
||||
#..#.#.#.#
|
||||
...#.#.#..
|
||||
##.#...##.
|
||||
..##.##.##
|
||||
###.##.#..
|
||||
|
||||
Tile 2473:
|
||||
#....####.
|
||||
#..#.##...
|
||||
#.##..#...
|
||||
######.#.#
|
||||
.#...#.#.#
|
||||
.#########
|
||||
.###.#..#.
|
||||
########.#
|
||||
##...##.#.
|
||||
..###.#.#.
|
||||
|
||||
Tile 2971:
|
||||
..#.#....#
|
||||
#...###...
|
||||
#.#.###...
|
||||
##.##..#..
|
||||
.#####..##
|
||||
.#..####.#
|
||||
#..#.#..#.
|
||||
..####.###
|
||||
..#.#.###.
|
||||
...#.#.#.#
|
||||
|
||||
Tile 2729:
|
||||
...#.#.#.#
|
||||
####.#....
|
||||
..#.#.....
|
||||
....#..#.#
|
||||
.##..##.#.
|
||||
.#.####...
|
||||
####.#.#..
|
||||
##.####...
|
||||
##..#.##..
|
||||
#.##...##.
|
||||
|
||||
Tile 3079:
|
||||
#.#.#####.
|
||||
.#..######
|
||||
..#.......
|
||||
######....
|
||||
####.#..#.
|
||||
.#...#.##.
|
||||
#.#####.##
|
||||
..#.###...
|
||||
..#.......
|
||||
..#.###...
|
||||
35
input/day21.txt
Normal file
35
input/day21.txt
Normal file
@@ -0,0 +1,35 @@
|
||||
jfvltdz txzv szzbr fcbsv klzdr xclff jqqbnzz flzmlbf crfxz jxrlzm xcfpc tvk kdbx zlhlq gfpnx ccvsl zfl skllln lxqbsc frgnkt mrnd smjhxg cmqjlb jxdbh tsbffm mtjlb czbhh gbbxhp snsnj lmvx pbztj glvv jkzxn nnfps hnvrfvm fddx nhhgb hdt jg hrnzq tmgfr vjcbtd nklc fmbqgs hcg gpgrb qrgvj znqbr pfdkkzp vmrf mbqpfm pccmj bph hmngm fcbvh vtqhqs zsjlp rdbdd gtjmd bskstb krxj rglbcpq svqz jczm frssvh nmxdsnc hjbs xkpm tsvfrt txr flmm tjrm jccqsxs bncfz vlpq ngl dvfqqz hqxdv xzrdx qdnh hbqhvk spbxz pnxzqgp kjcdgh ttmcq dlvdt (contains peanuts)
|
||||
bjqt frgnkt ctbmdg hbqhvk skllln spbxz frssvh rdbdd gpgrb nndr dvfqqz jlnrn tsvfrt jccqsxs jkzxn znqbr vlpq hcg gtjmd lmvx zck jnd vghkr fmfnh rlsqd vjcbtd kbszttf mdsg pfdkkzp stnb tjlz bqc gfpnx mfvxhv pdss tzglth mtpfk cnhbh thprs kvcc hnvrfvm klzdr xcfpc kdxvzqm (contains peanuts)
|
||||
pngs tjlz nmxdsnc qdnh pccmj mkz rdbdd mbqpfm ngl znqbr tzglth tlbj klzdr pgrc fddx mxmvt srxrn gtjmd vdgsz dxzzp zfsmv svcmg mzjvq txr jkzxn smjhxg dptl flmm xlcgr srpqk kdbx bctn hnvrfvm qkvrf kvcc qzqdq krdmn vlpq tmjltg kdxvzqm hdt thprs pfdkkzp nklc cmqjlb jrrgck gpgrb mdnchc gzngn qrgvj pznt pdss zjh crfxz krxj xcfpc svrvv ctbmdg spbxz (contains shellfish)
|
||||
xcfpc zfl cnhbh mdx tjlz pnxzqgp drzm glljh xsndjl hrnzq pdss zck kjcdgh pgrc bph gtjmd xmcsr ctgnz kbszttf gpgrb spbxz vtqhqs snsnj brjd znqbr mbqpfm crfxz blbfl rjds gdsk kdxvzqm mdnnfp mrnd mzjvq flzmlbf pznt pggzp txr vxx bncfz lzfmghs krxj pfdkkzp rtjxbbd (contains dairy, shellfish, fish)
|
||||
mdx glcfml jqkxx jccqsxs kvcc nndr kbszttf mfvxhv rjds tjrm spbxz gtjmd vtqhqs fmbqgs dxzzp snptbf hrnzq rtjxbbd tmgfr sckhr hsdnz xkpm txzv fgrmrqhp gxbs gfpnx mdnnfp kbtkrcf drzm tbptvzf dtqplpj vxx cmtq zsjlp gpgrb glvv qrgvj tmjltg hnvrfvm pbztj czbhh tvk cnhbh krdmn flzmlbf lblbm mrnd znqbr kdbx xcfpc nhhgb mdsg zck txr stnb hdt hjbs pfdkkzp skks klh zfl (contains dairy)
|
||||
skllln tvk srxrn snptbf cnhbh gbbxhp jczm spbxz pznt kbtkrcf fmbqgs tjlz frssvh pmhxl znqbr mtpfk fcbvh rdbdd xpmmdc vjcbtd cmqjlb jqqbnzz nnfps lblbm kdxvzqm qzqdq bjqt txzv qrgvj tmjltg mxfrnq hbqhvk gtjmd jlnrn kvcc hsdnz dfllfp mfvxhv mfcrq tgclx xlcgr glvv czbhh tsbffm hmnt xcfpc mkz cmtq gpgrb (contains soy)
|
||||
gtjmd zbj vdgsz stnb tsbffm tjlz pdss jqqbnzz nklc srxrn klh glljh ctbmdg dptl jczm pfdkkzp jfvltdz nhhgb glvv jccqsxs hsdnz bskstb brjd ctgnz rjds tjrm qrgvj zck spbxz zfl xbp mfcrq svrvv zsjlp bqc pbztj xsndjl bctn lblbm fmfnh kdxvzqm cdntx hjbs gnkr rtjxbbd hdt hcg vjcbtd hmnt skqbbj frgnkt znqbr klzdr tmjltg nndr hsdqb tgclx txzv hnnz mdx pngs jg snptbf czbhh cnhbh jrrgck jlnrn gpgrb mfvxhv mdnnfp sckhr pccmj gfpnx dxzzp tbptvzf (contains peanuts, soy, dairy)
|
||||
nkshjm pgmqs znqbr cdntx hsdnz kdxvzqm pmhxl tjlz nndr lzczv mtjlb jqkxx bjrbknjm pbztj nmpp mkz tbptvzf krxj bctn ctgnz qlzxbc hbqhvk mbqpfm dvfqqz gtjmd mfvxhv gdsk snptbf cmqjlb gpgrb jfvltdz vlpq zjh pggzp xkpm xpmmdc tgclx bqc spbxz kjcdgh lflzqr glvv stnb tjrm txzv qzqdq hjbs ccvsl jxdbh xcfpc bncfz flmm blbfl zbj rglbcpq srpqk tsvfrt fcbsv rtjxbbd bph tsbffm smjhxg tmjltg (contains shellfish)
|
||||
snsnj tmjltg lxqbsc czbhh txzv svqz krdmn tjlz jg bnrf nmxdsnc ndhx zck zjh skks rdbdd bnnt srpqk svrvv spbxz pdss cmqjlb vmrf crfxz gpgrb jdvtlsv sgh mkz pznt tgclx kdxvzqm jfvltdz ccvsl jlnrn gdsk pfdkkzp flzmlbf xcfpc jqkxx dptl hrnzq vghkr tmgfr glvv mfvxhv gtjmd fgrmrqhp mdnnfp klh glljh kdbx lzczv klzdr (contains nuts, fish)
|
||||
znqbr tsvfrt bjrbknjm kbtkrcf hsxp xsndjl jqkxx mrnd tjlz klzdr krxj gnzr nhhgb hqxdv mggk hsdqb zfl svqz hmngm ctbmdg tbptvzf bctn mdx gfpnx bskstb blbfl thprs sckhr lzfmghs rdbdd gbbxhp rglbcpq lmvx jkzxn lblbm bncfz ctgnz tjrm tlbj sndrzm tsbffm hdt spbxz jfvltdz gpgrb hrkf txzv ccvsl mtpfk vlpq pgmqs ttmcq pfdkkzp ndhx mdsg skllln xcfpc bph bdj (contains nuts, shellfish)
|
||||
vdgsz srpqk jccqsxs txzv gtjmd xzrdx jdvtlsv hcg hjbs tsbffm vlpq bctn fmbqgs krdmn crfxz gpgrb zjh skllln bjqt kdxvzqm mdnchc zfl svrvv zlhlq tzglth ccvsl frgnkt xpmmdc rtjxbbd dptl dlvdt kdbx xclff gbbxhp lxqbsc vmrf lmvx smjhxg skqbbj nndr jnd rlsqd xmcsr pfdkkzp hmnt jfvltdz gnzr znqbr ctbmdg svcmg flzmlbf tjlz tbptvzf bncfz vxx tmjltg xcfpc qlzxbc klh jg xbp mrnd pgrc qkvrf qdnh qzqdq vghkr zfsmv fddx dkzz fcbsv mggk (contains shellfish, soy, eggs)
|
||||
krxj kbszttf hnvrfvm mkz fjsgm nkshjm tjlz mfvxhv pccmj gnzr txzv flmm czbhh bnrf jccqsxs cnhbh gtjmd klh jg skllln hdt jrrgck nndr vtqhqs hrnzq dtqplpj blbfl glljh snptbf fddx spbxz pnxzqgp bjqt gnkr svqz dptl bncfz lhqxr pfdkkzp zsjlp srpqk dlvdt xcfpc dvfqqz zfl lmvx mzjvq thprs pngs sgh tmjltg tbptvzf vxx nmpp jdvtlsv hrkf rlsqd xzrdx mrnd skqbbj xclff szzbr srxrn vlpq nmxdsnc qkvrf hcg mfcrq fcbvh kbtkrcf mxmvt hjbs jfvltdz gpgrb (contains soy, shellfish)
|
||||
bnrf jrrgck xcfpc kdxvzqm lmvx xzrdx pfdkkzp crfxz gtjmd krxj qkvrf kdbx jdvtlsv mdnchc mbqpfm jfvltdz txzv vghkr jqkxx jxrlzm klzdr bnnt xpmmdc tsvfrt fcbvh xbp tlbj rglbcpq hdt vdgsz spbxz dxzzp hsdnz jg fgrmrqhp tmjltg jxdbh gjt mggk svrvv zbj mxmvt bncfz hsdqb qdnh hbqhvk kbszttf jkzxn dvfqqz tsbffm mrnd jnd hsxp zck tjlz gpgrb (contains nuts, soy, dairy)
|
||||
lmvx qzqdq mtpfk dkzz zck frssvh pbztj qlzxbc pccmj sckhr zfl dptl fddx mrnd gdsk mdnnfp hnvrfvm jfvltdz mtjlb lblbm spbxz hsdqb zbj krdmn lzfmghs pfdkkzp gzngn flmm hrnzq jqkxx znqbr jrrgck jkzxn svcs xcfpc mdsg fjsgm frgnkt rdbdd klh cmqjlb hrkf mxmvt hdt tzglth glcfml hbqhvk mkz bncfz pdss gtjmd jczm nrdv tjrm svrvv flzmlbf txzv pmhxl tjlz dvfqqz (contains peanuts, soy, nuts)
|
||||
mfvxhv pfdkkzp nrdv xcfpc znqbr zck gjt snsnj lmvx nhhgb fgrmrqhp bdj bnrf hrnzq lhqxr kdbx spbxz zfl glvv gpgrb vmrf hnvrfvm pccmj bqc fjsgm jnd xpmmdc hmnt bjqt mrnd jczm fcbvh tjlz hjbs frssvh gnkr pgmqs lxqbsc skqbbj hrkf frgnkt tbptvzf rglbcpq xbp sckhr txzv vjcbtd jqqbnzz mkz (contains peanuts)
|
||||
jczm gpgrb dfllfp tzglth txzv fmfnh jccqsxs zfl spbxz nhhgb cdntx txr kdxvzqm smjhxg fgrmrqhp qkvrf skqbbj kbszttf rjds snptbf cmqjlb szzbr glvv sckhr mbqpfm mxmvt gnzr pmhxl jqqbnzz bnrf frssvh bncfz znqbr dvfqqz mxfrnq hcg ttmcq kbtkrcf czbhh mdnchc hnnz xcfpc gbbxhp stnb pfdkkzp nrdv gtjmd zsjlp qzqdq flzmlbf vdgsz krdmn bjqt zjh kjcdgh sgh lblbm pdss hsdnz vxx skks mggk ctgnz xzrdx jqkxx klzdr fddx lflzqr svcmg xmcsr (contains nuts, shellfish)
|
||||
hsxp tjlz crfxz xcfpc pggzp spbxz skqbbj jkzxn tzglth svrvv mtjlb gtjmd hmnt jccqsxs vlpq tmjltg zfl gpgrb lxqbsc znqbr pfdkkzp mdnchc dlvdt gbbxhp hdt sgh rjds skks mkz hmngm vxx mzjvq cnhbh pgmqs lzfmghs qkvrf tsvfrt czbhh qrgvj hrnzq lflzqr dvfqqz xclff jxdbh pdss fcbvh (contains wheat, shellfish, eggs)
|
||||
jccqsxs rglbcpq pmhxl znqbr vdgsz jqkxx pngs txzv mdsg tvk cmtq dfllfp lhqxr fddx skllln dvfqqz crfxz lzczv brjd tlbj gfpnx gtjmd gxbs gnkr xmcsr dlvdt hsdnz bdj nklc zjh lzfmghs jqqbnzz pznt lflzqr bnrf cdntx tmjltg xcfpc lxqbsc tjlz mfcrq rlsqd kdbx vjcbtd dxzzp spbxz mkz pccmj hbqhvk nndr pfdkkzp fcbsv klzdr hdt svqz svrvv pbztj (contains shellfish)
|
||||
skks tzglth lmvx bph txr gpgrb klzdr txzv jnd svcmg xclff zsjlp jrrgck spbxz kjcdgh mdnchc kbtkrcf bqc bctn kbszttf dxzzp gtjmd mtjlb pfdkkzp hnvrfvm smjhxg gnkr pggzp vjcbtd lzfmghs vtqhqs tjlz fgrmrqhp svrvv fcbvh ttmcq skllln fjsgm xpmmdc xcfpc nkshjm crfxz lzczv zfl rtjxbbd hsxp cmtq snptbf skqbbj cdntx (contains nuts, peanuts, soy)
|
||||
xcfpc hrkf txr gxbs snptbf kbtkrcf jxrlzm mggk nmpp txzv vghkr mfcrq sckhr nrdv lflzqr xlcgr pfdkkzp hmnt fcbvh mkz glcfml znqbr cmtq spbxz crfxz gtjmd mdsg xzrdx skks stnb nkshjm zsjlp dptl fmbqgs kjcdgh jfvltdz blbfl vtqhqs lzfmghs hjbs hdt lxqbsc klzdr tjlz vxx pngs lmvx zck gdsk hsxp pccmj jrrgck fmfnh jqkxx fjsgm ccvsl jczm tlbj qkvrf smjhxg gjt jqqbnzz svqz rjds vlpq pmhxl qlzxbc pggzp lhqxr (contains wheat)
|
||||
bdj bph smjhxg pggzp svrvv dvfqqz pnxzqgp rglbcpq skks dlvdt pccmj tjlz hsdqb zbj qkvrf pmhxl fmfnh cmtq txzv ctbmdg vghkr cmqjlb gtjmd vjcbtd xpmmdc gzngn hrkf blbfl srxrn ctgnz rlsqd dxzzp fcbsv vxx zfsmv lblbm lmvx pgmqs tzglth bncfz mdx vtqhqs drzm jg jnd pfdkkzp xcfpc zfl zjh jfvltdz skllln spbxz znqbr mtpfk dfllfp mxmvt zck svcmg kbtkrcf xsndjl gjt kdbx klh nnfps (contains peanuts, wheat)
|
||||
jrrgck jfvltdz bjqt nndr znqbr xclff lzfmghs lxqbsc xbp dlvdt txzv tjrm ttmcq gtjmd rdbdd skqbbj dtqplpj kdbx mfcrq pggzp nhhgb tgclx pznt gnkr vghkr xcfpc klzdr krxj lzczv klh czbhh vtqhqs skllln rjds gbbxhp hsdnz bnnt qkvrf glvv bnrf tsbffm lblbm zlhlq dvfqqz bph jkzxn dkzz cnhbh tmgfr hsxp crfxz lhqxr ndhx ngl glcfml pfdkkzp mbqpfm ctgnz bdj spbxz brjd fcbvh gpgrb nklc smjhxg (contains dairy, peanuts, fish)
|
||||
ttmcq gbbxhp vxx cmtq fmbqgs nklc svqz znqbr hsxp hnvrfvm mtpfk pccmj pdss jczm mrnd zbj gtjmd klzdr thprs czbhh fddx blbfl tlbj fmfnh jdvtlsv txr rdbdd xcfpc glljh snsnj tjlz jqkxx tgclx gpgrb gnzr skllln nrdv qkvrf sgh kbtkrcf hdt pfdkkzp kdxvzqm bnnt jnd jg hqxdv spbxz flmm szzbr sckhr (contains nuts, dairy)
|
||||
svqz txzv gpgrb fcbvh gnzr tjlz drzm vmrf qkvrf dlvdt hsdqb hmnt spbxz tjrm mggk hnnz sckhr bjrbknjm jfvltdz xcfpc gtjmd zjh tvk srxrn mfcrq vjcbtd fcbsv xkpm gjt hbqhvk krdmn mdnchc zlhlq ndhx pfdkkzp mdnnfp xzrdx jxdbh gnkr zck pznt bncfz nmxdsnc hrnzq skqbbj mdx kdxvzqm snptbf hsdnz mdsg dxzzp rdbdd (contains shellfish, eggs, peanuts)
|
||||
dptl rlsqd tjlz mdsg pfdkkzp tzglth mxfrnq gzngn tmjltg mggk hmngm mdnchc nkshjm hnnz zlhlq cmtq vxx hnvrfvm sgh frssvh pdss mdnnfp xcfpc kbtkrcf qzqdq mrnd xbp nndr znqbr szzbr ctgnz spbxz ndhx svqz pbztj bdj smjhxg kbszttf gpgrb jkzxn hqxdv dtqplpj kdxvzqm crfxz cdntx mbqpfm hsxp dxzzp nnfps pgrc cnhbh fmbqgs pnxzqgp svrvv mdx klzdr zjh tsbffm srxrn glcfml rglbcpq hcg gtjmd glljh zck pngs jczm lxqbsc pccmj glvv (contains dairy, peanuts)
|
||||
znqbr hnvrfvm svrvv kbszttf bctn jccqsxs drzm rlsqd jlnrn srxrn rjds gjt skqbbj qrgvj kjcdgh vghkr svcmg gxbs xcfpc rtjxbbd zfl ndhx lzfmghs qdnh xkpm snsnj bqc lblbm dptl fcbvh gtjmd ccvsl txzv jfvltdz kdxvzqm mtpfk bph tjrm xpmmdc jqqbnzz cnhbh czbhh dtqplpj fgrmrqhp nmxdsnc gpgrb pggzp glcfml hrkf ttmcq mfcrq jczm zlhlq cmtq mdx txr vjcbtd mggk qzqdq skks svcs sndrzm bjqt hsxp tmgfr dkzz jg zck tjlz spbxz pnxzqgp klzdr mdsg zfsmv xbp (contains fish, wheat)
|
||||
vjcbtd jdvtlsv ccvsl krxj qlzxbc fmfnh zjh hcg jxrlzm spbxz txzv sgh flzmlbf hsdqb nhhgb srpqk xlcgr pggzp skqbbj dlvdt mdsg gzngn pmhxl jfvltdz dptl fgrmrqhp bjqt hsxp tvk gnzr xcfpc qkvrf gtjmd glljh bdj tmgfr jg pgrc hrnzq nnfps jlnrn svcmg zbj klzdr pccmj jqqbnzz gpgrb tmjltg mrnd hnvrfvm znqbr mbqpfm qzqdq snsnj kbtkrcf smjhxg qdnh hrkf mfvxhv srxrn tgclx tjlz fjsgm sndrzm jccqsxs xsndjl (contains eggs)
|
||||
ngl hjbs tsvfrt brjd zfl lflzqr jrrgck pbztj jxdbh srxrn mfvxhv thprs nkshjm tmgfr jqqbnzz rglbcpq drzm cdntx pggzp kdxvzqm mtpfk gpgrb klzdr vjcbtd mkz jnd kvcc znqbr qzqdq tgclx pdss bskstb skqbbj xkpm spbxz hsxp sgh bdj ccvsl gdsk svcs bqc lblbm gnkr gxbs tvk xpmmdc klh czbhh pccmj jxrlzm pnxzqgp pfdkkzp xzrdx fmfnh tjlz zlhlq mdnchc bctn dptl xcfpc snptbf rtjxbbd txzv bjqt mggk jqkxx flmm nklc cmtq (contains dairy)
|
||||
jxrlzm pnxzqgp rdbdd frgnkt znqbr gpgrb lblbm srxrn jfvltdz mrnd jkzxn kjcdgh skks bjrbknjm nmxdsnc zjh tjrm xlcgr kdxvzqm fmfnh jnd spbxz nndr zfl dvfqqz xcfpc tmgfr mfvxhv bdj nhhgb hsxp glljh dlvdt txzv vtqhqs zck nnfps gtjmd jrrgck jczm jlnrn drzm cmqjlb fddx xpmmdc hsdnz hqxdv qdnh vjcbtd dptl svcmg bnrf xbp qkvrf kbszttf pznt mfcrq stnb mzjvq pgrc xkpm fcbvh vdgsz mxmvt hjbs hnnz pmhxl tlbj hnvrfvm bncfz zfsmv xsndjl xmcsr bjqt vmrf tjlz bskstb mdx jxdbh gzngn ndhx vlpq (contains fish, wheat, nuts)
|
||||
ttmcq txr pmhxl frgnkt xbp gxbs zlhlq szzbr crfxz fmfnh smjhxg hmngm xclff glvv tmgfr thprs glcfml fjsgm tsvfrt znqbr spbxz svrvv nrdv lzfmghs tgclx jczm fgrmrqhp bctn mtpfk cdntx gtjmd fcbsv mkz rglbcpq mbqpfm rjds bph jfvltdz ngl zfl rdbdd tjlz gjt nmxdsnc hsdqb qrgvj gfpnx txzv hdt pfdkkzp tvk sckhr snptbf flmm vtqhqs lhqxr fcbvh hnnz mfvxhv nmpp bjrbknjm nkshjm fmbqgs svcs jqkxx gpgrb mtjlb zfsmv dlvdt pngs svqz hbqhvk hmnt ccvsl (contains peanuts, dairy, wheat)
|
||||
nmxdsnc txzv pggzp pznt cmqjlb hsdnz snsnj ndhx dlvdt ttmcq zbj xmcsr zlhlq flzmlbf tmjltg mdnchc qdnh pngs pmhxl cmtq skqbbj bph czbhh fmbqgs spbxz xclff drzm gdsk znqbr dfllfp tjlz zjh fcbvh pfdkkzp rjds glvv mkz nndr hbqhvk krdmn xcfpc skks mtpfk gtjmd rlsqd hrnzq svcs fcbsv lmvx ctbmdg frgnkt zfsmv sckhr (contains nuts, wheat, eggs)
|
||||
nrdv zlhlq mzjvq nnfps tmgfr fcbvh jccqsxs xcfpc cnhbh gpgrb brjd hnvrfvm tjlz xzrdx vmrf lmvx skllln zsjlp snsnj szzbr lxqbsc dvfqqz pdss spbxz zfsmv mggk gtjmd tgclx cmqjlb zck rjds hjbs gdsk mfvxhv thprs fcbsv lblbm srxrn jqkxx flmm jnd qdnh lzczv fjsgm xlcgr snptbf znqbr txzv stnb czbhh gnzr (contains wheat)
|
||||
vlpq svcs hqxdv mxfrnq zfl frssvh mggk kdbx ctbmdg tbptvzf zck xzrdx krdmn klh fcbsv znqbr sgh frgnkt lzfmghs cmtq xcfpc txzv rtjxbbd rjds fcbvh xclff pfdkkzp jccqsxs dvfqqz gtjmd hrkf hsdqb gnzr jqkxx lmvx flmm xlcgr mdsg tjlz jlnrn hnvrfvm hcg bdj lzczv gzngn fmbqgs spbxz bskstb jg nklc hdt gjt jrrgck skks srpqk ngl vxx (contains eggs, wheat)
|
||||
znqbr rdbdd jfvltdz gnzr mdx glcfml vtqhqs lblbm frssvh hsdnz jxdbh xsndjl pccmj kdxvzqm fgrmrqhp krdmn hnnz mtpfk gtjmd jccqsxs nklc vlpq svcs brjd xcfpc srxrn cdntx smjhxg pggzp fmfnh pdss nmxdsnc kbszttf xzrdx bnnt tvk fcbsv zfl mbqpfm xlcgr nnfps spbxz kdbx dlvdt gnkr tlbj vmrf hbqhvk mrnd dvfqqz tjlz gpgrb cnhbh hnvrfvm qrgvj snptbf tmjltg txzv mdnnfp nrdv jg xclff crfxz mdsg tsvfrt hdt dptl lflzqr hsdqb (contains shellfish)
|
||||
tjlz srxrn gpgrb blbfl dvfqqz nrdv fmfnh smjhxg jlnrn tvk hbqhvk bdj hsdqb klh qrgvj jczm spbxz jnd lxqbsc rglbcpq jxdbh fgrmrqhp zbj znqbr pfdkkzp pngs dkzz mbqpfm hmngm vjcbtd mrnd jfvltdz jccqsxs xmcsr mfvxhv bqc mdsg pgmqs stnb svcs xcfpc kvcc skqbbj zlhlq svcmg gtjmd glcfml dtqplpj bjrbknjm gdsk nnfps qdnh hrkf ngl mdnchc bncfz gnzr srpqk sgh gjt fcbsv hnvrfvm hmnt (contains nuts, dairy, peanuts)
|
||||
4
input/day21_example.txt
Normal file
4
input/day21_example.txt
Normal file
@@ -0,0 +1,4 @@
|
||||
mxmxvkd kfcds sqjhc nhms (contains dairy, fish)
|
||||
trh fvjkl sbzzf mxmxvkd (contains dairy)
|
||||
sqjhc fvjkl (contains soy)
|
||||
sqjhc mxmxvkd sbzzf (contains fish)
|
||||
53
input/day22.txt
Normal file
53
input/day22.txt
Normal file
@@ -0,0 +1,53 @@
|
||||
Player 1:
|
||||
28
|
||||
13
|
||||
25
|
||||
16
|
||||
38
|
||||
3
|
||||
14
|
||||
6
|
||||
29
|
||||
2
|
||||
47
|
||||
20
|
||||
35
|
||||
43
|
||||
30
|
||||
39
|
||||
21
|
||||
42
|
||||
50
|
||||
48
|
||||
23
|
||||
11
|
||||
34
|
||||
24
|
||||
41
|
||||
|
||||
Player 2:
|
||||
27
|
||||
37
|
||||
9
|
||||
10
|
||||
17
|
||||
31
|
||||
19
|
||||
33
|
||||
40
|
||||
12
|
||||
32
|
||||
1
|
||||
18
|
||||
36
|
||||
49
|
||||
46
|
||||
26
|
||||
4
|
||||
45
|
||||
8
|
||||
15
|
||||
5
|
||||
44
|
||||
22
|
||||
7
|
||||
13
input/day22_example.txt
Normal file
13
input/day22_example.txt
Normal file
@@ -0,0 +1,13 @@
|
||||
Player 1:
|
||||
9
|
||||
2
|
||||
6
|
||||
3
|
||||
1
|
||||
|
||||
Player 2:
|
||||
5
|
||||
8
|
||||
4
|
||||
7
|
||||
10
|
||||
1
input/day23.txt
Normal file
1
input/day23.txt
Normal file
@@ -0,0 +1 @@
|
||||
186524973
|
||||
1
input/day23_example.txt
Normal file
1
input/day23_example.txt
Normal file
@@ -0,0 +1 @@
|
||||
389125467
|
||||
37
src/day11.rs
37
src/day11.rs
@@ -6,7 +6,7 @@ use crate::day11::GridState::EmptySeat;
|
||||
pub fn solve() {
|
||||
let lines = util::read_file("input/day11.txt");
|
||||
|
||||
let seats = Seats::parse(&lines);
|
||||
let seats = Seats::parse(&lines, 1);
|
||||
|
||||
let part1 = solve_part1(&seats);
|
||||
|
||||
@@ -25,8 +25,8 @@ fn solve_part1(seats: &Seats) -> usize {
|
||||
|
||||
loop {
|
||||
let mut changes = false;
|
||||
for y in 0..seats.height {
|
||||
for x in 0..seats.width {
|
||||
for y in 1..seats.height-1 {
|
||||
for x in 1..seats.width-1 {
|
||||
let seat = last_seats.get(&x, &y);
|
||||
if seat != &Floor {
|
||||
let occupied = last_seats.count_occupied_neighbors(&x, &y);
|
||||
@@ -66,8 +66,8 @@ fn solve_part2(seats: &Seats, visible_chairs: &Vec<Option<Vec<(usize, usize)>>>)
|
||||
changes = true;
|
||||
next_seats.set(&x, &y, FilledSeat);
|
||||
} else if seat == &FilledSeat && occupied >= 5 {
|
||||
next_seats.set(&x, &y, EmptySeat);
|
||||
changes = true;
|
||||
next_seats.set(&x, &y, EmptySeat);
|
||||
}
|
||||
}
|
||||
}
|
||||
@@ -94,16 +94,16 @@ impl Seats {
|
||||
|
||||
const DIRECTIONS: [(i32, i32); 8] = [(-1, 1), (-1, 0), (-1, -1), (0, -1), (0, 1), (1, 1), (1, 0), (1, -1)];
|
||||
|
||||
fn parse(lines: &Vec<String>) -> Seats {
|
||||
fn parse(lines: &Vec<String>, padding: usize) -> Seats {
|
||||
|
||||
let height = lines.len();
|
||||
let width = lines[0].len();
|
||||
let height = lines.len() + padding * 2;
|
||||
let width = lines[0].len() + padding * 2;
|
||||
let mut grid = vec!(GridState::Floor; width * height);
|
||||
for y in 0..lines.len() {
|
||||
let line = &lines[y];
|
||||
let mut line_chars = line.chars();
|
||||
for x in 0..lines[0].len() {
|
||||
grid[x + y * width] = GridState::parse(&line_chars.next().unwrap())
|
||||
grid[(x + padding) + (y + padding) * width] = GridState::parse(&line_chars.next().unwrap())
|
||||
}
|
||||
}
|
||||
|
||||
@@ -170,20 +170,15 @@ impl Seats {
|
||||
|
||||
fn count_occupied_neighbors(&self, x: &usize, y: &usize) -> u8 {
|
||||
|
||||
let x_upper = x == &(self.width - &ONE);
|
||||
let x_lower = x == &0;
|
||||
let y_upper = y == &(self.height - &ONE);
|
||||
let y_lower = y == &0;
|
||||
|
||||
return
|
||||
if !x_lower && !y_lower && self.is_occupied(&(x - &ONE), &(y - &ONE)) { 1 } else { 0 } +
|
||||
if !x_lower && self.is_occupied(&(x - &ONE), &y) { 1 } else { 0 } +
|
||||
if !x_lower && !y_upper && self.is_occupied(&(x - &ONE), &(y + ONE)) { 1 } else { 0 } +
|
||||
if !y_lower && self.is_occupied(&x, &(y - ONE)) { 1 } else { 0 } +
|
||||
if !y_upper && self.is_occupied(&x, &(y + ONE)) { 1 } else { 0 } +
|
||||
if !x_upper && !y_lower && self.is_occupied(&(x + ONE), &(y - ONE)) { 1 } else { 0 } +
|
||||
if !x_upper && self.is_occupied(&(x + ONE), &y) { 1 } else { 0 } +
|
||||
if !x_upper && !y_upper && self.is_occupied(&(x + ONE), &(y + ONE)) { 1 } else { 0 }
|
||||
if self.is_occupied(&(x - &ONE), &(y - &ONE)) { 1 } else { 0 } +
|
||||
if self.is_occupied(&(x - &ONE), &y) { 1 } else { 0 } +
|
||||
if self.is_occupied(&(x - &ONE), &(y + ONE)) { 1 } else { 0 } +
|
||||
if self.is_occupied(&x, &(y - ONE)) { 1 } else { 0 } +
|
||||
if self.is_occupied(&x, &(y + ONE)) { 1 } else { 0 } +
|
||||
if self.is_occupied(&(x + ONE), &(y - ONE)) { 1 } else { 0 } +
|
||||
if self.is_occupied(&(x + ONE), &y) { 1 } else { 0 } +
|
||||
if self.is_occupied(&(x + ONE), &(y + ONE)) { 1 } else { 0 }
|
||||
|
||||
}
|
||||
|
||||
|
||||
174
src/day12.rs
Normal file
174
src/day12.rs
Normal file
@@ -0,0 +1,174 @@
|
||||
use super::util;
|
||||
use crate::day12::Heading::{North, East, South, West};
|
||||
use std::mem::swap;
|
||||
|
||||
pub fn solve()
|
||||
{
|
||||
let lines = util::read_file("input/day12.txt");
|
||||
let instructions = lines.iter().map(|s| Instruction::parse(s)).collect::<Vec<_>>();
|
||||
|
||||
let ship_state = execute(&instructions);
|
||||
let part1 = ship_state.manhattan_distance();
|
||||
println!("Day 12 Part 1: {}", part1);
|
||||
|
||||
let ship_state2 = execute_with_waypoint(&instructions);
|
||||
let part2 = ship_state2.manhattan_distance();
|
||||
println!("Day 12 Part 2: {}", part2);
|
||||
}
|
||||
|
||||
fn execute(instructions: &Vec<Instruction>) -> ShipState {
|
||||
|
||||
let mut res = ShipState { position_n: 0, position_e: 0, heading: East };
|
||||
|
||||
for instruction in instructions {
|
||||
res.apply(&instruction);
|
||||
}
|
||||
|
||||
return res;
|
||||
}
|
||||
|
||||
fn execute_with_waypoint(instructions: &Vec<Instruction>) -> ShipState {
|
||||
|
||||
let mut ship = ShipState { position_n: 0, position_e: 0, heading: East };
|
||||
let mut waypoint = WaypointState { position_n: 1, position_e: 10 };
|
||||
|
||||
for instruction in instructions {
|
||||
// println!("Instruction: {}{}", instruction.action, instruction.amount);
|
||||
|
||||
if instruction.action == 'F' {
|
||||
ship.position_n += waypoint.position_n * instruction.amount as i32;
|
||||
ship.position_e += waypoint.position_e * instruction.amount as i32;
|
||||
} else {
|
||||
waypoint.apply(instruction);
|
||||
}
|
||||
// println!("Ship: {:?}, Waypoint: {:?}", ship, waypoint);
|
||||
}
|
||||
|
||||
return ship;
|
||||
|
||||
}
|
||||
|
||||
#[derive(Debug)]
|
||||
struct ShipState {
|
||||
position_n: i32,
|
||||
position_e: i32,
|
||||
heading: Heading,
|
||||
}
|
||||
|
||||
impl ShipState {
|
||||
fn manhattan_distance(&self) -> i32 {
|
||||
return self.position_n.abs() + self.position_e.abs();
|
||||
}
|
||||
|
||||
fn apply(&mut self, instruction: &Instruction) {
|
||||
|
||||
match instruction.action {
|
||||
'N'=> self.position_n += instruction.amount as i32,
|
||||
'S' => self.position_n -= instruction.amount as i32,
|
||||
'E' => self.position_e += instruction.amount as i32,
|
||||
'W' => self.position_e -= instruction.amount as i32,
|
||||
'L' => self.turn_left(instruction.amount),
|
||||
'R' => self.turn_left(360 - (instruction.amount % 360)),
|
||||
'F' => self.move_forward(instruction.amount),
|
||||
_ => panic!("Unknown instruction: {}", instruction.action)
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
fn move_forward(&mut self, amount: u32) {
|
||||
match self.heading {
|
||||
North => self.position_n += amount as i32,
|
||||
East => self.position_e += amount as i32,
|
||||
South => self.position_n -= amount as i32,
|
||||
West => self.position_e -= amount as i32,
|
||||
}
|
||||
}
|
||||
|
||||
fn turn_left(&mut self, amount: u32) {
|
||||
|
||||
assert_eq!(amount % 90, 0, "Only rotations of (multiples of) 90 degrees are supported");
|
||||
|
||||
let count = amount / 90;
|
||||
for _ in 0..count {
|
||||
self.heading = self.heading.turn_left();
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
#[derive(Debug)]
|
||||
struct WaypointState {
|
||||
position_n: i32,
|
||||
position_e: i32,
|
||||
}
|
||||
|
||||
impl WaypointState {
|
||||
|
||||
fn apply(&mut self, instruction: &Instruction) {
|
||||
|
||||
match instruction.action {
|
||||
'N'=> self.position_n += instruction.amount as i32,
|
||||
'S' => self.position_n -= instruction.amount as i32,
|
||||
'E' => self.position_e += instruction.amount as i32,
|
||||
'W' => self.position_e -= instruction.amount as i32,
|
||||
'L' => self.rotate_left_around_origin(instruction.amount),
|
||||
'R' => self.rotate_left_around_origin(360 - instruction.amount),
|
||||
_ => panic!("Unknown instruction: {}", instruction.action)
|
||||
}
|
||||
}
|
||||
|
||||
fn rotate_left_around_origin(&mut self , amount: u32) {
|
||||
assert_eq!(amount % 90, 0, "Only rotations of (multiples of) 90 degrees are supported");
|
||||
|
||||
if amount % 360 == 0 { return; }
|
||||
|
||||
match amount % 360 {
|
||||
90 => {
|
||||
swap(&mut self.position_n, &mut self.position_e);
|
||||
self.position_e *= -1;
|
||||
}
|
||||
180 => {
|
||||
self.position_n *= -1;
|
||||
self.position_e *= -1;
|
||||
}
|
||||
270 => {
|
||||
swap(&mut self.position_n, &mut self.position_e);
|
||||
self.position_n *= -1;
|
||||
}
|
||||
_ => panic!("Unsupported amount of degrees")
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
#[derive(Debug)]
|
||||
struct Instruction {
|
||||
action: char,
|
||||
amount: u32,
|
||||
}
|
||||
|
||||
#[derive(Debug)]
|
||||
enum Heading {
|
||||
North, East, South, West
|
||||
}
|
||||
|
||||
impl Heading {
|
||||
|
||||
fn turn_left(&self) -> Heading {
|
||||
return match self {
|
||||
North => West,
|
||||
West => South,
|
||||
South => East,
|
||||
East => North
|
||||
};
|
||||
}
|
||||
}
|
||||
|
||||
impl Instruction {
|
||||
|
||||
fn parse(line: &String) -> Instruction {
|
||||
|
||||
return Instruction {
|
||||
action: line.chars().next().unwrap(),
|
||||
amount: line[1..].parse::<u32>().unwrap(),
|
||||
}
|
||||
}
|
||||
}
|
||||
73
src/day13.rs
Normal file
73
src/day13.rs
Normal file
@@ -0,0 +1,73 @@
|
||||
use super::util;
|
||||
|
||||
pub fn solve() {
|
||||
let lines = util::read_file("input/day13.txt");
|
||||
|
||||
let target_time = lines[0].parse::<u32>().unwrap();
|
||||
let part1 = lines[1].split(",").filter(|s| s != &"x")
|
||||
.map(|s| s.parse::<u32>().unwrap())
|
||||
.map(|t| (t, t - (target_time % t)))
|
||||
.min_by_key(|t| t.1)
|
||||
.map(|bt| bt.0 * bt.1)
|
||||
.unwrap();
|
||||
println!("Day 13 Part 1: {}", part1);
|
||||
|
||||
|
||||
let schedule_parts = lines[1].split(",").collect::<Vec<_>>();
|
||||
let mut schedules = Vec::new();
|
||||
// print!("[");
|
||||
for i in 0..schedule_parts.len() {
|
||||
let s = schedule_parts[i];
|
||||
if s == "x" { continue; }
|
||||
let bus_id = s.parse::<u64>().unwrap();
|
||||
let mut offset = i as u64;
|
||||
if offset > bus_id { offset = offset % bus_id; }
|
||||
// print!("(x + {}) mod {} = 0, ", offset, bus_id );
|
||||
schedules.push(Schedule {
|
||||
bus_id, offset
|
||||
});
|
||||
}
|
||||
// println!("]");
|
||||
|
||||
schedules.sort_by_key(|s| u64::max_value() - s.bus_id);
|
||||
let part2 = find_fitting(&schedules);
|
||||
|
||||
println!("Day 13 Part 2: {}", part2);
|
||||
}
|
||||
|
||||
fn find_fitting(schedules: &Vec<Schedule>) -> u64 {
|
||||
|
||||
let mut root_schedule = find_fitting_match(&schedules[0], &schedules[1]);
|
||||
for schedule in schedules.iter().skip(2) {
|
||||
root_schedule = find_fitting_match(schedule, &root_schedule)
|
||||
}
|
||||
return root_schedule.bus_id - root_schedule.offset;
|
||||
|
||||
}
|
||||
|
||||
|
||||
fn find_fitting_match(s1: &Schedule, s2: &Schedule) -> Schedule {
|
||||
|
||||
// We know that the pattern repeats every s1.bus_id * s2.bus_id (and at no other times, since all bus_ids are at least co-prime).
|
||||
// So all we need to do is find out what offset works:
|
||||
let match_bus_id = s1.bus_id * s2.bus_id;
|
||||
for mult in 0..s1.bus_id {
|
||||
let offset = mult * s2.bus_id + s2.offset;
|
||||
assert!(offset < match_bus_id, "Offset must not be bigger than the bus_id");
|
||||
let solution = match_bus_id - offset;
|
||||
if (solution + s1.offset) % s1.bus_id == 0 {
|
||||
return Schedule {
|
||||
bus_id: match_bus_id,
|
||||
offset,
|
||||
}
|
||||
}
|
||||
}
|
||||
panic!("Couldn't find match!!!");
|
||||
|
||||
}
|
||||
|
||||
#[derive(Debug)]
|
||||
struct Schedule {
|
||||
bus_id: u64,
|
||||
offset: u64,
|
||||
}
|
||||
161
src/day14.rs
Normal file
161
src/day14.rs
Normal file
@@ -0,0 +1,161 @@
|
||||
use super::util;
|
||||
use std::collections::HashMap;
|
||||
|
||||
pub fn solve() {
|
||||
|
||||
let lines = util::read_file("input/day14.txt");
|
||||
|
||||
let part1 = solve_part1(&lines);
|
||||
println!("Day X Part 1: {}", part1);
|
||||
|
||||
|
||||
let part2 = solve_part2(&lines);
|
||||
println!("Day X Part 2: {}", part2);
|
||||
}
|
||||
|
||||
fn solve_part1(lines: &Vec<String>) -> u64 {
|
||||
|
||||
let mut mem = vec!{0u64; 1 << 16};
|
||||
let mut mask = BitMask { ones_mask: 0, zeros_mask: !0 };
|
||||
for line in lines {
|
||||
|
||||
if line.starts_with("mask = ") {
|
||||
mask = BitMask::parse(&String::from(&line[("mask = ".len())..]))
|
||||
} else {
|
||||
let instr = Instruction::parse(line);
|
||||
mem[instr.pos] = mask.apply(instr.n);
|
||||
}
|
||||
}
|
||||
return mem.iter().sum();
|
||||
}
|
||||
|
||||
fn solve_part2(lines: &Vec<String>) -> u64 {
|
||||
|
||||
/*
|
||||
Idea for performance optimalization: use a Vec containing the "root" memory position, and
|
||||
the mask of the floats used to write to that position.
|
||||
Whenever something is written, check (using bit operations) if a collision between existing
|
||||
memory positions is possible. If that is the case, modify the old (existing) entry by
|
||||
removing all overlapping entries in the float mask.
|
||||
*/
|
||||
|
||||
let mut mem: HashMap<u64, u64> = HashMap::new();
|
||||
let mut mask = MemoryBitMask { ones_mask: 0, float_masks: Vec::new() };
|
||||
for line in lines {
|
||||
|
||||
if line.starts_with("mask = ") {
|
||||
mask = MemoryBitMask::parse(&String::from(&line[("mask = ".len())..]))
|
||||
} else {
|
||||
let instr = Instruction::parse(line);
|
||||
mask.set_all(instr.pos as u64, instr.n, &mut mem);
|
||||
}
|
||||
}
|
||||
return mem.values().sum();
|
||||
}
|
||||
|
||||
struct BitMask {
|
||||
/// One (1) everywhere except where the mask should be zero (0)
|
||||
zeros_mask: u64,
|
||||
/// Zero everywhere except where the mask is 1
|
||||
ones_mask: u64,
|
||||
}
|
||||
|
||||
impl BitMask {
|
||||
|
||||
fn parse(input: &String) -> BitMask {
|
||||
|
||||
let mut zeros = u64::max_value();
|
||||
let mut ones = 0u64;
|
||||
|
||||
let mut i = 0usize;
|
||||
for c in input.chars().rev() {
|
||||
|
||||
if c == '0' {
|
||||
zeros &= !(1 << i);
|
||||
} else if c == '1' {
|
||||
ones |= 1 << i;
|
||||
}
|
||||
i += 1;
|
||||
}
|
||||
return BitMask {
|
||||
zeros_mask: zeros,
|
||||
ones_mask: ones,
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
|
||||
fn apply(&self, x: u64) -> u64 {
|
||||
return (x & self.zeros_mask) | self.ones_mask;
|
||||
}
|
||||
}
|
||||
|
||||
struct MemoryBitMask {
|
||||
|
||||
ones_mask: u64,
|
||||
///Positions of the floating numbers
|
||||
float_masks: Vec<u64>,
|
||||
|
||||
}
|
||||
impl MemoryBitMask {
|
||||
|
||||
fn parse(input: &String) -> MemoryBitMask {
|
||||
|
||||
let mut ones = 0u64;
|
||||
let mut float_masks: Vec<u64> = Vec::new();
|
||||
|
||||
let mut i = 0usize;
|
||||
for c in input.chars().rev() {
|
||||
|
||||
if c == 'X' {
|
||||
float_masks.push(1 << i);
|
||||
} else if c == '1' {
|
||||
ones |= 1 << i;
|
||||
}
|
||||
i += 1;
|
||||
}
|
||||
return MemoryBitMask {
|
||||
float_masks,
|
||||
ones_mask: ones,
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
fn set_all(&self, pos: u64, n: u64, mem: &mut HashMap<u64, u64>) {
|
||||
|
||||
let base_pos = pos | self.ones_mask;
|
||||
for float_opt in 0..(1 << self.float_masks.len()) {
|
||||
|
||||
let mut real_pos = base_pos;
|
||||
for i in 0..self.float_masks.len() {
|
||||
|
||||
let float_mask = self.float_masks[i];
|
||||
// Clear the bit in the original pos
|
||||
real_pos &= !float_mask;
|
||||
let bit_mask = 1 << i;
|
||||
if float_opt & bit_mask != 0 {
|
||||
real_pos |= float_mask;
|
||||
}
|
||||
}
|
||||
mem.insert(real_pos, n);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
struct Instruction {
|
||||
pos: usize,
|
||||
n: u64,
|
||||
}
|
||||
|
||||
impl Instruction {
|
||||
fn parse(input: &String) -> Instruction {
|
||||
let pos_start = input.find("[").unwrap() + 1;
|
||||
let pos_end = input.find("]").unwrap();
|
||||
let pos = input[pos_start..pos_end].parse::<usize>().unwrap();
|
||||
|
||||
let n_start = input.find(" = ").unwrap() + 3;
|
||||
let n = input[n_start..].parse::<u64>().unwrap();
|
||||
|
||||
return Instruction { pos, n };
|
||||
}
|
||||
}
|
||||
41
src/day15.rs
Normal file
41
src/day15.rs
Normal file
@@ -0,0 +1,41 @@
|
||||
use super::util;
|
||||
|
||||
pub fn solve() {
|
||||
let lines = util::read_file("input/day15.txt");
|
||||
let starting_numbers = lines[0].split(",").map(|s| s.parse::<usize>().unwrap()).collect::<Vec<_>>();
|
||||
|
||||
let part1 = play_until(2020, &starting_numbers);
|
||||
println!("Day X Part 1: {}", part1);
|
||||
|
||||
|
||||
let part2 = play_until(30_000_000, &starting_numbers);
|
||||
println!("Day X Part 2: {}", part2);
|
||||
}
|
||||
|
||||
fn play_until(max_turn: usize, starting_numbers: &Vec<usize>) -> usize {
|
||||
|
||||
// Because numbers can never be bigger than the number of turns, this works:
|
||||
let mut last_occurrence = vec!{0usize; max_turn};
|
||||
|
||||
// Note: we ignore the last number here; it will be the "previous_number" later.
|
||||
for i in 0..(starting_numbers.len() - 1) {
|
||||
let n = starting_numbers[i];
|
||||
last_occurrence[n] = i + 1;
|
||||
}
|
||||
|
||||
let mut previous_number = starting_numbers[starting_numbers.len() - 1];
|
||||
for turn in starting_numbers.len()..max_turn {
|
||||
|
||||
let prev_occurrence = last_occurrence[previous_number];
|
||||
last_occurrence[previous_number] = turn;
|
||||
if prev_occurrence == 0 {
|
||||
previous_number = 0;
|
||||
} else {
|
||||
previous_number = turn - prev_occurrence;
|
||||
}
|
||||
// println!("Turn {}: {}", turn + 1, previous_number);
|
||||
}
|
||||
|
||||
return previous_number;
|
||||
|
||||
}
|
||||
212
src/day16.rs
Normal file
212
src/day16.rs
Normal file
@@ -0,0 +1,212 @@
|
||||
use super::util;
|
||||
use std::cmp::{min, max};
|
||||
|
||||
pub fn solve() {
|
||||
let lines = util::read_file("input/day16.txt");
|
||||
|
||||
let range_sets = lines.iter().take_while(|s| !s.is_empty()).map(|s| ValidRangeSet::parse(s)).collect::<Vec<_>>();
|
||||
let your_ticket = lines.iter().skip_while(|s| s != &"your ticket:").skip(1).next().unwrap()
|
||||
.split(",").map(|s| s.parse::<u32>().unwrap()).collect::<Vec<u32>>();
|
||||
let nearby_tickets = lines.iter().skip_while(|s| s != &"nearby tickets:").skip(1)
|
||||
.map(|t| t.split(",").map(|s| s.parse::<u32>().unwrap()).collect::<Vec<_>>()).collect::<Vec<_>>();
|
||||
|
||||
let combined_ranges = ValidRange::combine(&range_sets.iter().flat_map(|r| &r.ranges).collect::<Vec<_>>());
|
||||
let invalids_per_ticket = nearby_tickets.iter()
|
||||
.map(|t| find_invalid(t, &combined_ranges))
|
||||
.collect::<Vec<_>>();
|
||||
// println!("{:?}", combined_ranges);
|
||||
|
||||
let part1: u32 = invalids_per_ticket.iter().map(|t| -> u32 { t.iter().sum() }).sum();
|
||||
println!("Day X Part 1: {}", part1);
|
||||
|
||||
let mut valid_tickets = Vec::new();
|
||||
for i in 0..nearby_tickets.len() {
|
||||
if invalids_per_ticket[i].is_empty() {
|
||||
valid_tickets.push(&nearby_tickets[i]);
|
||||
}
|
||||
}
|
||||
|
||||
let ordered_range_sets = resolve_column_ordering(&valid_tickets, &range_sets);
|
||||
// println!("{:?}", ordered_range_sets);
|
||||
let fields = ordered_range_sets.iter().map(|r| &r.name).filter(|n| n.starts_with("departure")).collect::<Vec<&String>>();
|
||||
let part2 =
|
||||
get_ticket_values(&your_ticket, &fields, &ordered_range_sets)
|
||||
.iter()
|
||||
.fold(1u64, |a, b| (a as u64) * (*b as u64));
|
||||
println!("Day X Part 2: {}", part2);
|
||||
}
|
||||
|
||||
fn find_invalid(nums: &Vec<u32>, combined_ranges: &Vec<ValidRange>) -> Vec<u32> {
|
||||
|
||||
return nums.iter().filter(|n| not_in_ranges(n, combined_ranges)).map(|n| n.clone().clone()).collect::<Vec<u32>>()
|
||||
|
||||
}
|
||||
|
||||
fn not_in_ranges(n: &u32, ranges: &Vec<ValidRange>) -> bool {
|
||||
|
||||
let closest_range_idx_res = ranges.binary_search_by_key(n, |r| r.min);
|
||||
let closest_range_idx = if closest_range_idx_res.is_err() {
|
||||
closest_range_idx_res.unwrap_err()
|
||||
} else {
|
||||
// If we're matching a range, the index will be the same as the range, but if we're not matching, it will be one higher
|
||||
closest_range_idx_res.unwrap() + 1
|
||||
};
|
||||
let optimized_res = closest_range_idx == 0 || !ranges[closest_range_idx - 1].includes(n);
|
||||
return optimized_res;
|
||||
}
|
||||
|
||||
fn resolve_column_ordering(tickets: &Vec<&Vec<u32>>, range_sets: &Vec<ValidRangeSet>) -> Vec<ValidRangeSet> {
|
||||
|
||||
let mut available_order_per_range_set = Vec::new();
|
||||
for _ in 0..range_sets.len() {
|
||||
available_order_per_range_set.push(vec!{ true; range_sets.len() });
|
||||
}
|
||||
let mut solved_range_sets = vec!{ false; range_sets.len() };
|
||||
|
||||
for ticket in tickets {
|
||||
|
||||
for range_set_idx in 0..available_order_per_range_set.len() {
|
||||
|
||||
if solved_range_sets[range_set_idx] {
|
||||
continue;
|
||||
}
|
||||
let range_set = &range_sets[range_set_idx];
|
||||
let available_orders = &mut available_order_per_range_set[range_set_idx];
|
||||
let mut removed_options = false;
|
||||
for j in 0..available_orders.len() {
|
||||
if available_orders[j] && !range_set.matches(&ticket[j]) {
|
||||
available_orders[j] = false;
|
||||
removed_options = true;
|
||||
}
|
||||
}
|
||||
if removed_options {
|
||||
check_options_left(range_set_idx, &mut solved_range_sets, &mut available_order_per_range_set);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
let order_per_range_set = available_order_per_range_set.iter()
|
||||
.inspect(|a| if a.iter().filter(|b| **b).count() > 1 { panic!(format!("Inconclusive in terms of ordering"))} )
|
||||
.map(|a| a.iter().position(|b| *b).unwrap())
|
||||
.collect::<Vec<usize>>();
|
||||
|
||||
// Sort the range sets so that they're in their available order
|
||||
let mut res = vec!{ ValidRangeSet{ name: String::from("temp"), ranges: Vec::new() }; range_sets.len()};
|
||||
for i in 0..range_sets.len() {
|
||||
res[order_per_range_set[i]] = range_sets[i].clone();
|
||||
}
|
||||
return res;
|
||||
}
|
||||
|
||||
fn check_options_left(orig_range_set_idx: usize, solved_range_sets: &mut Vec<bool>, available_order_per_range_set: &mut Vec<Vec<bool>>) {
|
||||
|
||||
let options_left = available_order_per_range_set[orig_range_set_idx].iter().filter(|o| **o).count();
|
||||
if options_left == 1 {
|
||||
// We now know for sure where range_set i is supposed to be, so we can cross
|
||||
// that option out for all other range sets:
|
||||
solved_range_sets[orig_range_set_idx] = true;
|
||||
let known_order = available_order_per_range_set[orig_range_set_idx].iter().position(|o|*o).unwrap();
|
||||
|
||||
// println!("Original range set position '{}' must be position: {}", orig_range_set_idx, known_order);
|
||||
|
||||
for j in 0..available_order_per_range_set.len() {
|
||||
|
||||
if j == orig_range_set_idx { continue; }
|
||||
|
||||
if available_order_per_range_set[j][known_order] {
|
||||
available_order_per_range_set[j][known_order] = false;
|
||||
check_options_left(j, solved_range_sets, available_order_per_range_set);
|
||||
}
|
||||
}
|
||||
|
||||
} else if options_left == 0 {
|
||||
panic!(format!("Couldn't find any valid ordering for range set {}", orig_range_set_idx));
|
||||
}
|
||||
|
||||
|
||||
}
|
||||
|
||||
fn get_ticket_values(ticket: &Vec<u32>, fields: &Vec<&String>, ordered_range_sets: &Vec<ValidRangeSet>) -> Vec<u32> {
|
||||
let mut res = Vec::new();
|
||||
for field in fields {
|
||||
|
||||
let idx = ordered_range_sets.iter().position(|r| &&r.name == field).unwrap();
|
||||
res.push(ticket[idx]);
|
||||
}
|
||||
return res;
|
||||
|
||||
}
|
||||
|
||||
#[derive(Debug, Copy, Clone)]
|
||||
struct ValidRange {
|
||||
min: u32,
|
||||
max: u32
|
||||
}
|
||||
|
||||
impl ValidRange {
|
||||
|
||||
fn parse(input: &str) -> ValidRange {
|
||||
let values = input.split("-").map(|s| s.trim()).collect::<Vec<_>>();
|
||||
return ValidRange {
|
||||
min: values[0].parse::<u32>().unwrap(),
|
||||
max: values[1].parse::<u32>().unwrap(),
|
||||
}
|
||||
}
|
||||
|
||||
fn includes(&self, n: &u32) -> bool {
|
||||
return &self.min <= n && &self.max >= n;
|
||||
}
|
||||
|
||||
fn combine(ranges: &Vec<&ValidRange>) -> Vec<ValidRange> {
|
||||
|
||||
let mut res = Vec::new();
|
||||
for range in ranges {
|
||||
let overlaps = res.iter().enumerate().filter(|(_, r)| range.overlaps(r))
|
||||
.collect::<Vec<_>>();
|
||||
let indices_to_remove = overlaps.iter().map(|(i, _)| i.clone()).rev().collect::<Vec<_>>();
|
||||
if overlaps.len() == 0 {
|
||||
res.push(ValidRange { min: range.min, max: range.max });
|
||||
} else {
|
||||
|
||||
let combined_min = min(range.min, overlaps.iter().map(|(_, r)| r.min).min().unwrap());
|
||||
let combined_max = max(range.max, overlaps.iter().map(|(_, r)| r.max).max().unwrap());
|
||||
res.push(ValidRange { min: combined_min, max: combined_max })
|
||||
}
|
||||
for i in indices_to_remove {
|
||||
res.remove(i);
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
res.sort_by_key(|r| r.min);
|
||||
return res;
|
||||
|
||||
}
|
||||
|
||||
fn overlaps(&self, other: &ValidRange) -> bool {
|
||||
return self.min <= other.max && self.max >= other.min;
|
||||
}
|
||||
}
|
||||
|
||||
#[derive(Debug, Clone)]
|
||||
struct ValidRangeSet {
|
||||
name: String,
|
||||
ranges: Vec<ValidRange>,
|
||||
}
|
||||
|
||||
impl ValidRangeSet {
|
||||
fn parse(input: &String) -> ValidRangeSet {
|
||||
|
||||
let spl = input.split(": ").collect::<Vec<_>>();
|
||||
return ValidRangeSet {
|
||||
name: String::from(spl[0]),
|
||||
ranges: spl[1].split(" or ").map(|r| ValidRange::parse(r)).collect::<Vec<_>>()
|
||||
}
|
||||
}
|
||||
|
||||
fn matches(&self, n: &u32) -> bool {
|
||||
|
||||
return self.ranges.iter().any(|r| r.includes(n));
|
||||
|
||||
}
|
||||
}
|
||||
272
src/day17.rs
Normal file
272
src/day17.rs
Normal file
@@ -0,0 +1,272 @@
|
||||
use super::util;
|
||||
use std::cmp::{min, max};
|
||||
|
||||
pub fn solve() {
|
||||
let lines = util::read_file("input/day17.txt");
|
||||
|
||||
let initial_width = lines[0].len() as i32;
|
||||
let initial_height = lines.len() as i32;
|
||||
|
||||
let cycles = 6;
|
||||
|
||||
// The grid grows by at most 1 index per cycle, so this should be big enough:
|
||||
let lower = Vec4::of(-cycles-1, -cycles-1, -cycles-1, -cycles-1);
|
||||
let upper = Vec4::of(initial_width + cycles+1, initial_height + cycles+1, cycles + 2, cycles + 2);
|
||||
|
||||
let mut initial_state = BoolGrid4D::new(lower, upper);
|
||||
for y in 0..initial_height {
|
||||
let mut line_chars = lines[y as usize].chars();
|
||||
|
||||
for x in 0..initial_width {
|
||||
|
||||
if line_chars.next().unwrap() == '#' {
|
||||
initial_state.set(&x, &y, &0, &0, true);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
let res1 = run_conway_cube_simulation(&initial_state, cycles as u32, true);
|
||||
|
||||
let part1: u32 = res1.data.data.iter().map(|c| c.count_ones()).sum();
|
||||
println!("Day 17 Part 1: {}", part1);
|
||||
|
||||
|
||||
let res2 = run_conway_cube_simulation(&initial_state, cycles as u32, false);
|
||||
let part2: u32 = res2.data.data.iter().map(|c| c.count_ones()).sum();
|
||||
println!("Day 17 Part 2: {}", part2);
|
||||
}
|
||||
|
||||
fn run_conway_cube_simulation(initial_state: &BoolGrid4D, cycles: u32, restrict_fourth_dimension: bool) -> BoolGrid4D {
|
||||
|
||||
let mut prev_state = initial_state.clone();
|
||||
let mut next_state = initial_state.clone();
|
||||
|
||||
let mut lower_activity = Vec4::of(initial_state.lower.x + 1, initial_state.lower.y + 1, initial_state.lower.z + 1,
|
||||
if restrict_fourth_dimension { 0 } else { initial_state.lower.w + 1 });
|
||||
let mut upper_activity = Vec4::of(initial_state.upper.x - 1, initial_state.upper.y - 1, initial_state.upper.z - 1,
|
||||
if restrict_fourth_dimension { 1 } else { initial_state.upper.w - 1 });
|
||||
|
||||
for _cycle in 0..cycles {
|
||||
|
||||
|
||||
let mut next_lower_activity = prev_state.upper.clone();
|
||||
let mut next_upper_activity = prev_state.lower.clone();
|
||||
|
||||
if restrict_fourth_dimension {
|
||||
next_lower_activity.w = 0;
|
||||
next_upper_activity.w = 1;
|
||||
}
|
||||
|
||||
for w in lower_activity.w..upper_activity.w {
|
||||
for z in lower_activity.z..upper_activity.z {
|
||||
for y in lower_activity.y..upper_activity.y {
|
||||
for x in lower_activity.x..upper_activity.x {
|
||||
|
||||
let active_neighbors: usize = prev_state.count_active_neighbors(&x, &y, &z, &w, &restrict_fourth_dimension, 4);
|
||||
let active_self = prev_state.get(&x, &y, &z, &w);
|
||||
|
||||
let active_next = (active_self && (active_neighbors == 2 || active_neighbors == 3)) || (!active_self && active_neighbors == 3);
|
||||
|
||||
next_state.set(&x, &y, &z, &w, active_next);
|
||||
|
||||
if active_next != active_self {
|
||||
next_lower_activity.x = min(next_lower_activity.x, x - 1);
|
||||
next_lower_activity.y = min(next_lower_activity.y, y - 1);
|
||||
next_lower_activity.z = min(next_lower_activity.z, z - 1);
|
||||
next_upper_activity.x = max(next_upper_activity.x, x + 2);
|
||||
next_upper_activity.y = max(next_upper_activity.y, y + 2);
|
||||
next_upper_activity.z = max(next_upper_activity.z, z + 2);
|
||||
if !restrict_fourth_dimension {
|
||||
next_lower_activity.w = min(next_lower_activity.w, w - 1);
|
||||
next_upper_activity.w = max(next_upper_activity.w, w + 2);
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
lower_activity = next_lower_activity;
|
||||
upper_activity = next_upper_activity;
|
||||
|
||||
// if !restrict_fourth_dimension {
|
||||
// println!("After {} cycles:", _cycle + 1);
|
||||
// next_state.print();
|
||||
// }
|
||||
|
||||
if lower_activity.x >= upper_activity.x {
|
||||
panic!("No activity!");
|
||||
}
|
||||
|
||||
prev_state = next_state.clone();
|
||||
}
|
||||
|
||||
return prev_state;
|
||||
|
||||
}
|
||||
|
||||
#[derive(Clone)]
|
||||
struct Vec4 {
|
||||
x: i32,
|
||||
y: i32,
|
||||
z: i32,
|
||||
w: i32
|
||||
}
|
||||
|
||||
impl Vec4 {
|
||||
fn of(x: i32, y: i32, z: i32, w: i32) -> Vec4 {
|
||||
return Vec4 { x, y, z, w };
|
||||
}
|
||||
}
|
||||
|
||||
#[derive(Clone)]
|
||||
struct BoolGrid4D {
|
||||
|
||||
data: BitArray,
|
||||
lower: Vec4,
|
||||
upper: Vec4,
|
||||
size: Vec4,
|
||||
}
|
||||
|
||||
impl BoolGrid4D {
|
||||
|
||||
fn new(lower: Vec4, upper: Vec4) -> BoolGrid4D {
|
||||
|
||||
assert!(lower.x < upper.x && lower.y < upper.y && lower.z < upper.z);
|
||||
|
||||
let size = Vec4 {
|
||||
x: upper.x - lower.x,
|
||||
y: upper.y - lower.y,
|
||||
z: upper.z - lower.z,
|
||||
w: upper.w - lower.w
|
||||
};
|
||||
|
||||
return BoolGrid4D {
|
||||
data: BitArray::new((size.x * size.y * size.z * size.w) as usize, false),
|
||||
lower, upper, size
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
fn get_idx(&self, x: &i32, y: &i32, z: &i32, w: &i32) -> usize {
|
||||
|
||||
assert!(x >= &self.lower.x && x < &self.upper.x);
|
||||
assert!(y >= &self.lower.y && y < &self.upper.y);
|
||||
assert!(z >= &self.lower.z && z < &self.upper.z);
|
||||
assert!(w >= &self.lower.w && w < &self.upper.w);
|
||||
|
||||
return (x - self.lower.x) as usize +
|
||||
(y - self.lower.y) as usize * self.size.x as usize +
|
||||
(z - self.lower.z) as usize * self.size.x as usize * self.size.y as usize +
|
||||
(w - self.lower.w) as usize * self.size.x as usize * self.size.y as usize * self.size.z as usize;
|
||||
}
|
||||
|
||||
fn get(&self, x: &i32, y: &i32, z: &i32, w: &i32) -> bool {
|
||||
return self.data.get(self.get_idx(x, y, z, w));
|
||||
}
|
||||
|
||||
fn set(&mut self, x: &i32, y: &i32, z: &i32, w: &i32, v: bool) {
|
||||
let idx = self.get_idx(x, y, z, w);
|
||||
self.data.set(idx, v);
|
||||
}
|
||||
|
||||
fn count_active_neighbors(&self, x: &i32, y: &i32, z: &i32, w: &i32, restrict_fourth_dimension: &bool, count_until: usize) -> usize {
|
||||
|
||||
assert!(x - 1 >= self.lower.x && x + 1 < self.upper.x);
|
||||
assert!(y - 1 >= self.lower.y && y + 1 < self.upper.y);
|
||||
assert!(z - 1 >= self.lower.z && z + 1 < self.upper.z);
|
||||
assert!(w - 1 >= self.lower.w && w + 1 < self.upper.w);
|
||||
|
||||
let mut res = 0;
|
||||
for nw in if *restrict_fourth_dimension { *w..w+1 } else { w-1..w+2 } {
|
||||
for nz in z - 1..z + 2 {
|
||||
for ny in y - 1..y + 2 {
|
||||
for nx in x - 1..x + 2 {
|
||||
|
||||
// Skip self (i.e. not the neighbor)
|
||||
if &nz == z && &ny == y && &nx == x && &nw == w { continue };
|
||||
|
||||
if self.get(&nx, &ny, &nz, &nw) {
|
||||
res += 1;
|
||||
if res >= count_until {
|
||||
return res;
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
return res;
|
||||
}
|
||||
|
||||
#[allow(dead_code)]
|
||||
fn print(&self) {
|
||||
|
||||
for w in self.lower.w..self.upper.w {
|
||||
|
||||
if !self.any_in_w(&w) { continue; }
|
||||
for z in self.lower.z..self.upper.z {
|
||||
|
||||
if !self.any_in_wz(&w, &z) { continue; }
|
||||
println!("z={}, w={}", z, w);
|
||||
for y in self.lower.y..self.upper.y {
|
||||
for x in self.lower.x..self.upper.x {
|
||||
print!("{}", if self.get(&x, &y, &z, &0) { '#' } else { '.' });
|
||||
}
|
||||
println!();
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
fn any_in_w(&self, w: &i32) -> bool {
|
||||
|
||||
for i in self.get_idx(&self.lower.x, &self.lower.y, &self.lower.z, w)..
|
||||
(self.get_idx(&(self.upper.x - 1), &(self.upper.y - 1), &(self.upper.z - 1), w) + 1) {
|
||||
if self.data.get(i) { return true; }
|
||||
}
|
||||
return false;
|
||||
}
|
||||
|
||||
fn any_in_wz(&self, w: &i32, z: &i32) -> bool {
|
||||
|
||||
for i in self.get_idx(&self.lower.x, &self.lower.y, z, w)..
|
||||
(self.get_idx(&(self.upper.x - 1), &(self.upper.y - 1), z, w) + 1) {
|
||||
if self.data.get(i) { return true; }
|
||||
}
|
||||
return false;
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
#[derive(Clone)]
|
||||
struct BitArray {
|
||||
data: Vec<u32>,
|
||||
length: usize,
|
||||
}
|
||||
|
||||
impl BitArray {
|
||||
|
||||
fn new(length: usize, default: bool) -> BitArray {
|
||||
return BitArray{
|
||||
data: vec!{if default { !0 } else { 0 }; (length / 32) + 1},
|
||||
length,
|
||||
}
|
||||
}
|
||||
|
||||
fn get(&self, i: usize) -> bool {
|
||||
return BitArray::get_bit(&self.data[i / 32], &(i % 32));
|
||||
}
|
||||
|
||||
fn get_bit(d: &u32, i: &usize) -> bool {
|
||||
return d & (1 << i) != 0
|
||||
}
|
||||
|
||||
fn set(&mut self, i: usize, v: bool) {
|
||||
|
||||
let mask = 1 << (i % 32);
|
||||
self.data[i / 32] &= !mask;
|
||||
if v { self.data[i / 32] |= mask; }
|
||||
}
|
||||
|
||||
}
|
||||
202
src/day18.rs
Normal file
202
src/day18.rs
Normal file
@@ -0,0 +1,202 @@
|
||||
use super::util;
|
||||
|
||||
pub fn solve() {
|
||||
let lines = util::read_file("input/day18.txt");
|
||||
|
||||
// lines.iter()
|
||||
// .for_each(|s| println!("{} = {}", s, evaluate(s.as_str()).0));
|
||||
|
||||
let part1: u64 = lines.iter().map(|s| evaluate(s.as_str()).0).sum();
|
||||
println!("Day X Part 1: {}", part1);
|
||||
|
||||
|
||||
let part2: u64 = lines.iter()
|
||||
// .inspect(|s| println!("{}: {}", s, build_expression_tree(s.as_str()).0.evaluate()))
|
||||
.map(|s| build_expression_tree(s.as_str()).0.evaluate())
|
||||
.sum();
|
||||
println!("Day X Part 2: {}", part2);
|
||||
}
|
||||
|
||||
fn evaluate(input: &str) -> (u64, usize) {
|
||||
|
||||
let mut i = 0usize;
|
||||
let mut res = 0;
|
||||
let mut operator = Operator::Add;
|
||||
while i < input.len() {
|
||||
|
||||
let c = &input[i..(i+1)];
|
||||
if c == "(" {
|
||||
let sub_evaluation = evaluate(&input[(i + 1)..]);
|
||||
i += sub_evaluation.1;
|
||||
res = operator.apply(res, sub_evaluation.0);
|
||||
} else if c == ")" {
|
||||
return (res, i + 1);
|
||||
} else if c == "+" {
|
||||
operator = Operator::Add;
|
||||
} else if c == "*" {
|
||||
operator = Operator::Multiply;
|
||||
} else if c == " " {
|
||||
// Nothing to do
|
||||
} else {
|
||||
let n = c.parse::<u64>().unwrap();
|
||||
res = operator.apply(res, n);
|
||||
}
|
||||
i += 1;
|
||||
}
|
||||
|
||||
return (res, i);
|
||||
}
|
||||
|
||||
fn build_expression_tree(input: &str) -> (ExpressionTreeNode, usize) {
|
||||
|
||||
// println!("Evaluating '{}':", input);
|
||||
|
||||
let mut subtrees: Vec<(usize, usize, ExpressionTreeNode)> = Vec::new();
|
||||
let mut evaluate_until = input.len();
|
||||
{
|
||||
let mut i = 0;
|
||||
// First build subtrees for brackets:
|
||||
while i < evaluate_until {
|
||||
let par_open = input[i..evaluate_until].find("(").map(|p| i + p);
|
||||
let par_close = input[i..evaluate_until].find(")").map(|p| i + p);
|
||||
if par_open.is_some() && par_close.unwrap() > par_open.unwrap() {
|
||||
let subtree_start = par_open.unwrap();
|
||||
let subtree = build_expression_tree(&input[(subtree_start + 1)..]);
|
||||
let subtree_end = subtree_start + subtree.1 + 1;
|
||||
subtrees.push((subtree_start, subtree_end, subtree.0));
|
||||
i = subtree_end + 1;
|
||||
} else {
|
||||
if par_close.is_some() {
|
||||
// If we find a closing parenthesis, we're apparently building a subtree
|
||||
evaluate_until = par_close.unwrap();
|
||||
break;
|
||||
} else {
|
||||
// No parenthesis, so no need to search further
|
||||
break;
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
// println!("Subtrees between parentheses in '{}':", &input[0..evaluate_until]);
|
||||
// subtrees.iter().for_each(|s| println!("{:?}", s));
|
||||
|
||||
|
||||
// Now we're gonna match/find all +:
|
||||
build_subtrees_for_operators(input, 0, evaluate_until, "+", &Operator::Add, &mut subtrees);
|
||||
build_subtrees_for_operators(input, 0, evaluate_until, "*", &Operator::Multiply, &mut subtrees);
|
||||
|
||||
// // By now we should have a single root node left
|
||||
// println!("Subtrees in '{}':", &input[0..evaluate_until]);
|
||||
// subtrees.iter().for_each(|s| println!("{:?}", s));
|
||||
|
||||
assert_eq!(subtrees.len(), 1);
|
||||
return (subtrees.remove(0).2, evaluate_until);
|
||||
|
||||
}
|
||||
|
||||
fn is_not_whitespace(c: char) -> bool {
|
||||
return !c.is_whitespace();
|
||||
}
|
||||
|
||||
fn build_subtrees_for_operators(input: &str, from: usize, until: usize, operator_symbol: &str, operator: &Operator, subtrees: &mut Vec<(usize, usize, ExpressionTreeNode)>) {
|
||||
|
||||
let mut i = if subtrees.is_empty() || subtrees[0].0 > from { 0 } else { subtrees[0].1 + 1 };
|
||||
// Subtree index points to the subtree after the current search-range
|
||||
let mut subtree_idx = if i == 0 { 0 } else { 1 };
|
||||
let mut search_until = if subtrees.is_empty() { until } else if subtree_idx < subtrees.len() { subtrees[subtree_idx].0 } else { until };
|
||||
while i < until {
|
||||
let operator_idx = input[i..search_until].find(operator_symbol).map(|r| i + r);
|
||||
if operator_idx.is_some() {
|
||||
// Found the operator symbol, let's build a subtree with whatever is left and right of it:
|
||||
let subtree_end = build_subtree_for_operator(operator_idx.unwrap(), &input, operator, subtrees);
|
||||
i = subtree_end + 1;
|
||||
if i > search_until {
|
||||
// Our newly build subtree includes the last search range:
|
||||
search_until = subtrees.iter().map(|s| s.0).find(|s| s > &i).unwrap_or(until);
|
||||
}
|
||||
} else {
|
||||
subtree_idx += 1;
|
||||
// If the subtree_idx points the to subtree "after" the last one, that just means to search until the end of the string
|
||||
// If the subtree_idx points even after that, then we're done.
|
||||
if subtree_idx > subtrees.len() {
|
||||
break;
|
||||
}
|
||||
i = subtrees[subtree_idx - 1].1;
|
||||
search_until = if subtrees.is_empty() { until } else if subtree_idx < subtrees.len() { subtrees[subtree_idx].0 } else { until };
|
||||
if i == search_until {
|
||||
break;
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
fn build_subtree_for_operator(idx: usize, input: &str, op: &Operator, subtrees: &mut Vec<(usize, usize, ExpressionTreeNode)>) -> usize {
|
||||
|
||||
let left_idx = input[0..idx].rfind(is_not_whitespace).unwrap();
|
||||
let right_idx = idx + 1 + input[(idx + 1)..].find(is_not_whitespace).unwrap();
|
||||
|
||||
let left_subtree = subtrees.binary_search_by_key(&left_idx, |s| s.1);
|
||||
let right_subtree = subtrees.binary_search_by_key(&right_idx, |s| s.0);
|
||||
let subtree_start = if left_subtree.is_ok() { subtrees[left_subtree.unwrap()].0 } else {left_idx};
|
||||
let subtree_end = if right_subtree.is_ok() { subtrees[right_subtree.unwrap()].1 } else {right_idx};
|
||||
let subtree = ExpressionTreeNode {
|
||||
operator: Option::Some(op.clone()),
|
||||
right: Option::Some(Box::from( if right_subtree.is_ok() { subtrees.remove(right_subtree.unwrap()).2 } else { ExpressionTreeNode::leaf_node(&input[right_idx..(right_idx+ 1)]) })),
|
||||
left: Option::Some( Box::from(if left_subtree.is_ok() { subtrees.remove(left_subtree.unwrap()).2 } else { ExpressionTreeNode::leaf_node(&input[left_idx..(left_idx + 1)]) })),
|
||||
num: Option::None,
|
||||
};
|
||||
|
||||
let insertion_index = if subtrees.is_empty() { 0 } else {
|
||||
let res = subtrees.binary_search_by_key(&subtree_start, |s| s.0);
|
||||
if res.is_ok() { res.unwrap() } else { res.unwrap_err() }
|
||||
};
|
||||
subtrees.insert(insertion_index, (subtree_start, subtree_end, subtree));
|
||||
return subtree_end;
|
||||
}
|
||||
|
||||
#[derive(Debug, PartialEq, Clone)]
|
||||
enum Operator {
|
||||
Multiply, Add
|
||||
}
|
||||
|
||||
|
||||
impl Operator {
|
||||
fn apply(&self, x: u64, y: u64) -> u64 {
|
||||
return match self {
|
||||
Operator::Add => x + y,
|
||||
Operator::Multiply => x * y
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
#[derive(Debug)]
|
||||
struct ExpressionTreeNode {
|
||||
|
||||
operator: Option<Operator>,
|
||||
num: Option<u64>,
|
||||
left: Option<Box<ExpressionTreeNode>>,
|
||||
right: Option<Box<ExpressionTreeNode>>,
|
||||
|
||||
}
|
||||
|
||||
impl ExpressionTreeNode {
|
||||
|
||||
fn leaf_node(input: &str) -> ExpressionTreeNode {
|
||||
return ExpressionTreeNode {
|
||||
operator: Option::None,
|
||||
left: Option::None,
|
||||
right: Option::None,
|
||||
num: Option::Some(input.parse::<u64>().unwrap())
|
||||
};
|
||||
}
|
||||
|
||||
fn evaluate(&self) -> u64 {
|
||||
|
||||
return if self.num.is_some() {
|
||||
self.num.unwrap()
|
||||
} else {
|
||||
self.operator.as_ref().unwrap().apply(self.left.as_ref().unwrap().evaluate(), self.right.as_ref().unwrap().evaluate())
|
||||
}
|
||||
}
|
||||
}
|
||||
112
src/day19.rs
Normal file
112
src/day19.rs
Normal file
@@ -0,0 +1,112 @@
|
||||
use super::util;
|
||||
use regex::Regex;
|
||||
use crate::day19::RuleType::{Letter, Options};
|
||||
use std::collections::{HashMap, HashSet};
|
||||
|
||||
pub fn solve() {
|
||||
let lines = util::read_file("input/day19.txt");
|
||||
let mut rules_map = HashMap::new();
|
||||
lines.iter()
|
||||
.take_while(|s| s != &&String::from(""))
|
||||
.for_each(|s| {
|
||||
let mut line_split = s.split(": ");
|
||||
let idx = line_split.next().unwrap().parse::<usize>().unwrap();
|
||||
let rule = Rule::parse(line_split.next().unwrap());
|
||||
rules_map.insert(idx, rule);
|
||||
});
|
||||
|
||||
let messages: Vec<&String> = lines[(rules_map.len() + 1)..].iter().collect();
|
||||
|
||||
println!("{:?}", try_match(&messages[0], &0, &rules_map));
|
||||
let part1 = messages.iter().filter(|m| try_match(m, &0, &rules_map).contains(&m.len())).count();
|
||||
println!("Day X Part 1: {}", part1);
|
||||
|
||||
// We update the rules to include the loops:
|
||||
rules_map.insert(8, Rule::parse("42 | 42 8"));
|
||||
rules_map.insert(11, Rule::parse("42 31 | 42 11 31"));
|
||||
|
||||
|
||||
let part2 = messages.iter().filter(|m| try_match(m, &0, &rules_map).contains(&m.len())).count();
|
||||
println!("Day X Part 2: {}", part2);
|
||||
}
|
||||
|
||||
/// Calculates and returns until when the string was matched
|
||||
fn try_match(message: &str, rule_idx: &usize, rules: &HashMap<usize, Rule>) -> HashSet<usize> {
|
||||
|
||||
let rule = rules.get(&rule_idx).unwrap();
|
||||
if rule.rule_type == Letter {
|
||||
|
||||
if message.starts_with(rule.letters.as_ref().unwrap()) {
|
||||
let mut res = HashSet::new();
|
||||
// Note: kind of a hack here, all the "letter" based matchers are of length 1
|
||||
res.insert(rule.letters.as_ref().unwrap().len().clone());
|
||||
return res;
|
||||
} else {
|
||||
return HashSet::new();
|
||||
}
|
||||
|
||||
} else {
|
||||
|
||||
return rule.options.as_ref().unwrap().iter()
|
||||
.flat_map(|options| {
|
||||
let mut try_from = HashSet::new();
|
||||
try_from.insert(0);
|
||||
let mut next_try_from = HashSet::new();
|
||||
for option_rule_idx in options {
|
||||
for start_idx in try_from {
|
||||
try_match(&message[start_idx..], &option_rule_idx, rules)
|
||||
.iter()
|
||||
.for_each(|m| { if m != &0 { next_try_from.insert(start_idx + m); () }})
|
||||
|
||||
}
|
||||
try_from = next_try_from.clone();
|
||||
if try_from.is_empty() { break; }
|
||||
next_try_from.clear();
|
||||
}
|
||||
return try_from;
|
||||
}).collect();
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
#[derive(Debug, Clone)]
|
||||
struct Rule {
|
||||
|
||||
rule_type: RuleType,
|
||||
letters: Option<String>,
|
||||
options: Option<Vec<Vec<usize>>>
|
||||
|
||||
}
|
||||
|
||||
impl Rule {
|
||||
|
||||
fn parse(input: &str) -> Rule {
|
||||
|
||||
lazy_static! {
|
||||
static ref LETTER_RULE_MATCHER: Regex = Regex::new(r###"^"([a-z])"$"###).unwrap();
|
||||
}
|
||||
return if LETTER_RULE_MATCHER.is_match(input) {
|
||||
Rule {
|
||||
rule_type: Letter,
|
||||
letters: Option::Some(LETTER_RULE_MATCHER.captures(input).unwrap().get(1).map(|m| String::from(m.as_str())).unwrap()),
|
||||
options: Option::None,
|
||||
}
|
||||
} else {
|
||||
let options =
|
||||
input.split(" | ")
|
||||
.map(|s| s.split(" ").map(|o| o.parse::<usize>().unwrap()).collect::<Vec<_>>()).collect::<Vec<_>>();
|
||||
Rule {
|
||||
rule_type: Options,
|
||||
letters: Option::None,
|
||||
options: Option::Some(options)
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
}
|
||||
}
|
||||
|
||||
#[derive(Debug, PartialEq, Clone)]
|
||||
enum RuleType {
|
||||
Letter, Options
|
||||
}
|
||||
240
src/day20.rs
Normal file
240
src/day20.rs
Normal file
@@ -0,0 +1,240 @@
|
||||
use super::util;
|
||||
use std::collections::HashMap;
|
||||
|
||||
const PIECE_SIZE: u16 = 10;
|
||||
// const POSSIBLE_EDGE_COUNT: u16 = 1 << (PIECE_SIZE + 1);
|
||||
|
||||
pub fn solve() {
|
||||
let lines = util::read_file("input/day20.txt");
|
||||
let mut piece_id = 0u32;
|
||||
let mut piece_lines: Vec<PieceLine> = Vec::new();
|
||||
let mut pieces = Vec::new();
|
||||
for line in &lines {
|
||||
|
||||
if line == &"" {
|
||||
pieces.push(Piece::from(piece_id, piece_lines));
|
||||
piece_lines = Vec::new();
|
||||
} else if line.starts_with("Tile") {
|
||||
piece_id = line[5..(line.len() - 1)].parse::<u32>().unwrap();
|
||||
} else {
|
||||
piece_lines.push(PieceLine::parse(&line));
|
||||
}
|
||||
}
|
||||
if !piece_lines.is_empty() {
|
||||
pieces.push(Piece::from(piece_id, piece_lines));
|
||||
}
|
||||
pieces.sort_by_key(|p| p.id);
|
||||
|
||||
// Let's create an array containing for each puzzle piece side, in which pieces it appears:
|
||||
let mut piece_matches = HashMap::new();
|
||||
for piece in &pieces {
|
||||
add_to_piece_matches(piece.id, &piece.top_edge, &piece.flipped_top_edge, &mut piece_matches);
|
||||
add_to_piece_matches(piece.id, &piece.bottom_edge, &piece.flipped_bottom_edge, &mut piece_matches);
|
||||
add_to_piece_matches(piece.id, &piece.left_edge, &piece.flipped_left_edge, &mut piece_matches);
|
||||
add_to_piece_matches(piece.id, &piece.right_edge, &piece.flipped_right_edge, &mut piece_matches);
|
||||
}
|
||||
|
||||
// println!("{:?}", piece_matches);
|
||||
|
||||
// And now we find which pieces are adjacent (same edge) to which other pieces (not caring about orientation at all)
|
||||
let mut matched_edge_count: HashMap<u32, usize> = HashMap::new();
|
||||
for piece_match in piece_matches {
|
||||
if piece_match.1.len() == 1 {
|
||||
continue;
|
||||
}
|
||||
piece_match.1.iter().for_each(|m| { matched_edge_count.entry(m.clone()).and_modify(|c| *c += 1 ).or_insert(1); })
|
||||
}
|
||||
|
||||
println!("{:?}", matched_edge_count);
|
||||
let corner_pieces: Vec<u32> = matched_edge_count.iter().filter(|e| e.1 == &2).map(|e| e.0.clone()).collect::<Vec<_>>();
|
||||
|
||||
assert_eq!(corner_pieces.len(), 4);
|
||||
|
||||
let part1 = corner_pieces.iter().fold(1u64, |a, b| a as u64 * b.clone() as u64);
|
||||
println!("Day X Part 1: {}", part1);
|
||||
|
||||
|
||||
let part2 = 0;
|
||||
println!("Day X Part 2: {}", part2);
|
||||
}
|
||||
|
||||
#[allow(dead_code)]
|
||||
fn make_puzzle(pieces: &HashMap<u32, Piece>, piece_matches: &HashMap<u16, Vec<u32>>, matched_edge_count: &HashMap<u32, usize>) {
|
||||
|
||||
let corner_pieces = matched_edge_count.iter().filter(|e| e.1 == &2).map(|e| e.0.clone()).collect::<Vec<u32>>();
|
||||
let edge_pieces = matched_edge_count.iter().filter(|e| e.1 == &3).map(|e| e.0.clone()).collect::<Vec<u32>>();
|
||||
let center_pieces = matched_edge_count.iter().filter(|e| e.1 == &4).map(|e| e.0.clone()).collect::<Vec<u32>>();
|
||||
|
||||
let mut puzzle = Puzzle { state: Vec::new() };
|
||||
|
||||
|
||||
// First let's make the edges:
|
||||
let first_corner_piece = pieces.get(&corner_pieces[0]);
|
||||
// TODO Find out what side of the corner pieces were matched and orient it correctly:
|
||||
|
||||
|
||||
// let last_piece = pieces.get(&corner_pieces[0]).unwrap();
|
||||
// let last_piece_state = PieceState {
|
||||
// piece_id: corner_pieces[0],
|
||||
// degrees: 0,
|
||||
// flip_horizontal: false,
|
||||
// flip_vertical: false
|
||||
// };
|
||||
// puzzle.pieces.push(vec![Option::Some(last_piece_state)]);
|
||||
// loop {
|
||||
//
|
||||
//
|
||||
// }
|
||||
}
|
||||
|
||||
fn add_to_piece_matches(piece_id: u32, edge: &PieceLine, flipped_edge: &PieceLine, piece_matches: &mut HashMap<u16, Vec<u32>>) {
|
||||
|
||||
let use_flipped = flipped_edge.data < edge.data;
|
||||
let bookkeeping_edge = if use_flipped { flipped_edge } else { edge };
|
||||
|
||||
piece_matches.entry(bookkeeping_edge.data).and_modify(|d| d.push(piece_id)).or_insert(vec![ piece_id ]);
|
||||
}
|
||||
|
||||
#[derive(Debug, Clone)]
|
||||
struct Puzzle {
|
||||
state: Vec<Vec<Option<PieceState>>>
|
||||
}
|
||||
|
||||
#[derive(Debug, Clone)]
|
||||
struct PieceState {
|
||||
// 0, 90, 180 or 270
|
||||
piece_id: u32,
|
||||
degrees: u16,
|
||||
flipped: bool,
|
||||
|
||||
}
|
||||
|
||||
impl PieceState {
|
||||
|
||||
/// Returns the edge on the right, given the current piece state (i.e. this might be actually the edge on top or a flipped
|
||||
/// edge depending on the rotation
|
||||
fn right_edge<'piece>(&self, piece: &'piece Piece) -> &'piece PieceLine {
|
||||
|
||||
return match self.degrees {
|
||||
0 =>
|
||||
if self.flipped {
|
||||
&piece.left_edge
|
||||
} else {
|
||||
&piece.right_edge
|
||||
}
|
||||
90 =>
|
||||
if self.flipped {
|
||||
&piece.flipped_top_edge
|
||||
} else {
|
||||
&piece.top_edge
|
||||
}
|
||||
180 => {
|
||||
if self.flipped {
|
||||
&piece.flipped_right_edge
|
||||
} else {
|
||||
&piece.flipped_left_edge
|
||||
}
|
||||
}
|
||||
270 => {
|
||||
if self.flipped {
|
||||
&piece.bottom_edge
|
||||
} else {
|
||||
&piece.flipped_bottom_edge
|
||||
}
|
||||
}
|
||||
_ => panic!("Unsupported rotation")
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
#[derive(Debug, Clone)]
|
||||
struct Piece {
|
||||
|
||||
id: u32,
|
||||
piece_lines: Vec<PieceLine>,
|
||||
|
||||
// left to right top edge
|
||||
top_edge: PieceLine,
|
||||
// left to right bottom edge
|
||||
bottom_edge: PieceLine,
|
||||
// Left edge (from top to bottom)
|
||||
left_edge: PieceLine,
|
||||
// Right edge (from to to bottom)
|
||||
right_edge: PieceLine,
|
||||
// Right to left top edge
|
||||
flipped_top_edge: PieceLine,
|
||||
// Right to left bottom edge
|
||||
flipped_bottom_edge: PieceLine,
|
||||
// Bottom to top left edge
|
||||
flipped_left_edge: PieceLine,
|
||||
// Bottom to top right edge
|
||||
flipped_right_edge: PieceLine,
|
||||
|
||||
}
|
||||
|
||||
impl Piece {
|
||||
|
||||
fn from(id: u32, piece_lines: Vec<PieceLine>) -> Piece {
|
||||
|
||||
let top_edge = piece_lines[0].clone();
|
||||
let bottom_edge = piece_lines[(PIECE_SIZE - 1) as usize].clone();
|
||||
let left_edge = Piece::get_vertical(0, &piece_lines);
|
||||
let right_edge = Piece::get_vertical(PIECE_SIZE - 1, &piece_lines);
|
||||
|
||||
return Piece {
|
||||
id, piece_lines,
|
||||
flipped_top_edge: top_edge.flipped(), flipped_bottom_edge: bottom_edge.flipped(),
|
||||
flipped_left_edge: left_edge.flipped(), flipped_right_edge: right_edge.flipped(),
|
||||
top_edge, bottom_edge, left_edge, right_edge,
|
||||
};
|
||||
}
|
||||
|
||||
fn get_vertical(x: u16, piece_lines: &Vec<PieceLine>) -> PieceLine {
|
||||
let mut vert = 0;
|
||||
for i in 0..PIECE_SIZE {
|
||||
if piece_lines[i as usize].get(x as usize) {
|
||||
vert |= 1 << i;
|
||||
}
|
||||
}
|
||||
return PieceLine { data: vert };
|
||||
}
|
||||
}
|
||||
|
||||
#[derive(Debug, PartialEq, Clone)]
|
||||
struct PieceLine {
|
||||
data: u16,
|
||||
}
|
||||
|
||||
impl PieceLine {
|
||||
fn parse(line: &String) -> PieceLine {
|
||||
|
||||
let mut data = 0u16;
|
||||
let mut i = 0;
|
||||
for char in line.chars() {
|
||||
if char == '#' {
|
||||
data |= 1 << i;
|
||||
}
|
||||
i += 1;
|
||||
}
|
||||
|
||||
return PieceLine { data };
|
||||
}
|
||||
|
||||
fn get(&self, i: usize) -> bool {
|
||||
|
||||
let mask = 1u16 << i;
|
||||
return self.data & mask == mask;
|
||||
}
|
||||
|
||||
fn flipped(&self) -> PieceLine {
|
||||
let mut res = 0u16;
|
||||
for i in 0..PIECE_SIZE {
|
||||
if self.get(i as usize) {
|
||||
res |= 1 << (PIECE_SIZE - i - 1)
|
||||
}
|
||||
}
|
||||
return PieceLine { data: res };
|
||||
}
|
||||
}
|
||||
89
src/day21.rs
Normal file
89
src/day21.rs
Normal file
@@ -0,0 +1,89 @@
|
||||
use super::util;
|
||||
use std::collections::{HashSet, HashMap};
|
||||
use std::iter::FromIterator;
|
||||
|
||||
pub fn solve() {
|
||||
let lines = util::read_file("input/day21.txt");
|
||||
|
||||
let recipes = lines.iter().map(Recipe::parse).collect::<Vec<Recipe>>();
|
||||
// println!("{:?}", recipes);
|
||||
|
||||
// An ingredient that contains an allergen, must appear in all recipes that list that allergen.
|
||||
// So all ingredients that don't appear in any such intersections, cannot contain allergens.
|
||||
let mut allergens = recipes.iter().flat_map(|r| &r.allergens).collect::<Vec<&String>>();
|
||||
allergens.sort();
|
||||
allergens.dedup();
|
||||
|
||||
// println!("{:?}", allergens);
|
||||
|
||||
let mut possible_ingredients_per_allergen: HashMap<&String, Vec<&String>> = HashMap::new();
|
||||
|
||||
for allergen in &allergens {
|
||||
|
||||
let matching_recipes = recipes.iter()
|
||||
.filter(|r| r.allergens.contains(allergen))
|
||||
.collect::<Vec<&Recipe>>();
|
||||
|
||||
let mut matching_ingredients = matching_recipes[0].ingredients.iter().collect::<Vec<&String>>();
|
||||
for recipe in matching_recipes[1..].iter() {
|
||||
matching_ingredients = matching_ingredients.iter().filter(|i| recipe.ingredients.contains(**i)).map(|i| *i).collect();
|
||||
}
|
||||
possible_ingredients_per_allergen.insert(allergen, matching_ingredients);
|
||||
}
|
||||
|
||||
// println!("{:?}", possible_ingredients_per_allergen);
|
||||
|
||||
// Now all the ingredients that are not "possible ingredients per allergen" can not possibly contain an allergen, so we count those instances:
|
||||
let allergy_ingredients: HashSet<&String> = HashSet::from_iter(possible_ingredients_per_allergen.iter()
|
||||
.flat_map(|e| e.1.iter()).map(|i|*i));
|
||||
|
||||
let part1: usize = recipes.iter().map(|r| r.ingredients.iter().filter(|i| !allergy_ingredients.contains(i)).count()).sum();
|
||||
println!("Day 21 Part 1: {}", part1);
|
||||
|
||||
let mut remaining_ingredients_per_allergen: Vec<(&String, Vec<&String>)> = possible_ingredients_per_allergen.iter()
|
||||
.map(|e| (*e.0, e.1.iter().map(|i|*i).collect()))
|
||||
.collect();
|
||||
let mut allergen_to_ingredient: HashMap<String, String> = HashMap::new();
|
||||
loop {
|
||||
let known_allergens: Vec<(String, String)> = remaining_ingredients_per_allergen.iter()
|
||||
.filter(|e| e.1.len() == 1)
|
||||
.map(|e| ((*e.0).clone(), e.1[0].clone())).collect();
|
||||
|
||||
for known_allergen in known_allergens {
|
||||
|
||||
|
||||
remaining_ingredients_per_allergen = remaining_ingredients_per_allergen
|
||||
.iter().filter(|e| e.0 != &known_allergen.0)
|
||||
.map(|e| (e.0, e.1.iter().filter(|i| &known_allergen.1 != **i).map(|i| *i).collect()))
|
||||
.collect();
|
||||
|
||||
allergen_to_ingredient.insert(known_allergen.0, known_allergen.1);
|
||||
}
|
||||
|
||||
if remaining_ingredients_per_allergen.is_empty() {
|
||||
break;
|
||||
}
|
||||
}
|
||||
|
||||
let dangerous_ingredients = allergens.iter().map(|a| allergen_to_ingredient.get(*a).unwrap().clone()).collect::<Vec<String>>();
|
||||
let part2 = dangerous_ingredients.join(",");
|
||||
println!("Day 21 Part 2: {}", part2);
|
||||
}
|
||||
|
||||
#[derive(Debug, Clone)]
|
||||
struct Recipe {
|
||||
ingredients: HashSet<String>,
|
||||
allergens: Vec<String>
|
||||
}
|
||||
|
||||
impl Recipe {
|
||||
|
||||
fn parse(line: &String) -> Recipe {
|
||||
|
||||
let allergens_idx = line.find("(contains ").unwrap();
|
||||
let ingredients = HashSet::from(line[0..allergens_idx - 1].split(char::is_whitespace).map(|i| String::from(i)).collect());
|
||||
let allergens = line[allergens_idx + "(contains ".len()..line.len() - 1].split(", ").map(String::from).collect::<Vec<String>>();
|
||||
|
||||
return Recipe { ingredients, allergens };
|
||||
}
|
||||
}
|
||||
111
src/day22.rs
Normal file
111
src/day22.rs
Normal file
@@ -0,0 +1,111 @@
|
||||
use super::util;
|
||||
use std::collections::{VecDeque, HashSet};
|
||||
|
||||
pub fn solve() {
|
||||
let lines = util::read_file("input/day22.txt");
|
||||
let p1_cards = lines.iter().skip(1)
|
||||
.take_while(|s| s != &"")
|
||||
.map(|s| s.parse::<u32>().unwrap())
|
||||
.collect();
|
||||
|
||||
let p2_cards = lines.iter().skip_while(|s| s != &"Player 2:")
|
||||
.skip(1)
|
||||
.map(|s| s.parse::<u32>().unwrap())
|
||||
.collect();
|
||||
|
||||
let part1 = play_combat(&p1_cards, &p2_cards);
|
||||
println!("Day 22 Part 1: {}", part1);
|
||||
|
||||
|
||||
let part2 = play_recursive_combat(&p1_cards, &p2_cards);
|
||||
println!("Day 22 Part 2: {}", part2.1);
|
||||
}
|
||||
|
||||
fn play_combat(p1_cards: &Vec<u32>, p2_cards: &Vec<u32>) -> u32 {
|
||||
|
||||
let mut p1_stack = VecDeque::from(p1_cards.clone());
|
||||
let mut p2_stack = VecDeque::from(p2_cards.clone());
|
||||
|
||||
loop {
|
||||
let p1_card = p1_stack.pop_front();
|
||||
if !p1_card.is_some() {
|
||||
return calculate_score(&p2_stack);
|
||||
}
|
||||
let p2_card = p2_stack.pop_front();
|
||||
if !p2_card.is_some() {
|
||||
// Push the card back on the stack
|
||||
p1_stack.push_front(p1_card.unwrap());
|
||||
return calculate_score(&p1_stack);
|
||||
}
|
||||
|
||||
if p1_card.unwrap() > p2_card.unwrap() {
|
||||
p1_stack.push_back(p1_card.unwrap());
|
||||
p1_stack.push_back(p2_card.unwrap());
|
||||
} else {
|
||||
p2_stack.push_back(p2_card.unwrap());
|
||||
p2_stack.push_back(p1_card.unwrap());
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
fn play_recursive_combat(p1_cards: &Vec<u32>, p2_cards: &Vec<u32>) -> (u32, u32) {
|
||||
|
||||
let mut p1_stack = VecDeque::from(p1_cards.clone());
|
||||
let mut p2_stack = VecDeque::from(p2_cards.clone());
|
||||
|
||||
let mut known_configurations = HashSet::new();
|
||||
|
||||
loop {
|
||||
// TODO: Find a quick way to check if we already found this configuration before
|
||||
let config = (p1_stack.clone(), p2_stack.clone());
|
||||
if known_configurations.contains(&config) {
|
||||
// Player 1 wins by infinite loop protection:
|
||||
return (1, calculate_score(&p1_stack));
|
||||
}
|
||||
known_configurations.insert(config);
|
||||
|
||||
let p1_card = p1_stack.pop_front();
|
||||
if !p1_card.is_some() {
|
||||
return (2, calculate_score(&p2_stack));
|
||||
}
|
||||
let p2_card = p2_stack.pop_front();
|
||||
if !p2_card.is_some() {
|
||||
// Push the card back on the stack
|
||||
p1_stack.push_front(p1_card.unwrap());
|
||||
return (1, calculate_score(&p1_stack));
|
||||
}
|
||||
|
||||
let winning_player;
|
||||
if p1_card.unwrap() as usize <= p1_stack.len() && p2_card.unwrap() as usize <= p2_stack.len() {
|
||||
// Let's play a recursive round:
|
||||
let recursive_result = play_recursive_combat(
|
||||
&p1_stack.iter().take(p1_card.unwrap() as usize).map(|n| n.clone()).collect(),
|
||||
&p2_stack.iter().take(p2_card.unwrap() as usize).map(|n| n.clone()).collect::<Vec<u32>>());
|
||||
winning_player = recursive_result.0;
|
||||
} else {
|
||||
if p1_card.unwrap() > p2_card.unwrap() {
|
||||
winning_player = 1;
|
||||
} else {
|
||||
winning_player = 2;
|
||||
}
|
||||
}
|
||||
|
||||
if winning_player == 1 {
|
||||
p1_stack.push_back(p1_card.unwrap());
|
||||
p1_stack.push_back(p2_card.unwrap());
|
||||
} else if winning_player == 2 {
|
||||
p2_stack.push_back(p2_card.unwrap());
|
||||
p2_stack.push_back(p1_card.unwrap());
|
||||
} else {
|
||||
panic!("No winner!");
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
fn calculate_score(stack: &VecDeque<u32>) -> u32 {
|
||||
|
||||
return stack.iter().rev().enumerate()
|
||||
.map(|c| (c.0 + 1) as u32 * c.1)
|
||||
.sum();
|
||||
|
||||
}
|
||||
84
src/day23.rs
Normal file
84
src/day23.rs
Normal file
@@ -0,0 +1,84 @@
|
||||
use super::util;
|
||||
use std::collections::LinkedList;
|
||||
use std::iter::FromIterator;
|
||||
use std::convert::TryFrom;
|
||||
use std::intrinsics::copy;
|
||||
|
||||
pub fn solve() {
|
||||
let lines = util::read_file("input/day23.txt");
|
||||
let input = lines.first().unwrap().chars().map(|c| (c as u8 - '0' as u8)).collect::<Vec<u8>>();
|
||||
|
||||
let result = play_game(<&[u8; 9]>::try_from(&input[0..]).unwrap(), 100);
|
||||
let part1 = reorder_starting_from(&result, 1).iter().take(8).map(|s| s.to_string()).collect::<Vec<String>>().join("");
|
||||
println!("Day 23 Part 1: {}", part1);
|
||||
|
||||
|
||||
let part2 = 0;
|
||||
println!("Day 23 Part 2: {}", part2);
|
||||
}
|
||||
|
||||
fn play_game(input: &[u8; 9], rounds: u64) -> [u8; 9] {
|
||||
|
||||
let max_cup = input.iter().max().unwrap().clone();
|
||||
let min_cup = input.iter().min().unwrap().clone();
|
||||
let len = input.len();
|
||||
let mut cur_order = input.clone();
|
||||
let mut next_order = input.clone();
|
||||
let mut cur_idx = 0usize;
|
||||
for _ in 0..rounds {
|
||||
|
||||
let cur_label = &cur_order[cur_idx];
|
||||
let mut dest_label = if cur_label == &min_cup { max_cup } else { cur_label - 1 };
|
||||
let mut dest_idx = index_of(&cur_order, &dest_label);
|
||||
let mut looped_dest_idx = if dest_idx < cur_idx { dest_idx + input.len() } else { dest_idx };
|
||||
|
||||
while looped_dest_idx > cur_idx && looped_dest_idx <= cur_idx + 3 {
|
||||
dest_label = if dest_label == min_cup { max_cup } else { dest_label - 1 };
|
||||
dest_idx = index_of(&cur_order, &dest_label);
|
||||
looped_dest_idx = if dest_idx < cur_idx { dest_idx + input.len() } else { dest_idx };
|
||||
}
|
||||
|
||||
|
||||
// First copy the part from the end of the "picked up" cups to the destination
|
||||
for i in cur_idx + 4..looped_dest_idx + 1 {
|
||||
next_order[(i - 3) % len] = cur_order[i % len];
|
||||
}
|
||||
|
||||
// Then copy the picked up cups to the destination
|
||||
for i in 0..3 {
|
||||
next_order[(looped_dest_idx - 2 + i) % len] = cur_order[(cur_idx + 1 + i) % len];
|
||||
}
|
||||
|
||||
// println!("{:?}", next_order);
|
||||
for c in input {
|
||||
assert!(next_order.contains(c), format!("Lost {} while playing with index {} and destination label {}, dest index {}", c, cur_idx, dest_label, dest_idx));
|
||||
}
|
||||
|
||||
// The rest should already be in the correct order
|
||||
cur_order = next_order.clone();
|
||||
|
||||
cur_idx = (cur_idx + 1) % input.len();
|
||||
}
|
||||
|
||||
return cur_order;
|
||||
}
|
||||
|
||||
fn index_of(cups: &[u8;9], cup: &u8) -> usize {
|
||||
for i in 0..cups.len() {
|
||||
if &cups[i] == cup {
|
||||
return i;
|
||||
}
|
||||
}
|
||||
panic!(format!("Couldn't find {}", cup));
|
||||
}
|
||||
|
||||
fn reorder_starting_from(cups: &[u8; 9], n:u8) -> [u8; 9] {
|
||||
|
||||
let n_idx = index_of(cups, &n);
|
||||
let mut res = [0u8; 9];
|
||||
for i in 0..9 {
|
||||
res[i] = cups[(n_idx + 1 + i) % cups.len()];
|
||||
}
|
||||
return res;
|
||||
|
||||
}
|
||||
@@ -2,4 +2,12 @@ use super::util;
|
||||
|
||||
pub fn solve() {
|
||||
let lines = util::read_file("input/dayX.txt");
|
||||
|
||||
|
||||
let part1 = 0;
|
||||
println!("Day X Part 1: {}", part1);
|
||||
|
||||
|
||||
let part2 = 0;
|
||||
println!("Day X Part 2: {}", part2);
|
||||
}
|
||||
43
src/main.rs
43
src/main.rs
@@ -13,8 +13,20 @@ mod day8;
|
||||
mod day9;
|
||||
mod day10;
|
||||
mod day11;
|
||||
mod day12;
|
||||
mod day13;
|
||||
mod day14;
|
||||
mod day15;
|
||||
mod day16;
|
||||
mod day17;
|
||||
mod day18;
|
||||
mod day19;
|
||||
mod day20;
|
||||
mod day21;
|
||||
mod day22;
|
||||
mod day23;
|
||||
|
||||
const MAX_DAY: u8 = 11;
|
||||
const MAX_DAY: u8 = 23;
|
||||
const BENCHMARK_AMOUNT: u32 = 100;
|
||||
|
||||
fn solve(day: u8) {
|
||||
@@ -30,13 +42,24 @@ fn solve(day: u8) {
|
||||
9 => day9::solve(),
|
||||
10 => day10::solve(),
|
||||
11 => day11::solve(),
|
||||
12 => day12::solve(),
|
||||
13 => day13::solve(),
|
||||
14 => day14::solve(),
|
||||
15 => day15::solve(),
|
||||
16 => day16::solve(),
|
||||
17 => day17::solve(),
|
||||
18 => day18::solve(),
|
||||
19 => day19::solve(),
|
||||
20 => day20::solve(),
|
||||
21 => day21::solve(),
|
||||
22 => day22::solve(),
|
||||
23 => day23::solve(),
|
||||
_ => println!("This day is not yet implemented")
|
||||
}
|
||||
}
|
||||
|
||||
fn main() {
|
||||
|
||||
|
||||
let args: Vec<String> = std::env::args().collect();
|
||||
|
||||
let day_arg_idx = args.iter().position(|a| a == "-d");
|
||||
@@ -49,8 +72,11 @@ fn main() {
|
||||
|
||||
// This is essentially the warmup for the benchmark:
|
||||
run_once(single_day, day, &mut bench_results);
|
||||
let first_run_time = bench_results[0];
|
||||
|
||||
if benchmark {
|
||||
// Ignore the warmup run in the rest of the benchmark:
|
||||
bench_results.clear();
|
||||
for _ in 0..BENCHMARK_AMOUNT {
|
||||
run_once(single_day, day, &mut bench_results);
|
||||
}
|
||||
@@ -59,6 +85,19 @@ fn main() {
|
||||
let avg_runtime: u128 = bench_results.iter().sum::<u128>() / (bench_results.len() as u128);
|
||||
|
||||
println!("Execution took {} μs {}", avg_runtime, if benchmark { "on average" } else { "" });
|
||||
if benchmark {
|
||||
bench_results.sort();
|
||||
println!("Min: {} μs, Max: {} μs, Median: {} μs",
|
||||
bench_results[0],
|
||||
bench_results[bench_results.len() - 1],
|
||||
bench_results[bench_results.len() / 2]
|
||||
);
|
||||
println!("First time took {} μs", first_run_time);
|
||||
|
||||
// for res in bench_results {
|
||||
// println!("{}", res);
|
||||
// }
|
||||
}
|
||||
}
|
||||
|
||||
fn run_once(single_day: bool, day: u8, bench_results: &mut Vec<u128>) {
|
||||
|
||||
Reference in New Issue
Block a user