Compare commits
6 Commits
experiment
...
b118845a5e
| Author | SHA1 | Date | |
|---|---|---|---|
| b118845a5e | |||
| e80edae003 | |||
| 55a53e14f7 | |||
| 1b1fe127c3 | |||
| 9684b28a65 | |||
| 4a8c5580ff |
143
Cargo.lock
generated
143
Cargo.lock
generated
@@ -5,9 +5,7 @@ name = "advent-of-code-2020-rust"
|
|||||||
version = "0.1.0"
|
version = "0.1.0"
|
||||||
dependencies = [
|
dependencies = [
|
||||||
"lazy_static",
|
"lazy_static",
|
||||||
"rayon",
|
|
||||||
"regex",
|
"regex",
|
||||||
"usize_cast",
|
|
||||||
]
|
]
|
||||||
|
|
||||||
[[package]]
|
[[package]]
|
||||||
@@ -19,147 +17,18 @@ dependencies = [
|
|||||||
"memchr",
|
"memchr",
|
||||||
]
|
]
|
||||||
|
|
||||||
[[package]]
|
|
||||||
name = "autocfg"
|
|
||||||
version = "1.0.1"
|
|
||||||
source = "registry+https://github.com/rust-lang/crates.io-index"
|
|
||||||
checksum = "cdb031dd78e28731d87d56cc8ffef4a8f36ca26c38fe2de700543e627f8a464a"
|
|
||||||
|
|
||||||
[[package]]
|
|
||||||
name = "cfg-if"
|
|
||||||
version = "1.0.0"
|
|
||||||
source = "registry+https://github.com/rust-lang/crates.io-index"
|
|
||||||
checksum = "baf1de4339761588bc0619e3cbc0120ee582ebb74b53b4efbf79117bd2da40fd"
|
|
||||||
|
|
||||||
[[package]]
|
|
||||||
name = "const_fn"
|
|
||||||
version = "0.4.4"
|
|
||||||
source = "registry+https://github.com/rust-lang/crates.io-index"
|
|
||||||
checksum = "cd51eab21ab4fd6a3bf889e2d0958c0a6e3a61ad04260325e919e652a2a62826"
|
|
||||||
|
|
||||||
[[package]]
|
|
||||||
name = "crossbeam-channel"
|
|
||||||
version = "0.5.0"
|
|
||||||
source = "registry+https://github.com/rust-lang/crates.io-index"
|
|
||||||
checksum = "dca26ee1f8d361640700bde38b2c37d8c22b3ce2d360e1fc1c74ea4b0aa7d775"
|
|
||||||
dependencies = [
|
|
||||||
"cfg-if",
|
|
||||||
"crossbeam-utils",
|
|
||||||
]
|
|
||||||
|
|
||||||
[[package]]
|
|
||||||
name = "crossbeam-deque"
|
|
||||||
version = "0.8.0"
|
|
||||||
source = "registry+https://github.com/rust-lang/crates.io-index"
|
|
||||||
checksum = "94af6efb46fef72616855b036a624cf27ba656ffc9be1b9a3c931cfc7749a9a9"
|
|
||||||
dependencies = [
|
|
||||||
"cfg-if",
|
|
||||||
"crossbeam-epoch",
|
|
||||||
"crossbeam-utils",
|
|
||||||
]
|
|
||||||
|
|
||||||
[[package]]
|
|
||||||
name = "crossbeam-epoch"
|
|
||||||
version = "0.9.1"
|
|
||||||
source = "registry+https://github.com/rust-lang/crates.io-index"
|
|
||||||
checksum = "a1aaa739f95311c2c7887a76863f500026092fb1dce0161dab577e559ef3569d"
|
|
||||||
dependencies = [
|
|
||||||
"cfg-if",
|
|
||||||
"const_fn",
|
|
||||||
"crossbeam-utils",
|
|
||||||
"lazy_static",
|
|
||||||
"memoffset",
|
|
||||||
"scopeguard",
|
|
||||||
]
|
|
||||||
|
|
||||||
[[package]]
|
|
||||||
name = "crossbeam-utils"
|
|
||||||
version = "0.8.1"
|
|
||||||
source = "registry+https://github.com/rust-lang/crates.io-index"
|
|
||||||
checksum = "02d96d1e189ef58269ebe5b97953da3274d83a93af647c2ddd6f9dab28cedb8d"
|
|
||||||
dependencies = [
|
|
||||||
"autocfg",
|
|
||||||
"cfg-if",
|
|
||||||
"lazy_static",
|
|
||||||
]
|
|
||||||
|
|
||||||
[[package]]
|
|
||||||
name = "either"
|
|
||||||
version = "1.6.1"
|
|
||||||
source = "registry+https://github.com/rust-lang/crates.io-index"
|
|
||||||
checksum = "e78d4f1cc4ae33bbfc157ed5d5a5ef3bc29227303d595861deb238fcec4e9457"
|
|
||||||
|
|
||||||
[[package]]
|
|
||||||
name = "hermit-abi"
|
|
||||||
version = "0.1.17"
|
|
||||||
source = "registry+https://github.com/rust-lang/crates.io-index"
|
|
||||||
checksum = "5aca5565f760fb5b220e499d72710ed156fdb74e631659e99377d9ebfbd13ae8"
|
|
||||||
dependencies = [
|
|
||||||
"libc",
|
|
||||||
]
|
|
||||||
|
|
||||||
[[package]]
|
[[package]]
|
||||||
name = "lazy_static"
|
name = "lazy_static"
|
||||||
version = "1.4.0"
|
version = "1.4.0"
|
||||||
source = "registry+https://github.com/rust-lang/crates.io-index"
|
source = "registry+https://github.com/rust-lang/crates.io-index"
|
||||||
checksum = "e2abad23fbc42b3700f2f279844dc832adb2b2eb069b2df918f455c4e18cc646"
|
checksum = "e2abad23fbc42b3700f2f279844dc832adb2b2eb069b2df918f455c4e18cc646"
|
||||||
|
|
||||||
[[package]]
|
|
||||||
name = "libc"
|
|
||||||
version = "0.2.81"
|
|
||||||
source = "registry+https://github.com/rust-lang/crates.io-index"
|
|
||||||
checksum = "1482821306169ec4d07f6aca392a4681f66c75c9918aa49641a2595db64053cb"
|
|
||||||
|
|
||||||
[[package]]
|
[[package]]
|
||||||
name = "memchr"
|
name = "memchr"
|
||||||
version = "2.3.4"
|
version = "2.3.4"
|
||||||
source = "registry+https://github.com/rust-lang/crates.io-index"
|
source = "registry+https://github.com/rust-lang/crates.io-index"
|
||||||
checksum = "0ee1c47aaa256ecabcaea351eae4a9b01ef39ed810004e298d2511ed284b1525"
|
checksum = "0ee1c47aaa256ecabcaea351eae4a9b01ef39ed810004e298d2511ed284b1525"
|
||||||
|
|
||||||
[[package]]
|
|
||||||
name = "memoffset"
|
|
||||||
version = "0.6.1"
|
|
||||||
source = "registry+https://github.com/rust-lang/crates.io-index"
|
|
||||||
checksum = "157b4208e3059a8f9e78d559edc658e13df41410cb3ae03979c83130067fdd87"
|
|
||||||
dependencies = [
|
|
||||||
"autocfg",
|
|
||||||
]
|
|
||||||
|
|
||||||
[[package]]
|
|
||||||
name = "num_cpus"
|
|
||||||
version = "1.13.0"
|
|
||||||
source = "registry+https://github.com/rust-lang/crates.io-index"
|
|
||||||
checksum = "05499f3756671c15885fee9034446956fff3f243d6077b91e5767df161f766b3"
|
|
||||||
dependencies = [
|
|
||||||
"hermit-abi",
|
|
||||||
"libc",
|
|
||||||
]
|
|
||||||
|
|
||||||
[[package]]
|
|
||||||
name = "rayon"
|
|
||||||
version = "1.5.0"
|
|
||||||
source = "registry+https://github.com/rust-lang/crates.io-index"
|
|
||||||
checksum = "8b0d8e0819fadc20c74ea8373106ead0600e3a67ef1fe8da56e39b9ae7275674"
|
|
||||||
dependencies = [
|
|
||||||
"autocfg",
|
|
||||||
"crossbeam-deque",
|
|
||||||
"either",
|
|
||||||
"rayon-core",
|
|
||||||
]
|
|
||||||
|
|
||||||
[[package]]
|
|
||||||
name = "rayon-core"
|
|
||||||
version = "1.9.0"
|
|
||||||
source = "registry+https://github.com/rust-lang/crates.io-index"
|
|
||||||
checksum = "9ab346ac5921dc62ffa9f89b7a773907511cdfa5490c572ae9be1be33e8afa4a"
|
|
||||||
dependencies = [
|
|
||||||
"crossbeam-channel",
|
|
||||||
"crossbeam-deque",
|
|
||||||
"crossbeam-utils",
|
|
||||||
"lazy_static",
|
|
||||||
"num_cpus",
|
|
||||||
]
|
|
||||||
|
|
||||||
[[package]]
|
[[package]]
|
||||||
name = "regex"
|
name = "regex"
|
||||||
version = "1.4.2"
|
version = "1.4.2"
|
||||||
@@ -178,12 +47,6 @@ version = "0.6.21"
|
|||||||
source = "registry+https://github.com/rust-lang/crates.io-index"
|
source = "registry+https://github.com/rust-lang/crates.io-index"
|
||||||
checksum = "3b181ba2dcf07aaccad5448e8ead58db5b742cf85dfe035e2227f137a539a189"
|
checksum = "3b181ba2dcf07aaccad5448e8ead58db5b742cf85dfe035e2227f137a539a189"
|
||||||
|
|
||||||
[[package]]
|
|
||||||
name = "scopeguard"
|
|
||||||
version = "1.1.0"
|
|
||||||
source = "registry+https://github.com/rust-lang/crates.io-index"
|
|
||||||
checksum = "d29ab0c6d3fc0ee92fe66e2d99f700eab17a8d57d1c1d3b748380fb20baa78cd"
|
|
||||||
|
|
||||||
[[package]]
|
[[package]]
|
||||||
name = "thread_local"
|
name = "thread_local"
|
||||||
version = "1.0.1"
|
version = "1.0.1"
|
||||||
@@ -192,9 +55,3 @@ checksum = "d40c6d1b69745a6ec6fb1ca717914848da4b44ae29d9b3080cbee91d72a69b14"
|
|||||||
dependencies = [
|
dependencies = [
|
||||||
"lazy_static",
|
"lazy_static",
|
||||||
]
|
]
|
||||||
|
|
||||||
[[package]]
|
|
||||||
name = "usize_cast"
|
|
||||||
version = "1.1.0"
|
|
||||||
source = "registry+https://github.com/rust-lang/crates.io-index"
|
|
||||||
checksum = "810f3a98a85147e3ad2a1331aa6dac66490e802d65fa0ab283c383058e3f9751"
|
|
||||||
|
|||||||
@@ -9,5 +9,3 @@ edition = "2018"
|
|||||||
[dependencies]
|
[dependencies]
|
||||||
regex = "1"
|
regex = "1"
|
||||||
lazy_static = "1.4.0"
|
lazy_static = "1.4.0"
|
||||||
usize_cast = "1.0.0"
|
|
||||||
rayon = "1.5.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
|
||||||
90
src/day11.rs
90
src/day11.rs
@@ -2,27 +2,19 @@ use super::util;
|
|||||||
use crate::day11::GridState::Floor;
|
use crate::day11::GridState::Floor;
|
||||||
use crate::day11::GridState::FilledSeat;
|
use crate::day11::GridState::FilledSeat;
|
||||||
use crate::day11::GridState::EmptySeat;
|
use crate::day11::GridState::EmptySeat;
|
||||||
use rayon::prelude::*;
|
|
||||||
use std::time::Instant;
|
|
||||||
|
|
||||||
pub fn solve() {
|
pub fn solve() {
|
||||||
let lines = util::read_file("input/day11.txt");
|
let lines = util::read_file("input/day11.txt");
|
||||||
|
|
||||||
let seats = Seats::parse(&lines);
|
let seats = Seats::parse(&lines, 1);
|
||||||
|
|
||||||
let now = Instant::now();
|
|
||||||
|
|
||||||
let part1 = solve_part1(&seats);
|
let part1 = solve_part1(&seats);
|
||||||
|
|
||||||
println!("Part 1 took: {} μs", now.elapsed().as_micros());
|
|
||||||
println!("Day 11 Part 1: {}", part1);
|
println!("Day 11 Part 1: {}", part1);
|
||||||
|
|
||||||
let now2 = Instant::now();
|
|
||||||
|
|
||||||
let visible_chairs = seats.calculate_all_visible_chairs();
|
let visible_chairs = seats.calculate_all_visible_chairs();
|
||||||
let part2 = solve_part2(&seats, &visible_chairs);
|
let part2 = solve_part2(&seats, &visible_chairs);
|
||||||
|
|
||||||
println!("Part 2 took: {} μs", now2.elapsed().as_micros());
|
|
||||||
println!("Day 11 Part 2: {}", part2);
|
println!("Day 11 Part 2: {}", part2);
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -31,38 +23,27 @@ fn solve_part1(seats: &Seats) -> usize {
|
|||||||
let mut last_seats = seats.clone();
|
let mut last_seats = seats.clone();
|
||||||
let mut next_seats = seats.clone();
|
let mut next_seats = seats.clone();
|
||||||
|
|
||||||
let mut seat_idxs = Vec::new();
|
|
||||||
for y in 0..seats.height {
|
|
||||||
for x in 0..seats.width {
|
|
||||||
let seat = seats.get(&x, &y);
|
|
||||||
if seat != &Floor {
|
|
||||||
seat_idxs.push((x, y));
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
loop {
|
loop {
|
||||||
let changes: Vec<(usize, usize, &GridState)> = seat_idxs.par_iter().map(|pos| {
|
let mut changes = false;
|
||||||
let x = &pos.0;
|
for y in 1..seats.height-1 {
|
||||||
let y = &pos.1;
|
for x in 1..seats.width-1 {
|
||||||
let seat = last_seats.get(x, y);
|
let seat = last_seats.get(&x, &y);
|
||||||
let occupied = last_seats.count_occupied_neighbors(x, y);
|
if seat != &Floor {
|
||||||
|
let occupied = last_seats.count_occupied_neighbors(&x, &y);
|
||||||
if seat == &EmptySeat && occupied == 0 {
|
if seat == &EmptySeat && occupied == 0 {
|
||||||
return Option::from((pos.0, pos.1, &FilledSeat));
|
changes = true;
|
||||||
|
next_seats.set(&x, &y, FilledSeat);
|
||||||
} else if seat == &FilledSeat && occupied >= 4 {
|
} else if seat == &FilledSeat && occupied >= 4 {
|
||||||
return Option::from((pos.0, pos.1, &EmptySeat));
|
next_seats.set(&x, &y, EmptySeat);
|
||||||
} else {
|
changes = true;
|
||||||
return Option::None;
|
}
|
||||||
}
|
}
|
||||||
}).filter(|o| o.is_some()).map(|o| o.unwrap()).collect::<Vec<_>>();
|
|
||||||
|
|
||||||
if changes.is_empty() {
|
|
||||||
break;
|
|
||||||
}
|
}
|
||||||
|
|
||||||
for change in changes {
|
|
||||||
next_seats.set(&change.0, &change.1, *change.2);
|
|
||||||
}
|
}
|
||||||
// next_seats.print();
|
// next_seats.print();
|
||||||
|
if !changes {
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
|
||||||
last_seats = next_seats.clone();
|
last_seats = next_seats.clone();
|
||||||
}
|
}
|
||||||
@@ -74,11 +55,7 @@ fn solve_part2(seats: &Seats, visible_chairs: &Vec<Option<Vec<(usize, usize)>>>)
|
|||||||
let mut last_seats = seats.clone();
|
let mut last_seats = seats.clone();
|
||||||
let mut next_seats = seats.clone();
|
let mut next_seats = seats.clone();
|
||||||
|
|
||||||
let mut calc_times = Vec::new();
|
|
||||||
let mut copy_times = Vec::new();
|
|
||||||
|
|
||||||
loop {
|
loop {
|
||||||
let calc_start = Instant::now();
|
|
||||||
let mut changes = false;
|
let mut changes = false;
|
||||||
for y in 0..seats.height {
|
for y in 0..seats.height {
|
||||||
for x in 0..seats.width {
|
for x in 0..seats.width {
|
||||||
@@ -89,8 +66,8 @@ fn solve_part2(seats: &Seats, visible_chairs: &Vec<Option<Vec<(usize, usize)>>>)
|
|||||||
changes = true;
|
changes = true;
|
||||||
next_seats.set(&x, &y, FilledSeat);
|
next_seats.set(&x, &y, FilledSeat);
|
||||||
} else if seat == &FilledSeat && occupied >= 5 {
|
} else if seat == &FilledSeat && occupied >= 5 {
|
||||||
next_seats.set(&x, &y, EmptySeat);
|
|
||||||
changes = true;
|
changes = true;
|
||||||
|
next_seats.set(&x, &y, EmptySeat);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@@ -99,15 +76,9 @@ fn solve_part2(seats: &Seats, visible_chairs: &Vec<Option<Vec<(usize, usize)>>>)
|
|||||||
if !changes {
|
if !changes {
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
calc_times.push(calc_start.elapsed().as_micros());
|
|
||||||
|
|
||||||
let now = Instant::now();
|
|
||||||
last_seats = next_seats.clone();
|
last_seats = next_seats.clone();
|
||||||
copy_times.push(now.elapsed().as_micros());
|
|
||||||
}
|
}
|
||||||
|
|
||||||
println!("Avg calc time: {} μs", calc_times.iter().sum::<u128>() / (calc_times.len() as u128));
|
|
||||||
println!("Avg copy time: {} μs", copy_times.iter().sum::<u128>() / (copy_times.len() as u128));
|
|
||||||
return last_seats.grid.iter().filter(|s| s == &&FilledSeat).count();
|
return last_seats.grid.iter().filter(|s| s == &&FilledSeat).count();
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -123,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)];
|
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 height = lines.len() + padding * 2;
|
||||||
let width = lines[0].len();
|
let width = lines[0].len() + padding * 2;
|
||||||
let mut grid = vec!(GridState::Floor; width * height);
|
let mut grid = vec!(GridState::Floor; width * height);
|
||||||
for y in 0..lines.len() {
|
for y in 0..lines.len() {
|
||||||
let line = &lines[y];
|
let line = &lines[y];
|
||||||
let mut line_chars = line.chars();
|
let mut line_chars = line.chars();
|
||||||
for x in 0..lines[0].len() {
|
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())
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -199,20 +170,15 @@ impl Seats {
|
|||||||
|
|
||||||
fn count_occupied_neighbors(&self, x: &usize, y: &usize) -> u8 {
|
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
|
return
|
||||||
if !x_lower && !y_lower && self.is_occupied(&(x - &ONE), &(y - &ONE)) { 1 } else { 0 } +
|
if self.is_occupied(&(x - &ONE), &(y - &ONE)) { 1 } else { 0 } +
|
||||||
if !x_lower && self.is_occupied(&(x - &ONE), &y) { 1 } else { 0 } +
|
if 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 self.is_occupied(&(x - &ONE), &(y + ONE)) { 1 } else { 0 } +
|
||||||
if !y_lower && self.is_occupied(&x, &(y - ONE)) { 1 } else { 0 } +
|
if self.is_occupied(&x, &(y - ONE)) { 1 } else { 0 } +
|
||||||
if !y_upper && self.is_occupied(&x, &(y + ONE)) { 1 } else { 0 } +
|
if 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 self.is_occupied(&(x + ONE), &(y - ONE)) { 1 } else { 0 } +
|
||||||
if !x_upper && self.is_occupied(&(x + ONE), &y) { 1 } else { 0 } +
|
if 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 }
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
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;
|
||||||
|
|
||||||
|
}
|
||||||
@@ -2,4 +2,12 @@ use super::util;
|
|||||||
|
|
||||||
pub fn solve() {
|
pub fn solve() {
|
||||||
let lines = util::read_file("input/dayX.txt");
|
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);
|
||||||
}
|
}
|
||||||
27
src/main.rs
27
src/main.rs
@@ -13,8 +13,12 @@ mod day8;
|
|||||||
mod day9;
|
mod day9;
|
||||||
mod day10;
|
mod day10;
|
||||||
mod day11;
|
mod day11;
|
||||||
|
mod day12;
|
||||||
|
mod day13;
|
||||||
|
mod day14;
|
||||||
|
mod day15;
|
||||||
|
|
||||||
const MAX_DAY: u8 = 11;
|
const MAX_DAY: u8 = 15;
|
||||||
const BENCHMARK_AMOUNT: u32 = 100;
|
const BENCHMARK_AMOUNT: u32 = 100;
|
||||||
|
|
||||||
fn solve(day: u8) {
|
fn solve(day: u8) {
|
||||||
@@ -30,13 +34,16 @@ fn solve(day: u8) {
|
|||||||
9 => day9::solve(),
|
9 => day9::solve(),
|
||||||
10 => day10::solve(),
|
10 => day10::solve(),
|
||||||
11 => day11::solve(),
|
11 => day11::solve(),
|
||||||
|
12 => day12::solve(),
|
||||||
|
13 => day13::solve(),
|
||||||
|
14 => day14::solve(),
|
||||||
|
15 => day15::solve(),
|
||||||
_ => println!("This day is not yet implemented")
|
_ => println!("This day is not yet implemented")
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
fn main() {
|
fn main() {
|
||||||
|
|
||||||
|
|
||||||
let args: Vec<String> = std::env::args().collect();
|
let args: Vec<String> = std::env::args().collect();
|
||||||
|
|
||||||
let day_arg_idx = args.iter().position(|a| a == "-d");
|
let day_arg_idx = args.iter().position(|a| a == "-d");
|
||||||
@@ -49,8 +56,11 @@ fn main() {
|
|||||||
|
|
||||||
// This is essentially the warmup for the benchmark:
|
// This is essentially the warmup for the benchmark:
|
||||||
run_once(single_day, day, &mut bench_results);
|
run_once(single_day, day, &mut bench_results);
|
||||||
|
let first_run_time = bench_results[0];
|
||||||
|
|
||||||
if benchmark {
|
if benchmark {
|
||||||
|
// Ignore the warmup run in the rest of the benchmark:
|
||||||
|
bench_results.clear();
|
||||||
for _ in 0..BENCHMARK_AMOUNT {
|
for _ in 0..BENCHMARK_AMOUNT {
|
||||||
run_once(single_day, day, &mut bench_results);
|
run_once(single_day, day, &mut bench_results);
|
||||||
}
|
}
|
||||||
@@ -59,6 +69,19 @@ fn main() {
|
|||||||
let avg_runtime: u128 = bench_results.iter().sum::<u128>() / (bench_results.len() as u128);
|
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 { "" });
|
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>) {
|
fn run_once(single_day: bool, day: u8, bench_results: &mut Vec<u128>) {
|
||||||
|
|||||||
Reference in New Issue
Block a user