Compare commits
74
Commits
6a276c3c1b
..
master
| Author | SHA1 | Date | |
|---|---|---|---|
|
|
8ec58edd08 | ||
|
|
1904239ca7 | ||
|
|
46d49dc3fe | ||
|
|
950f2860df | ||
|
|
d203c9a520 | ||
|
|
8b54ae782c | ||
|
|
9f1499a1d3 | ||
|
|
490696c63d | ||
|
|
a7c039197b | ||
|
|
94f4badcc4 | ||
|
|
4e57ad4072 | ||
|
|
f2f3e497d6 | ||
|
|
2a515a5323 | ||
|
|
5c0d7867a4 | ||
|
|
1df5532c24 | ||
|
|
8db68c9baf | ||
|
|
360be1a368 | ||
|
|
ae2acb87fa | ||
|
|
c7eae53378 | ||
|
|
b9a36a476a | ||
|
|
8270ee7aa8 | ||
|
|
894e83fe12 | ||
|
|
11546bff5f | ||
|
|
d1e69ba66e | ||
|
|
2887274ad9 | ||
|
|
6758130700 | ||
|
|
ff4bb0ae89 | ||
|
|
b69f867423 | ||
|
|
a652ec69da | ||
|
|
421616a282 | ||
|
|
f775ed645b | ||
|
|
705c9e9a7c | ||
|
|
8d97e7601c | ||
|
|
b89e9c05ef | ||
|
|
b90478cd03 | ||
|
|
383c6c0fca | ||
|
|
19a763b73f | ||
|
|
dcb1338aa3 | ||
|
|
724576d120 | ||
|
|
ceaebf895d | ||
|
|
ceb0f04a78 | ||
|
|
c5c9b584c0 | ||
|
|
80f29ae00e | ||
|
|
2418d2ff0d | ||
|
|
1ca2a95e1d | ||
|
|
61e3520ede | ||
|
|
98f47654f8 | ||
|
|
88acb381f1 | ||
|
|
1d60878428 | ||
|
|
63bad67c1b | ||
|
|
8fe7e77b52 | ||
|
|
06f695b34c | ||
|
|
fa8970b0de | ||
|
|
dfa2cf11a1 | ||
|
|
8562bc8385 | ||
|
|
887d961d29 | ||
|
|
31a75867fa | ||
|
|
b6eae27d9d | ||
|
|
fe5cd3666f | ||
|
|
250d978a38 | ||
|
|
c93c273ffd | ||
|
|
bf5d3c1656 | ||
|
|
1ee3a5a3c5 | ||
|
|
5e1c30637e | ||
|
|
239af2f93b | ||
|
|
7d6b43ba93 | ||
|
|
b7aabdedcb | ||
|
|
3d2a2f2c4d | ||
|
|
1fdb1ebc36 | ||
|
|
666c81118f | ||
|
|
45d735bac9 | ||
|
|
f31499ecda | ||
|
|
c61676cf02 | ||
|
|
0a24022629 |
No files matched your search
@@ -1,2 +1,3 @@
|
||||
.DS_Store
|
||||
_build/
|
||||
_opam/
|
||||
@@ -1,2 +1 @@
|
||||
profile = janestreet
|
||||
version = 0.26.0
|
||||
@@ -0,0 +1,2 @@
|
||||
#install_printer Aoc.Vec2.pp;;
|
||||
#install_printer Aoc.Grid.pp;;
|
||||
@@ -0,0 +1,6 @@
|
||||
## 2022 AOC problems in Ocaml
|
||||
|
||||
```sh
|
||||
$ opam switch create . --deps-only -y
|
||||
$ dune build
|
||||
```
|
||||
@@ -10,8 +10,21 @@ homepage: "https://github.com/username/reponame"
|
||||
doc: "https://url/to/documentation"
|
||||
bug-reports: "https://github.com/username/reponame/issues"
|
||||
depends: [
|
||||
"utop"
|
||||
"ocaml-lsp-server"
|
||||
"ocamlformat"
|
||||
"ocaml"
|
||||
"dune" {>= "3.10"}
|
||||
"re"
|
||||
"containers"
|
||||
"iter"
|
||||
"dune-site"
|
||||
"angstrom"
|
||||
"ppx_deriving"
|
||||
"ppx_deriving_hash"
|
||||
"ppx_regexp"
|
||||
"ppx_expect"
|
||||
"ppx_inline_test"
|
||||
"odoc" {with-doc}
|
||||
]
|
||||
build: [
|
||||
|
||||
+22
-1
@@ -21,7 +21,28 @@
|
||||
(name aoc)
|
||||
(synopsis "A short synopsis")
|
||||
(description "A longer description")
|
||||
(depends ocaml dune)
|
||||
(depends
|
||||
;; development env
|
||||
utop
|
||||
ocaml-lsp-server
|
||||
ocamlformat
|
||||
|
||||
;; deps
|
||||
ocaml
|
||||
dune
|
||||
re
|
||||
containers
|
||||
iter
|
||||
dune-site
|
||||
angstrom
|
||||
|
||||
;; ppx
|
||||
ppx_deriving
|
||||
ppx_deriving_hash
|
||||
ppx_regexp
|
||||
ppx_expect
|
||||
ppx_inline_test
|
||||
)
|
||||
(sites (lib inputs))
|
||||
(tags
|
||||
(topics "to describe" your project)))
|
||||
|
||||
@@ -1,6 +0,0 @@
|
||||
open Aoc
|
||||
|
||||
let () =
|
||||
Day1.print ();
|
||||
Day2.print ()
|
||||
;;
|
||||
+143
@@ -0,0 +1,143 @@
|
||||
addx 2
|
||||
addx 3
|
||||
noop
|
||||
noop
|
||||
addx 1
|
||||
addx 5
|
||||
addx -1
|
||||
addx 5
|
||||
addx 1
|
||||
noop
|
||||
noop
|
||||
addx 4
|
||||
noop
|
||||
noop
|
||||
addx 5
|
||||
addx -5
|
||||
addx 6
|
||||
addx 3
|
||||
addx 1
|
||||
addx 5
|
||||
addx 1
|
||||
noop
|
||||
addx -38
|
||||
addx 41
|
||||
addx -22
|
||||
addx -14
|
||||
addx 7
|
||||
noop
|
||||
noop
|
||||
addx 3
|
||||
addx -2
|
||||
addx 2
|
||||
noop
|
||||
addx 17
|
||||
addx -12
|
||||
addx 5
|
||||
addx 2
|
||||
addx -16
|
||||
addx 17
|
||||
addx 2
|
||||
addx 5
|
||||
addx 2
|
||||
addx -30
|
||||
noop
|
||||
addx -6
|
||||
addx 1
|
||||
noop
|
||||
addx 5
|
||||
noop
|
||||
noop
|
||||
noop
|
||||
addx 5
|
||||
addx -12
|
||||
addx 17
|
||||
noop
|
||||
noop
|
||||
noop
|
||||
noop
|
||||
addx 5
|
||||
addx 10
|
||||
addx -9
|
||||
addx 2
|
||||
addx 5
|
||||
addx 2
|
||||
addx -5
|
||||
addx 6
|
||||
addx 4
|
||||
noop
|
||||
noop
|
||||
addx -37
|
||||
noop
|
||||
noop
|
||||
addx 17
|
||||
addx -12
|
||||
addx 30
|
||||
addx -23
|
||||
addx 2
|
||||
noop
|
||||
addx 3
|
||||
addx -17
|
||||
addx 22
|
||||
noop
|
||||
noop
|
||||
noop
|
||||
addx 5
|
||||
noop
|
||||
addx -10
|
||||
addx 11
|
||||
addx 4
|
||||
noop
|
||||
addx 5
|
||||
addx -2
|
||||
noop
|
||||
addx -6
|
||||
addx -29
|
||||
addx 37
|
||||
addx -30
|
||||
addx 27
|
||||
addx -2
|
||||
addx -22
|
||||
noop
|
||||
addx 3
|
||||
addx 2
|
||||
noop
|
||||
addx 7
|
||||
addx -2
|
||||
addx 2
|
||||
addx 5
|
||||
addx -5
|
||||
addx 6
|
||||
addx 2
|
||||
addx 2
|
||||
addx 5
|
||||
addx -25
|
||||
noop
|
||||
addx -10
|
||||
noop
|
||||
addx 1
|
||||
noop
|
||||
addx 2
|
||||
noop
|
||||
noop
|
||||
noop
|
||||
noop
|
||||
addx 7
|
||||
addx 1
|
||||
addx 4
|
||||
addx 1
|
||||
noop
|
||||
addx 2
|
||||
noop
|
||||
addx 3
|
||||
addx 5
|
||||
addx -1
|
||||
noop
|
||||
addx 3
|
||||
addx 5
|
||||
addx 2
|
||||
addx 1
|
||||
noop
|
||||
noop
|
||||
noop
|
||||
noop
|
||||
@@ -0,0 +1,55 @@
|
||||
Monkey 0:
|
||||
Starting items: 97, 81, 57, 57, 91, 61
|
||||
Operation: new = old * 7
|
||||
Test: divisible by 11
|
||||
If true: throw to monkey 5
|
||||
If false: throw to monkey 6
|
||||
|
||||
Monkey 1:
|
||||
Starting items: 88, 62, 68, 90
|
||||
Operation: new = old * 17
|
||||
Test: divisible by 19
|
||||
If true: throw to monkey 4
|
||||
If false: throw to monkey 2
|
||||
|
||||
Monkey 2:
|
||||
Starting items: 74, 87
|
||||
Operation: new = old + 2
|
||||
Test: divisible by 5
|
||||
If true: throw to monkey 7
|
||||
If false: throw to monkey 4
|
||||
|
||||
Monkey 3:
|
||||
Starting items: 53, 81, 60, 87, 90, 99, 75
|
||||
Operation: new = old + 1
|
||||
Test: divisible by 2
|
||||
If true: throw to monkey 2
|
||||
If false: throw to monkey 1
|
||||
|
||||
Monkey 4:
|
||||
Starting items: 57
|
||||
Operation: new = old + 6
|
||||
Test: divisible by 13
|
||||
If true: throw to monkey 7
|
||||
If false: throw to monkey 0
|
||||
|
||||
Monkey 5:
|
||||
Starting items: 54, 84, 91, 55, 59, 72, 75, 70
|
||||
Operation: new = old * old
|
||||
Test: divisible by 7
|
||||
If true: throw to monkey 6
|
||||
If false: throw to monkey 3
|
||||
|
||||
Monkey 6:
|
||||
Starting items: 95, 79, 79, 68, 78
|
||||
Operation: new = old + 3
|
||||
Test: divisible by 3
|
||||
If true: throw to monkey 1
|
||||
If false: throw to monkey 3
|
||||
|
||||
Monkey 7:
|
||||
Starting items: 61, 97, 67
|
||||
Operation: new = old + 4
|
||||
Test: divisible by 17
|
||||
If true: throw to monkey 0
|
||||
If false: throw to monkey 5
|
||||
@@ -0,0 +1,41 @@
|
||||
abcccccccccccccccccccccccccccccccccccccccccccccccccccaaaaacccccccccccccaaaaaaaccccccccccccccccaaaaaaccccccccccccccccccccccccccaaaaacccaaaccccccccccccccccccccccccccccccaaaaa
|
||||
abcccccccccaaaccccccccccccaaaccccccccccccccccccccccccaaaaaacccccccccccccaaaaaaaaaaaccaaaaccccaaaaaaacccccccccccccccccccccccccccaaaaaacaaaaccccccccccccccccccccccccccccccaaaa
|
||||
abcccccccccaaaaaacccccccccaaaacccccccccccccccccccccccaaaaaaccccccccccccaaaaaaaaaaaccaaaaacccaaaaaacccccccccaaacccccccccccccccaaaaaaaacaaaaccccccccccccccccacccccccccccccaaaa
|
||||
abcccccccccaaaaaacccccccccaaaaccccaacccccccccccccccccaaaaaaccccccccccaaaaaaaaaaaaaacaaaaaaccaacaaaccaacccaaaaaaccccccccccccccaaaaaaaacaaaccccccccccaccccaaaccccccccccccaaaaa
|
||||
abcccccccaaaaaaaccccccccccaaaacccaaaaccccccccccccaaccccaaacccccccaaacaaaaaaaaaccccccaaaaaacccccaaaccaacccaaaaaacccccccccccccccccaaccccccccccccccccaaacccaaaccccccccccccaaaca
|
||||
abcccccccaaaaaaacccccccaaacccccccaaaacccccccaaccaaaccccccccccccaaaaacaaaaaaaaaccccccaaaaaccccccccaaaaaaaacaaaaaccaacaaccccccccccaaccccccccccccccccaaaaaaaaaccccccccccccccccc
|
||||
abcccccccccaaaaaaccaaccaaacccccccaaaacccccccaaaaaaaccccccccccccaaaaaaccccaaaaaacccccccaaaccccccccaaaaaaaaaaaaacccaaaaacccccccaaaccccccccccccccccccaaaaaaaackcccccccccccccccc
|
||||
abcccccccccaaaaaaccaaaaaaaccccccccccccccccccaaaaaacccccccccccccaaaaaaccccaaaaaaccccccccccccccccccccaaaaccaaaaaccccaaaaaccccccaaaaaccccaaaaaccccccccaaaajjkkkkkccccccaacccccc
|
||||
abcccccccccaaccccccaaaaaaccccccccccccccccccccaaaaaaaaccccccccccaaaaacccaaaacaaccccccccccccccccccccaaaaaccccccccccaaaaaacccccaaaaaaccccaaaaaccciijjjjjjjjjkkkkkkccaaaaaaccccc
|
||||
abcaaaccccccccccccccaaaaaaaaccccccccccccccccaaaaaaaaacccccccccccaaaacccaaaccaaccccccccccccccccccccaacaaacccccccccaaaacccccccaaaaaacccaaaaaaciiiijjjjjjjjjoopkkkkcaaaaacccccc
|
||||
abaaaacccccccccccccaaaaaaaaaccccccccccccccccaaaaaaaacccccccccccccccccccaaaaaaaccccaccaccccccccccccacccaacccccccccccaaccccccccaaaaacccaaaaaaiiiiiijjjjjjoooppppkkcaaaaaaacccc
|
||||
abaaaaaccccccccccccaaaaaaaaccccccccccccccccaaaaaaaccccccccccccccccccccccaaaaaaccccaaaacccccccccccccccccccccccccccccccccccccccaaaaccccaaaaaiiiinnnoooooooooppppkkkaaaaaaacccc
|
||||
abaaaaacccccccccccaaaaaaaccccccccccccccccccccccaaacccccccccccccccccccaaaaaaaacccccaaaaccccccccccccaaccaacccccaccccacccccccccccccccccccaaaciiinnnnoooooooouupppkkkaaaaaaacccc
|
||||
abaaaaccccccccccccccccaaaccccccccccccccccccccccaaacccccccaaccccccccccaaaaaaaaacccaaaaaacccccccccccaaaaaaccccaaaaaaaacccccccccccccaaccccccciiinnnntttooouuuuupppiiacaaacccccc
|
||||
abaaaacccccccccccccccccaaccccccccccccccccccccccccccccccaaaacacccccccccaaaaaaaacccaaaaaacccccccccccaaaaaccccccaaaaaacccccccccccaaaaaacccccciinnnttttuuuuuuuuuuppiiccaaacccccc
|
||||
abcccccccccccccccccccccccccccccccccccccccccccccccccccccaaaaaacccccccccccaaaaaaaccccaacccccaaccccccaaaaaacccccaaaaaacccccccccccaaaaaccccccciinnntttttuuuuxyuuuppiiicccccccccc
|
||||
abccccccccccccccccccccccccccccccccccccaaacccccccaaccccccaaaaccccccccccccaaccccccccccccccccaacaaacaaaaaaaacccaaaaaaaaccccccccccaaaaaaaccccchinnnttxxxxuuxyyyuuppiiiiccccccccc
|
||||
abccccccccccccccccccccccccccccccccccccaaaaaaccccaaacccccaaaaccccccccccccaaccccccccccccccccaaaaaccaaaaaaaaccaaaaaaaaaaccccccccaaaaaaaaccccchhhnnttxxxxxxxyyuvppppiiiccccccccc
|
||||
abccccccccccccccccccccccccccccccccccaaaaaaaaaaccaaaaaaacacaacccccccccccccccccaaaccccccccaaaaaaccccccaacccccaaaaaaaaaaccccccccaaaaaaaaccccchhhnntttxxxxxxyyvvvppqqiiicccccccc
|
||||
abccccccccccccccccccccccccccccaacaccaaaaaaaaaaaaaaaaaaacccccccccccccccccccccaaaaaaccccccaaaaaaacccccaacccccaccaaaaacacccccccccacaaaccccccchhhnnnttxxxxxyyyvvvvqqqqiiiccccccc
|
||||
SbccccccccccccccccccccccccccccaaaaccaaaaaaacaaaaaaaaaaccccccccccccccccccccccaaaaaaccccccccaaaaaaccccccccccccccaaaaccccccccccccccaaacccccchhhmmmtttxxxEzzyyyyvvvqqqqiiccccccc
|
||||
abcccccccccccccccccccccccccccaaaaaccccaaaaaccaaaaaaaaacccccccccccccccaaaaaccaaaaaaccccccccaaccaacccccccccccccccaacccccccaaaaccccccccccccchhhmmmtttxxxyyyyyyyyvvvqqqjjjcccccc
|
||||
abcccaaacccccccccccccccccccccaaaaaacccaacaaaaaaaaaaaaacccccccccccccccaaaaacccaaaaaccccccccaacccccccccccccccccccccccccccaaaaacccccccccccchhhmmmttsxxyyyyyyyyvvvvvqqqjjjcccccc
|
||||
abcccaaaaaacccaacaaccccccccccacaaaacccaacccaaaaaaaaaaaacccccccccccccaaaaaacccaacaaccccccccccccccccccccccccccccccccaacccaaaaaaccccccccccchhhmmmssxxwwwwyyywvvvvvqqqjjjjcccccc
|
||||
abccaaaaaaacccaaaaaccccccccccccaaccccccccccaaaaaaaccaaccccccccccccccaaaaaacccccccccccccccccccccccccccccccccccaaccaaacccaaaaaacccccccaaachhhmmssswwwwwwyyywvvqqqqqqjjjccccccc
|
||||
abcaaaaaaacccccaaaaacccccccccccccccccccccccccccaaaccccccccccccccccccaaaaaacccccccccccaaccccaaccccccccccccccccaaacaaacccaaaaaacccccccaaacgggmmsssswwwswwyywwrrqqqjjjjcccccccc
|
||||
abcaaaaaaaccccaaaaaacccccccccccccccccccccccaaccaaaccccccccccccccccccccaaccccccccccccaaccccaaaacccccccccccccccaaaaaaccccccaacccccccaacaaagggmmmssssssswwwwwwrrqjjjjjddccccccc
|
||||
abcccaaaaaacccaaaacccccccccccccccccccccccccaaacaaccccccccccccccccccccccccccccccccaaaaacaacaaaaccccccccccccccccaaaaaaaaccccccccccccaaaaaagggmmmmssssssswwwwrrrkjjjjddddcccccc
|
||||
abcccaaaaaacccccaaccccccccccccccccccccccccccaaaaaccccccccccccccccccccccccccccccccaaaaaaaacaaaacaaccccccaaccaaaaaaaaaaacccccccccccccaaaaaggggmmmmllllsrrwwwrrkkkjdddddaaacccc
|
||||
abcccaaaccccccccccccaacccccccccccccccccccccaaaaaaccccccccccccccccccccccccccccccccccaaaaacccccccaaaaaaccaaaaaaaaaaaaaacccccccccccccccaaaaaggggmmllllllrrrrrrrkkkdddddaaaccccc
|
||||
abccccaaaaaaccccccccaacaaaccccccccacccaaccaaaaaaaaccccccccccaaaccccccaacccccccccccaaaaaccccccccaaaaacccaaaaaaaaaaaaccccccccccccccccaaacaacggggggflllllrrrrrrkkddddaaaaaccccc
|
||||
abccccaaaaacccccccccaaaaacccccccccaaaaaaccaaaaaaaaccccccccccaaacacccaaaaccccccccccaacaaacccccaaaaaaccccaaaaaaaccaaacccccccccccccccccaacccccggggffffllllrrrrkkkdddaaaaaaacccc
|
||||
abccaaaaaaacccccccaaaaaaccccccccccaaaaaccccccaacccccaaccccaacaaaaaccaaaacccccccaaccccaaccccccaaaaaaaccaaaaaaaaccaaaccccccccccccccccccaaaccccccgffffflllkkkkkkeedaaaaaaaacccc
|
||||
abccaaaaaaacccccccaaaaaaacccccccccaaaaaacccccaacccccaaacccaaaaaaaaccaaaacccaaaaacccccccccccccccaaaaaacaaaaaaaacccccccccccccccccccccccaaaacaacccccffffllkkkkkeeedccaaaaaacccc
|
||||
abccccaaaaaaccccccccaaaaaacccccccaaaaaaaacccccaaccccaaaaaaaaaaaaccccccccccaaaaaaaacccccccccccccaaccaaccccaaaccccccaacccccccccccccccccaaaaaaaccccccfffffkkkkeeeecccaacccccccc
|
||||
abccccaaccaaccccccccaaccaacccccccaaaaaaaacccccaaccaaaaaaaaccaaaaacccccccccaaaaaaaaccccccccccaacaaccccccccaaccccaacaaaccccaacccccccccccaaaaaaccccccaafffeeeeeeecccccccccccccc
|
||||
abccccaaccccccccccccaaccccccccccccccaacccccaaaaaaaaaaaaaaacaaacaaaaaaacaccaaaaaaacccccccaaacaacccccccccccccccccaaaaaccccaaaacccccccaaaaaaaaccccccaaaaffeeeeeeeccccccccccccca
|
||||
abacccccccccccccaaacccccccccccccccccaacccccaaaaaaaaaaaaaacccaaccaaaaaaaaaaaaaccaaacccccccaaaaaccccccccccccccccccaaaaaaccaaaacccccccaaaaaaaaaccccccaaacceeeeeccccccccccccccaa
|
||||
abaaccccccccccaaaaaacccccccccccccccccccccccccaaaacccaaaaaaccccccaaaaaaaaaaaaaaaaaaaccccccaaaaaaacccaaaccccccccaaaaaaaaccaaaaccccccccaaaaaaaaccccccccccccaaacccccccccccaaacaa
|
||||
abaaccccccccccaaaaaacccccccccccccccccccccccccaaaaacaaaaaaaccccccaaaaaaaaaaaaaaaaaaccccccaaaaaaaaccccaaaaccccccaaaaacaaccccccccccccccccaaaaaaacccccccccccacacccccccccccaaaaaa
|
||||
abacccccccccccaaaaaaccccccccccccccccccccccccaaaaaacaaaccaaccccccaaaaaaccaaaaaaaaccccccccaaaaaaaaccaaaaaacccccccccaaaccccccccccccccccccaacccccccccccccccccccccccccccccccaaaaa
|
||||
+449
@@ -0,0 +1,449 @@
|
||||
[[9,[8,[7]],4,7,[[4,9,3,2],6,5,[1,10,2,4,5],[1,3,2,6,1]]],[4,[6],3],[4,[7,0,3,8,8],[7,[10],[10,10,10,7]]]]
|
||||
[[],[[6,4,[5],4,[0,5,5]],3,[5,[],9]],[[[5,1,6,2],[6,4,7],[4,7,4,2]],[10,[],[6,9,4],[6,2],9]],[[[10,5,9],10,0,[4,1,4,10,1],1],[7,7,[10,8],6],2]]
|
||||
|
||||
[[[8,2],2,[[10],[],6,10,[10,10,3,10,3]]],[],[]]
|
||||
[[[[7,3,5],10,[4,1,0,8,7],9],10,[]]]
|
||||
|
||||
[[6,2,[2,[10,10,0],[2]],7]]
|
||||
[[7,9],[5,[8,[0,5,5,10,4],6,8,6],3,[4],2],[4]]
|
||||
|
||||
[[[5],[6,[5,3,0],[6,2,5,2,6],1,6],[[]],[3,[1,1,0],[],1,[9,4,3,5,7]]],[[1,9,[2,2,6],[8,9],2],1,[[],0,8],[[],9],3]]
|
||||
[[],[[10,9],[],[[6],9,8,[3]],[0,5,[5],6],2],[[[5,2,5,3,5],4],9,6],[8]]
|
||||
|
||||
[[[[9,10,8,4],2],[[10]]],[1,[[],9,[7,2,2,1,0],5]],[[[10],[],[5]],10,[],9],[[],[2,[1],[4],7,[6,1,5,0,1]]]]
|
||||
[[[[6,9],[8,2,2],[5,1,6],[0,1]],[[2,5,1,3],9,[]],[[10,3,9],10,4]],[[[5,2,0],[7,3],9],[[5,3,2,6]],4]]
|
||||
|
||||
[[[1,0,9,[10]],[],[8,2,[0,2],6,[]]]]
|
||||
[[4,3],[2]]
|
||||
|
||||
[[7]]
|
||||
[[7,[[4,0,9,9]],3,[10,0,6,[5,2,0,1,7]],7],[5,[3,[2,8,7],[9],[2,3,5,0,10]],10,[[3,0,8],6,[5,5,7],[2,10]]],[3,4]]
|
||||
|
||||
[[[[0,9,5,2],[6,0,4,10]],[10,7]],[[6]],[7],[[[1,10,8,0,6],7,[3],0],3],[[[1,5,5],[6,6,9],[],[4]],1,9]]
|
||||
[[[[2,3],[7],10,[2,1,3]],10,[6,9,[0,8]],[[6,6,5],[10,6]],[[],[],7]]]
|
||||
|
||||
[[[6],7,[10,[2],3],[[2,3]],[[1,1,7],[0,6,6,2],[7],[]]],[4],[2],[[6,2,10,3,6],[[5,7,10,3,6],8,[1],[]],7,5,[]],[[]]]
|
||||
[[[],[7,5,8],0,3,[]],[2,8],[7],[8,0,[[0],3,[2]]],[1]]
|
||||
|
||||
[[[],5,[0]],[7],[[2,7,[7]],[[8,3],[8,9,8],6,[]],[1,3,[0,4,10],[6,1,9]],8],[[3,0]]]
|
||||
[[5,[],10]]
|
||||
|
||||
[[8,[[0],5,[],3],[0,8]]]
|
||||
[[],[3,5],[[[8,9,5],1,[3,9]],[[0,0],9,2],[0,1,8]],[0,3,[[3]],[7,[3,5,10],[1,9,10],[9,5],[2,4,3,9,7]]],[[8,3,6],6,[7,5,8],[[],4,1]]]
|
||||
|
||||
[[6],[]]
|
||||
[[],[[[3,5,9],[0,7,5],[3,8,1,9,6]],[1,[3,3,10],0],[5,8,3,0,3],3,8],[[[1],[9,9,3,3],[7],[7,10,1,6]],4,10,[[7,7,2,0,3]],[10,9]],[9]]
|
||||
|
||||
[[3,2,4]]
|
||||
[[[[2],4,[9,4,6,0]],[7,[]],[[0,5,9],[7],7,3],[[8,0,0,4,5]],[9,[3,5,4,10],[7,7,4]]],[[9,[],[8,5,6,4,9]],1,10,4,7]]
|
||||
|
||||
[[],[[],[8]],[1,[[8,10,0,2],1,4,[1,10,9]],3],[[[0,4,5,6,6]],5,[[9,0,5],[3,10],8],3],[[9],4,[[3,6],6],[8,[5],10,[7,0]],7]]
|
||||
[[1]]
|
||||
|
||||
[[[[5,3,8,2],1,[10]],9],[[[9,3,0,7],8,[10,1,6,9],[7,6,3],[6,7,5]],[6,1,[1,6,10,8],7,[]]]]
|
||||
[[8],[[7,[5,6],0],[4,[],[5,2,10,8]],[10]],[[],6,[],[10,5,3],[3,4]],[[[7,4,7,8,0]],9]]
|
||||
|
||||
[[7,[7,7],4,1,4],[10,[10,[2,4,9],0,[5,10,7],1],10,[9,2,[0,6,3,9,10],8,[7,9,7,10,3]],[3,[0,2]]],[9,3]]
|
||||
[[3,[0,[5,0,8,1]],[]],[],[[3,[2,4,4,0,0],2],[4,[9,1,0]],1],[],[]]
|
||||
|
||||
[[[[5,10,10,8]],[[5,7,10,10],[],[2,4,10,9],1,[]],9,8,[10,[5],[7,6,8,2],10,[2,9]]],[8,3,[[],3,[4,3,0],1,2],[6,[2,8],[2],0,0],5],[2,[[6,0,0,4,9],[7,10],1,[]],[[8],10],[[1,10]]],[6,10,[[3,6,7,9],5],4]]
|
||||
[[[]],[[[10,5,9],2],4,[0,[8],[0,8,9,2,6]],[8,0,[4,4,10],7]],[[6,[]],10,[[],[5,10]],[6,9],[3,10,[2,5,1,7,7],[2,6,10]]],[[],[[],5],[[5],[7],[8,2,2,8]],[2,[4,0],8]],[[[10],8,[10]],[],[]]]
|
||||
|
||||
[[[[6,6,1],[3,10,5]],[[3,9,6,0],2,[10,1,8,8]],[],[[6,9],5,5,[],4]],[[7],3],[[[],[8,4,2,0,8]],10,2,7],[8],[10,7,[[2,6,0,0,8],[3,10,10],[],9,[7,9,3]],6]]
|
||||
[[6,8,[[9,0,8,7,5],0,3],[],0],[8,[6,9],8,[[0],7,[10,6],6,[7]],8]]
|
||||
|
||||
[[[[9],[6,6],0,8,[7,2]],[7,[],[9,6,2],9,[]],[[],7,7,[6,6]]],[1,3,1],[1,[[8,0,10,1,9]],9],[10,5]]
|
||||
[[[[4,6,8,9],8,[3,3,6],[10]],[[3,6,7,5],[],[4,9]],[6,0,8],[],[5,[2]]],[[[5,1,6,2,8],2],3,[9,9,[],0,1],5,[10,[9,5,2],5]],[]]
|
||||
|
||||
[[[]],[]]
|
||||
[[8,[5,[6,3,2],[10,5,4],[5,1],[5,10,5,9,7]],4,[8,2,0,6],4],[[[0,9,5,7],9],6,[[0,8,10,8],9,[9,0,3,7,1],[6,8,2,5,10],[]],7,[1,[],4,[0],[2]]],[1],[[7,[],6,2,1]],[2,3]]
|
||||
|
||||
[[5],[3,[1],[[6]],[[2],[],3,[6,1,8,6,1],[4,6,4,7]],[3]]]
|
||||
[[[[6,5,1],9],[],7,7],[0,4]]
|
||||
|
||||
[[[],5,4,7,[[9,5,9],[]]]]
|
||||
[[10,[1,[2,3],9,[3]]],[[[5,7,9,10,8],[]],0]]
|
||||
|
||||
[[6,8,[0,1,10]],[[4,7],[[7,0,0,3],6,2]],[[[10],[6,5,3,10,0],[0,2,4],[8,10],[7]],1],[2,[2]]]
|
||||
[[],[5,8,[[],[6,3,2,3],9,3,[]],[0,[4,1,5],4],[[0,6,4],[],[3,6,10,9],3,[0,0]]],[[6,3],6,2,10,8],[5,[[0,9,4,6,1],[6,9,4]],3,[],0]]
|
||||
|
||||
[[4,8],[],[],[7,6,4]]
|
||||
[[],[[5],[[8],[10],7,[9,10]],9],[3],[[9],[[3,0,5]]],[10,[[6,0,3],[2,4,3,0],4,10,10]]]
|
||||
|
||||
[[4,10,[[8],[6,4,8,8,10],1,[10,2],[7,8,9,0]],1],[6,4,3],[7,8,4],[[9,[10,4,8,7,2]]],[3,5]]
|
||||
[[],[[[0,0,5,10],9,10],[[6,7,5]],[[3,6,7,2,2],[9],[7,5],9],[[0,0,10,9,8],5,[3,2]],[]]]
|
||||
|
||||
[[[],[[],8,0]],[[[],[],[]],9],[[7],3,10,4,[3,[4,7,0,2]]],[[[0,9,2,1],[2]]],[[[1,7],6,8,[2,5]],8,7]]
|
||||
[[],[1],[6,[],1,[4,[],[10]],[[10,9,1],[]]],[[[2,1,5,10],[9,9,5,7,9],[9,1]],[[2],[5,9]],[[8],[2,8,2,4,5],4,[3,9,3],9],9]]
|
||||
|
||||
[[7,[4,9,[],[7,6,8,7],3],6,7],[7,9,[[2,3],7,5,[7]],[[6],4,[2,8,5,10],[4,9,10,6]]],[[],10],[5,[5],8,[],[3,[6,1,7,10,1],7,5,[10,8]]],[[[7,7,8],8,8]]]
|
||||
[[7,[10,1,[5,3,9],1,[]]]]
|
||||
|
||||
[[[[8,2,10,7,3],8,[0,7,0]]]]
|
||||
[[4,7],[[2,[],7],4,[10,[4],[5,6],1,1]],[5,[[9,1]]],[[6,2],[2,3,[1,4,1]]],[]]
|
||||
|
||||
[[6,[[],10],[5,3]],[],[6,4,9],[7,[6]],[0,[],[[8,7,8,10,7],[],[10,6,4],[4],0],8,[8,7,1,[10,6,5],[10,1,5]]]]
|
||||
[[3,8],[[3,[1],10]],[[6,2,[],[9,6],5],[[1,8,9,2,9]],[3,[],[7,6,4,7,6]]],[[[3,9,5,0,2]]],[[],7,7]]
|
||||
|
||||
[[10,7],[9,7,2,5,1]]
|
||||
[[],[],[[]],[[7,2,[],[2,10,7],8],4,0,[2,[],[8,8,9],5,[6,1]],[1,4,[6,5,4,1,4],[7,7,9],2]],[[],5]]
|
||||
|
||||
[[[[6,7,10,0,4],[5,3,2,8,4]],[[1],[],[5,4],8,2],0],[1,5,10],[[2]]]
|
||||
[[],[10,1,[[1,3,0],[0,1,7,7],[1,5,10,7,3],[4,6]],4,[]],[9,9,[8,[4,1,7],[4,1,8,9],[7,6,5,10,5]],[0,6,[6]],6]]
|
||||
|
||||
[[[[2,3,3],2,[]]],[[[4,6,7,5],[7,3,3,10],[4,6,10,2,3],[4],7]],[[[1,3,4,0,4],10],[10,[],4,3]],[],[3,[],9,2,8]]
|
||||
[[],[[[9,1,8,4],7]]]
|
||||
|
||||
[[],[3,10,[[1,6,1],[1,2,1],[9],[3,7,9,10]],[[]]],[[[9,3,7,6],[6,8,2,3],10],[8,8,1,5],[6,2,4,[2,8],1]],[[[6,8,9,8],5,5],[[],[0,4,5],[4,5,8,7]]],[]]
|
||||
[[[]],[[1,[2,4,0,4,4]],[2,[],4],[7,[9,5,5],[0,2,0,5]],10,8]]
|
||||
|
||||
[[],[],[],[3,[8,5,[7,2,9,9]],[[2],[4,10]]],[]]
|
||||
[[9,[9,10,8,[4,6,3,0]],7],[[4,[8,4,2,8],5,[0,10,9,4,9],2],[2,10],[4,[10,1]]],[10]]
|
||||
|
||||
[[4,[[10,5],8]],[4,8,7],[[[7],[],5],10],[[],5]]
|
||||
[[[[0,7],[9,8],[]],9,[[6,2],4],1,[]],[1],[[7,4,2,[8,2,3]],8,3,[[1,9,10,7],[2,2,3,2]]],[[[3,1,8],8,[6,1,1,6,5],[1],6],[6,[],10],[[],3],7,10]]
|
||||
|
||||
[[[7,[5,6,3,2,5],[0,6,0,3],[0,4,10,6,8]],4],[],[[],[[10,9],[10,4,9]],[[1,8,6],6,[]]],[5,9],[[],[[],[3,3]]]]
|
||||
[[],[6],[[3,[1],4,[10,0,1,6,3],7],[],9],[0,[[],6,4,2]],[]]
|
||||
|
||||
[[7,[]]]
|
||||
[[5,3,[6],[],[10,[0,7,3,9]]],[[[9,1,5],5,0,1,8]],[[[2,3,10,1],10],10],[[[],5,4,1,8],[0,[5,1,4,9,3],2,10],[],[9]],[2,10,8,6,4]]
|
||||
|
||||
[[[],1,8,[4]]]
|
||||
[[[5,5,[]],[[],[3,2,5,10],[4],[5,5,8,2,6]],6],[[10],[[5,0],[2]],9],[[4],[]]]
|
||||
|
||||
[[[2,6,[9,10]],9,7],[8],[7,6],[8],[8,0,3,0]]
|
||||
[[[],[[],4,[1],6,[5,9,0,0]],9,9,4]]
|
||||
|
||||
[[[],9],[[10,8],6,[[8,0,0,7],[6],3,[5,5,1],10],[[9,3,6],[8,3,0]],[]],[[0,7,1],3,3],[5],[4]]
|
||||
[[[8,[4,6,0,4],2,[8]],[[6,10,6],[2],4],5,9,[3,[3],[10],7]],[6]]
|
||||
|
||||
[[[6,6,[0,5,3,10],10],[3,0,7,[8],[3,9,10,1,7]],8,[6,9,[]],[1]],[],[5],[5,[4,[6,9],2,[8],[]],0]]
|
||||
[[],[],[[6,[],6],[9,8],7,[],[3,[5,9],4]],[[7,[3,7],[4,8,10,9],10],[[],9],8,[5],5]]
|
||||
|
||||
[[[[],6,0,[2,6,7,7]],9],[[7,1,[5,4,5,2,10],[]],7,[4,2,1,0],10],[6,7,[]]]
|
||||
[[1,[[],5,10,[8]],[8,1,[],[1]],[[2,0,1,10,6],[10,7,3,5]]],[[[10,5,5,10],[]]],[0,[[5,7],[],9,6],[5,0,3],[]],[[6,5,0,[0,1,9,3],[9]]],[0,[4,1,3],7]]
|
||||
|
||||
[[[],[1],[],10],[6,9],[10,10],[]]
|
||||
[[9,7,[[0,2],5,[8,1,5]]]]
|
||||
|
||||
[[],[0,[[7,8,4,1],9,0,2]],[[2,7,[],[1,6],[4,6]],[7,[]],0,[[1,0,5]],1],[5,[6,[9,4,2,6,4],10,[7,7,8,8,1]],[7,9,[7]]],[]]
|
||||
[[],[9,3,[[2,8,6,3,9],1,6,[6,8]]]]
|
||||
|
||||
[[[6,6,[7,7,3]],[]],[3,2,0,[3,[8,4]],5],[9,10,7,10],[[9,[0],10,10,[1,9,0]],[[],1,3]]]
|
||||
[[2,4,5],[],[0,[],[[0,2,8,0,7]],[[],[7],[0,2,9]]],[]]
|
||||
|
||||
[[[[]]]]
|
||||
[[[[],[10],[0,9,7,9],5,[]]],[]]
|
||||
|
||||
[[[],[[],10,1,[7,3,0],[4,10]],[]],[[],[10,[7,4,7],[],9,[0,4,3,8]]]]
|
||||
[[],[[[],10,1,2,0],10,[[]]],[[4],[[8,7,10],8,7],0],[[0,[4],[],[0,1,10,3],9]]]
|
||||
|
||||
[[[7,[],[1],[6,4,0]]],[[[7,1,10]],[[1],[1,9,4,6]]],[9]]
|
||||
[[1],[4,5,3,8,[9,4,[0],[4,7,0]]],[9,[4]]]
|
||||
|
||||
[[],[[[10],6],[],[[2,1,9,10]],4,[4,1,10,3,0]],[[],[],0,[[]],[5,[10,5,9,1,1],[9,4,8]]],[],[3]]
|
||||
[[9,[[6]],[],[[],5]],[[[3],10,9],1,[5,[10,1,10,1],[8,2,2,10,7],9,10],0],[8,3,[[0,10,3],6,[8,10,7,0,6]]],[[],2,7]]
|
||||
|
||||
[[7],[9]]
|
||||
[[[[6,2,0,5],9],[[2,4,5],5,[0,6,8],[9],3],[[5,5,8],10,[0,5,2,3],7,[3,0,9,3,7]],7],[8,[[2,1,2,6],2,4],6,[],[2,[7,2,6,9],1]],[8,5,[10,[1,3,4,9],1,3],8],[[3,7,[9,5],[10,5,1],10],[[5,7,5,2,8]],[2,7,[],3,2],[[0,2,0,6],[5,7,9],7,[7,8]],[7]],[0,[[],[],4,10],5,[[9,10,5],3]]]
|
||||
|
||||
[[4,8,[9,[],[0,6,9,0,7]],[[2]],[1,4,8,10]],[[]],[[6,[1,3,2,7],[7,10,4,9,0]],5,3],[[[],[8],[2,7,1,3,4]],[]]]
|
||||
[[],[],[4,9,7,6],[3,10,0,[]],[10]]
|
||||
|
||||
[[],[[],[],8,10]]
|
||||
[[[[0,10,2,6],[3,8,9],6,[3,9,8]]],[[5,0,[2,3,9],[0,5],[4,4,1]],[[],7,[6,3,2,10,2]],5,9,[3]],[[]],[3,[[],7]],[[2,6,7,1],[1],3,[9,9]]]
|
||||
|
||||
[[[],7,[],[6,3,3,[4,5,6,10,8],[6,3,1,2,10]]],[[[],1,[8],[5,0,0],9],[],[[1,2,8,6]],[[4,3,7,1],2,[1,7,3,0]],[6,[7,5,3,6],5,5,3]],[[[],[6,1,7],[3,0,1,0,5]],0,[[0,10],4,[3,7,5,8,1]]],[4]]
|
||||
[[5],[6],[],[5]]
|
||||
|
||||
[[[8,[7],[9,7,5],[4,4,4,0,9],[0,8]]]]
|
||||
[[[[3,2,6,6],[1,4,1,7,0],[],10,[8,6]],[[5,4,2],[],6,[10,6,2,2,7]],7,[[6,4],[],8,[2,7]],8],[],[],[[[],7,6],1]]
|
||||
|
||||
[[6,[1,6,[9,3,7,5],8,[8,2]]]]
|
||||
[[[9,3,[6,10],[],[9,5,1,2]],[[9,8],[6,4,8,9],[6,8,3],[9,7,9,10]],0,[[3,5,6,10],[7,0,7]],0],[6,[[8],[0,7,1],7,[8,1]],[4,4,3],[5,[],6,9],10],[7],[]]
|
||||
|
||||
[[9,[3,3],[10,[8,10,9,9]],6,3],[[[6,2],6,5],[[6]],[1,[3,2,6]]],[9,7,1,5]]
|
||||
[[3],[9,[7],[3],[7,5,7],7],[],[[[],[3,3,0,9],[8]],2,8]]
|
||||
|
||||
[[[[7,1,1],0,4,7,2],[[3,4,9,2],[8,7,5,0,9],5],[9]],[[[3,8,4,2,8]]],[]]
|
||||
[[0,3,[[8,10,9,0,4],5],[]]]
|
||||
|
||||
[[[]],[[]]]
|
||||
[[[[2,6,8,2],2,6,0,8],[10,5,[0,2,1,0],0]],[4,3,[0,4,[3,7,0,0,5]],[[1,3,9],4],0]]
|
||||
|
||||
[[[10],[[9],0,[6],2,0]],[[1,3,[7,3,1]],[8,[6,3,0,1,1]],5],[[7,[1,0],2,[]],5,4,3,4],[9,7,9,7,5]]
|
||||
[[9,0,[9,4]],[[[3]],5,5]]
|
||||
|
||||
[[5,[10,0,[3,1],[0,8]]],[7,[[8,6,8,4,7],[],5,[7,10,8,3,9]],4,6]]
|
||||
[[[[7,6,6],8],[[9,7,10,6,3],8],0],[2,9,7],[[[3,9,8,7],[8,0],5],[[0,8,2],[]],[3,3,[3,4],0,6],[6,[8,5,4,6,2]]],[]]
|
||||
|
||||
[1,0,10,1]
|
||||
[1,0,10,1,0]
|
||||
|
||||
[[9],[2,6],[]]
|
||||
[[4,1,[[9],[8,6,10,5,2],3,[6,5,9,5],[8,0,2]],7,2],[1,[[1],6,[0,7],9],[10,5,4]],[6,9],[[[6],[1,5,5,10],5,[],[10,4,6,6,4]]]]
|
||||
|
||||
[[[6,7,[],[8,3,9,3,7]],0,5,5,2],[4,[],8,[[10,10,3,0],5],[[4],3,10]],[],[7,10]]
|
||||
[[[7,[6]],[2,8,[8,1,4]],[[3,1,7,10],10,2],2,[4]],[8],[[]],[[1,[6,0,3,1,1]],[[5,2,7,3,10],8,[0,1,1,2]],[9,4],0],[[[7,9]]]]
|
||||
|
||||
[[2,[],[],9,3]]
|
||||
[[0,9,4,2],[8,6],[[[8,7,3,1],[],[8],3,[4,2]],4,1,0,[]],[[],[]]]
|
||||
|
||||
[[[2],[]],[[[3,5,2,3],10],[],[9,2,5,2,3],6],[],[[0,4,0,9],[[],[]],3,[8,5,[],[6]],[[],[],6,[7]]],[[],[9,3,1,[],[8,0,7]]]]
|
||||
[[6],[6,[[7,3,5,1]],7,3]]
|
||||
|
||||
[[5,[[10],[0],[3],[2,4,5]]],[[8,[8,10,5,0],0,[1,7,8,1]],[10,[5,6,4,5],3],[0,3,[5,4,5,8],7],[4,[5,6],0,[0,10,7]]],[8,9],[[5,[10,3],3,[]],[7,1,8,[9],8],[],[9,[2,5],[3,5,2,4],[4]]]]
|
||||
[[8,10,4,[[],1,2,8,8],8]]
|
||||
|
||||
[[[2,9],6,[],[5,0,10]]]
|
||||
[[[2],[[8,10,7,0],[7],[10,9,7,6]],8,[[8,10],8],[[2,8,9,3],[3]]],[7,2,8]]
|
||||
|
||||
[[],[],[2,[6]],[[]],[1,3]]
|
||||
[[],[4,4,4,[[],3,[],7,[]]],[6,[]],[[9]],[[]]]
|
||||
|
||||
[[[[4,5,9,3]],1,[],4,[[],[],[],7]],[[[0,6,9,8,7],[],3,[4,8,1],5]],[6,[9,10,6,9],[[9,10,2,1],[8,7,1],[10,10,3]],[[0,4,3]]],[]]
|
||||
[[5,[]]]
|
||||
|
||||
[[4,8]]
|
||||
[[],[],[0,6,[10,[5,10],2,1,[3,3,1]],8]]
|
||||
|
||||
[[7,10,[[2],10,7,[5,0,5],9],10],[4,[[5],[1,5,8,10,5]]],[0,1,[[2,6],[1,8],8,0],[10,[7,1,10,3,1],[],[0,0,6,10]]],[],[7]]
|
||||
[[],[3],[[3,1,1,3],1],[10,9,[],2],[[[9,3],6],[[2,10],7,9,[7,8,7,10,6]],10]]
|
||||
|
||||
[[[0,5]],[[8,9,10,8]],[[[2,9,6],7,0,3],0,[[7,4],[5,7,0,10],[]]],[[3,9,[7,1,2,6],9,7],[[],10]]]
|
||||
[[6,[9,[6,1],[6,3,8]]],[9,[]],[[[3,3,7,4,7]],[]],[[[]],[[],7,[10,3]],10,7],[[],7]]
|
||||
|
||||
[[[[1,3,7],[],1],5,2,[1,[10,3,7]]],[[8,7],9],[[[3,9,0,8,2],[6],0,[7,4,10]],[6,0,3,1,[6,9]]],[10,7,1,10],[0,[[1],9,7,[7,7,5,4],2],[],[[5,1,9],7,7,9]]]
|
||||
[[5],[9,3,[1,10],7],[[6,6,[3],3,[0,2,2,8,7]]],[7]]
|
||||
|
||||
[[[4,[7,6],9,7],1,[],7,6]]
|
||||
[[8,[[5,6],[6,4,3,9]],7,10,[3,[],9,[6,5,4]]]]
|
||||
|
||||
[[4,2,1,[[4],8,[7,4,0,8]],10],[],[[[7,3,5]],[7,5,1,[7,2,4],[6]],[4,[1],1],[7,[10,10,10,6],[9,2,0]],[[5,1,9,3,5],[3,10,4,9,8]]],[[],6,3],[6]]
|
||||
[[],[[],[0]],[[2,5,[1,4],6],1,4,[3,[],[10],[2,7,8,4,2]]],[[10],7],[[[4,10,6,3],7,[],1],2,3,3]]
|
||||
|
||||
[[6,0,7]]
|
||||
[[5,2,[4],[[3,0,8,10],0,[4,8,9]]],[[],[[8,9,7,5,3],4,6],7,10,[[5,6],[2,10,5],[9,5,6,0],1,1]],[2,3,[7,10],9,1],[]]
|
||||
|
||||
[[4,[2,[],7]]]
|
||||
[[[6,9,6,[3,6,7,2,3]],4,[1,2,5],6,4],[9,[1],[8,[7]],2],[[[1,3,6,3,6]],0,[],[]],[0,[[9,10]],5,[2],9],[[[3,1],[10,1],[5,0,9]]]]
|
||||
|
||||
[[5],[2,[[]],9,[[]]],[1,5,[]]]
|
||||
[[[0]],[3,1],[10,6],[]]
|
||||
|
||||
[]
|
||||
[[[7]],[[1,[4,10,9,2]],8,[10,[7],[2,1,1,4],2,10]],[],[[[10,6,4,7],7],[],4,8,9]]
|
||||
|
||||
[[6,[[6,0,10,7,9],0,[5,1,2]],2],[[[3,1,6,1],7,[],5,4],[[10,10,3],0],8],[],[[[6,7,0,1,5],5,5,[3,7,2]],[6],7,3,1],[10]]
|
||||
[[],[[[],[1,2,10,9,5]],[[5,7],[7,4,9,9,0]],10]]
|
||||
|
||||
[[9,4,8,[],8],[[3,[6],0,[3,1,10,9,2]]],[],[8,0,3,4]]
|
||||
[[1,1,0],[3],[[[9,1],5,[7]],7,10,[5,[2,4,2,6],6],[[2,2],[6,0,2,0],[3,4,1,3,0]]],[8,[]]]
|
||||
|
||||
[[9,5],[[[],8,[0,9],[],0]],[[],7],[3],[10,9,6]]
|
||||
[[8,[0,[9,5,0]],[],4,1],[]]
|
||||
|
||||
[9,10,2,8,0]
|
||||
[9,10,2,8]
|
||||
|
||||
[[6,4,[9,5]],[[[10]],[[4,2,2,5],0,[3,2,1,10],5,[10,1]],0,9]]
|
||||
[[7,[8,[0,1],4,0],[7,[5,1,9,4],10]],[[10,[0,7,8,5,9]],[10,6,[3,9]]]]
|
||||
|
||||
[[3,0,1,2]]
|
||||
[[[[5,2]],5,9],[],[[[9,6,5,8],[1],[],[],1]],[[[],[3,5],9,[],8],4,[[9,6,8,9,3],9,10,[0,8,1],[]],8,[[],7,[7,5],8,2]]]
|
||||
|
||||
[[[[4,4]]],[8],[6,2,[8,9],2]]
|
||||
[[],[9,[[],2,3],[6]],[[[10,2,9,0]],8,10,0,10]]
|
||||
|
||||
[[7],[[4,4,5,8,5],[9,[9,9]]],[[[4,4,1,5,6]],10],[[],[[0,0,2,10]],[[6,9,8,5,6]]],[[[],0,[3,7,1,6,6],[0,7,8,6],[9,7]],7,[2,[9,2]]]]
|
||||
[[8,7,[7,[],4]],[1,[[4,0,8,7],3],[7,[7,8,1,2],10,6],8,[[3,7,10,7]]],[2,0]]
|
||||
|
||||
[[[[3,9,2],[7,2,9,10],4,[6],9],9,[[6,0,9,10,5]],[9,[10,5,7],5,6]],[],[9,4]]
|
||||
[[[[8,9,9,5]]],[[[4,8],2]]]
|
||||
|
||||
[[[6,10,4],[],[7,[5],[0,9,1,4,3],8,8],[4,4,7],9],[[[3,7],3,[5,4,7,0],6],2],[[[7,1,6,0,4],[],[4],[9,0],1],[[8,3,9,6],9,[2,7,8]]],[]]
|
||||
[[]]
|
||||
|
||||
[[],[7,6,[],[3,6,10,[9,7],4],[]],[4,9,8,[],2],[]]
|
||||
[[],[4,[9,1,10,9,6],4,0],[[],[[],[10,7]],[[6,5],5,[3,2,6,3]],[2,3,10,10],[]],[9,[2,9]],[[5],10]]
|
||||
|
||||
[[[[2,2,9,8],[5,2,8,5,5],[5,9,5,9],4,2],7,[],[9,[2,7,9,7]],2],[],[0,9,5],[[6],[3,[],[],0,2],5],[]]
|
||||
[[[1,[9,8,8,1],3,10,[7,10,2,7]]],[[],[],[[],[10,10,4],10],10],[8,9,0,4],[],[1]]
|
||||
|
||||
[[[7,[0,6,8],6],[[10,4,5,1,10]],[],4,7],[[[5,9],[4,4],5,2],2,2,[[7,10,3,7,9],10,6],2]]
|
||||
[[],[]]
|
||||
|
||||
[[[5,[6],[7,9,4,0]],[[4,4],[],5,[6]],[7,[5,6,9,9],6],[]]]
|
||||
[[],[],[2,10,[],[[]]],[[8,7,[8],1,1]]]
|
||||
|
||||
[[],[[7,0,[1,10,5,2,1],[2],[]],[[2,9,3,3],[10,9,3]],[[2],8,1]]]
|
||||
[[[[5,8,6,5]],2,[3,8,10,9,0],[[5,9,1,4],[7,7],9],7]]
|
||||
|
||||
[[5,3],[10,5],[]]
|
||||
[[6,10,[],[[8]],[[],0,[]]],[],[],[],[]]
|
||||
|
||||
[[5,[7,[5],[6,3,10],9,3],3],[[[7,0,0,1],9,[1,4],3,[0,5,8,7,7]],1,[2,[1],[3]],4,7],[[1,10,4,1,[10,3,3,8]],3,[[6,5],[1,4]]],[3,[[7],[2,3,3,5,3],[4,2],[8,7,9,1,10]],[[9,10,7]],10],[[[2]],7,5]]
|
||||
[[4,7],[[10,[2,4]],[8,1,9],9],[[4],8,[],9,5],[[5,[1,0,1,1,8]],[[5,2,4],[],[],8],8,[[4,4,6,10,4]]]]
|
||||
|
||||
[[8,1],[[[5],9],9,[]]]
|
||||
[[9,[],3,3],[[[10,3,4,1],6,7,[9]],10,5,2],[[0,3,8],9,4,[8,7],[]],[4,4]]
|
||||
|
||||
[[3],[7]]
|
||||
[[1],[4,3],[6,[1],[[5],3,[]]],[0],[2]]
|
||||
|
||||
[[[9,4,8],[[8,8,10],[4,6],10,10],3,6],[[[1,4],4,[],[8,3],[0,0,5]],[0,[0],4,[1,9,2,6,0],5],[4]],[[2],[0],7,6,[]]]
|
||||
[[[[],[9,4,7],[9,1],5,[3,4,9]],[8]],[1,[],[[0,4]],[6,1,9],2],[],[[6]]]
|
||||
|
||||
[[[[],10,8],[6,[],7,[7,6],[10,8]],[[],8,9]],[]]
|
||||
[[6],[[]]]
|
||||
|
||||
[[],[7,[[0,4],[],5,1],[[8,1,7,0],0,[4,3],5],[3,[],[3,9,3],[0,4,5,2],6]],[[[5,2,0],[8],[3,10,9,3,5],[],[0,5]],5,0,[],4]]
|
||||
[[[[],5],[9,[5,7,8],5,[],[5,2,2,10]]],[[9],[1,5,0]]]
|
||||
|
||||
[[[],[4,0,[1,7],3,7],8],[5,[],3,7,[[8,9]]],[[],[7],[[3],0]]]
|
||||
[[3,8,5,[[9,10,5,5],[0,1],[2]],7],[1,1,9,4],[[[4,8,9,0],[],[],[5]]],[[],[],1,8,5],[]]
|
||||
|
||||
[[5,[1,0,[9]],[[1,8,10,10,1],[],[0],[4,10,9,8,5],7]],[[6,3,2,0],[6],9,[9,7,[1,0,0],5]]]
|
||||
[[10,5,1,4],[6,0,[]]]
|
||||
|
||||
[[[3,9],5,[[0],[6]],[[9,9,3],[],8],5],[],[]]
|
||||
[[8,8,4,[],[[9,9,7,3,8],[4,6,8,7,8],[10],2,7]],[10,0,1,[[3,10],[6,2,10,3]]],[3,6],[],[[],4]]
|
||||
|
||||
[[],[9],[2,9,[[],[5,1,0,2,1],[9,10],0],[[7,3],5,10],2],[[9,[9],3],[4,[10,2,10],[0,2]],1,[2,4,[4,1,7,1,0],[],[1,0,1]],[10,[1,4,5],9]]]
|
||||
[[[[],[9,1,3],[5,0,1,7],7]]]
|
||||
|
||||
[[[[0,5,10],[7,8],[0,5],[7,10,1]]],[[2,10,[3],[5,4],[8,9,0,1,6]],0],[]]
|
||||
[[6,[8,4,4,[10,9,4,2,9]],4,[5,1]],[1,6,5,[],[10,[7,3,10,6],[0,2]]],[4,[2,5],[3,[7,7,2,10,5],3,[0,4]],[2,9,2,[]],[2,[1],1,[6,6,5,5]]],[4,[],10,[[2,7,0,4,8]],[0,2]],[[[8,10],[7,9]],[10,5,[6,5,8,2],0,[10,8,2,9]],8]]
|
||||
|
||||
[[[3,9,[],[4,1,6],6],8,[[3,8,1,3,10]],[]],[5],[],[]]
|
||||
[[3,10,[]],[[9,[1,8],2,[4,3,6],7],3],[0,[[9,0,7],3,9,8,[]],5,[[],[10,5,7]],[[4,3,3,6],10,[3,9,0,6]]],[[2,[4],[5]],10,[6],6,2]]
|
||||
|
||||
[[[[4,0,8],[4,3,8,10]],8,10,[10,0,3]],[[],0,7,5],[2,[[],[1,6,9,2],4,[8,2,6]],6,[6,[10,0]],[[],[4],[5,6]]],[]]
|
||||
[[5,[[]],2,2],[[[10,4,7,9],10,8,[]],9,5],[[[10,10,8],2,[8,7,1,2],8],1]]
|
||||
|
||||
[[5,4,3],[4,[8],1,[[]],[]],[[]],[4,[],[[1,5,5],[]]],[6,6,8,9]]
|
||||
[[[5,[10,7,7,6],5,7],6,6,4,10]]
|
||||
|
||||
[[2,[[]],[6,[0]],[[3,7,5,2,1],0,[9,6]],[]],[[[4,9,6]],3,8]]
|
||||
[[[]],[2],[[[4,6],[6,4,10,7],10,[4,5,10]],7,[4,7,[9,1,3],8]],[[9,5,7,[],9],[8],[],7,[[1,1,7,2]]]]
|
||||
|
||||
[[],[[[7,6,1,0],6,7,7]],[6],[[],6]]
|
||||
[[],[],[[],[[]],[[8,5],9,[2],8,5],4]]
|
||||
|
||||
[[1,2,[9,[7,5,1,0,9],[8,7,2],0,[4,10,10,7]],9],[9,[],[[0,8,10]],10]]
|
||||
[[5,[[10,7,3,0,9],[0,6,4],[9,10,0]]],[1]]
|
||||
|
||||
[[[],3],[[0,[6,10,6,3,10],[3,7,6,0,5],10,1]],[5],[[]],[10,0,[],8]]
|
||||
[[[9,[5,10,6],7,0],8,[6,6,[2,0,9,5,1]],[[],3,[10],7],7],[[[2,3,9],[2,6,9],[10,2],[]],[2,[0,6,9],[8,5,4]],[4,[4,8,6,4],[1,1,1,4,8],10,1],4,[5,1,[]]]]
|
||||
|
||||
[[[],[]],[[[10,4,6]],[[2],4,[1,1,3]],[7,9,[3,3,10,5]]]]
|
||||
[[0,6,0,[10,6],10],[7,10]]
|
||||
|
||||
[[[],[2,[8,3],[3,5,9,9]],[8,[8,9,2],2,[4]]]]
|
||||
[[7,6,[[5,2,8,5,0],[5,2,5,5,7]],4,6],[[9,2,5],[],7],[6]]
|
||||
|
||||
[[5,0]]
|
||||
[[[2,[3,5,6,6],9,[6,8,8,7,2],0],1,2,7,[0,2]],[4],[9,0,4]]
|
||||
|
||||
[[[[4],0,[4,6],5],[],[3,4]],[1,7,[8],6],[[1,0,[],[2,1,7,5,7],7],[6,10],[],6,[8,[9,9,9,5],2,1]],[7,[],5,[]],[7,[]]]
|
||||
[[[4,1,[10,0]]]]
|
||||
|
||||
[[1,[],2,6,[[6,10,2,4]]],[],[4,5,0]]
|
||||
[[[],8,10],[[5,[10,9],0],10,8,3],[[[5],8],0],[]]
|
||||
|
||||
[[0,10],[[[4,6]],[]],[10,0],[],[6]]
|
||||
[[6,0],[[],8],[3,[8,[3,4,10],9,[6,5,10,5,9]],4,[2,[6,3],8],[10,[2,6,2],[0,4],[4],6]],[[[],[8,1]],8,5,8,3],[3,2]]
|
||||
|
||||
[[[],6,[[9,3,0],[2,2,10],9,8,[]]]]
|
||||
[[[5,0],[0,4,8,[7]]],[[[4],2,4,[1],[3,7,0,6,7]]]]
|
||||
|
||||
[[[[7],2],[[8,9]],[],4,10],[[0,[9,0,7]],[[2,9],10]],[]]
|
||||
[[[],4,[0,3,0],5],[7,0],[2,8,[6,[3,8,10,3]],5],[],[[3,[10,9],[1,6]],4,8,[[],7,[2,6,10,9],9,[8,6,3]],1]]
|
||||
|
||||
[[[[0,8,6,9]],0,4],[[8,6,5,4],8],[7,[[],[10,0,9,5,9],0,6]],[10,1,3,[[8,9,9,8],[0,10,7],[2,10,9,2,10],4,2]]]
|
||||
[[3,[]],[1,0,10,4,[[2,1,9,1],[]]],[0,[[],[9,1,1],1,[10,7,7,2,1]],5],[[[8,3,4,8],7,4,8,[7,4,9,1]],[5,[0,6,10],[]],[],8],[[9,0,[10,5],1],6,[5,[1,4,1,0,8],[5,10]],7]]
|
||||
|
||||
[[1],[3,[[],[6],[1,6,2,9,8],[10,3,3,5]]]]
|
||||
[[[3,[4,9,8,5,0]],[[3,2],[],[9,1,3,7,7]],[7,[],[7],4],[]],[2],[6,5,6,[]],[[2,[6],[6,7]],7,8],[5,[[7,6,8,6,9],[]]]]
|
||||
|
||||
[[[10,[],2,3,[]],[[]],[7,[],[5,10,7,1],2],[4,[3,7,2,1,2],[7,8,4,0]],[7]],[[],[[6,3],6,[5,7,7,4],[1,7,3,4,0],6],5,1,9],[[6,[7,0,4,10,8],6,[7,7,10],[1,7]],6,3,10]]
|
||||
[[],[2],[[0,4,[6,6,10,8,4],[7,8,10,1],0],[[9,6,8,0,10],1,[2,5,2,10,1],10,8],3,10]]
|
||||
|
||||
[[],[],[],[[[4,0,10,8,2]]],[[],10,3,2,[[],7]]]
|
||||
[[[[6,6,4,4,4],[1,4],9],[9],[[3,7,0],[10,8,10],6,[6]],7,[]],[]]
|
||||
|
||||
[[[[5,0,4],[9,2,7,0],[4,4],2,6],4,7],[[[0,4,9],[5,9,1,1,5],[]]],[7]]
|
||||
[[[[8,5,9,4,8],4]],[],[[[9,1,4,9],0,2],10],[2,[6,2,9,[3,4,10,2],[5,8]],[[6,5,6,6,9],[3,2,6,3,5]],[[],7,[8,3,8,7,4]]]]
|
||||
|
||||
[[5,[],5],[[5],9,[8,[3,6],[10,5,7],10,2],[],[]]]
|
||||
[[0,[[7,10],[7,2,6,5,2]]],[],[[[7,6],[],0],2,[[2,5,3]],0,[5,[8,7,1,3,1],5]]]
|
||||
|
||||
[[[10,9,[],6]],[5,3],[3,5,10,[[1],[7,5,8,7,4],[4,4,2]]],[[4,[7],1,[10],[3,8,1]],[[],[10,0,10],[7,4,2],[5,6,1,4]],[[10,4,5],[2]],[4,[5,2,5,8],2]]]
|
||||
[[[],[[6,1,9],5,[8,2,8],[5,5]],5],[10,[[10,5,8,10],10],[[3,8,1,6,0],3,8],7],[6,[5,[3,7,3,0],6,0,[0,6]],10,6]]
|
||||
|
||||
[[],[[[7]],7,5],[[[8,3,0],[9,8]],3,3,[[3,1,8,1,9],10]],[[[9,4,4,7],[3,0,7,1],[6,2,9,4],[0,2,3,8],[]],[8,1,[8,6]],0,[],[[10]]],[2]]
|
||||
[[2,[[2,6,10],[],7]],[[9,8,2,[10,10]],3,0,[6,0,1,3],[]],[[],9,10],[[6,10,[0,1,6,8],6,[7,5,10,10]],[[10,4,2,5],9,[4],0,0],[[9,3,5],[],[7],6,[10,0,4,7,6]],[[8,6],10,6],[]]]
|
||||
|
||||
[[[3],[5,9,1,10,[8]],6,4],[[[],8,4,2],1,[10,[1,10,10],10],8],[0,[],[[6,2,1,10],4],7],[0,3,[10,[9,4,4],0,4,[1]]]]
|
||||
[[],[[9,[1],[],[]]],[6],[6,[5,[8,5,5]],[9,9,[6],[8,3,7,5]],[9,[5],4,9,[10,7,8,9,4]],4],[[[4],[9,1,8],7,8,[4,2,10,10,1]],[8,7,[],10]]]
|
||||
|
||||
[[],[8,9,3,5]]
|
||||
[[10,[[5,5,1,6],[],5],8,[6],6],[]]
|
||||
|
||||
[[10,2,[],[[]]],[2,[6,8,[10,4,1,7],3],[4,2,[9,1,3,6]]],[[]],[[2,9,[4,2,10,7],8],[10,[7,1]]]]
|
||||
[[[6,7,[4,0]]],[[[5,7,5,10]]],[10,5,[[5,4,3,5,6]],10,[]]]
|
||||
|
||||
[[10],[],[[[6]]],[],[[6,[7,4,5,4,8],[],[2,0,9,5,3],2],[[8]],[0,10,2,[1,0]]]]
|
||||
[[[1,10,[5,6]],[[10,3,3,1,10],3,2],[[7,4],6],[],[]],[10,[[2,9,2,5],2,[6,6,10,8],2,8]]]
|
||||
|
||||
[[[],[3],[[8,6,5,2,2],8,[9,3,1,1],[0,4,9,10]],4]]
|
||||
[[],[[9],7,10]]
|
||||
|
||||
[[[[7,6,10],6,6],[9],[1],7],[3,9],[7,[4,4]],[1,[4,3],[[5,7,9,4],8,[0,10,5],[4,1,10,6,3],[7]],[[]],[7,10,[4,4,6,5,10],9,[7,0,10,7]]],[[]]]
|
||||
[[],[[[6],3,[]],[[3,6],10],9],[[[3,4,0,3],5,3,9]],[0,10,9],[3]]
|
||||
|
||||
[[5,0,[6]],[[[],2],[[5],2,[5,8,2],[2,8,3,9,1],[7]]],[10,[4,[4,7,3,9,2],7,[6,0,0,7,2],0],[10,[10,4,3,7],1,10]],[3,[[9,10,9],[8,1,4],6,[],5],[8,[6,1],[6,2]],[[5,9],8,5],[[8],[6,9,6],7]]]
|
||||
[[7,8],[[[6,5,8,0,7],[1,2],[4,6,4]],[],[[],8,10]]]
|
||||
|
||||
[[[[10,5],3,[5,2,2,6,3]]]]
|
||||
[[10,[[5,0],4,1,[0],[5,8,0]]],[8,0,10,4],[1,8,[9,[7,8,8],4,[5,0,6,0],0]],[[],6],[6]]
|
||||
|
||||
[[[0,0,5,10,[9,10,0,5,8]]],[0,9,[[],[2,9,5,2],[7,7]]]]
|
||||
[[[10,0,5,4,[]],8,5,8],[[10,4,[7,5,3]],9,4]]
|
||||
|
||||
[[4,5,10],[7,9],[2,[2,[3],[5,5,2]],5,2]]
|
||||
[[10,1,[[5,3,6],1,7,[1],[7,9,8,5]],6,10],[6,5,[5,9]],[],[[6,1],8,3]]
|
||||
|
||||
[[6,[3,4,4],[],[8,[7,6,1,10],7,[4,6,1,4],3]],[10],[[0]],[[8,3,[8,4,4,8],8]]]
|
||||
[[[10],[[5],3],1,4,0],[[1],2]]
|
||||
|
||||
[[5,2],[3,8,[]],[[[5,8]],5,2,9],[[5,1,6,[0,6,10,4,10]]]]
|
||||
[[[[5,2,10,8],3],[[1]]],[0,[0],[3,[10,2,0,2],[]],[10,[8,2,7]],0],[[7,[5,2,0,7,8],[9,6,5,0],10],[[10,5],[4,4,9,6],[],4,6],0,[],9],[0,[[],[10,10],3],5],[[[10,10,3],[],[8,2,3],5,[2,1,9]]]]
|
||||
|
||||
[[4,2],[],[8,9,[],1],[],[]]
|
||||
[[0,[10,[1,10,5],[3,2,6,7],5],[[7,3,10],6,8,[6,8,8,4,2],7],9],[0,2]]
|
||||
|
||||
[[[0,[],8],[[8,7,4],10,8,9],0,[2,6,[3,2,9,7],6]],[0,[0,5,6]],[2],[[[0,4,1,2,9],5,[3]],[[6,10,7,8,9],0,[1,4,6],[9,4,10,9]],[[],1]]]
|
||||
[[3,[]],[[0,3],[8,[4,5,7,10,5]],10,[],[4]]]
|
||||
|
||||
[[[]],[],[[],[]],[],[]]
|
||||
[[[8],[9,[10,4,0,9],2,6]],[0,[6,5,[4,5,10,8,2]],6],[8],[7],[10,[8]]]
|
||||
|
||||
[[],[4,[[4,7,0,5,3],2,[7,6,5,1]],8],[]]
|
||||
[[[[2,2,3,7],0,[6,3],[5]],[8]],[[[10,5,5,10,2],0,8,[5]],[],[[8,10,1,10],1,[4],[1,8,1,8],1],10,[[10]]],[2,6,[[]],3,[8,[0],[0,0,0,9]]]]
|
||||
|
||||
[[5],[[[5,1,1],[1,2,10],5,10],2,[[3],[],3],10,[1]],[]]
|
||||
[[7,5,7],[],[9,[6,4,8,[5,2,10,2],5],4],[],[3]]
|
||||
|
||||
[[8,5,6,10,[8,[10],0,3]],[6],[[[]],[6,5,[0,4,9,1,9],[1,6,2]],[[4,7,2,7],1]]]
|
||||
[[8,[0,8,[8,4,4],[10,5],[10,10,1,2]],10],[1,10,[9,9,[10,1],7,6]]]
|
||||
|
||||
[[[5,7],[4,[0,1,1,2,6]],[5],3],[]]
|
||||
[[4,[4,[6,6]]],[[[],[9,4,4,2,8]]],[[[7]],[3],[],[3]]]
|
||||
|
||||
[[[4,4,[0,3],5],3,6],[[4,[2,9],1,[]],2,0,[]],[6],[8,[[]]]]
|
||||
[[10],[1,[8,[],10],3,9],[],[[5,7],7,8]]
|
||||
|
||||
[[[],3,5,[[3,4,8,2]]],[3],[10,[[2,3],1,9,[],[7,9]],[[5,6],10,3,0,1]]]
|
||||
[[1],[5]]
|
||||
+148
@@ -0,0 +1,148 @@
|
||||
515,60 -> 515,52 -> 515,60 -> 517,60 -> 517,55 -> 517,60 -> 519,60 -> 519,50 -> 519,60 -> 521,60 -> 521,56 -> 521,60 -> 523,60 -> 523,53 -> 523,60 -> 525,60 -> 525,53 -> 525,60
|
||||
515,60 -> 515,52 -> 515,60 -> 517,60 -> 517,55 -> 517,60 -> 519,60 -> 519,50 -> 519,60 -> 521,60 -> 521,56 -> 521,60 -> 523,60 -> 523,53 -> 523,60 -> 525,60 -> 525,53 -> 525,60
|
||||
502,32 -> 507,32
|
||||
522,47 -> 522,43 -> 522,47 -> 524,47 -> 524,41 -> 524,47 -> 526,47 -> 526,39 -> 526,47 -> 528,47 -> 528,39 -> 528,47
|
||||
516,32 -> 521,32
|
||||
501,161 -> 501,152 -> 501,161 -> 503,161 -> 503,157 -> 503,161 -> 505,161 -> 505,155 -> 505,161 -> 507,161 -> 507,154 -> 507,161 -> 509,161 -> 509,155 -> 509,161
|
||||
512,30 -> 517,30
|
||||
522,47 -> 522,43 -> 522,47 -> 524,47 -> 524,41 -> 524,47 -> 526,47 -> 526,39 -> 526,47 -> 528,47 -> 528,39 -> 528,47
|
||||
522,84 -> 522,76 -> 522,84 -> 524,84 -> 524,75 -> 524,84 -> 526,84 -> 526,81 -> 526,84 -> 528,84 -> 528,74 -> 528,84 -> 530,84 -> 530,79 -> 530,84 -> 532,84 -> 532,77 -> 532,84 -> 534,84 -> 534,78 -> 534,84 -> 536,84 -> 536,80 -> 536,84
|
||||
522,84 -> 522,76 -> 522,84 -> 524,84 -> 524,75 -> 524,84 -> 526,84 -> 526,81 -> 526,84 -> 528,84 -> 528,74 -> 528,84 -> 530,84 -> 530,79 -> 530,84 -> 532,84 -> 532,77 -> 532,84 -> 534,84 -> 534,78 -> 534,84 -> 536,84 -> 536,80 -> 536,84
|
||||
520,130 -> 520,133 -> 515,133 -> 515,138 -> 533,138 -> 533,133 -> 525,133 -> 525,130
|
||||
506,34 -> 511,34
|
||||
529,112 -> 529,116 -> 526,116 -> 526,122 -> 541,122 -> 541,116 -> 535,116 -> 535,112
|
||||
498,13 -> 498,15 -> 492,15 -> 492,23 -> 506,23 -> 506,15 -> 501,15 -> 501,13
|
||||
522,84 -> 522,76 -> 522,84 -> 524,84 -> 524,75 -> 524,84 -> 526,84 -> 526,81 -> 526,84 -> 528,84 -> 528,74 -> 528,84 -> 530,84 -> 530,79 -> 530,84 -> 532,84 -> 532,77 -> 532,84 -> 534,84 -> 534,78 -> 534,84 -> 536,84 -> 536,80 -> 536,84
|
||||
523,63 -> 523,66 -> 515,66 -> 515,71 -> 529,71 -> 529,66 -> 528,66 -> 528,63
|
||||
501,161 -> 501,152 -> 501,161 -> 503,161 -> 503,157 -> 503,161 -> 505,161 -> 505,155 -> 505,161 -> 507,161 -> 507,154 -> 507,161 -> 509,161 -> 509,155 -> 509,161
|
||||
512,173 -> 517,173
|
||||
522,84 -> 522,76 -> 522,84 -> 524,84 -> 524,75 -> 524,84 -> 526,84 -> 526,81 -> 526,84 -> 528,84 -> 528,74 -> 528,84 -> 530,84 -> 530,79 -> 530,84 -> 532,84 -> 532,77 -> 532,84 -> 534,84 -> 534,78 -> 534,84 -> 536,84 -> 536,80 -> 536,84
|
||||
498,13 -> 498,15 -> 492,15 -> 492,23 -> 506,23 -> 506,15 -> 501,15 -> 501,13
|
||||
545,94 -> 550,94
|
||||
539,100 -> 544,100
|
||||
522,47 -> 522,43 -> 522,47 -> 524,47 -> 524,41 -> 524,47 -> 526,47 -> 526,39 -> 526,47 -> 528,47 -> 528,39 -> 528,47
|
||||
529,112 -> 529,116 -> 526,116 -> 526,122 -> 541,122 -> 541,116 -> 535,116 -> 535,112
|
||||
553,100 -> 558,100
|
||||
501,170 -> 506,170
|
||||
515,60 -> 515,52 -> 515,60 -> 517,60 -> 517,55 -> 517,60 -> 519,60 -> 519,50 -> 519,60 -> 521,60 -> 521,56 -> 521,60 -> 523,60 -> 523,53 -> 523,60 -> 525,60 -> 525,53 -> 525,60
|
||||
498,13 -> 498,15 -> 492,15 -> 492,23 -> 506,23 -> 506,15 -> 501,15 -> 501,13
|
||||
522,84 -> 522,76 -> 522,84 -> 524,84 -> 524,75 -> 524,84 -> 526,84 -> 526,81 -> 526,84 -> 528,84 -> 528,74 -> 528,84 -> 530,84 -> 530,79 -> 530,84 -> 532,84 -> 532,77 -> 532,84 -> 534,84 -> 534,78 -> 534,84 -> 536,84 -> 536,80 -> 536,84
|
||||
515,60 -> 515,52 -> 515,60 -> 517,60 -> 517,55 -> 517,60 -> 519,60 -> 519,50 -> 519,60 -> 521,60 -> 521,56 -> 521,60 -> 523,60 -> 523,53 -> 523,60 -> 525,60 -> 525,53 -> 525,60
|
||||
498,13 -> 498,15 -> 492,15 -> 492,23 -> 506,23 -> 506,15 -> 501,15 -> 501,13
|
||||
522,84 -> 522,76 -> 522,84 -> 524,84 -> 524,75 -> 524,84 -> 526,84 -> 526,81 -> 526,84 -> 528,84 -> 528,74 -> 528,84 -> 530,84 -> 530,79 -> 530,84 -> 532,84 -> 532,77 -> 532,84 -> 534,84 -> 534,78 -> 534,84 -> 536,84 -> 536,80 -> 536,84
|
||||
522,84 -> 522,76 -> 522,84 -> 524,84 -> 524,75 -> 524,84 -> 526,84 -> 526,81 -> 526,84 -> 528,84 -> 528,74 -> 528,84 -> 530,84 -> 530,79 -> 530,84 -> 532,84 -> 532,77 -> 532,84 -> 534,84 -> 534,78 -> 534,84 -> 536,84 -> 536,80 -> 536,84
|
||||
522,84 -> 522,76 -> 522,84 -> 524,84 -> 524,75 -> 524,84 -> 526,84 -> 526,81 -> 526,84 -> 528,84 -> 528,74 -> 528,84 -> 530,84 -> 530,79 -> 530,84 -> 532,84 -> 532,77 -> 532,84 -> 534,84 -> 534,78 -> 534,84 -> 536,84 -> 536,80 -> 536,84
|
||||
546,100 -> 551,100
|
||||
522,84 -> 522,76 -> 522,84 -> 524,84 -> 524,75 -> 524,84 -> 526,84 -> 526,81 -> 526,84 -> 528,84 -> 528,74 -> 528,84 -> 530,84 -> 530,79 -> 530,84 -> 532,84 -> 532,77 -> 532,84 -> 534,84 -> 534,78 -> 534,84 -> 536,84 -> 536,80 -> 536,84
|
||||
542,97 -> 547,97
|
||||
522,84 -> 522,76 -> 522,84 -> 524,84 -> 524,75 -> 524,84 -> 526,84 -> 526,81 -> 526,84 -> 528,84 -> 528,74 -> 528,84 -> 530,84 -> 530,79 -> 530,84 -> 532,84 -> 532,77 -> 532,84 -> 534,84 -> 534,78 -> 534,84 -> 536,84 -> 536,80 -> 536,84
|
||||
535,97 -> 540,97
|
||||
533,108 -> 533,109 -> 538,109 -> 538,108
|
||||
522,47 -> 522,43 -> 522,47 -> 524,47 -> 524,41 -> 524,47 -> 526,47 -> 526,39 -> 526,47 -> 528,47 -> 528,39 -> 528,47
|
||||
509,32 -> 514,32
|
||||
513,34 -> 518,34
|
||||
515,60 -> 515,52 -> 515,60 -> 517,60 -> 517,55 -> 517,60 -> 519,60 -> 519,50 -> 519,60 -> 521,60 -> 521,56 -> 521,60 -> 523,60 -> 523,53 -> 523,60 -> 525,60 -> 525,53 -> 525,60
|
||||
520,130 -> 520,133 -> 515,133 -> 515,138 -> 533,138 -> 533,133 -> 525,133 -> 525,130
|
||||
507,164 -> 512,164
|
||||
501,161 -> 501,152 -> 501,161 -> 503,161 -> 503,157 -> 503,161 -> 505,161 -> 505,155 -> 505,161 -> 507,161 -> 507,154 -> 507,161 -> 509,161 -> 509,155 -> 509,161
|
||||
501,161 -> 501,152 -> 501,161 -> 503,161 -> 503,157 -> 503,161 -> 505,161 -> 505,155 -> 505,161 -> 507,161 -> 507,154 -> 507,161 -> 509,161 -> 509,155 -> 509,161
|
||||
557,103 -> 562,103
|
||||
538,94 -> 543,94
|
||||
515,60 -> 515,52 -> 515,60 -> 517,60 -> 517,55 -> 517,60 -> 519,60 -> 519,50 -> 519,60 -> 521,60 -> 521,56 -> 521,60 -> 523,60 -> 523,53 -> 523,60 -> 525,60 -> 525,53 -> 525,60
|
||||
522,84 -> 522,76 -> 522,84 -> 524,84 -> 524,75 -> 524,84 -> 526,84 -> 526,81 -> 526,84 -> 528,84 -> 528,74 -> 528,84 -> 530,84 -> 530,79 -> 530,84 -> 532,84 -> 532,77 -> 532,84 -> 534,84 -> 534,78 -> 534,84 -> 536,84 -> 536,80 -> 536,84
|
||||
520,130 -> 520,133 -> 515,133 -> 515,138 -> 533,138 -> 533,133 -> 525,133 -> 525,130
|
||||
520,130 -> 520,133 -> 515,133 -> 515,138 -> 533,138 -> 533,133 -> 525,133 -> 525,130
|
||||
498,13 -> 498,15 -> 492,15 -> 492,23 -> 506,23 -> 506,15 -> 501,15 -> 501,13
|
||||
522,84 -> 522,76 -> 522,84 -> 524,84 -> 524,75 -> 524,84 -> 526,84 -> 526,81 -> 526,84 -> 528,84 -> 528,74 -> 528,84 -> 530,84 -> 530,79 -> 530,84 -> 532,84 -> 532,77 -> 532,84 -> 534,84 -> 534,78 -> 534,84 -> 536,84 -> 536,80 -> 536,84
|
||||
523,63 -> 523,66 -> 515,66 -> 515,71 -> 529,71 -> 529,66 -> 528,66 -> 528,63
|
||||
501,28 -> 506,28
|
||||
505,173 -> 510,173
|
||||
531,87 -> 531,88 -> 543,88
|
||||
515,60 -> 515,52 -> 515,60 -> 517,60 -> 517,55 -> 517,60 -> 519,60 -> 519,50 -> 519,60 -> 521,60 -> 521,56 -> 521,60 -> 523,60 -> 523,53 -> 523,60 -> 525,60 -> 525,53 -> 525,60
|
||||
522,84 -> 522,76 -> 522,84 -> 524,84 -> 524,75 -> 524,84 -> 526,84 -> 526,81 -> 526,84 -> 528,84 -> 528,74 -> 528,84 -> 530,84 -> 530,79 -> 530,84 -> 532,84 -> 532,77 -> 532,84 -> 534,84 -> 534,78 -> 534,84 -> 536,84 -> 536,80 -> 536,84
|
||||
520,130 -> 520,133 -> 515,133 -> 515,138 -> 533,138 -> 533,133 -> 525,133 -> 525,130
|
||||
522,84 -> 522,76 -> 522,84 -> 524,84 -> 524,75 -> 524,84 -> 526,84 -> 526,81 -> 526,84 -> 528,84 -> 528,74 -> 528,84 -> 530,84 -> 530,79 -> 530,84 -> 532,84 -> 532,77 -> 532,84 -> 534,84 -> 534,78 -> 534,84 -> 536,84 -> 536,80 -> 536,84
|
||||
522,84 -> 522,76 -> 522,84 -> 524,84 -> 524,75 -> 524,84 -> 526,84 -> 526,81 -> 526,84 -> 528,84 -> 528,74 -> 528,84 -> 530,84 -> 530,79 -> 530,84 -> 532,84 -> 532,77 -> 532,84 -> 534,84 -> 534,78 -> 534,84 -> 536,84 -> 536,80 -> 536,84
|
||||
524,126 -> 524,127 -> 528,127 -> 528,126
|
||||
515,60 -> 515,52 -> 515,60 -> 517,60 -> 517,55 -> 517,60 -> 519,60 -> 519,50 -> 519,60 -> 521,60 -> 521,56 -> 521,60 -> 523,60 -> 523,53 -> 523,60 -> 525,60 -> 525,53 -> 525,60
|
||||
522,84 -> 522,76 -> 522,84 -> 524,84 -> 524,75 -> 524,84 -> 526,84 -> 526,81 -> 526,84 -> 528,84 -> 528,74 -> 528,84 -> 530,84 -> 530,79 -> 530,84 -> 532,84 -> 532,77 -> 532,84 -> 534,84 -> 534,78 -> 534,84 -> 536,84 -> 536,80 -> 536,84
|
||||
501,161 -> 501,152 -> 501,161 -> 503,161 -> 503,157 -> 503,161 -> 505,161 -> 505,155 -> 505,161 -> 507,161 -> 507,154 -> 507,161 -> 509,161 -> 509,155 -> 509,161
|
||||
523,63 -> 523,66 -> 515,66 -> 515,71 -> 529,71 -> 529,66 -> 528,66 -> 528,63
|
||||
508,28 -> 513,28
|
||||
501,161 -> 501,152 -> 501,161 -> 503,161 -> 503,157 -> 503,161 -> 505,161 -> 505,155 -> 505,161 -> 507,161 -> 507,154 -> 507,161 -> 509,161 -> 509,155 -> 509,161
|
||||
523,63 -> 523,66 -> 515,66 -> 515,71 -> 529,71 -> 529,66 -> 528,66 -> 528,63
|
||||
511,167 -> 516,167
|
||||
549,97 -> 554,97
|
||||
541,91 -> 546,91
|
||||
522,47 -> 522,43 -> 522,47 -> 524,47 -> 524,41 -> 524,47 -> 526,47 -> 526,39 -> 526,47 -> 528,47 -> 528,39 -> 528,47
|
||||
522,47 -> 522,43 -> 522,47 -> 524,47 -> 524,41 -> 524,47 -> 526,47 -> 526,39 -> 526,47 -> 528,47 -> 528,39 -> 528,47
|
||||
520,34 -> 525,34
|
||||
522,47 -> 522,43 -> 522,47 -> 524,47 -> 524,41 -> 524,47 -> 526,47 -> 526,39 -> 526,47 -> 528,47 -> 528,39 -> 528,47
|
||||
515,60 -> 515,52 -> 515,60 -> 517,60 -> 517,55 -> 517,60 -> 519,60 -> 519,50 -> 519,60 -> 521,60 -> 521,56 -> 521,60 -> 523,60 -> 523,53 -> 523,60 -> 525,60 -> 525,53 -> 525,60
|
||||
501,161 -> 501,152 -> 501,161 -> 503,161 -> 503,157 -> 503,161 -> 505,161 -> 505,155 -> 505,161 -> 507,161 -> 507,154 -> 507,161 -> 509,161 -> 509,155 -> 509,161
|
||||
522,47 -> 522,43 -> 522,47 -> 524,47 -> 524,41 -> 524,47 -> 526,47 -> 526,39 -> 526,47 -> 528,47 -> 528,39 -> 528,47
|
||||
501,161 -> 501,152 -> 501,161 -> 503,161 -> 503,157 -> 503,161 -> 505,161 -> 505,155 -> 505,161 -> 507,161 -> 507,154 -> 507,161 -> 509,161 -> 509,155 -> 509,161
|
||||
505,30 -> 510,30
|
||||
543,103 -> 548,103
|
||||
510,146 -> 515,146
|
||||
522,84 -> 522,76 -> 522,84 -> 524,84 -> 524,75 -> 524,84 -> 526,84 -> 526,81 -> 526,84 -> 528,84 -> 528,74 -> 528,84 -> 530,84 -> 530,79 -> 530,84 -> 532,84 -> 532,77 -> 532,84 -> 534,84 -> 534,78 -> 534,84 -> 536,84 -> 536,80 -> 536,84
|
||||
498,173 -> 503,173
|
||||
498,13 -> 498,15 -> 492,15 -> 492,23 -> 506,23 -> 506,15 -> 501,15 -> 501,13
|
||||
501,161 -> 501,152 -> 501,161 -> 503,161 -> 503,157 -> 503,161 -> 505,161 -> 505,155 -> 505,161 -> 507,161 -> 507,154 -> 507,161 -> 509,161 -> 509,155 -> 509,161
|
||||
523,63 -> 523,66 -> 515,66 -> 515,71 -> 529,71 -> 529,66 -> 528,66 -> 528,63
|
||||
515,60 -> 515,52 -> 515,60 -> 517,60 -> 517,55 -> 517,60 -> 519,60 -> 519,50 -> 519,60 -> 521,60 -> 521,56 -> 521,60 -> 523,60 -> 523,53 -> 523,60 -> 525,60 -> 525,53 -> 525,60
|
||||
522,47 -> 522,43 -> 522,47 -> 524,47 -> 524,41 -> 524,47 -> 526,47 -> 526,39 -> 526,47 -> 528,47 -> 528,39 -> 528,47
|
||||
498,13 -> 498,15 -> 492,15 -> 492,23 -> 506,23 -> 506,15 -> 501,15 -> 501,13
|
||||
515,60 -> 515,52 -> 515,60 -> 517,60 -> 517,55 -> 517,60 -> 519,60 -> 519,50 -> 519,60 -> 521,60 -> 521,56 -> 521,60 -> 523,60 -> 523,53 -> 523,60 -> 525,60 -> 525,53 -> 525,60
|
||||
533,108 -> 533,109 -> 538,109 -> 538,108
|
||||
517,146 -> 522,146
|
||||
515,60 -> 515,52 -> 515,60 -> 517,60 -> 517,55 -> 517,60 -> 519,60 -> 519,50 -> 519,60 -> 521,60 -> 521,56 -> 521,60 -> 523,60 -> 523,53 -> 523,60 -> 525,60 -> 525,53 -> 525,60
|
||||
501,161 -> 501,152 -> 501,161 -> 503,161 -> 503,157 -> 503,161 -> 505,161 -> 505,155 -> 505,161 -> 507,161 -> 507,154 -> 507,161 -> 509,161 -> 509,155 -> 509,161
|
||||
513,144 -> 518,144
|
||||
515,170 -> 520,170
|
||||
501,161 -> 501,152 -> 501,161 -> 503,161 -> 503,157 -> 503,161 -> 505,161 -> 505,155 -> 505,161 -> 507,161 -> 507,154 -> 507,161 -> 509,161 -> 509,155 -> 509,161
|
||||
520,130 -> 520,133 -> 515,133 -> 515,138 -> 533,138 -> 533,133 -> 525,133 -> 525,130
|
||||
515,60 -> 515,52 -> 515,60 -> 517,60 -> 517,55 -> 517,60 -> 519,60 -> 519,50 -> 519,60 -> 521,60 -> 521,56 -> 521,60 -> 523,60 -> 523,53 -> 523,60 -> 525,60 -> 525,53 -> 525,60
|
||||
523,63 -> 523,66 -> 515,66 -> 515,71 -> 529,71 -> 529,66 -> 528,66 -> 528,63
|
||||
522,84 -> 522,76 -> 522,84 -> 524,84 -> 524,75 -> 524,84 -> 526,84 -> 526,81 -> 526,84 -> 528,84 -> 528,74 -> 528,84 -> 530,84 -> 530,79 -> 530,84 -> 532,84 -> 532,77 -> 532,84 -> 534,84 -> 534,78 -> 534,84 -> 536,84 -> 536,80 -> 536,84
|
||||
519,173 -> 524,173
|
||||
532,100 -> 537,100
|
||||
524,126 -> 524,127 -> 528,127 -> 528,126
|
||||
522,84 -> 522,76 -> 522,84 -> 524,84 -> 524,75 -> 524,84 -> 526,84 -> 526,81 -> 526,84 -> 528,84 -> 528,74 -> 528,84 -> 530,84 -> 530,79 -> 530,84 -> 532,84 -> 532,77 -> 532,84 -> 534,84 -> 534,78 -> 534,84 -> 536,84 -> 536,80 -> 536,84
|
||||
522,84 -> 522,76 -> 522,84 -> 524,84 -> 524,75 -> 524,84 -> 526,84 -> 526,81 -> 526,84 -> 528,84 -> 528,74 -> 528,84 -> 530,84 -> 530,79 -> 530,84 -> 532,84 -> 532,77 -> 532,84 -> 534,84 -> 534,78 -> 534,84 -> 536,84 -> 536,80 -> 536,84
|
||||
529,112 -> 529,116 -> 526,116 -> 526,122 -> 541,122 -> 541,116 -> 535,116 -> 535,112
|
||||
522,84 -> 522,76 -> 522,84 -> 524,84 -> 524,75 -> 524,84 -> 526,84 -> 526,81 -> 526,84 -> 528,84 -> 528,74 -> 528,84 -> 530,84 -> 530,79 -> 530,84 -> 532,84 -> 532,77 -> 532,84 -> 534,84 -> 534,78 -> 534,84 -> 536,84 -> 536,80 -> 536,84
|
||||
521,148 -> 526,148
|
||||
504,167 -> 509,167
|
||||
522,84 -> 522,76 -> 522,84 -> 524,84 -> 524,75 -> 524,84 -> 526,84 -> 526,81 -> 526,84 -> 528,84 -> 528,74 -> 528,84 -> 530,84 -> 530,79 -> 530,84 -> 532,84 -> 532,77 -> 532,84 -> 534,84 -> 534,78 -> 534,84 -> 536,84 -> 536,80 -> 536,84
|
||||
529,112 -> 529,116 -> 526,116 -> 526,122 -> 541,122 -> 541,116 -> 535,116 -> 535,112
|
||||
520,130 -> 520,133 -> 515,133 -> 515,138 -> 533,138 -> 533,133 -> 525,133 -> 525,130
|
||||
514,148 -> 519,148
|
||||
510,141 -> 515,141
|
||||
515,60 -> 515,52 -> 515,60 -> 517,60 -> 517,55 -> 517,60 -> 519,60 -> 519,50 -> 519,60 -> 521,60 -> 521,56 -> 521,60 -> 523,60 -> 523,53 -> 523,60 -> 525,60 -> 525,53 -> 525,60
|
||||
515,60 -> 515,52 -> 515,60 -> 517,60 -> 517,55 -> 517,60 -> 519,60 -> 519,50 -> 519,60 -> 521,60 -> 521,56 -> 521,60 -> 523,60 -> 523,53 -> 523,60 -> 525,60 -> 525,53 -> 525,60
|
||||
533,108 -> 533,109 -> 538,109 -> 538,108
|
||||
524,126 -> 524,127 -> 528,127 -> 528,126
|
||||
550,103 -> 555,103
|
||||
515,60 -> 515,52 -> 515,60 -> 517,60 -> 517,55 -> 517,60 -> 519,60 -> 519,50 -> 519,60 -> 521,60 -> 521,56 -> 521,60 -> 523,60 -> 523,53 -> 523,60 -> 525,60 -> 525,53 -> 525,60
|
||||
501,161 -> 501,152 -> 501,161 -> 503,161 -> 503,157 -> 503,161 -> 505,161 -> 505,155 -> 505,161 -> 507,161 -> 507,154 -> 507,161 -> 509,161 -> 509,155 -> 509,161
|
||||
529,103 -> 534,103
|
||||
504,26 -> 509,26
|
||||
529,112 -> 529,116 -> 526,116 -> 526,122 -> 541,122 -> 541,116 -> 535,116 -> 535,112
|
||||
508,170 -> 513,170
|
||||
523,63 -> 523,66 -> 515,66 -> 515,71 -> 529,71 -> 529,66 -> 528,66 -> 528,63
|
||||
499,34 -> 504,34
|
||||
522,47 -> 522,43 -> 522,47 -> 524,47 -> 524,41 -> 524,47 -> 526,47 -> 526,39 -> 526,47 -> 528,47 -> 528,39 -> 528,47
|
||||
529,112 -> 529,116 -> 526,116 -> 526,122 -> 541,122 -> 541,116 -> 535,116 -> 535,112
|
||||
495,32 -> 500,32
|
||||
507,148 -> 512,148
|
||||
515,60 -> 515,52 -> 515,60 -> 517,60 -> 517,55 -> 517,60 -> 519,60 -> 519,50 -> 519,60 -> 521,60 -> 521,56 -> 521,60 -> 523,60 -> 523,53 -> 523,60 -> 525,60 -> 525,53 -> 525,60
|
||||
501,161 -> 501,152 -> 501,161 -> 503,161 -> 503,157 -> 503,161 -> 505,161 -> 505,155 -> 505,161 -> 507,161 -> 507,154 -> 507,161 -> 509,161 -> 509,155 -> 509,161
|
||||
531,87 -> 531,88 -> 543,88
|
||||
536,103 -> 541,103
|
||||
501,161 -> 501,152 -> 501,161 -> 503,161 -> 503,157 -> 503,161 -> 505,161 -> 505,155 -> 505,161 -> 507,161 -> 507,154 -> 507,161 -> 509,161 -> 509,155 -> 509,161
|
||||
522,84 -> 522,76 -> 522,84 -> 524,84 -> 524,75 -> 524,84 -> 526,84 -> 526,81 -> 526,84 -> 528,84 -> 528,74 -> 528,84 -> 530,84 -> 530,79 -> 530,84 -> 532,84 -> 532,77 -> 532,84 -> 534,84 -> 534,78 -> 534,84 -> 536,84 -> 536,80 -> 536,84
|
||||
522,47 -> 522,43 -> 522,47 -> 524,47 -> 524,41 -> 524,47 -> 526,47 -> 526,39 -> 526,47 -> 528,47 -> 528,39 -> 528,47
|
||||
498,30 -> 503,30
|
||||
492,34 -> 497,34
|
||||
529,112 -> 529,116 -> 526,116 -> 526,122 -> 541,122 -> 541,116 -> 535,116 -> 535,112
|
||||
@@ -0,0 +1,36 @@
|
||||
Sensor at x=13820, y=3995710: closest beacon is at x=1532002, y=3577287
|
||||
Sensor at x=3286002, y=2959504: closest beacon is at x=3931431, y=2926694
|
||||
Sensor at x=3654160, y=2649422: closest beacon is at x=3702627, y=2598480
|
||||
Sensor at x=3702414, y=2602790: closest beacon is at x=3702627, y=2598480
|
||||
Sensor at x=375280, y=2377181: closest beacon is at x=2120140, y=2591883
|
||||
Sensor at x=3875726, y=2708666: closest beacon is at x=3931431, y=2926694
|
||||
Sensor at x=3786107, y=2547075: closest beacon is at x=3702627, y=2598480
|
||||
Sensor at x=2334266, y=3754737: closest beacon is at x=2707879, y=3424224
|
||||
Sensor at x=1613400, y=1057722: closest beacon is at x=1686376, y=-104303
|
||||
Sensor at x=3305964, y=2380628: closest beacon is at x=3702627, y=2598480
|
||||
Sensor at x=1744420, y=3927424: closest beacon is at x=1532002, y=3577287
|
||||
Sensor at x=3696849, y=2604845: closest beacon is at x=3702627, y=2598480
|
||||
Sensor at x=2357787, y=401688: closest beacon is at x=1686376, y=-104303
|
||||
Sensor at x=2127900, y=1984887: closest beacon is at x=2332340, y=2000000
|
||||
Sensor at x=3705551, y=2604421: closest beacon is at x=3702627, y=2598480
|
||||
Sensor at x=1783014, y=2978242: closest beacon is at x=2120140, y=2591883
|
||||
Sensor at x=2536648, y=2910642: closest beacon is at x=2707879, y=3424224
|
||||
Sensor at x=3999189, y=2989409: closest beacon is at x=3931431, y=2926694
|
||||
Sensor at x=3939169, y=2382534: closest beacon is at x=3702627, y=2598480
|
||||
Sensor at x=2792378, y=2002602: closest beacon is at x=2332340, y=2000000
|
||||
Sensor at x=3520934, y=3617637: closest beacon is at x=2707879, y=3424224
|
||||
Sensor at x=2614525, y=1628105: closest beacon is at x=2332340, y=2000000
|
||||
Sensor at x=2828931, y=3996545: closest beacon is at x=2707879, y=3424224
|
||||
Sensor at x=2184699, y=2161391: closest beacon is at x=2332340, y=2000000
|
||||
Sensor at x=2272873, y=1816621: closest beacon is at x=2332340, y=2000000
|
||||
Sensor at x=1630899, y=3675405: closest beacon is at x=1532002, y=3577287
|
||||
Sensor at x=3683190, y=2619409: closest beacon is at x=3702627, y=2598480
|
||||
Sensor at x=180960, y=185390: closest beacon is at x=187063, y=-1440697
|
||||
Sensor at x=1528472, y=3321640: closest beacon is at x=1532002, y=3577287
|
||||
Sensor at x=3993470, y=2905566: closest beacon is at x=3931431, y=2926694
|
||||
Sensor at x=1684313, y=20931: closest beacon is at x=1686376, y=-104303
|
||||
Sensor at x=2547761, y=2464195: closest beacon is at x=2120140, y=2591883
|
||||
Sensor at x=3711518, y=845968: closest beacon is at x=3702627, y=2598480
|
||||
Sensor at x=3925049, y=2897039: closest beacon is at x=3931431, y=2926694
|
||||
Sensor at x=1590740, y=3586256: closest beacon is at x=1532002, y=3577287
|
||||
Sensor at x=1033496, y=3762565: closest beacon is at x=1532002, y=3577287
|
||||
@@ -0,0 +1,60 @@
|
||||
Valve XB has flow rate=0; tunnels lead to valves WZ, LE
|
||||
Valve BM has flow rate=0; tunnels lead to valves PL, RI
|
||||
Valve GC has flow rate=0; tunnels lead to valves HN, IT
|
||||
Valve RM has flow rate=0; tunnels lead to valves ZQ, YL
|
||||
Valve ZM has flow rate=5; tunnels lead to valves SN, KE, UW, MY, GW
|
||||
Valve UH has flow rate=0; tunnels lead to valves HM, HN
|
||||
Valve GW has flow rate=0; tunnels lead to valves LE, ZM
|
||||
Valve HN has flow rate=19; tunnels lead to valves UW, UH, GL, WZ, GC
|
||||
Valve VT has flow rate=0; tunnels lead to valves ZD, PE
|
||||
Valve VI has flow rate=0; tunnels lead to valves JS, AA
|
||||
Valve YL has flow rate=12; tunnels lead to valves PM, MH, RM, CM
|
||||
Valve LA has flow rate=0; tunnels lead to valves SN, IY
|
||||
Valve CM has flow rate=0; tunnels lead to valves YL, UL
|
||||
Valve JI has flow rate=24; tunnels lead to valves UV, WH, XW, OJ
|
||||
Valve ZD has flow rate=25; tunnels lead to valves VB, XW, VT
|
||||
Valve VB has flow rate=0; tunnels lead to valves QX, ZD
|
||||
Valve FO has flow rate=0; tunnels lead to valves WH, PE
|
||||
Valve JS has flow rate=0; tunnels lead to valves VI, IY
|
||||
Valve RI has flow rate=0; tunnels lead to valves PE, BM
|
||||
Valve XD has flow rate=14; tunnel leads to valve CP
|
||||
Valve ES has flow rate=11; tunnels lead to valves GU, WU
|
||||
Valve WZ has flow rate=0; tunnels lead to valves XB, HN
|
||||
Valve HW has flow rate=0; tunnels lead to valves QY, LE
|
||||
Valve KE has flow rate=0; tunnels lead to valves AA, ZM
|
||||
Valve IY has flow rate=22; tunnels lead to valves JS, AB, LA, IT
|
||||
Valve XW has flow rate=0; tunnels lead to valves ZD, JI
|
||||
Valve BE has flow rate=0; tunnels lead to valves AB, LE
|
||||
Valve QY has flow rate=23; tunnels lead to valves AM, HW, MY
|
||||
Valve MH has flow rate=0; tunnels lead to valves YL, AM
|
||||
Valve IT has flow rate=0; tunnels lead to valves GC, IY
|
||||
Valve DA has flow rate=0; tunnels lead to valves QR, CP
|
||||
Valve PM has flow rate=0; tunnels lead to valves LE, YL
|
||||
Valve WU has flow rate=0; tunnels lead to valves SM, ES
|
||||
Valve UL has flow rate=0; tunnels lead to valves CM, QR
|
||||
Valve SM has flow rate=13; tunnel leads to valve WU
|
||||
Valve XC has flow rate=0; tunnels lead to valves ZJ, AA
|
||||
Valve OJ has flow rate=0; tunnels lead to valves GI, JI
|
||||
Valve SN has flow rate=0; tunnels lead to valves LA, ZM
|
||||
Valve WH has flow rate=0; tunnels lead to valves JI, FO
|
||||
Valve UW has flow rate=0; tunnels lead to valves HN, ZM
|
||||
Valve HM has flow rate=0; tunnels lead to valves UH, PE
|
||||
Valve AB has flow rate=0; tunnels lead to valves BE, IY
|
||||
Valve QR has flow rate=8; tunnels lead to valves WW, UL, DA
|
||||
Valve UV has flow rate=0; tunnels lead to valves JI, FF
|
||||
Valve ZQ has flow rate=20; tunnel leads to valve RM
|
||||
Valve ZJ has flow rate=0; tunnels lead to valves PE, XC
|
||||
Valve GL has flow rate=0; tunnels lead to valves HN, PL
|
||||
Valve CP has flow rate=0; tunnels lead to valves DA, XD
|
||||
Valve AM has flow rate=0; tunnels lead to valves QY, MH
|
||||
Valve PL has flow rate=17; tunnels lead to valves GL, YE, BM, FF, QX
|
||||
Valve YE has flow rate=0; tunnels lead to valves PL, AA
|
||||
Valve PE has flow rate=4; tunnels lead to valves FO, RI, ZJ, VT, HM
|
||||
Valve MY has flow rate=0; tunnels lead to valves QY, ZM
|
||||
Valve QX has flow rate=0; tunnels lead to valves VB, PL
|
||||
Valve GI has flow rate=0; tunnels lead to valves OJ, AA
|
||||
Valve WW has flow rate=0; tunnels lead to valves GU, QR
|
||||
Valve FF has flow rate=0; tunnels lead to valves UV, PL
|
||||
Valve LE has flow rate=6; tunnels lead to valves HW, GW, XB, BE, PM
|
||||
Valve GU has flow rate=0; tunnels lead to valves ES, WW
|
||||
Valve AA has flow rate=0; tunnels lead to valves KE, GI, VI, YE, XC
|
||||
@@ -0,0 +1 @@
|
||||
><<<<>>>><>>><<><<<<>>>><<>>><>>><<<<>>>><<>>>><<<>>>><<<>>>><<<>>><<<<>><>><<<<>>><><<<><><>>>><<<<><<<<>><<<>>>><<>><><>>>><<<>>><<<>>><<>>>><>>>><>><>>><<>><><<<<><>><<<>>>><<<>>><<<>><>><<<>>><<<<>>>><><<<>>><<<>>><<<<><<<<>>><<<<>>><<<>>><<<<>>><<>>><<><<<>><<<>>><<<<><<<<>>><<<><<>>>><<<>><>>><<>>><<<><<<<>>><<><<<<>>>><<>>>><<>>>><<<<>>><><<<<><>><<<>>>><<<<>><>>>><>><>><>><<<>><<<>>>><<<>><<>><<<<><<<<><<>>>><<<<><<<>>><>><<<>>><<<><<<><<<<><<><<<>>><<<<>>>><<<<><<>><<<<>>><>>><<<<><<<>>>><<><>><<<<>><<<<>>>><<<><<<<><<<<>>><<<><<>>><>>><<<<>>><<>><<<<>>><<<><<<>><<<<>>>><<<<><<><<<<>>>><>>>><<<<>>>><<<>>>><<<><<>>><>>><<<<>><<<<>>><><>><<<>>>><<<<>><<<>><<>><<<>>><<<>>>><<<<>>>><<>>>><<>>>><><<<<>><<<<>>>><<<<>>><<<<>><>><<<>>><>>>><><<>><<>>><<<>>>><>>><<>><<<>><>>><>>><><>><>><<<><<<>>>><>><<<><<<>>><<<<><<>>>><<<><<<>>>><>><<<>>>><<<>>>><>>><><>>>><>><<><<<>>>><<>>>><<<>>><<<<>>><<<>><>>>><<<<>>>><>><<>>><<<<>>>><<<<><>>>><<>><<>>>><>><<<<>>>><<<<>><<<>>>><<>><><>><<<<>><<<>>>><<<>>><<>><><<<>>>><<>><>><<>><>><<<<>><<<>>><<<<>>><<>>>><<>>><<<<>>><>><<><<<>><>>><<<>><<<<>>>><<<>>><<>>><<<>>><<<<>>>><<<<>>><<<>>><<>>>><<>>><<<>>><<><<>>>><<>>>><<><<>>><<><<<>>>><<<<><<<<>><<<>>>><>>><<<<>>><<<<>>>><<>><<<<>>>><<<><<<><<>>>><<<>>>><<<>>>><<<>><<>>><>>><<<<>>><<<<>><<<>>><<<>><<<<>>><<<<><<><>>><<<<>>><<<<>>>><>><<<<>><<<<>>>><<<<><<<>>>><>><<<<><<<<>>>><>><<><<<>>><<>>><<<<>><<<><<<><>><<>>>><<<><<<<><<<>>>><<<<>><<>><<<<>>>><><<<><<<>>>><<>>>><<>><<<<>>>><><><<<<><><<>>><<><<>>><>>><<>><><<><<>>>><<<<><<<>>>><<>><><<>>>><<<<><><<<>>>><<>>><<<><<<>>>><>><<<<>>>><>>><<><>>>><>>>><<<><>>><>>>><<<>><<<>>><<<<>>>><<>>>><<<<>>>><<><>><<<<>><<<<>>><<>>><>>>><<><<>>><>>>><<><<><<><><<<>><>><<<<>>><<<>>>><<<><<<<>><>><>>><<<<><<<>>>><<<>>><><<<<>>><<<<><<<<>>>><>><>>><<<><<>><<<><>>><<<<>><><<<<><>><<>><<>><>><<<<><<<>><>>>><<>><<<<>>><><<<>><<>><<>><>>><>>>><<><>><<<<>>><>>><<>>><<>>>><<>><<<<>>><>><<<>>><<<>>><<<<>>>><<<><<<<>><<><<<><<<>>><<><<>><>><>>><<<>>><<>><<>>><<>><<>><>><<<<>>>><<<<>>><<<>>>><<<<>>><<<>><<<>><<<<>>>><<>><<<<><<<<>><<>>><><<><<<<>>>><><>>>><<<<>>>><<<<>>>><<>><<<<>>>><<<><>><<>>>><<>>>><<<<>>>><<<>>><>><<>>>><<<>>>><<<<>>><<<<>><<<<>>>><<>>><<>>>><>>><>>>><><>><<<<>>>><<<>>>><<<>><<>>><<<<>>><>>>><<>>>><<<><>>><><<>>>><<>>>><<<>>>><<<<><<<<>>>><>>>><>><<<>>><<<>>>><<<>><<<>>><>><<>>><<><><<><<>>>><>>><<<<>><><>><>>><<<<><>>><<<>>><<<><<<<>>><<<>><<<>>><<>>><<<<><<<<><>><><<<<>>><<<>><<>><<<>><<<<>><>><>>>><<>>><<<>><<<>><<<<>><><<<<>>><<<>>>><<<<>>><<>><>><<>>><><<>>><<<>>><<<>><<>>>><<<<>><<<<>>>><<<><<><<<<>><<<<>><<<>>>><>><<<><>>>><<>>>><<><<<>>>><<<<>><<<>>>><<>>><>><<<<>>>><<<<>>><>>>><<<<><<><<>><>><>>><<<><<<<><<<<>><<<>>><<<<>><<><<<<>>>><<<>>>><<<>>>><<<<>>><<><<>><<><<<<>>>><<<><<<<>>>><<>>><<<<>><>>>><<<<>><<<>>>><<><<<<>>>><<<>><>>>><><<<>><<<><<<>>><>>>><>>><<<<><<<<>>><<>>><<<>>><<<<><<<<>>>><<>>><<<>><<>>><><<<>>>><<><>>><<>><<<>>>><<<><>><<<>>><<>>>><<<>>>><>><<><>><<>>>><<<>>>><<<<>>>><<<>>><<<>><<<<><<<<>><><<><<<>><>>><<<<>>><<<<>><<<>>><<>><<<<><<<><<<><<<>>><<<<>>><<<<>><<>>><<>><<<<>>>><<>>>><<>>>><<>><>>><>>>><<>>>><<<>>><<<<>>><>>><>>>><<<>><<>>><<>>>><<>>>><<<>>><<>>><<<><<<>><>>>><<<>><>>><<<>>><>>>><>><<>>><<<<>>><<<<>><>>><<<<>>><<<<><<<>>><><>>><<<>>><>><>>>><<>>>><<<>><<>>><<>><<<<>><<<<><>>><<>><<<<>>><<<>>><<>>>><>>>><<<><>>>><<><><>>><<>>>><<<>>>><><>><<<<>><<<>>>><<<<><<<<>>>><<<<>><>>>><<<>>>><<><<>>>><<<<>>>><<<<>>><>><>>>><>>>><>><<>>>><>>>><<>>><<<<>>>><<>>><><<>>>><<>><<<<><<><>>>><<<<>><<><<><<>><<<><<<>><<<<>>><<<<>><<>><>>><<<<>>>><<<<>>>><<<<>>><><<<<><<<<><><<<<><<<<>>>><<<<>>>><><>>><<<<><<<<><<<><><<<<>><><<<><<<<>><>>><><><<<><>>><<><<>><<<>><<<>>>><<<<>>><<>><<<<><>>><>>><<>>>><<<<>>><<<>>>><<<>>>><<<>><<<>><<<<>>><<<<>><>>><<<<><>>>><<<>><>>><<>>><<<<>><<><<<>><>>><<<>><<<<>>><<<>>>><>>><><<<><<<>>>><<>>><<><>>>><>>>><<<<>>><><><>>>><<<<>><<<<>>><<>>><<<><<<>>>><<><<<>><<<>>>><<<<>>>><>>><<<>>><><<<>><<<<>><<<>>>><>><<><><<>><<<>><<<>>><<<<>>>><<<><<<<>><<<<>>>><<<<>>>><<><<<<>>><<<<>><<<<>><<<>><<<<>>><<>>>><<>>><>><<>>>><>>><>>><<<><>>>><<<>>><<<<><<<<>>><<><><>>>><<>>>><<>>>><<<<>>>><<><<><<<>>><<<>>>><<><<<><<>>><<<><<<>>>><<<<>>><<>>>><<>><><<<><<>><<>>><<<<>><>><<<>><<<<>><<<<><<>>><<><<<<>>>><<<>><<<<>><<>>>><>>>><>>><>>>><<<>>><<<>>>><<>>>><>><>><<<>><<<>>><<>>><<<<>>><<<<>>><<>>>><>>><>><<<<>>>><<>>>><<>>>><<<<>>>><>>>><><>>><<>>>><<<<><<>>>><<<<>><<<<>>>><<>><<<<><<<<>>><<<<>><<>>>><<<>>>><<<><>><<<><<>>><<<<>><<<>>><><<<<>><<<<>><>>><<<<>>><<<<>>>><>>>><<>>>><<>>><>>>><<<<>>><<>><<<><<><<<>>>><<<>>>><<<<><<>>><>><<<<><<<>>><>><><<<><<>>>><>>>><>><<>>><<>>>><<>>>><<<<>><<>><><<>>><<>><<>><<>>><>><<<<>>>><<>>>><<<<>>><<>><><<<><>><<<>><>>><>><<>>><><>>><<>>>><<<>>><<<<>>><<<>><<>><<<<>>><<<><<<>><<<<><<>><>><<<<>><<>>>><<<>><<<>>>><<<<>>>><<<<>><<>>><<<>>><<<>>>><<<<>>><<<<>>>><>><<<<>>>><<>>><><<>>>><<<<>>>><<<<>>>><>><<>><<<<><<<<>>><><>>><<<<>>><<><>>>><<<<><<<>>>><>>>><<<>>>><<<>>>><<>>><<>>><<<<><<<>><>>><<<><<<>>><Line truncated
|
||||
+2025
File diff suppressed because it is too large.
Load diff
+1000
@@ -0,0 +1,1000 @@
|
||||
24-91,80-92
|
||||
28-93,5-94
|
||||
30-81,33-82
|
||||
28-97,59-72
|
||||
65-66,54-70
|
||||
35-35,5-36
|
||||
3-5,4-91
|
||||
73-97,20-72
|
||||
53-77,2-54
|
||||
47-96,48-95
|
||||
7-75,8-75
|
||||
66-89,67-86
|
||||
23-25,24-95
|
||||
97-98,5-98
|
||||
58-61,13-57
|
||||
53-62,52-52
|
||||
5-93,92-93
|
||||
52-61,34-61
|
||||
83-85,82-92
|
||||
90-90,46-91
|
||||
35-95,94-98
|
||||
89-91,72-90
|
||||
3-98,81-97
|
||||
26-26,27-96
|
||||
41-54,53-55
|
||||
9-43,8-54
|
||||
14-14,14-86
|
||||
36-50,50-50
|
||||
79-84,78-78
|
||||
44-69,70-73
|
||||
6-51,5-5
|
||||
40-40,39-73
|
||||
10-65,9-11
|
||||
1-2,4-99
|
||||
8-36,5-5
|
||||
72-72,25-71
|
||||
66-66,67-96
|
||||
69-79,62-68
|
||||
46-57,5-56
|
||||
97-98,39-98
|
||||
98-99,4-97
|
||||
9-94,10-84
|
||||
3-15,6-14
|
||||
9-10,11-80
|
||||
9-9,9-69
|
||||
60-79,78-82
|
||||
50-70,70-90
|
||||
12-12,13-64
|
||||
8-92,3-8
|
||||
29-79,30-78
|
||||
96-97,5-97
|
||||
13-75,59-63
|
||||
45-78,45-79
|
||||
38-70,38-69
|
||||
13-33,19-25
|
||||
79-87,47-88
|
||||
9-67,8-67
|
||||
51-59,58-60
|
||||
28-61,28-62
|
||||
7-90,33-87
|
||||
5-5,5-33
|
||||
78-85,43-84
|
||||
18-94,18-95
|
||||
42-42,42-81
|
||||
12-93,11-92
|
||||
16-64,17-64
|
||||
2-99,1-98
|
||||
32-68,31-69
|
||||
14-73,15-15
|
||||
43-55,43-81
|
||||
13-65,66-66
|
||||
79-85,79-91
|
||||
81-84,52-80
|
||||
21-68,22-67
|
||||
32-80,33-80
|
||||
17-76,83-83
|
||||
11-65,39-65
|
||||
32-85,33-84
|
||||
25-58,26-57
|
||||
14-28,8-15
|
||||
64-87,20-86
|
||||
62-99,29-61
|
||||
26-40,27-47
|
||||
9-76,9-83
|
||||
42-90,43-89
|
||||
5-97,5-93
|
||||
6-16,15-87
|
||||
45-91,9-91
|
||||
34-34,35-85
|
||||
21-56,21-21
|
||||
38-79,47-80
|
||||
79-98,36-96
|
||||
25-99,73-99
|
||||
4-51,12-50
|
||||
9-10,14-50
|
||||
65-89,26-48
|
||||
17-19,18-18
|
||||
39-60,34-75
|
||||
61-76,61-61
|
||||
38-90,37-37
|
||||
36-67,68-68
|
||||
6-19,10-20
|
||||
3-91,3-97
|
||||
35-93,35-94
|
||||
63-89,59-62
|
||||
46-76,66-76
|
||||
31-63,31-64
|
||||
17-44,33-37
|
||||
35-43,35-68
|
||||
11-13,12-90
|
||||
39-83,40-63
|
||||
41-99,24-86
|
||||
41-76,41-56
|
||||
9-62,10-62
|
||||
3-92,92-92
|
||||
36-41,36-46
|
||||
6-21,5-26
|
||||
7-98,5-97
|
||||
24-95,9-35
|
||||
4-82,3-81
|
||||
45-74,7-35
|
||||
7-74,59-75
|
||||
62-68,32-61
|
||||
45-66,44-83
|
||||
36-94,36-37
|
||||
57-76,57-77
|
||||
34-71,71-72
|
||||
95-95,95-95
|
||||
58-75,57-79
|
||||
48-75,40-53
|
||||
21-94,21-31
|
||||
55-55,3-56
|
||||
48-80,3-80
|
||||
10-81,9-81
|
||||
13-66,6-7
|
||||
1-91,90-92
|
||||
4-5,4-83
|
||||
22-76,20-45
|
||||
4-13,3-3
|
||||
10-22,6-6
|
||||
18-91,18-90
|
||||
50-53,51-52
|
||||
23-33,21-24
|
||||
1-49,1-48
|
||||
8-40,8-39
|
||||
11-97,2-96
|
||||
79-81,55-75
|
||||
82-95,81-81
|
||||
9-10,10-68
|
||||
59-59,58-58
|
||||
2-99,2-2
|
||||
22-36,21-22
|
||||
49-77,49-50
|
||||
7-21,7-7
|
||||
65-98,66-72
|
||||
1-43,39-40
|
||||
25-60,25-25
|
||||
12-79,38-80
|
||||
89-90,26-90
|
||||
52-72,53-53
|
||||
15-96,97-99
|
||||
4-8,4-72
|
||||
2-73,72-72
|
||||
11-35,15-35
|
||||
99-99,1-98
|
||||
72-83,8-88
|
||||
29-35,1-3
|
||||
32-72,15-33
|
||||
50-86,51-51
|
||||
27-65,59-87
|
||||
11-11,11-52
|
||||
16-87,17-87
|
||||
60-62,61-61
|
||||
50-90,81-92
|
||||
86-86,43-86
|
||||
42-82,11-82
|
||||
93-94,3-94
|
||||
22-91,90-92
|
||||
14-91,13-75
|
||||
11-28,14-19
|
||||
76-85,75-77
|
||||
7-98,6-98
|
||||
25-40,2-41
|
||||
4-96,12-90
|
||||
61-75,1-62
|
||||
17-97,16-17
|
||||
38-93,38-52
|
||||
16-34,17-39
|
||||
61-78,29-79
|
||||
7-91,90-90
|
||||
30-59,20-60
|
||||
5-98,4-98
|
||||
55-55,55-99
|
||||
1-95,1-94
|
||||
15-87,14-14
|
||||
56-92,23-55
|
||||
9-97,46-58
|
||||
9-93,8-94
|
||||
4-10,16-96
|
||||
52-53,24-53
|
||||
11-59,10-59
|
||||
61-76,53-65
|
||||
26-45,45-46
|
||||
4-38,38-92
|
||||
46-46,46-87
|
||||
41-61,40-95
|
||||
7-17,2-17
|
||||
26-27,27-33
|
||||
58-92,58-90
|
||||
13-96,13-98
|
||||
76-76,1-77
|
||||
12-97,12-96
|
||||
30-30,29-79
|
||||
38-86,38-86
|
||||
6-94,93-93
|
||||
5-9,11-55
|
||||
52-52,51-51
|
||||
29-88,29-29
|
||||
22-65,2-22
|
||||
51-60,57-77
|
||||
16-78,4-77
|
||||
99-99,40-98
|
||||
90-90,71-91
|
||||
16-86,16-87
|
||||
37-92,37-86
|
||||
42-79,48-56
|
||||
25-47,24-49
|
||||
32-35,33-36
|
||||
64-75,5-53
|
||||
18-53,32-54
|
||||
59-74,64-75
|
||||
22-76,21-76
|
||||
3-90,3-90
|
||||
98-98,15-99
|
||||
4-17,17-77
|
||||
97-97,7-97
|
||||
94-95,13-95
|
||||
19-56,4-56
|
||||
8-12,12-95
|
||||
9-75,9-21
|
||||
1-45,25-43
|
||||
65-82,65-66
|
||||
27-63,27-27
|
||||
97-99,5-96
|
||||
15-85,14-15
|
||||
24-75,24-74
|
||||
34-81,34-82
|
||||
29-97,18-96
|
||||
13-80,13-17
|
||||
7-93,8-93
|
||||
81-82,16-82
|
||||
16-59,60-98
|
||||
88-93,22-88
|
||||
91-93,41-92
|
||||
16-57,16-85
|
||||
19-46,15-20
|
||||
16-52,16-72
|
||||
7-7,8-61
|
||||
80-86,80-82
|
||||
65-75,1-88
|
||||
7-78,1-77
|
||||
5-94,4-94
|
||||
59-88,60-87
|
||||
69-73,69-70
|
||||
16-16,17-52
|
||||
50-91,51-91
|
||||
39-57,38-40
|
||||
12-73,72-74
|
||||
2-4,10-66
|
||||
36-38,36-71
|
||||
23-80,63-98
|
||||
85-91,40-84
|
||||
47-48,6-48
|
||||
1-3,3-97
|
||||
33-33,33-34
|
||||
16-18,17-61
|
||||
81-83,1-82
|
||||
53-82,15-54
|
||||
54-84,63-84
|
||||
1-98,97-97
|
||||
3-77,4-61
|
||||
34-79,35-54
|
||||
24-24,25-82
|
||||
6-99,4-6
|
||||
29-49,30-49
|
||||
1-2,1-90
|
||||
1-37,1-1
|
||||
3-4,8-62
|
||||
10-85,11-86
|
||||
57-59,54-63
|
||||
3-93,1-93
|
||||
58-59,9-59
|
||||
37-38,25-38
|
||||
32-96,31-96
|
||||
2-91,23-90
|
||||
31-70,37-47
|
||||
18-77,67-76
|
||||
58-91,66-97
|
||||
21-44,45-45
|
||||
60-61,61-78
|
||||
12-12,11-55
|
||||
43-65,15-66
|
||||
21-70,20-21
|
||||
10-10,10-88
|
||||
11-71,12-72
|
||||
75-75,50-76
|
||||
29-29,11-28
|
||||
4-81,1-98
|
||||
36-54,37-53
|
||||
8-92,91-93
|
||||
37-76,37-77
|
||||
74-99,75-99
|
||||
3-98,12-97
|
||||
19-83,20-83
|
||||
97-99,2-96
|
||||
45-45,45-95
|
||||
3-87,2-86
|
||||
66-74,50-65
|
||||
12-12,12-77
|
||||
1-93,5-85
|
||||
40-52,43-82
|
||||
5-69,9-70
|
||||
2-11,10-31
|
||||
31-74,31-99
|
||||
40-96,41-64
|
||||
12-38,11-13
|
||||
18-55,18-88
|
||||
54-84,53-54
|
||||
10-95,5-94
|
||||
32-70,63-71
|
||||
20-84,8-47
|
||||
61-87,86-87
|
||||
16-31,4-16
|
||||
1-97,1-96
|
||||
1-5,6-28
|
||||
73-73,38-72
|
||||
23-50,22-22
|
||||
27-93,27-36
|
||||
99-99,6-99
|
||||
99-99,1-99
|
||||
99-99,34-75
|
||||
7-24,18-24
|
||||
5-43,9-18
|
||||
3-6,5-62
|
||||
35-67,17-66
|
||||
16-45,8-44
|
||||
2-90,2-91
|
||||
48-97,96-97
|
||||
35-74,7-73
|
||||
25-86,85-85
|
||||
13-78,13-89
|
||||
2-79,79-79
|
||||
5-98,1-98
|
||||
66-66,64-68
|
||||
15-85,20-86
|
||||
25-41,42-73
|
||||
18-30,29-29
|
||||
16-20,16-75
|
||||
4-6,5-89
|
||||
7-56,8-57
|
||||
11-64,11-65
|
||||
7-7,9-86
|
||||
6-68,6-72
|
||||
4-92,4-91
|
||||
26-28,25-65
|
||||
2-57,1-58
|
||||
96-98,22-95
|
||||
2-82,82-82
|
||||
96-98,95-97
|
||||
11-91,90-90
|
||||
8-87,7-8
|
||||
64-92,76-93
|
||||
2-4,4-30
|
||||
53-92,49-61
|
||||
17-50,18-51
|
||||
8-64,7-64
|
||||
35-60,5-36
|
||||
1-6,6-85
|
||||
7-62,62-62
|
||||
38-42,50-54
|
||||
3-3,3-60
|
||||
39-48,50-86
|
||||
1-97,16-89
|
||||
44-72,73-84
|
||||
14-68,16-68
|
||||
7-55,8-8
|
||||
13-79,19-79
|
||||
31-94,95-97
|
||||
30-63,19-31
|
||||
15-83,52-83
|
||||
27-27,27-83
|
||||
72-72,3-71
|
||||
35-99,1-98
|
||||
29-80,29-88
|
||||
40-71,20-70
|
||||
61-93,60-94
|
||||
3-93,1-93
|
||||
4-4,5-99
|
||||
22-69,10-26
|
||||
42-74,42-75
|
||||
18-39,19-38
|
||||
37-43,43-92
|
||||
29-31,16-30
|
||||
7-95,7-7
|
||||
72-73,72-72
|
||||
9-90,91-98
|
||||
7-51,8-47
|
||||
28-88,89-94
|
||||
3-94,4-94
|
||||
20-41,37-51
|
||||
19-34,4-34
|
||||
13-63,64-68
|
||||
5-98,5-90
|
||||
24-93,24-73
|
||||
26-56,11-56
|
||||
2-75,33-76
|
||||
1-99,2-96
|
||||
44-55,54-56
|
||||
64-99,64-80
|
||||
41-64,41-64
|
||||
15-80,17-75
|
||||
57-59,58-90
|
||||
5-12,7-58
|
||||
16-50,17-17
|
||||
41-48,40-47
|
||||
31-32,31-92
|
||||
1-91,1-37
|
||||
53-67,49-77
|
||||
3-75,2-79
|
||||
55-76,47-60
|
||||
42-42,42-58
|
||||
20-42,20-41
|
||||
94-98,51-97
|
||||
1-44,1-45
|
||||
19-50,2-51
|
||||
28-82,29-94
|
||||
18-97,18-18
|
||||
41-89,14-41
|
||||
3-36,5-35
|
||||
64-85,31-86
|
||||
72-96,95-96
|
||||
11-18,18-87
|
||||
19-63,62-62
|
||||
16-17,16-94
|
||||
97-97,1-98
|
||||
22-95,23-96
|
||||
16-16,17-35
|
||||
25-96,43-96
|
||||
50-87,50-50
|
||||
3-92,3-89
|
||||
20-78,20-20
|
||||
53-53,54-89
|
||||
5-43,8-44
|
||||
39-85,38-38
|
||||
47-76,46-77
|
||||
35-78,77-79
|
||||
28-47,27-29
|
||||
39-39,36-40
|
||||
87-98,76-78
|
||||
30-35,30-63
|
||||
39-53,21-30
|
||||
30-30,30-93
|
||||
65-97,19-96
|
||||
74-77,73-98
|
||||
21-95,6-22
|
||||
36-89,47-88
|
||||
99-99,8-98
|
||||
22-68,25-69
|
||||
38-90,38-42
|
||||
39-88,17-39
|
||||
79-85,78-84
|
||||
11-74,7-7
|
||||
38-45,38-45
|
||||
57-90,56-58
|
||||
1-2,3-83
|
||||
2-48,7-49
|
||||
30-95,30-96
|
||||
71-96,71-79
|
||||
4-89,96-99
|
||||
44-93,44-99
|
||||
16-16,15-98
|
||||
7-95,10-91
|
||||
12-15,23-41
|
||||
39-62,38-92
|
||||
5-10,7-12
|
||||
51-91,14-52
|
||||
12-12,12-76
|
||||
54-58,56-59
|
||||
9-9,10-56
|
||||
11-42,49-70
|
||||
14-76,19-77
|
||||
24-33,27-33
|
||||
23-98,23-88
|
||||
35-78,51-85
|
||||
1-1,3-86
|
||||
1-2,2-94
|
||||
30-36,22-58
|
||||
48-48,47-51
|
||||
7-82,83-99
|
||||
31-77,31-31
|
||||
4-6,9-97
|
||||
63-85,10-86
|
||||
30-80,28-81
|
||||
1-1,1-98
|
||||
7-97,18-89
|
||||
52-89,21-88
|
||||
9-69,14-70
|
||||
71-72,34-72
|
||||
55-61,10-97
|
||||
59-88,55-55
|
||||
31-54,31-53
|
||||
26-35,45-98
|
||||
36-79,6-99
|
||||
2-3,2-41
|
||||
6-85,6-84
|
||||
9-97,1-95
|
||||
16-45,43-46
|
||||
5-81,4-80
|
||||
4-91,90-92
|
||||
44-86,30-87
|
||||
72-74,53-73
|
||||
20-20,15-15
|
||||
40-62,40-40
|
||||
28-99,34-62
|
||||
4-89,4-94
|
||||
42-58,46-59
|
||||
43-72,42-81
|
||||
81-83,22-82
|
||||
29-43,10-53
|
||||
47-55,46-70
|
||||
10-84,4-5
|
||||
10-93,11-94
|
||||
38-74,74-74
|
||||
14-48,13-14
|
||||
11-91,10-10
|
||||
9-11,10-10
|
||||
7-60,6-42
|
||||
3-93,92-92
|
||||
14-69,14-68
|
||||
32-45,41-46
|
||||
2-99,3-99
|
||||
16-83,15-83
|
||||
39-44,39-40
|
||||
2-76,75-77
|
||||
91-92,20-82
|
||||
19-50,24-51
|
||||
31-77,9-78
|
||||
3-99,70-99
|
||||
35-36,36-65
|
||||
6-24,7-68
|
||||
64-91,64-92
|
||||
95-96,95-96
|
||||
44-58,2-57
|
||||
61-61,44-62
|
||||
11-98,11-55
|
||||
38-47,20-46
|
||||
8-15,8-97
|
||||
29-53,27-29
|
||||
84-95,59-89
|
||||
61-62,61-85
|
||||
19-77,20-46
|
||||
88-92,92-92
|
||||
2-99,98-99
|
||||
10-79,10-10
|
||||
6-91,20-88
|
||||
14-74,10-10
|
||||
13-34,12-35
|
||||
27-87,86-86
|
||||
1-1,1-86
|
||||
28-31,27-79
|
||||
38-80,21-73
|
||||
23-64,22-24
|
||||
38-94,93-95
|
||||
96-98,10-95
|
||||
50-51,49-50
|
||||
74-88,81-89
|
||||
27-62,24-28
|
||||
49-49,48-92
|
||||
3-5,5-8
|
||||
47-87,47-76
|
||||
66-86,50-67
|
||||
78-96,77-77
|
||||
3-91,2-92
|
||||
88-91,5-87
|
||||
47-88,49-88
|
||||
56-80,55-79
|
||||
96-96,2-96
|
||||
19-38,30-39
|
||||
6-93,93-93
|
||||
36-98,36-36
|
||||
37-37,14-37
|
||||
17-17,18-67
|
||||
10-83,66-88
|
||||
25-89,28-88
|
||||
47-99,1-97
|
||||
87-87,18-86
|
||||
55-60,55-55
|
||||
15-15,23-61
|
||||
33-67,32-77
|
||||
37-42,38-42
|
||||
41-41,23-40
|
||||
54-66,53-68
|
||||
57-98,53-76
|
||||
14-92,14-93
|
||||
12-96,12-13
|
||||
43-43,14-42
|
||||
23-91,45-54
|
||||
36-59,58-58
|
||||
6-6,7-90
|
||||
31-38,37-39
|
||||
8-94,7-94
|
||||
94-94,87-94
|
||||
35-78,36-91
|
||||
37-90,68-75
|
||||
93-93,9-92
|
||||
39-80,35-84
|
||||
16-89,16-82
|
||||
1-86,2-37
|
||||
22-75,31-97
|
||||
1-97,96-98
|
||||
70-82,66-81
|
||||
8-94,93-94
|
||||
5-94,5-5
|
||||
4-75,5-74
|
||||
65-65,44-80
|
||||
33-97,96-97
|
||||
4-58,48-59
|
||||
5-99,5-5
|
||||
62-70,49-69
|
||||
37-42,36-41
|
||||
1-98,1-99
|
||||
91-92,5-92
|
||||
80-89,1-80
|
||||
15-92,74-93
|
||||
26-93,25-25
|
||||
43-46,41-45
|
||||
14-14,15-75
|
||||
29-29,30-99
|
||||
64-98,64-97
|
||||
14-86,87-99
|
||||
5-6,5-27
|
||||
50-75,34-75
|
||||
9-24,23-94
|
||||
77-78,76-77
|
||||
11-27,2-43
|
||||
98-99,58-99
|
||||
8-87,8-9
|
||||
35-35,35-38
|
||||
22-85,2-23
|
||||
39-84,49-70
|
||||
7-15,15-77
|
||||
98-98,7-97
|
||||
42-47,15-41
|
||||
27-34,27-27
|
||||
37-37,38-91
|
||||
33-81,33-80
|
||||
30-51,11-52
|
||||
79-80,76-80
|
||||
59-98,13-77
|
||||
52-55,33-53
|
||||
3-67,68-68
|
||||
3-72,72-83
|
||||
20-43,24-51
|
||||
75-89,29-76
|
||||
31-56,55-56
|
||||
25-50,24-49
|
||||
93-99,98-98
|
||||
2-76,2-75
|
||||
8-80,8-81
|
||||
16-18,45-60
|
||||
1-1,2-96
|
||||
55-82,54-93
|
||||
60-89,83-88
|
||||
55-88,11-66
|
||||
2-99,98-98
|
||||
83-85,11-84
|
||||
54-69,12-55
|
||||
10-10,10-74
|
||||
11-21,16-22
|
||||
50-71,68-75
|
||||
28-99,11-78
|
||||
41-51,39-87
|
||||
10-11,16-92
|
||||
72-72,13-72
|
||||
92-92,2-91
|
||||
27-46,45-47
|
||||
13-47,9-46
|
||||
1-99,2-18
|
||||
21-96,21-95
|
||||
5-5,5-61
|
||||
66-66,59-66
|
||||
30-82,30-77
|
||||
19-19,20-58
|
||||
82-89,2-99
|
||||
15-15,15-99
|
||||
10-10,11-51
|
||||
47-97,47-92
|
||||
18-20,19-56
|
||||
7-11,20-82
|
||||
24-73,24-70
|
||||
45-45,46-50
|
||||
13-91,65-74
|
||||
19-82,19-77
|
||||
26-98,2-58
|
||||
87-88,17-87
|
||||
44-51,22-51
|
||||
3-95,11-86
|
||||
5-49,15-50
|
||||
14-77,13-77
|
||||
98-99,1-99
|
||||
15-60,14-65
|
||||
4-8,8-21
|
||||
39-86,85-97
|
||||
25-92,24-24
|
||||
29-29,29-78
|
||||
9-63,8-8
|
||||
76-76,14-55
|
||||
15-88,16-84
|
||||
9-89,90-94
|
||||
4-89,3-90
|
||||
4-33,32-64
|
||||
4-98,2-98
|
||||
78-86,20-81
|
||||
63-89,62-88
|
||||
8-56,7-97
|
||||
25-44,25-45
|
||||
3-32,4-8
|
||||
53-86,53-87
|
||||
5-85,3-95
|
||||
18-24,8-94
|
||||
93-98,92-94
|
||||
39-53,54-69
|
||||
28-73,17-72
|
||||
3-93,4-9
|
||||
8-46,8-16
|
||||
3-3,2-78
|
||||
13-22,23-26
|
||||
71-72,47-72
|
||||
3-8,7-20
|
||||
6-73,1-6
|
||||
31-99,33-91
|
||||
90-99,89-89
|
||||
9-81,7-7
|
||||
58-59,58-63
|
||||
64-83,83-83
|
||||
4-5,4-5
|
||||
54-92,19-86
|
||||
7-8,8-63
|
||||
31-48,48-80
|
||||
22-86,8-22
|
||||
76-91,73-76
|
||||
62-78,9-79
|
||||
16-93,19-94
|
||||
5-95,5-93
|
||||
13-80,14-81
|
||||
6-80,79-79
|
||||
78-84,77-79
|
||||
40-83,78-84
|
||||
11-68,5-6
|
||||
81-81,23-82
|
||||
1-27,29-29
|
||||
50-60,51-53
|
||||
44-49,44-45
|
||||
52-62,51-98
|
||||
1-98,1-99
|
||||
39-97,98-99
|
||||
25-52,15-92
|
||||
34-99,34-34
|
||||
10-35,5-69
|
||||
11-11,12-69
|
||||
47-53,53-53
|
||||
92-94,7-93
|
||||
8-8,8-81
|
||||
28-85,28-84
|
||||
39-88,33-34
|
||||
66-83,65-86
|
||||
45-94,45-61
|
||||
36-60,14-36
|
||||
10-40,11-90
|
||||
23-75,24-51
|
||||
61-63,7-62
|
||||
68-83,82-82
|
||||
55-60,55-73
|
||||
9-44,2-44
|
||||
11-95,95-97
|
||||
10-62,9-65
|
||||
81-81,82-98
|
||||
6-56,6-57
|
||||
17-50,34-50
|
||||
4-34,34-34
|
||||
20-98,19-21
|
||||
25-39,25-58
|
||||
40-79,8-80
|
||||
14-57,14-58
|
||||
94-95,67-95
|
||||
17-24,15-24
|
||||
16-18,17-89
|
||||
6-58,5-57
|
||||
6-99,6-37
|
||||
3-3,3-17
|
||||
46-74,47-66
|
||||
16-38,17-17
|
||||
22-97,13-23
|
||||
99-99,38-99
|
||||
52-65,62-62
|
||||
22-24,17-23
|
||||
60-98,1-97
|
||||
3-71,7-21
|
||||
10-94,10-95
|
||||
38-90,38-89
|
||||
24-45,23-62
|
||||
12-14,13-95
|
||||
37-87,38-53
|
||||
14-45,13-45
|
||||
77-77,27-77
|
||||
25-83,17-25
|
||||
21-94,9-99
|
||||
73-73,49-73
|
||||
50-82,49-64
|
||||
7-95,95-95
|
||||
64-86,63-87
|
||||
33-85,2-50
|
||||
33-87,34-53
|
||||
13-31,30-31
|
||||
62-63,63-91
|
||||
9-91,91-92
|
||||
16-72,15-72
|
||||
32-40,39-40
|
||||
10-98,10-93
|
||||
1-3,2-18
|
||||
12-62,12-43
|
||||
35-68,34-69
|
||||
50-52,32-51
|
||||
4-37,4-35
|
||||
6-94,65-96
|
||||
63-88,44-62
|
||||
17-49,9-49
|
||||
20-49,20-48
|
||||
7-91,6-91
|
||||
33-63,34-63
|
||||
62-63,63-89
|
||||
9-62,10-62
|
||||
31-31,32-38
|
||||
77-87,15-87
|
||||
34-89,42-89
|
||||
1-2,3-79
|
||||
59-65,58-87
|
||||
4-57,2-56
|
||||
34-54,13-34
|
||||
41-95,5-54
|
||||
28-76,77-86
|
||||
13-13,12-42
|
||||
12-97,12-96
|
||||
20-27,26-50
|
||||
70-84,70-72
|
||||
47-75,48-69
|
||||
5-75,75-75
|
||||
25-80,22-79
|
||||
28-78,79-79
|
||||
89-89,11-93
|
||||
39-74,75-75
|
||||
20-88,20-87
|
||||
79-80,37-78
|
||||
7-17,16-18
|
||||
31-68,31-68
|
||||
18-36,18-18
|
||||
73-96,35-73
|
||||
28-98,27-29
|
||||
26-75,19-74
|
||||
2-4,3-48
|
||||
2-3,4-79
|
||||
4-93,92-92
|
||||
58-89,70-89
|
||||
1-99,2-68
|
||||
57-78,56-56
|
||||
10-46,10-39
|
||||
6-61,6-60
|
||||
51-90,50-90
|
||||
27-90,27-28
|
||||
45-45,1-44
|
||||
18-31,13-31
|
||||
25-51,18-52
|
||||
7-28,4-29
|
||||
93-93,6-93
|
||||
9-50,8-51
|
||||
92-94,1-93
|
||||
29-91,30-30
|
||||
25-75,24-75
|
||||
55-55,15-55
|
||||
70-73,62-71
|
||||
8-84,8-42
|
||||
50-76,46-57
|
||||
45-80,44-79
|
||||
6-86,7-87
|
||||
8-83,7-82
|
||||
4-30,8-31
|
||||
57-95,58-96
|
||||
49-50,50-79
|
||||
90-92,89-95
|
||||
24-24,25-98
|
||||
60-75,69-75
|
||||
9-83,20-69
|
||||
32-33,32-36
|
||||
3-3,2-98
|
||||
1-84,83-85
|
||||
69-99,99-99
|
||||
92-97,87-92
|
||||
71-96,72-97
|
||||
49-49,49-66
|
||||
18-18,35-75
|
||||
7-94,7-7
|
||||
3-48,45-92
|
||||
47-86,86-86
|
||||
10-42,7-66
|
||||
11-85,12-96
|
||||
39-77,17-39
|
||||
14-24,3-23
|
||||
23-23,23-23
|
||||
66-66,54-67
|
||||
29-29,30-71
|
||||
20-89,56-90
|
||||
41-56,40-57
|
||||
1-99,3-97
|
||||
4-92,4-98
|
||||
7-39,38-38
|
||||
69-71,68-73
|
||||
95-97,13-96
|
||||
55-84,54-75
|
||||
61-79,64-88
|
||||
97-98,3-98
|
||||
9-42,6-41
|
||||
36-86,35-36
|
||||
8-91,9-86
|
||||
16-45,58-79
|
||||
43-43,11-44
|
||||
8-74,9-73
|
||||
2-78,3-78
|
||||
76-86,83-94
|
||||
1-96,2-97
|
||||
49-79,49-78
|
||||
1-1,3-76
|
||||
74-89,21-90
|
||||
7-97,1-2
|
||||
38-73,73-73
|
||||
24-76,29-77
|
||||
4-43,2-2
|
||||
19-20,20-96
|
||||
56-77,51-77
|
||||
10-82,10-65
|
||||
58-71,17-94
|
||||
20-74,74-87
|
||||
28-84,28-83
|
||||
5-81,87-89
|
||||
9-40,9-24
|
||||
38-80,39-81
|
||||
36-36,36-37
|
||||
76-76,33-76
|
||||
62-62,1-62
|
||||
11-27,21-25
|
||||
13-59,44-59
|
||||
36-89,36-37
|
||||
53-70,45-69
|
||||
5-42,41-41
|
||||
49-49,9-50
|
||||
35-59,12-35
|
||||
32-63,18-63
|
||||
38-69,37-71
|
||||
70-97,96-96
|
||||
52-80,53-75
|
||||
43-43,44-94
|
||||
49-83,52-84
|
||||
11-76,10-98
|
||||
4-91,90-92
|
||||
26-54,26-30
|
||||
57-86,57-58
|
||||
3-97,96-96
|
||||
1-1,3-98
|
||||
24-36,36-67
|
||||
8-64,3-64
|
||||
39-98,14-98
|
||||
59-62,59-63
|
||||
30-42,30-31
|
||||
3-87,2-4
|
||||
6-79,7-80
|
||||
7-66,67-80
|
||||
30-48,18-47
|
||||
91-96,82-95
|
||||
4-78,4-5
|
||||
67-68,24-68
|
||||
7-7,8-59
|
||||
1-83,5-79
|
||||
50-67,34-66
|
||||
27-74,26-73
|
||||
7-94,94-97
|
||||
2-27,3-18
|
||||
13-55,56-56
|
||||
3-3,4-40
|
||||
52-66,52-52
|
||||
40-40,39-81
|
||||
3-54,1-47
|
||||
+511
@@ -0,0 +1,511 @@
|
||||
[B] [N] [H]
|
||||
[V] [P] [T] [V] [P]
|
||||
[W] [C] [T] [S] [H] [N]
|
||||
[T] [J] [Z] [M] [N] [F] [L]
|
||||
[Q] [W] [N] [J] [T] [Q] [R] [B]
|
||||
[N] [B] [Q] [R] [V] [F] [D] [F] [M]
|
||||
[H] [W] [S] [J] [P] [W] [L] [P] [S]
|
||||
[D] [D] [T] [F] [G] [B] [B] [H] [Z]
|
||||
1 2 3 4 5 6 7 8 9
|
||||
|
||||
move 2 from 8 to 1
|
||||
move 4 from 9 to 8
|
||||
move 2 from 1 to 6
|
||||
move 7 from 4 to 2
|
||||
move 10 from 2 to 7
|
||||
move 2 from 1 to 6
|
||||
move 1 from 9 to 4
|
||||
move 1 from 4 to 1
|
||||
move 8 from 6 to 4
|
||||
move 7 from 1 to 8
|
||||
move 6 from 8 to 1
|
||||
move 1 from 4 to 1
|
||||
move 8 from 7 to 3
|
||||
move 2 from 5 to 2
|
||||
move 5 from 3 to 2
|
||||
move 5 from 2 to 1
|
||||
move 1 from 6 to 5
|
||||
move 2 from 2 to 6
|
||||
move 5 from 8 to 7
|
||||
move 12 from 7 to 4
|
||||
move 3 from 5 to 4
|
||||
move 2 from 6 to 4
|
||||
move 9 from 1 to 7
|
||||
move 4 from 3 to 7
|
||||
move 4 from 3 to 4
|
||||
move 3 from 1 to 7
|
||||
move 1 from 9 to 1
|
||||
move 1 from 1 to 4
|
||||
move 2 from 5 to 2
|
||||
move 1 from 3 to 7
|
||||
move 15 from 7 to 2
|
||||
move 4 from 7 to 9
|
||||
move 6 from 9 to 2
|
||||
move 2 from 8 to 3
|
||||
move 3 from 2 to 8
|
||||
move 1 from 7 to 6
|
||||
move 8 from 2 to 5
|
||||
move 2 from 8 to 4
|
||||
move 2 from 3 to 8
|
||||
move 9 from 5 to 9
|
||||
move 7 from 4 to 2
|
||||
move 1 from 8 to 6
|
||||
move 6 from 9 to 2
|
||||
move 3 from 9 to 7
|
||||
move 2 from 8 to 4
|
||||
move 7 from 2 to 6
|
||||
move 7 from 4 to 1
|
||||
move 3 from 1 to 8
|
||||
move 2 from 1 to 8
|
||||
move 4 from 8 to 2
|
||||
move 2 from 1 to 5
|
||||
move 19 from 2 to 7
|
||||
move 8 from 4 to 7
|
||||
move 18 from 7 to 1
|
||||
move 11 from 7 to 4
|
||||
move 15 from 1 to 7
|
||||
move 9 from 4 to 3
|
||||
move 2 from 3 to 1
|
||||
move 9 from 4 to 5
|
||||
move 1 from 8 to 1
|
||||
move 8 from 6 to 5
|
||||
move 3 from 2 to 5
|
||||
move 1 from 6 to 7
|
||||
move 4 from 4 to 3
|
||||
move 8 from 5 to 1
|
||||
move 13 from 1 to 6
|
||||
move 12 from 7 to 1
|
||||
move 12 from 6 to 3
|
||||
move 1 from 7 to 6
|
||||
move 1 from 7 to 5
|
||||
move 1 from 1 to 9
|
||||
move 1 from 3 to 1
|
||||
move 3 from 1 to 9
|
||||
move 12 from 3 to 8
|
||||
move 1 from 9 to 3
|
||||
move 1 from 6 to 8
|
||||
move 5 from 5 to 1
|
||||
move 1 from 6 to 2
|
||||
move 10 from 8 to 9
|
||||
move 13 from 9 to 2
|
||||
move 10 from 3 to 4
|
||||
move 1 from 8 to 9
|
||||
move 2 from 8 to 7
|
||||
move 1 from 3 to 1
|
||||
move 1 from 5 to 6
|
||||
move 13 from 2 to 5
|
||||
move 1 from 9 to 2
|
||||
move 7 from 1 to 4
|
||||
move 2 from 2 to 5
|
||||
move 2 from 7 to 8
|
||||
move 1 from 6 to 8
|
||||
move 10 from 5 to 8
|
||||
move 3 from 7 to 2
|
||||
move 4 from 1 to 4
|
||||
move 12 from 4 to 2
|
||||
move 10 from 5 to 3
|
||||
move 6 from 2 to 1
|
||||
move 2 from 4 to 8
|
||||
move 3 from 4 to 8
|
||||
move 6 from 1 to 7
|
||||
move 1 from 7 to 5
|
||||
move 12 from 8 to 2
|
||||
move 3 from 4 to 9
|
||||
move 1 from 4 to 3
|
||||
move 2 from 9 to 6
|
||||
move 2 from 6 to 8
|
||||
move 1 from 1 to 3
|
||||
move 8 from 2 to 6
|
||||
move 4 from 1 to 8
|
||||
move 12 from 2 to 3
|
||||
move 4 from 6 to 8
|
||||
move 10 from 8 to 3
|
||||
move 14 from 3 to 8
|
||||
move 5 from 5 to 8
|
||||
move 1 from 7 to 8
|
||||
move 5 from 3 to 5
|
||||
move 4 from 7 to 2
|
||||
move 2 from 6 to 1
|
||||
move 4 from 3 to 7
|
||||
move 4 from 5 to 1
|
||||
move 21 from 8 to 6
|
||||
move 7 from 3 to 2
|
||||
move 1 from 5 to 1
|
||||
move 4 from 8 to 9
|
||||
move 16 from 6 to 1
|
||||
move 1 from 8 to 4
|
||||
move 5 from 9 to 2
|
||||
move 7 from 1 to 7
|
||||
move 10 from 1 to 3
|
||||
move 1 from 4 to 2
|
||||
move 6 from 6 to 5
|
||||
move 6 from 1 to 4
|
||||
move 4 from 7 to 9
|
||||
move 1 from 6 to 5
|
||||
move 5 from 7 to 6
|
||||
move 3 from 6 to 8
|
||||
move 1 from 7 to 6
|
||||
move 6 from 4 to 8
|
||||
move 4 from 8 to 3
|
||||
move 4 from 8 to 4
|
||||
move 17 from 2 to 1
|
||||
move 8 from 3 to 4
|
||||
move 5 from 4 to 3
|
||||
move 10 from 1 to 5
|
||||
move 11 from 3 to 5
|
||||
move 1 from 7 to 9
|
||||
move 3 from 6 to 4
|
||||
move 9 from 4 to 9
|
||||
move 7 from 1 to 3
|
||||
move 1 from 4 to 8
|
||||
move 7 from 5 to 4
|
||||
move 18 from 5 to 1
|
||||
move 13 from 1 to 6
|
||||
move 1 from 1 to 5
|
||||
move 1 from 1 to 6
|
||||
move 2 from 3 to 1
|
||||
move 1 from 3 to 1
|
||||
move 5 from 1 to 6
|
||||
move 4 from 5 to 8
|
||||
move 2 from 4 to 9
|
||||
move 1 from 1 to 9
|
||||
move 6 from 3 to 8
|
||||
move 1 from 4 to 5
|
||||
move 10 from 8 to 7
|
||||
move 16 from 6 to 7
|
||||
move 1 from 5 to 4
|
||||
move 1 from 7 to 2
|
||||
move 2 from 2 to 6
|
||||
move 2 from 8 to 5
|
||||
move 5 from 4 to 9
|
||||
move 2 from 5 to 9
|
||||
move 7 from 9 to 8
|
||||
move 2 from 6 to 9
|
||||
move 4 from 8 to 9
|
||||
move 7 from 9 to 7
|
||||
move 13 from 9 to 5
|
||||
move 10 from 5 to 1
|
||||
move 3 from 8 to 4
|
||||
move 5 from 1 to 3
|
||||
move 3 from 5 to 6
|
||||
move 3 from 9 to 7
|
||||
move 1 from 1 to 7
|
||||
move 2 from 1 to 3
|
||||
move 1 from 6 to 1
|
||||
move 4 from 3 to 8
|
||||
move 1 from 8 to 9
|
||||
move 1 from 8 to 7
|
||||
move 1 from 8 to 4
|
||||
move 1 from 9 to 7
|
||||
move 1 from 8 to 5
|
||||
move 2 from 4 to 3
|
||||
move 4 from 6 to 3
|
||||
move 1 from 5 to 1
|
||||
move 1 from 6 to 4
|
||||
move 2 from 4 to 5
|
||||
move 1 from 4 to 6
|
||||
move 1 from 6 to 4
|
||||
move 30 from 7 to 3
|
||||
move 1 from 5 to 1
|
||||
move 6 from 7 to 3
|
||||
move 2 from 1 to 7
|
||||
move 2 from 1 to 2
|
||||
move 2 from 2 to 1
|
||||
move 1 from 4 to 9
|
||||
move 3 from 1 to 2
|
||||
move 1 from 9 to 5
|
||||
move 2 from 7 to 1
|
||||
move 1 from 7 to 3
|
||||
move 1 from 1 to 9
|
||||
move 1 from 5 to 8
|
||||
move 1 from 1 to 2
|
||||
move 1 from 7 to 3
|
||||
move 1 from 9 to 4
|
||||
move 18 from 3 to 4
|
||||
move 1 from 5 to 9
|
||||
move 1 from 9 to 6
|
||||
move 1 from 2 to 7
|
||||
move 1 from 8 to 7
|
||||
move 1 from 6 to 3
|
||||
move 1 from 7 to 2
|
||||
move 14 from 4 to 6
|
||||
move 1 from 7 to 6
|
||||
move 15 from 6 to 4
|
||||
move 20 from 3 to 1
|
||||
move 5 from 4 to 9
|
||||
move 5 from 4 to 2
|
||||
move 15 from 1 to 7
|
||||
move 11 from 7 to 9
|
||||
move 2 from 7 to 6
|
||||
move 1 from 6 to 4
|
||||
move 1 from 6 to 3
|
||||
move 2 from 7 to 8
|
||||
move 10 from 4 to 3
|
||||
move 15 from 9 to 3
|
||||
move 1 from 9 to 7
|
||||
move 29 from 3 to 6
|
||||
move 3 from 1 to 6
|
||||
move 1 from 8 to 4
|
||||
move 2 from 4 to 3
|
||||
move 1 from 8 to 9
|
||||
move 4 from 6 to 1
|
||||
move 20 from 6 to 2
|
||||
move 5 from 1 to 9
|
||||
move 3 from 6 to 2
|
||||
move 4 from 6 to 3
|
||||
move 4 from 3 to 1
|
||||
move 4 from 1 to 4
|
||||
move 3 from 4 to 8
|
||||
move 6 from 3 to 4
|
||||
move 6 from 2 to 6
|
||||
move 1 from 7 to 1
|
||||
move 3 from 6 to 8
|
||||
move 6 from 9 to 3
|
||||
move 1 from 1 to 4
|
||||
move 1 from 1 to 7
|
||||
move 3 from 4 to 5
|
||||
move 2 from 6 to 4
|
||||
move 2 from 5 to 6
|
||||
move 4 from 8 to 7
|
||||
move 1 from 5 to 6
|
||||
move 1 from 8 to 4
|
||||
move 1 from 8 to 4
|
||||
move 2 from 4 to 9
|
||||
move 4 from 7 to 8
|
||||
move 4 from 4 to 3
|
||||
move 1 from 7 to 9
|
||||
move 4 from 8 to 6
|
||||
move 1 from 3 to 4
|
||||
move 1 from 3 to 5
|
||||
move 2 from 4 to 7
|
||||
move 4 from 6 to 3
|
||||
move 2 from 9 to 1
|
||||
move 2 from 7 to 4
|
||||
move 1 from 5 to 1
|
||||
move 1 from 3 to 4
|
||||
move 1 from 9 to 3
|
||||
move 4 from 4 to 5
|
||||
move 2 from 5 to 3
|
||||
move 1 from 5 to 7
|
||||
move 1 from 5 to 8
|
||||
move 2 from 6 to 4
|
||||
move 3 from 1 to 3
|
||||
move 21 from 3 to 5
|
||||
move 3 from 6 to 1
|
||||
move 1 from 7 to 1
|
||||
move 4 from 2 to 6
|
||||
move 1 from 8 to 2
|
||||
move 10 from 2 to 4
|
||||
move 4 from 1 to 2
|
||||
move 1 from 6 to 5
|
||||
move 2 from 6 to 9
|
||||
move 7 from 4 to 9
|
||||
move 1 from 6 to 5
|
||||
move 3 from 9 to 4
|
||||
move 6 from 2 to 8
|
||||
move 3 from 9 to 1
|
||||
move 8 from 4 to 3
|
||||
move 1 from 9 to 4
|
||||
move 21 from 5 to 7
|
||||
move 1 from 1 to 3
|
||||
move 2 from 9 to 6
|
||||
move 14 from 7 to 1
|
||||
move 2 from 4 to 1
|
||||
move 2 from 8 to 7
|
||||
move 1 from 8 to 2
|
||||
move 11 from 2 to 9
|
||||
move 8 from 9 to 6
|
||||
move 4 from 7 to 1
|
||||
move 1 from 7 to 4
|
||||
move 2 from 3 to 5
|
||||
move 1 from 1 to 6
|
||||
move 1 from 8 to 2
|
||||
move 3 from 7 to 5
|
||||
move 6 from 1 to 7
|
||||
move 1 from 8 to 7
|
||||
move 1 from 4 to 5
|
||||
move 4 from 6 to 5
|
||||
move 6 from 7 to 6
|
||||
move 3 from 9 to 1
|
||||
move 1 from 7 to 3
|
||||
move 11 from 5 to 1
|
||||
move 1 from 5 to 2
|
||||
move 9 from 6 to 4
|
||||
move 1 from 7 to 3
|
||||
move 2 from 6 to 1
|
||||
move 1 from 2 to 1
|
||||
move 1 from 2 to 6
|
||||
move 14 from 1 to 5
|
||||
move 1 from 8 to 4
|
||||
move 10 from 1 to 5
|
||||
move 3 from 5 to 1
|
||||
move 8 from 3 to 8
|
||||
move 16 from 5 to 7
|
||||
move 2 from 1 to 9
|
||||
move 3 from 8 to 1
|
||||
move 1 from 2 to 4
|
||||
move 6 from 7 to 4
|
||||
move 3 from 5 to 8
|
||||
move 2 from 3 to 6
|
||||
move 7 from 1 to 7
|
||||
move 14 from 4 to 3
|
||||
move 9 from 7 to 8
|
||||
move 2 from 4 to 1
|
||||
move 9 from 8 to 4
|
||||
move 7 from 8 to 2
|
||||
move 6 from 1 to 8
|
||||
move 1 from 9 to 7
|
||||
move 1 from 1 to 6
|
||||
move 1 from 9 to 6
|
||||
move 1 from 5 to 9
|
||||
move 1 from 5 to 3
|
||||
move 9 from 4 to 9
|
||||
move 3 from 3 to 6
|
||||
move 8 from 6 to 3
|
||||
move 1 from 2 to 9
|
||||
move 8 from 9 to 8
|
||||
move 6 from 2 to 9
|
||||
move 2 from 6 to 1
|
||||
move 7 from 8 to 6
|
||||
move 2 from 9 to 6
|
||||
move 8 from 7 to 8
|
||||
move 1 from 4 to 5
|
||||
move 9 from 3 to 5
|
||||
move 2 from 1 to 4
|
||||
move 1 from 7 to 4
|
||||
move 2 from 4 to 3
|
||||
move 11 from 8 to 1
|
||||
move 1 from 4 to 7
|
||||
move 1 from 7 to 8
|
||||
move 5 from 1 to 3
|
||||
move 4 from 6 to 4
|
||||
move 2 from 4 to 8
|
||||
move 1 from 4 to 8
|
||||
move 7 from 8 to 9
|
||||
move 1 from 8 to 9
|
||||
move 1 from 8 to 5
|
||||
move 18 from 3 to 2
|
||||
move 17 from 2 to 7
|
||||
move 6 from 5 to 4
|
||||
move 1 from 2 to 5
|
||||
move 4 from 4 to 6
|
||||
move 4 from 6 to 9
|
||||
move 15 from 7 to 9
|
||||
move 2 from 1 to 6
|
||||
move 2 from 7 to 9
|
||||
move 28 from 9 to 2
|
||||
move 1 from 6 to 7
|
||||
move 4 from 6 to 9
|
||||
move 3 from 1 to 7
|
||||
move 2 from 6 to 3
|
||||
move 1 from 4 to 7
|
||||
move 8 from 9 to 5
|
||||
move 13 from 5 to 3
|
||||
move 1 from 5 to 7
|
||||
move 3 from 9 to 4
|
||||
move 8 from 3 to 7
|
||||
move 28 from 2 to 5
|
||||
move 1 from 9 to 8
|
||||
move 4 from 3 to 4
|
||||
move 4 from 7 to 5
|
||||
move 2 from 3 to 9
|
||||
move 21 from 5 to 4
|
||||
move 1 from 5 to 7
|
||||
move 1 from 3 to 5
|
||||
move 3 from 5 to 7
|
||||
move 1 from 1 to 3
|
||||
move 3 from 7 to 3
|
||||
move 5 from 7 to 6
|
||||
move 10 from 4 to 8
|
||||
move 6 from 5 to 4
|
||||
move 1 from 9 to 3
|
||||
move 15 from 4 to 5
|
||||
move 10 from 4 to 7
|
||||
move 3 from 3 to 7
|
||||
move 1 from 3 to 4
|
||||
move 1 from 3 to 4
|
||||
move 7 from 5 to 1
|
||||
move 2 from 4 to 7
|
||||
move 1 from 9 to 2
|
||||
move 2 from 6 to 9
|
||||
move 1 from 5 to 3
|
||||
move 1 from 3 to 8
|
||||
move 10 from 7 to 9
|
||||
move 2 from 8 to 1
|
||||
move 9 from 9 to 2
|
||||
move 1 from 4 to 3
|
||||
move 9 from 8 to 7
|
||||
move 1 from 2 to 8
|
||||
move 5 from 5 to 4
|
||||
move 1 from 3 to 2
|
||||
move 5 from 4 to 3
|
||||
move 3 from 5 to 9
|
||||
move 6 from 7 to 3
|
||||
move 1 from 6 to 5
|
||||
move 5 from 9 to 7
|
||||
move 2 from 5 to 6
|
||||
move 3 from 6 to 7
|
||||
move 4 from 1 to 4
|
||||
move 6 from 2 to 7
|
||||
move 17 from 7 to 5
|
||||
move 1 from 6 to 1
|
||||
move 5 from 3 to 6
|
||||
move 10 from 7 to 2
|
||||
move 1 from 8 to 4
|
||||
move 1 from 9 to 8
|
||||
move 3 from 4 to 1
|
||||
move 1 from 7 to 4
|
||||
move 5 from 5 to 9
|
||||
move 2 from 8 to 7
|
||||
move 3 from 3 to 7
|
||||
move 4 from 2 to 3
|
||||
move 3 from 4 to 6
|
||||
move 7 from 5 to 8
|
||||
move 7 from 2 to 8
|
||||
move 4 from 9 to 8
|
||||
move 12 from 8 to 3
|
||||
move 17 from 3 to 2
|
||||
move 1 from 7 to 9
|
||||
move 1 from 3 to 9
|
||||
move 3 from 9 to 1
|
||||
move 2 from 5 to 1
|
||||
move 1 from 3 to 5
|
||||
move 4 from 5 to 8
|
||||
move 6 from 8 to 1
|
||||
move 17 from 2 to 3
|
||||
move 13 from 3 to 2
|
||||
move 1 from 3 to 9
|
||||
move 1 from 8 to 4
|
||||
move 1 from 4 to 8
|
||||
move 1 from 9 to 1
|
||||
move 2 from 7 to 2
|
||||
move 8 from 6 to 2
|
||||
move 2 from 7 to 5
|
||||
move 9 from 1 to 3
|
||||
move 13 from 2 to 9
|
||||
move 6 from 1 to 4
|
||||
move 6 from 4 to 5
|
||||
move 3 from 8 to 1
|
||||
move 2 from 1 to 8
|
||||
move 8 from 5 to 7
|
||||
move 2 from 3 to 1
|
||||
move 9 from 3 to 1
|
||||
move 3 from 8 to 2
|
||||
move 1 from 1 to 9
|
||||
move 1 from 3 to 9
|
||||
move 6 from 7 to 3
|
||||
move 4 from 2 to 7
|
||||
move 14 from 1 to 6
|
||||
move 2 from 3 to 9
|
||||
move 3 from 3 to 7
|
||||
move 6 from 2 to 1
|
||||
move 2 from 1 to 2
|
||||
move 9 from 6 to 3
|
||||
move 11 from 9 to 5
|
||||
move 9 from 7 to 6
|
||||
move 6 from 6 to 2
|
||||
move 1 from 1 to 8
|
||||
move 5 from 9 to 4
|
||||
move 1 from 8 to 5
|
||||
move 9 from 2 to 7
|
||||
move 10 from 5 to 8
|
||||
@@ -0,0 +1 @@
|
||||
cmpmbppqmqsqzzrrswrrnqrnqqjzjvzzqvzvjvnnlclrrjhrrrnggmgwwdhhfttmmjrjzrzrhrbrgbrbsbjbcjjvpjjcvjvttfwffjtffqqqldqllhthhljhllfffbfbzbczzznmznnrrtgrgppdcppdfpfjjrggpjgjwgjwgghdggzzshzhrhttmhhdqhqsqgglhljjbggjhggfsfvfggrmggwwbwvvwssqtqzqlqvlqqvtthjhjrjssclscsszhzbztbbdhdbbqfbqqvdqdjjjspsqslsnlljnljjhttdtbdttjpjggtfftlldpdzzqhzqqcwwvggmgmppmhpmpddgjjbzbmzmllndldblbwbswsbbmzzwnnpdndzznmnjnjmnnzwwrqwrqrvqvqmmbmhmzzdqqfnqqgnqqfppmnnqzzvvcfclcrrzfzrzttchttshsphshddrgdggvwgvwwjjzbbprrgwrrcttwbwpwfffqppwnpwpqwwwbmwwjrjprrrsfrfdfrddvdzvzqzgzmgmpgpmmpspdssdlsldsdwssgzgddttqpphllvbvccjzjppffsjsbbvnbvbttgwtgtftzzlhzzjvzvsvtsttfrfrsswpwnwccqtqrqqrhqhjhccpfpgpjgpprnprrscctddqmdqqncqctqqrpqrprwpwnwnrnccmfmdfmfdfnfdnnphhbhttsszgssvhhprprnrsrrvggdllvfvrvbrbsrbrpphhqbbhllpttjmttrstszzwllbsbzzgmzgzbzcbcbjcbbjdjpjtttwggqhhpzpzszqqzhqqhrhlrrrvnrnqrqgrqggzccnnjrrcmmzvmmvtmtltvvlzlmmbnmmbbclljnjhhbjbhbjbbfcbfcfbbqwwftfhttwvwhhwfwcffwvwmmwtwftfjttwdtwdtwttqnttmdtdjtdjjlzjzhjhwwnbbmdmhhjmhmjjwmmpsmmhrrfnnqrqjrrpmpjpzpbzpztppswsmsnnlnppscsgcgsccsfcctbtcctvcvhvjhhccppbrbcrbrmbmvmllnmllgfgmgdmmslmlrmllhttgrrsttlmmnrrrlqqsjjddzzsbsdbbrjbjvbbfwwwglljplpglltlztzvtzzmbzbmbmcchlchcnhccbhhhzrrglgmgwwwwrddvmmvdvvpjpnpspmpsmpsscrrphpdhdllrsspcspsqslsspbbmcbmmdhdwhwpphfhmmfhmhjmjrrhtrtffsddwsddwccvncczlzjzdjzddszdsstgtbthhjhddwppvhvvvwrvwrrpspjpvjjsmsccszzgpzzmjzmzvmvrmmgbglgppbfppvvqffgdgtgpgdgnghhbhgbbpbdbrrjrtjtggvzzvttwbwlbwbttrbttvdttpctcrtrccddfrrmqqjrqqsvqsqzsslnlggmrggnllvdvbvmbmsmwmfmvvdwvwbbnddvfvzzjppbpgpvgppblbzznsscwssqppgbbfwwfmfzzqqgnnjnffvbfvbbfllbhlltvtnvnbnsnddcjcbjbbjpbbhhjghhqjjlttnmmhwmhwwddlppsjppgtthllsclcvvlfvvvlzvlvcccrhrrvqrvvzrvzrrmqqbtbnnwssvhvtttnsttrnnghgdggmgdmmnbnhbhdbddvppvhvlvttzmttljlflvfvpfpwffqbffjllnvlltslsttrvrdrmddtwdwmmlplhlnlffmzzrssvsgsffzjfjcffrcrppzfzbbtltjljtjftfmmmrjmjqmjqmjqmjqjsqqhzzhdhrrcwwbcltfjdgmhvmqmmsclsdgmdqzcvzznwgtdbzgvlpzvdqrvwpmndtzmdpznnplmbvvmffdpbjztvzpwffvqbwmvbmtwjrdpngrftvgznmtzwzmsrvpgpzjcdwvnqplfgncgcdtjbhcqztgqpdhwlmrjbzhcfhnzqmpzzghzpfzbgwmlqztnbdnntgdcfssgzqndhfwdtrbpzbmqjgjflmcllscjnnnrzzsjhnwptjlbhpcwwhsvqqlvjzghnwvzmwtbjgwfgmpdfcjfswvqzwdbnvlwfbmdcjvgjcdhjfbjccsjqrgdrhrjnhgpvvfjqvfwqpgmgfsbsnlrfnbtpzljmzrjmjlldgbvvwbnpqgsnzzmswtwgshdlwhsttdjlhnnlgbprwltbppttctttftrmbjccvwtljqffrcpwnwjgcwjnhmphfsnbfdnfbvzqqlwbnjjdvplrjbflcrwjtrngwzznzhsmnwzfbpjrdmjlwzvrvrblrscjlrmswjpbrtjjbsgzwjnfwwgmnbbppqfnlmfsbpwbdnjmrcvqdhhvrrvmghlbbpfsqzsnbjvrvthnrhlttsnlbgvsdvsmncdglrgpsqjqthnlrhnzpnnjgvrnmdnrtjbmlppfppnmgjhtbzpztdmclgbqjzsgfjllplpnnmjhgpcfcpcmbnwjsdmfmrqvqvjfsrnqhbrzdvwcsmmjvqpjnzbgrhwcwggvvjzbrswplgvbbqhdlqptzjvzcznspjbpvfmgbcfjbgmztmqtlzmzzzpmcdmmvhvnphpcfwcmwqwwqvmwpwhhnspmhrdmjblzhhlphwldfclsfjbzhjglvllldnmtjtwqtztfcvjdngslhnsmmlwlpzdbrrthtwfpjfvfljddplfgnhcnwwmmpgwwspnsprsvprccwvvljwbqwrzqjmwfrnnjbrfsrglnrwdfnsswqwsbpplgnfnvvvhqwmtgsdwmvnzmbjpbscdtcrmsllljwlntjzpwqvvnznmfddtgrmqbdsczhtvjdwrwvjccrqnjlnqbvqhhvnmqmrmnqllcjzcjgzwctrntjsnhrwmcqzrwzzqgqlmbqczlgtmtwlztclhwcjsgbdlfrppwrpbnpgsjfhprvzjwnpdwsjwmdcbmljclcgcnsqcpzgvrrbnnhjhblgnpcbzbcdmgjmpmpcwwdngmggmfqcjcwrzblsfmrslbblhdlwjqrrgtnvcfsccbdgnjcztrblrwbrvdzcnnshwzzvgcqwpqmjzhzlllbtzmcqpnwwqqlcjtrrzfmdpmpblmwztwqdgbmtfggjwnmffzvszgdmhfvflthzmwqgqvgmldzpbwbdvrjldhbnzsthqsczttbbthzgzmmrcmzmzmjfrhbtmsbqrbnsnzzfpvwlwpszdptljqphrdznhbwbfdfhsrqnmlqdcdgbrbsmgwwbbjsmwhzgmqtmfbndzlmlvmrrvrmqbjqbhhqtvvgbhbmsrtljwmtnhtpwjvlrgqljvgpsfrwgdfbcwlmvfdrrlgwvvzvcftwpjhcplgwvqbzftjfbmmcpvrrsvbnwqdhtlsfcjzlrmwvgvgwpbffsrrpdpssqhqrqdglnwcqznzlqqvjzpsdnpwfqtfjqhqwvlfpwrqqmntcnnbfprlwrfdwstvbpjmjdbcdffmwvqbsdnvcgrtccvcfzpwjscmrtbbjjnmlcztbldfnwbqcpqlshthrcbdrfldcmhtgwrgqhnnglbzgdgglzjbgjtdvgzgrspjtbhpmzvpplgjpjbthmjtwqqzsslnfrtmpznbqvmccqccrtdvrssmdgrptsjglvrmlcwfllptczvpgwbdfbrnpzdzmpfjwdhqlsqlzlzrwcsmhcmjhhfhfvcdrzhsmqbwcfshslsnswpslbjnrzqllwbnddhrngmjqtnvhrjpcpmggvgqbwtwcmbvhnwggdrzfgmhhvpqzbvlghsvgmhngwdsrwlzffbpzqmfzvbhbjvqlcswhctpcqnptrvlwblnvpfbzsjnsdjnhqbzddsnthhcfbcvmqgfmvztlcwjbmdtgvgwqbqgdrvbgbnbcnqwzfzqpsgbvtwlphgvqlzshndcbffzcbllgzrzrnhdvqnvtndhcdslqbbhcdftlmnltmsmgfcgvmpbsljdbthjtqlfbmczznwcvfcsnftsnpzcwfqbfhjpswzfzfswfgtzplppsglsdncblddsmftmfdmmnsjjgg
|
||||
+1032
File diff suppressed because it is too large.
Load diff
@@ -0,0 +1,99 @@
|
||||
201111211202111301212201403141040230323033312212134523125000140404300230341330300221220012110101011
|
||||
011220103113221111202122124010033421404432343233535151335133353340034134034332440001110102010010220
|
||||
122121120300202230411332402004044235424325455343231124521355323541403402031010313440121321321322221
|
||||
200021211323122312440342411331012332252341254144425451345233324423152201041200212200331121111210011
|
||||
022213121203213301221100041021415245132424534145512125411151335224315551123141404223410032032000022
|
||||
101131310332214402243114310442325141344331525541232153453225442351235123130234413214313330121121101
|
||||
101102011001014411302320032155533351421345311554341111544153414344211242545240114004311012303003230
|
||||
101023122212322231421422241433315213542415532226334465642351151321144451152132311230002433230001110
|
||||
101102012000130221414322332331245251153242654525425363234533655232423135443124134230202313201000123
|
||||
113023100223214000232555442143243135556634652423636245645335623323351235221252344243002420033131123
|
||||
021023012400222133115232154155255455226363244263663662564362455342612241224452135301204334403311211
|
||||
011011120014313211333124154235235522553465256455435352362343343356452125515224121432404101240133203
|
||||
011310103034221123212123555245622666563625344356454344325522453265262433154414231333142413311331323
|
||||
303301320412010454251154421242542562366466364652264364325544554624545256254413534434331434344310311
|
||||
211332131030004243315521542363644424356453643345544752562524552255353324654134525543231434112230100
|
||||
002102403432244535421254566353326346446265345654366646566543552562536326635315453214125414141214102
|
||||
331140031313041444123423526426422252527375577546753455777737547626364645566461554234123523430311313
|
||||
330401323101512253253516526653653542734767336644345445665364743533364355534236521342413154132413122
|
||||
330411204212311445244535522655343573747374364345564574375763553465534526662642244443311121403103124
|
||||
023332003431144254543626226245566455744465356337347475347374637637653442626233624414255134423423042
|
||||
244210400021232153266652252325756653575474576355747475663555354556777566436342344532415443212134234
|
||||
243022342335541213565253544236755753776564447733743446775775654547533666422423326624134345443023202
|
||||
400214112533143341263455565263566576767643378645664845674353474533736575624522664521123334133420203
|
||||
314412035353435253634446462463763443376476847467648547566465453356757464475343435464134531133123324
|
||||
210413325433315134452365563547564744658868746684566644877466576346553654766362254362221413424430422
|
||||
440400434542543525543663633667763537556667668747746756785587458767563547637623326226661151144334010
|
||||
203031334152125642466635547657766584664687848767577545486757587488654373354446324524564152231113112
|
||||
241001452244343336664255646743677756848545865758665674685886656454447657464556245442364333553250131
|
||||
014023224515325454455574567445744885857785756585855854887668646555746475564455722536445351532451133
|
||||
240034522142434662453346666663547675448567854897757695674874464454475574464737776424553231541143102
|
||||
202432344512662423437374345345446848546655697769865799957684557848684543374647545532223321334341333
|
||||
123325111441445225523673536445447568774877677796777678697975965546774547536673437544656344512135444
|
||||
310254211535525232233446556788846647746897588857688579889788855477655648566666635426236522424112342
|
||||
034313254213653456477557533774786647669769587699976668986696667747555648883667447465462526444143342
|
||||
143141533334542466354344755484874754698685556789559989587957999587645467546553365742323424612353420
|
||||
023355513126235334753777564744657489776767789956675687857787669856547584455737646446352333233414322
|
||||
223531421366552557666573477756875578695968796778976887859959556598778688876655735777332545512434212
|
||||
324553233365452565557437476777687565788999986896686778796755558896856684686773556344634525262453452
|
||||
213242455253625376773454787557859959899988899999978889797885876979769647857487767764545335245255213
|
||||
153212131552226337374543645684765767796896876966989866686867979876788867784675754744525622655431425
|
||||
043231154325334367553646774578457959887979898666866967789799775569887978674668454463732263426513135
|
||||
335542344226645477333775676444769565755967887779666696689698896656597875884556557743462633443124152
|
||||
335323556552426765767775874764689686976988996666779796996969887796587577847457535454643262525413534
|
||||
031342356243536356663654658854697858887697788666879779897996867856867654685767655656766443625531132
|
||||
335345116666525747477647458845785958767699688899778878776776988777668657478884857465753336533142152
|
||||
431315146645532647447566887678656986686996889897797878877768979656986556466744563333546332255135135
|
||||
345455244545432335674458658587555587989897879999798888988976986779787768754855836367363664566413353
|
||||
512151454564534653477764765466595799679979878789789879998767887865797755765458674344355656253343334
|
||||
223351266325633575663774564489796879687898688978997788798999779796767956656764647364636656442223522
|
||||
453333263535357446366584455459557799968998879988898977978787696768578657875454473547567326532334111
|
||||
522431356454444356554374544846975859978878977879979897898976787967789578746656874774547443245541214
|
||||
524451243233255555453685476745875568898798878799987879899778979895889689545784464464664644546653534
|
||||
351343243662255667567757864679695778779676778997998897779866887675677768667848643753754363345434313
|
||||
422125253344236737334386654576687898997799677887987777887686867895579866465457665345774366464351334
|
||||
421312154235324535653777678786976887577869769887898799897698686878966689468464555357752255363554413
|
||||
134231353356532647544747466746997955968966989988799777786898667996595997676454734577542423644111423
|
||||
254152156456563434474788846574786769698798686897989989968667786695865858667776755455566654264132134
|
||||
325554124554345334573567875686789766777879789968978788797868997657598864755765764646452636426312235
|
||||
054421142246245654657458647846877765696688798786967788769769989568865887586878654537663362654432212
|
||||
313445116364256444775744655676857696698998799776867668888686999587568854476648764345346236246232241
|
||||
143114554233652245375455887678668996669686996999796887877777686757966588885786556444465552442533324
|
||||
251331534446564265464364486744686986675876988887767766688896987878765756544754746565355566534235144
|
||||
043312335432626344536643484678579666899596766779666899678676979556965588747766665377565544465543531
|
||||
242445211324566636637644588748444588767957766968968978786788586989657745475556775355542555362121442
|
||||
243253334442556446446767754567476657566957796656988796979699968699856846446535677455225423345132114
|
||||
431231245536522344674653635685865849787997986689665576586668667768645854645567336572252526524445114
|
||||
431352413545636624334373564776844687557987796967657766857786797968874766656443453336264564435235253
|
||||
320554134146445446354475753477858558775599755977987865757897668588588666485457344365453335234122310
|
||||
333244132156433233245637373688448784459857795676588655998585696485786865554473364636554335355224153
|
||||
113345451542245623453737457745456844757575897756758966757557585554868888643374344325656234154414322
|
||||
444045515145356432335647545655765786587886758778866688968984877775888576477747477332355221552413204
|
||||
111132223523345626324747765577376687656748476986565687576768448558884573773436752362454612221523223
|
||||
022004333435234546566255554533348546676766478456868467444674448586545655467537436553554433123421120
|
||||
333231125332152663266433667535537778555667876464765456758647764446877656465367323254523253352510413
|
||||
122420553331452433333353464676537646864677748867574756565588454444657764464332235454635225432522004
|
||||
120442052444321222226423365375645435468656658447866466574856466886677654746522644365264535531343440
|
||||
421404315233111265423463525657764565658784687768567656464684688763534555373553346542234345145442244
|
||||
331231242152133344456244633655545655745345664668565885467456447677744435752654334432232553354400240
|
||||
203040023155425242246555225235473556554656638646764676455766756555576576336522336454124215215404311
|
||||
020211430251454452662234222644467675755747776474545447746753537773655567623542436262213453434423110
|
||||
121222320253353333233652252225333343646436546477634345533376676557363636362664225322253234514301234
|
||||
131331122021145511555626563643364773337345554777664437674344775376757362452454652245212143131222333
|
||||
333033033132243135213222343542265476344656453763774355443644566737723253264252451243142121312244244
|
||||
002204430244435144434515354453332632665637375363445456667774576662453443646454532431524140202312242
|
||||
121314024424022223215424644426642356264655357667436346735353466356245254264535315425323522230030301
|
||||
021012030013043135124451434556465446663353754754774574457663344656553456246613524313152023413220330
|
||||
323211122442404125421353336334324324563564625653556556652432462453235325362525324531133444231304313
|
||||
221212242244240214314234323556334553353656452662622464552256465443444565421332134313540102100220131
|
||||
003121311143322334241133533143446663652225433332652353542523664466644655215235421122322101243201202
|
||||
302132313044423014553344334444135543546462343625633335635554425246463354552555544450021401441212013
|
||||
211320002042341321404351332421424422345645623225243263532425463422453534224512413420003024103010003
|
||||
121321233203044310220544225434555523322652465244626362265436622244421244514121221412000233313302001
|
||||
033330113222134212123014455534453323452146635634333522662322621122442141151325121244124021100331010
|
||||
003211203200004004334013134312421412135211541122652523655533352215155345414442033214440410020130131
|
||||
000310132331000133341101412343222324131145425545545422415232421245514432554132410203120223330322031
|
||||
010222121001201110014203011212115523421525414334222144411533424243442552424243301203331330320011211
|
||||
202210333132013102411304342331452231412212555243242135532222244343234442033031110220213320300213112
|
||||
021110333231201113044040042034211335553321154444412432243122252145522223420412102042311030021122200
|
||||
212222233011232310420321434331332422434543133323345512355241515513414041433311311240302022331021120
|
||||
+2000
File diff suppressed because it is too large.
Load diff
+12
-7
@@ -1,4 +1,5 @@
|
||||
let part1 lines =
|
||||
let part1 () =
|
||||
let lines = Utils.lines_of_input 1 in
|
||||
let rec most_calories most current lines =
|
||||
match lines with
|
||||
| [] -> most
|
||||
@@ -10,7 +11,8 @@ let part1 lines =
|
||||
most_calories 0 0 lines
|
||||
;;
|
||||
|
||||
let part2 lines =
|
||||
let part2 () =
|
||||
let lines = Utils.lines_of_input 1 in
|
||||
let accum_calories elves calories =
|
||||
match elves, calories with
|
||||
| elves, "" -> 0 :: elves
|
||||
@@ -23,9 +25,12 @@ let part2 lines =
|
||||
| _ -> failwith "wtf"
|
||||
;;
|
||||
|
||||
let print () =
|
||||
let lines = Utils.lines_of_input 1 in
|
||||
Printf.(
|
||||
printf "Day 1.1: %d\n" @@ part1 lines;
|
||||
printf "Day 1.2: %d\n" @@ part2 lines)
|
||||
let%expect_test "Day 1.1" =
|
||||
Printf.printf "%d" @@ part1 ();
|
||||
[%expect {| 75622 |}]
|
||||
;;
|
||||
|
||||
let%expect_test "Day 1.2" =
|
||||
Printf.printf "%d" @@ part2 ();
|
||||
[%expect {| 213159 |}]
|
||||
;;
|
||||
@@ -0,0 +1,57 @@
|
||||
open Containers
|
||||
|
||||
let parse_lines () =
|
||||
let lines = Utils.lines_of_input 10 in
|
||||
let _, state_history =
|
||||
List.fold_flat_map
|
||||
(fun (cycle, reg) instruction ->
|
||||
match String.split ~by:" " instruction with
|
||||
| [ "noop" ] -> (cycle + 1, reg), [ cycle + 1, reg ]
|
||||
| [ "addx"; num ] ->
|
||||
let num = int_of_string num in
|
||||
(cycle + 2, reg + num), [ cycle + 1, reg; cycle + 2, reg ]
|
||||
| _ -> failwith @@ Printf.sprintf "failed to parse '%s'" instruction)
|
||||
(0, 1)
|
||||
lines
|
||||
in
|
||||
state_history
|
||||
;;
|
||||
|
||||
let part1 () =
|
||||
let history = parse_lines () in
|
||||
history
|
||||
|> List.find_all (fun (cycle, _) ->
|
||||
match cycle with
|
||||
| 20 | 60 | 100 | 140 | 180 | 220 -> true
|
||||
| _ -> false)
|
||||
|> List.fold_left (fun acc (cycle, reg) -> acc + (cycle * reg)) 0
|
||||
;;
|
||||
|
||||
let part2 () =
|
||||
let screen_width = 40 in
|
||||
let history = parse_lines () in
|
||||
history
|
||||
|> List.map (fun (cycle, reg) ->
|
||||
let column = Int.(cycle mod screen_width) in
|
||||
let sprite_dist = abs @@ (reg + 1 - column) in
|
||||
if sprite_dist <= 1 then '#' else ' ')
|
||||
|> List.chunks 40
|
||||
|> List.map String.of_list
|
||||
|> List.iter Fun.(print_string %> print_newline)
|
||||
;;
|
||||
|
||||
let%expect_test "Day 10.1" =
|
||||
Printf.printf "%d" @@ part1 ();
|
||||
[%expect {| 14760 |}]
|
||||
;;
|
||||
|
||||
let%expect_test "Day 10.2" =
|
||||
part2 ();
|
||||
[%expect {|
|
||||
#### #### ## #### ### # # ### #####
|
||||
# # # # # # # # # # # # #
|
||||
### ### # ### # # # # # # ### #
|
||||
# # # ## # ### # # ### #
|
||||
# # # # # # # # # # # #
|
||||
#### # ### #### # # ## # # #### |}]
|
||||
;;
|
||||
@@ -0,0 +1,87 @@
|
||||
open Containers
|
||||
|
||||
type monkey =
|
||||
{ mutable items : int list
|
||||
; mutable inspected : int
|
||||
; operation : int -> int
|
||||
; test : int -> int
|
||||
; test_num : int
|
||||
}
|
||||
|
||||
let parse_monkeys () =
|
||||
let lines = Utils.lines_of_input 11 in
|
||||
let rec parse lines monkeys =
|
||||
let lines = List.drop_while (String.equal "") lines in
|
||||
let lines, rest = List.take_drop_while Fun.(String.equal "" %> not) lines in
|
||||
let lines = List.map Fun.(String.trim %> String.split ~by:" ") lines in
|
||||
match lines with
|
||||
| [ [ "Monkey"; _ ]
|
||||
; "Starting" :: "items:" :: items
|
||||
; [ "Operation:"; "new"; "="; "old"; op; op_num ]
|
||||
; [ "Test:"; "divisible"; "by"; test_num ]
|
||||
; [ "If"; "true:"; "throw"; "to"; "monkey"; if_true ]
|
||||
; [ "If"; "false:"; "throw"; "to"; "monkey"; if_false ]
|
||||
] ->
|
||||
let items =
|
||||
List.map Fun.(String.replace ~which:`All ~sub:"," ~by:"" %> int_of_string) items
|
||||
in
|
||||
let op = if String.equal op "+" then ( + ) else ( * ) in
|
||||
let operation =
|
||||
match op_num with
|
||||
| "old" -> fun old -> op old old
|
||||
| num -> fun old -> op old @@ int_of_string num
|
||||
in
|
||||
let test_num = int_of_string test_num in
|
||||
let if_true = int_of_string if_true in
|
||||
let if_false = int_of_string if_false in
|
||||
let test score = if Int.(score mod test_num) = 0 then if_true else if_false in
|
||||
let monkey = { items; operation; test; test_num; inspected = 0 } in
|
||||
parse rest (monkey :: monkeys)
|
||||
| _ -> monkeys
|
||||
in
|
||||
Array.of_list @@ List.rev @@ parse lines []
|
||||
;;
|
||||
|
||||
let throw item monkey = monkey.items <- List.append [ item ] monkey.items
|
||||
|
||||
let round monkies ~manageable =
|
||||
let divisor = Array.fold_left (fun acc monkey -> acc * monkey.test_num) 1 monkies in
|
||||
let destress score = if manageable then score / 3 else Int.(score mod divisor) in
|
||||
monkies
|
||||
|> Array.iter (fun monkey ->
|
||||
monkey.items
|
||||
|> List.iter (fun item ->
|
||||
let item = destress @@ monkey.operation item in
|
||||
let throw_to = monkey.test item in
|
||||
throw item monkies.(throw_to));
|
||||
monkey.inspected <- monkey.inspected + List.length monkey.items;
|
||||
monkey.items <- [])
|
||||
;;
|
||||
|
||||
let solve rounds ~manageable =
|
||||
let monkies = parse_monkeys () in
|
||||
for _ = 1 to rounds do
|
||||
round monkies ~manageable
|
||||
done;
|
||||
monkies
|
||||
|> Array.to_list
|
||||
|> List.map (fun monkey -> monkey.inspected)
|
||||
|> List.sort Int.compare
|
||||
|> List.rev
|
||||
|> List.take 2
|
||||
|> List.reduce ( * )
|
||||
|> Option.get_exn_or "aoc goofed up the input"
|
||||
;;
|
||||
|
||||
let part1 () = solve 20 ~manageable:true
|
||||
let part2 () = solve 10_000 ~manageable:false
|
||||
|
||||
let%expect_test "Day 11.1" =
|
||||
Printf.printf "%d" @@ part1 ();
|
||||
[%expect {| 56350 |}]
|
||||
;;
|
||||
|
||||
let%expect_test "Day 11.2" =
|
||||
Printf.printf "%d" @@ part2 ();
|
||||
[%expect {| 13954061248 |}]
|
||||
;;
|
||||
+100
@@ -0,0 +1,100 @@
|
||||
open Containers
|
||||
|
||||
type node =
|
||||
{ char : char
|
||||
; mutable visited : bool
|
||||
; mutable distance : int
|
||||
}
|
||||
[@@deriving show]
|
||||
|
||||
let parse_grid start_anywhere =
|
||||
let start_nodes = ref [] in
|
||||
let end_node = ref @@ Vec2.origin in
|
||||
let grid =
|
||||
Utils.lines_of_input 12
|
||||
|> Grid.of_lines (fun char -> { char; visited = false; distance = Int.max_int })
|
||||
in
|
||||
Grid.iter grid (fun pos ->
|
||||
let node = Grid.at_e grid pos in
|
||||
match node.char with
|
||||
| 'E' -> end_node := pos
|
||||
| 'S' -> start_nodes := pos :: !start_nodes
|
||||
| 'a' when start_anywhere -> start_nodes := pos :: !start_nodes
|
||||
| _ -> ());
|
||||
grid, !end_node, !start_nodes
|
||||
;;
|
||||
|
||||
let reachable f t =
|
||||
let height c =
|
||||
match c with
|
||||
| 'S' -> 'a'
|
||||
| 'E' -> 'z'
|
||||
| c -> c
|
||||
in
|
||||
Char.compare (height f) (height t) >= -1
|
||||
;;
|
||||
|
||||
let get_neighbors grid node_pos =
|
||||
let node = Grid.at_e grid node_pos in
|
||||
Vec2.directions
|
||||
|> Iter.of_list
|
||||
|> Iter.filter_map (fun dir ->
|
||||
let neighbor_pos = Vec2.(node_pos + dir) in
|
||||
match Grid.at grid neighbor_pos with
|
||||
| Some neighbor when reachable node.char neighbor.char -> Some neighbor_pos
|
||||
| _ -> None)
|
||||
;;
|
||||
|
||||
let path_distance grid goal start_nodes =
|
||||
let set_info position (dist, visited) =
|
||||
let node = Grid.at_e grid position in
|
||||
node.distance <- dist;
|
||||
node.visited <- visited
|
||||
in
|
||||
let get_info position =
|
||||
let { char = _; distance; visited } = Grid.at_e grid position in
|
||||
distance, visited
|
||||
in
|
||||
Utils.djikstra
|
||||
~set_info
|
||||
~get_info
|
||||
~eq:Vec2.( = )
|
||||
~get_weight:(fun _ _ -> 1)
|
||||
~get_neighbors:(get_neighbors grid)
|
||||
~goal
|
||||
~start_nodes
|
||||
|> Option.get_exn_or "couldn't find"
|
||||
;;
|
||||
|
||||
let%expect_test "Day 12.1" =
|
||||
let grid, goal, start_nodes = parse_grid false in
|
||||
Printf.printf "%i" @@ path_distance grid (Some goal) start_nodes;
|
||||
[%expect {| 497 |}]
|
||||
;;
|
||||
|
||||
let%expect_test "Day 12.2" =
|
||||
let grid, goal, start_nodes = parse_grid true in
|
||||
Printf.printf "%i" @@ path_distance grid (Some goal) start_nodes;
|
||||
[%expect {| 492 |}]
|
||||
;;
|
||||
|
||||
let%expect_test "Day 12 test" =
|
||||
let grid, goal, start_nodes = parse_grid false in
|
||||
let _ = path_distance grid None start_nodes in
|
||||
let print_dist_to pos =
|
||||
let node = Option.get_exn_or "invalid pos!" grid.Grid.%(pos) in
|
||||
Printf.printf "%s %c %i\n" (Vec2.show pos) node.char node.distance
|
||||
in
|
||||
print_dist_to goal;
|
||||
print_dist_to Vec2.(goal + right);
|
||||
print_dist_to Vec2.(goal + down);
|
||||
print_dist_to Vec2.(of_tuple (121, 23));
|
||||
print_dist_to Vec2.(origin + right);
|
||||
[%expect
|
||||
{|
|
||||
(149, 20) E 497
|
||||
(150, 20) z 498
|
||||
(149, 21) y 496
|
||||
(121, 23) a 138
|
||||
(1, 0) b 21 |}]
|
||||
;;
|
||||
@@ -0,0 +1,55 @@
|
||||
open Containers
|
||||
|
||||
module Packet = struct
|
||||
type t =
|
||||
| I of int
|
||||
| L of t list
|
||||
[@@deriving show { with_path = false }]
|
||||
|
||||
let of_str line =
|
||||
let open Utils.Parse in
|
||||
let int = int >>= fun i -> return @@ I i in
|
||||
let packet =
|
||||
fix (fun packet ->
|
||||
let lb, delimited, rb = char '[', sep_by (char ','), char ']' in
|
||||
let list = lb *> delimited packet <* rb >>= fun p -> return @@ L p <?> "list" in
|
||||
choice [ int; list ])
|
||||
<?> "packet"
|
||||
in
|
||||
Result.get_or_failwith @@ parse_string ~consume:All packet line
|
||||
;;
|
||||
|
||||
let rec compare a b =
|
||||
match a, b with
|
||||
| I a, I b -> Int.compare a b
|
||||
| L a, L b -> List.compare compare a b
|
||||
| (I _ as a), (L _ as b) -> compare (L [ a ]) b
|
||||
| (L _ as a), (I _ as b) -> compare a (L [ b ])
|
||||
;;
|
||||
end
|
||||
|
||||
let%expect_test "Day 13.1" =
|
||||
Utils.lines_of_input 13
|
||||
|> List.filter Fun.(not % String.is_empty)
|
||||
|> List.map Packet.of_str
|
||||
|> List.chunks 2
|
||||
|> List.mapi (fun i packets ->
|
||||
match packets with
|
||||
| [ a; b ] when Packet.compare a b < 0 -> i + 1
|
||||
| _ -> 0)
|
||||
|> List.reduce_exn ( + )
|
||||
|> print_int;
|
||||
[%expect {| 6272 |}]
|
||||
;;
|
||||
|
||||
let%expect_test "Day 13.2" =
|
||||
Utils.lines_of_input 13
|
||||
|> List.filter Fun.(not % String.is_empty)
|
||||
|> List.map (fun line -> false, Packet.of_str line)
|
||||
|> List.append [ true, Packet.of_str "[[2]]"; true, Packet.of_str "[[6]]" ]
|
||||
|> List.sort (fun (_, a) (_, b) -> Packet.compare a b)
|
||||
|> List.mapi (fun i (is_divider, _) -> if is_divider then i + 1 else 1)
|
||||
|> List.reduce_exn ( * )
|
||||
|> print_int;
|
||||
[%expect {| 22288 |}]
|
||||
;;
|
||||
+190
@@ -0,0 +1,190 @@
|
||||
open Containers
|
||||
|
||||
type tile =
|
||||
| Empty
|
||||
| Rock
|
||||
| Sand
|
||||
| Start
|
||||
| Path_D
|
||||
| Path_L
|
||||
| Path_R
|
||||
|
||||
let char_of_tile _ = function
|
||||
| Empty -> '-'
|
||||
| Rock -> '#'
|
||||
| Sand -> 'o'
|
||||
| Start -> 'v'
|
||||
| Path_D -> '|'
|
||||
| Path_L -> '/'
|
||||
| Path_R -> '\\'
|
||||
;;
|
||||
|
||||
let is_sand = function
|
||||
| Sand -> true
|
||||
| _ -> false
|
||||
;;
|
||||
|
||||
let parse_line line =
|
||||
let open Utils.Parse in
|
||||
let vec = Vec2.of_tuple <$> both int (char ',' *> int) in
|
||||
let vec_list = sep_by (string " -> ") vec in
|
||||
Result.get_or_failwith @@ parse_string ~consume:All vec_list line
|
||||
;;
|
||||
|
||||
let draw_rocks grid points =
|
||||
let open Grid in
|
||||
let _ =
|
||||
points
|
||||
|> List.reduce (fun a b ->
|
||||
iter_region grid a b (fun pos -> grid.%(pos) <- Rock);
|
||||
b)
|
||||
in
|
||||
()
|
||||
;;
|
||||
|
||||
let parse_grid lines start =
|
||||
let points = Iter.map Fun.(parse_line %> Iter.of_list) lines in
|
||||
let Vec2.{ x = lx; y = ly }, Vec2.{ x = hx; y = hy } =
|
||||
points |> Iter.flatten |> Iter.cons start |> Vec2.find_bounds 0
|
||||
in
|
||||
let pad_floor = 1 in
|
||||
let pad_x = 2 in
|
||||
let height = 1 + hy - ly + pad_floor in
|
||||
let lx = min lx (start.x - height) in
|
||||
let hx = max hx (start.x + height) in
|
||||
let width = 1 + hx - lx + (pad_x * 2) in
|
||||
let extra = Vec2.of_tuple (lx - pad_x, ly) in
|
||||
let start = Vec2.(start - extra) in
|
||||
let open Grid in
|
||||
let grid = init ~width ~height (fun _ -> Empty) in
|
||||
grid.%(start) <- Start;
|
||||
Iter.iter
|
||||
Fun.(Iter.map (fun point -> Vec2.(point - extra)) %> Iter.to_list %> draw_rocks grid)
|
||||
points;
|
||||
grid, start
|
||||
;;
|
||||
|
||||
type is_done =
|
||||
| Continue
|
||||
| Done
|
||||
|
||||
let rec drop_sand_abyss draw_path grid start =
|
||||
let d = Vec2.(start + down) in
|
||||
let l = Vec2.(d + left) in
|
||||
let r = Vec2.(d + right) in
|
||||
let open Grid in
|
||||
match grid.%(l), grid.%(d), grid.%(r) with
|
||||
| _, None, _ -> Done
|
||||
| _, Some Empty, _ ->
|
||||
if draw_path then grid.%(d) <- Path_D;
|
||||
drop_sand_abyss draw_path grid d
|
||||
| Some Empty, _, _ ->
|
||||
if draw_path then grid.%(l) <- Path_L;
|
||||
drop_sand_abyss draw_path grid l
|
||||
| _, _, Some Empty ->
|
||||
if draw_path then grid.%(r) <- Path_R;
|
||||
drop_sand_abyss draw_path grid r
|
||||
| _, _, _ ->
|
||||
(match grid.%(start) with
|
||||
| Some Empty ->
|
||||
grid.%(start) <- Sand;
|
||||
Continue
|
||||
| _ -> failwith "oh no!")
|
||||
;;
|
||||
|
||||
let rec drop_sand_floor grid start =
|
||||
let d = Vec2.(start + down) in
|
||||
let l = Vec2.(d + left) in
|
||||
let r = Vec2.(d + right) in
|
||||
let open Grid in
|
||||
match grid.%(l), grid.%(d), grid.%(r) with
|
||||
| _, Some Empty, _ -> drop_sand_floor grid d
|
||||
| Some Empty, _, _ -> drop_sand_floor grid l
|
||||
| _, _, Some Empty -> drop_sand_floor grid r
|
||||
| _, _, _ ->
|
||||
(match grid.%(start) with
|
||||
| Some Empty ->
|
||||
grid.%(start) <- Sand;
|
||||
Continue
|
||||
| Some Start ->
|
||||
grid.%(start) <- Sand;
|
||||
Done
|
||||
| _ -> failwith "oh no!")
|
||||
;;
|
||||
|
||||
let rec drop_all_sand drop grid start =
|
||||
match drop grid start with
|
||||
| Continue -> drop_all_sand drop grid start
|
||||
| Done -> ()
|
||||
;;
|
||||
|
||||
let%expect_test "Day 14.1 example" =
|
||||
let lines =
|
||||
Iter.of_list [ "498,4 -> 498,6 -> 496,6"; "503,4 -> 502,4 -> 502,9 -> 494,9" ]
|
||||
in
|
||||
let start = Vec2.of_tuple (500, 0) in
|
||||
let grid, start = parse_grid lines start in
|
||||
drop_all_sand (drop_sand_abyss false) grid start;
|
||||
let _ = drop_sand_abyss true grid start in
|
||||
let count = Grid.count grid is_sand in
|
||||
Printf.printf "%i grains\n%s" count @@ Grid.draw grid char_of_tile;
|
||||
[%expect
|
||||
{|
|
||||
24 grains
|
||||
-------------v-------------
|
||||
-------------|-------------
|
||||
------------/o-------------
|
||||
-----------/ooo------------
|
||||
----------/#ooo##----------
|
||||
---------/o#ooo#-----------
|
||||
--------/###ooo#-----------
|
||||
--------|--oooo#-----------
|
||||
-------/o-ooooo#-----------
|
||||
------/#########-----------
|
||||
------|-------------------- |}]
|
||||
;;
|
||||
|
||||
let%expect_test "Day 14.2 example" =
|
||||
let lines =
|
||||
Iter.of_list [ "498,4 -> 498,6 -> 496,6"; "503,4 -> 502,4 -> 502,9 -> 494,9" ]
|
||||
in
|
||||
let start = Vec2.of_tuple (500, 0) in
|
||||
let grid, start = parse_grid lines start in
|
||||
drop_all_sand drop_sand_floor grid start;
|
||||
let count = Grid.count grid is_sand in
|
||||
Printf.printf "%i grains\n%s" count @@ Grid.draw grid char_of_tile;
|
||||
[%expect
|
||||
{|
|
||||
93 grains
|
||||
-------------o-------------
|
||||
------------ooo------------
|
||||
-----------ooooo-----------
|
||||
----------ooooooo----------
|
||||
---------oo#ooo##o---------
|
||||
--------ooo#ooo#ooo--------
|
||||
-------oo###ooo#oooo-------
|
||||
------oooo-oooo#ooooo------
|
||||
-----oooooooooo#oooooo-----
|
||||
----ooo#########ooooooo----
|
||||
---ooooo-------ooooooooo--- |}]
|
||||
;;
|
||||
|
||||
let%expect_test "Day 14.1" =
|
||||
let lines = Iter.of_list @@ Utils.lines_of_input 14 in
|
||||
let start = Vec2.of_tuple (500, 0) in
|
||||
let grid, start = parse_grid lines start in
|
||||
drop_all_sand (drop_sand_abyss false) grid start;
|
||||
let count = Grid.count grid is_sand in
|
||||
Printf.printf "%i" count;
|
||||
[%expect {| 683 |}]
|
||||
;;
|
||||
|
||||
let%expect_test "Day 14.2" =
|
||||
let lines = Iter.of_list @@ Utils.lines_of_input 14 in
|
||||
let start = Vec2.of_tuple (500, 0) in
|
||||
let grid, start = parse_grid lines start in
|
||||
drop_all_sand drop_sand_floor grid start;
|
||||
let count = Grid.count grid is_sand in
|
||||
Printf.printf "%i" count;
|
||||
[%expect {| 28821 |}]
|
||||
;;
|
||||
+167
@@ -0,0 +1,167 @@
|
||||
open Containers
|
||||
|
||||
let example_lines =
|
||||
[ "Sensor at x=2, y=18: closest beacon is at x=-2, y=15"
|
||||
; "Sensor at x=9, y=16: closest beacon is at x=10, y=16"
|
||||
; "Sensor at x=13, y=2: closest beacon is at x=15, y=3"
|
||||
; "Sensor at x=12, y=14: closest beacon is at x=10, y=16"
|
||||
; "Sensor at x=10, y=20: closest beacon is at x=10, y=16"
|
||||
; "Sensor at x=14, y=17: closest beacon is at x=10, y=16"
|
||||
; "Sensor at x=8, y=7: closest beacon is at x=2, y=10"
|
||||
; "Sensor at x=2, y=0: closest beacon is at x=2, y=10"
|
||||
; "Sensor at x=0, y=11: closest beacon is at x=2, y=10"
|
||||
; "Sensor at x=20, y=14: closest beacon is at x=25, y=17"
|
||||
; "Sensor at x=17, y=20: closest beacon is at x=21, y=22"
|
||||
; "Sensor at x=16, y=7: closest beacon is at x=15, y=3"
|
||||
; "Sensor at x=14, y=3: closest beacon is at x=15, y=3"
|
||||
; "Sensor at x=20, y=1: closest beacon is at x=15, y=3"
|
||||
]
|
||||
;;
|
||||
|
||||
type sensor =
|
||||
{ pos : Vec2.t
|
||||
; beacon : Vec2.t
|
||||
; dist : int
|
||||
}
|
||||
[@@deriving show { with_path = false }]
|
||||
|
||||
let taxicab_dist a b =
|
||||
let x, y = Vec2.(abs (a - b) |> to_tuple) in
|
||||
x + y
|
||||
;;
|
||||
|
||||
let parse_sensor line =
|
||||
match List.map int_of_string Re.(matches (Pcre.regexp {|-?\d+|}) line) with
|
||||
| [ sx; sy; bx; by ] ->
|
||||
let pos, beacon = Vec2.(of_tuple (sx, sy), of_tuple (bx, by)) in
|
||||
{ pos; beacon; dist = taxicab_dist pos beacon }
|
||||
| _ -> failwith "parse error"
|
||||
;;
|
||||
|
||||
let could_be_beacon sensors ignore_known pos =
|
||||
sensors
|
||||
|> Iter.fold_while
|
||||
(fun _ s ->
|
||||
let d = taxicab_dist pos s.pos in
|
||||
if d <= s.dist && (ignore_known || not Vec2.(pos = s.beacon))
|
||||
then false, `Stop
|
||||
else true, `Continue)
|
||||
true
|
||||
;;
|
||||
|
||||
(*{[
|
||||
equation for line
|
||||
y = m*x + c
|
||||
|
||||
beacon range boundaries are made up of four lines:
|
||||
slope 1 passing thru bx + dist + 1, by
|
||||
slope 1 passing thru bx - dist - 1, by
|
||||
slope -1 passing thru bx + dist + 1, by
|
||||
slope -1 passing thru bx - dist - 1, by
|
||||
|
||||
to find the constant given a slope, plug a point into
|
||||
c = y - m*x
|
||||
|
||||
constants are stored separately for boundaries with positive and negative
|
||||
slope so that they can be handled separately
|
||||
p1 = y - bx - dist - 1
|
||||
p2 = y - bx + dist + 1
|
||||
n1 = y + bx + dist + 1
|
||||
n2 = y + bx - dist - 1
|
||||
]}*)
|
||||
let get_consts sensors extra =
|
||||
sensors
|
||||
|> Iter.fold
|
||||
(fun (p_slope_consts, n_slope_consts) { pos; beacon = _; dist } ->
|
||||
let p1 = pos.y - pos.x + dist + extra in
|
||||
let p2 = pos.y - pos.x - dist - extra in
|
||||
let n1 = pos.y + pos.x + dist + extra in
|
||||
let n2 = pos.y + pos.x - dist - extra in
|
||||
Iter.(
|
||||
( append p_slope_consts (of_list [ p1; p2 ])
|
||||
, append n_slope_consts (of_list [ n1; n2 ]) )))
|
||||
(Iter.empty, Iter.empty)
|
||||
;;
|
||||
|
||||
let solve_part_1 lines scan_y =
|
||||
let sensors = lines |> Iter.of_list |> Iter.map parse_sensor in
|
||||
let p_slope_consts, n_slope_consts = get_consts sensors 0 in
|
||||
(*{[
|
||||
for a known y to intersect with a positive slope boundary:
|
||||
y = x + p
|
||||
x = y - p
|
||||
|
||||
and for a negative slope boundary:
|
||||
y = -x + n
|
||||
x = n - y
|
||||
]}*)
|
||||
let intersection_xs =
|
||||
Iter.append
|
||||
(Iter.map (fun p -> scan_y - p) p_slope_consts)
|
||||
(Iter.map (fun n -> n - scan_y) n_slope_consts)
|
||||
|> Iter.sort_uniq ~cmp:Int.compare
|
||||
in
|
||||
let check x = could_be_beacon sensors false @@ Vec2.of_tuple (x, scan_y) in
|
||||
let rec count_not_beacons count xs =
|
||||
match xs with
|
||||
| x :: next :: rest ->
|
||||
(* if there is a region [x+1, next), the value of check
|
||||
is the same for each point within it. intersection points
|
||||
must be checked separately from the regions between them *)
|
||||
let intersection = if check x then 0 else 1 in
|
||||
let region = if x + 1 < next && check (x + 1) then 0 else next - (x + 1) in
|
||||
count_not_beacons (count + intersection + region) (next :: rest)
|
||||
| _ -> count
|
||||
in
|
||||
count_not_beacons 0 @@ Iter.to_list intersection_xs
|
||||
;;
|
||||
|
||||
let%expect_test "Day 15.1 example" =
|
||||
Printf.printf "%i\n" @@ solve_part_1 example_lines 10;
|
||||
[%expect {| 26 |}]
|
||||
;;
|
||||
|
||||
let%expect_test "Day 15.1" =
|
||||
Printf.printf "%i\n" @@ solve_part_1 (Utils.lines_of_input 15) 2000000;
|
||||
[%expect {| 5525990 |}]
|
||||
;;
|
||||
|
||||
let solve_part_2 lines range mult =
|
||||
let sensors = lines |> Iter.of_list |> Iter.map parse_sensor in
|
||||
let in_bounds = Vec2.(in_bounds origin @@ of_tuple (range, range)) in
|
||||
let p_slope_consts, n_slope_consts = get_consts sensors 1 in
|
||||
(*{[
|
||||
boundaries only itersect if they have opposite slope.
|
||||
to find the intersection, set equations to be equal and solve.
|
||||
y = x + p
|
||||
y = -x + n // set equal
|
||||
x + p = -x + n // add x and subtract p
|
||||
2x = n - p // divide 2
|
||||
-> x = (n - p)/2 // substitute x into original
|
||||
y = (n - p)/2 + p // multiply 2
|
||||
2y = n + p // div 2
|
||||
-> y = (n + p)/2
|
||||
]}*)
|
||||
let point =
|
||||
Iter.product p_slope_consts n_slope_consts
|
||||
|> Iter.fold_while
|
||||
(fun _ (p, n) ->
|
||||
let i = Vec2.of_tuple ((n - p) / 2, (n + p) / 2) in
|
||||
if in_bounds i && could_be_beacon sensors true i
|
||||
then Some i, `Stop
|
||||
else None, `Continue)
|
||||
None
|
||||
|> Option.get_exn_or "no distress beacon found :("
|
||||
in
|
||||
(mult * point.x) + point.y
|
||||
;;
|
||||
|
||||
let%expect_test "Day 15.2 example" =
|
||||
Printf.printf "%i\n" @@ solve_part_2 example_lines 20 4000000;
|
||||
[%expect {| 56000011 |}]
|
||||
;;
|
||||
|
||||
let%expect_test "Day 15.2" =
|
||||
Printf.printf "%i\n" @@ solve_part_2 (Utils.lines_of_input 15) 4000000 4000000;
|
||||
[%expect {| 11756174628223 |}]
|
||||
;;
|
||||
+141
@@ -0,0 +1,141 @@
|
||||
open Containers
|
||||
|
||||
let example_lines =
|
||||
String.lines
|
||||
{|Valve AA has flow rate=0; tunnels lead to valves DD, II, BB
|
||||
Valve BB has flow rate=13; tunnels lead to valves CC, AA
|
||||
Valve CC has flow rate=2; tunnels lead to valves DD, BB
|
||||
Valve DD has flow rate=20; tunnels lead to valves CC, AA, EE
|
||||
Valve EE has flow rate=3; tunnels lead to valves FF, DD
|
||||
Valve FF has flow rate=0; tunnels lead to valves EE, GG
|
||||
Valve GG has flow rate=0; tunnels lead to valves FF, HH
|
||||
Valve HH has flow rate=22; tunnel leads to valve GG
|
||||
Valve II has flow rate=0; tunnels lead to valves AA, JJ
|
||||
Valve JJ has flow rate=21; tunnel leads to valve II
|
||||
|}
|
||||
;;
|
||||
|
||||
type valve =
|
||||
{ flow : int
|
||||
; mask : int
|
||||
}
|
||||
|
||||
let parse_valves lines =
|
||||
let rooms = Hashtbl.create 100 in
|
||||
lines
|
||||
|> List.iter (fun line ->
|
||||
let int_matches = List.map int_of_string Re.(matches (Pcre.regexp {|\d+|}) line) in
|
||||
let valve_matches = Re.(matches (Pcre.regexp {|[A-Z]{2}|}) line) in
|
||||
match int_matches, valve_matches with
|
||||
| [ flow ], name :: tunnels -> Hashtbl.add rooms name (flow, tunnels)
|
||||
| _ -> failwith "parse error");
|
||||
let valves =
|
||||
Hashtbl.to_list rooms
|
||||
|> List.filter (fun (_, (flow, _)) -> flow > 0)
|
||||
|> List.mapi (fun i (name, (flow, _)) ->
|
||||
let mask = Int.(1 lsl i) in
|
||||
name, { flow; mask })
|
||||
in
|
||||
let distances = Hashtbl.create 100 in
|
||||
valves
|
||||
|> List.map (fun (valve, _) -> valve)
|
||||
|> List.cons "AA"
|
||||
|> List.iter (fun from ->
|
||||
let dist_of =
|
||||
Fun.(
|
||||
Utils.djikstra_hash
|
||||
~get_weight:(fun _ _ -> 1)
|
||||
~get_neighbors:(fun room ->
|
||||
match Hashtbl.get rooms room with
|
||||
| Some (_, tunnels) -> Iter.of_list tunnels
|
||||
| None -> failwith "sad")
|
||||
~start_nodes:[ from ]
|
||||
()
|
||||
%> Option.get_exn_or "big sad")
|
||||
in
|
||||
valves
|
||||
|> List.remove_assoc ~eq:String.equal from
|
||||
|> List.iter (fun (valve, _) ->
|
||||
Hashtbl.replace distances (from, valve) (dist_of valve)));
|
||||
let get_dist f t =
|
||||
match Hashtbl.get distances (f, t) with
|
||||
| Some dist -> dist
|
||||
| None -> failwith @@ Printf.sprintf "cant find distance %s -> %s" f t
|
||||
in
|
||||
valves, get_dist
|
||||
;;
|
||||
|
||||
let traverse
|
||||
get_dist
|
||||
(valves : (string * valve) list)
|
||||
?(current = "AA")
|
||||
?(released = 0)
|
||||
?(opened = 0)
|
||||
time
|
||||
=
|
||||
let states = Hashtbl.create 1000 in
|
||||
let rec traverse' current time released opened =
|
||||
Hashtbl.update
|
||||
states
|
||||
~f:(fun _ current ->
|
||||
match current with
|
||||
| Some r when r >= released -> Some r
|
||||
| _ -> Some released)
|
||||
~k:opened;
|
||||
valves
|
||||
|> List.iter (fun (name, { flow; mask }) ->
|
||||
if Int.(mask land opened) = 0
|
||||
then (
|
||||
let dist = get_dist current name in
|
||||
let time' = time - (dist + 1) in
|
||||
if time' > 0
|
||||
then (
|
||||
let released' = released + (flow * time') in
|
||||
let opened' = Int.(mask lor opened) in
|
||||
traverse' name time' released' opened')))
|
||||
in
|
||||
traverse' current time released opened;
|
||||
states
|
||||
|> Iter.of_hashtbl
|
||||
|> Iter.sort ~cmp:(fun (_, a_score) (_, b_score) -> b_score - a_score)
|
||||
;;
|
||||
|
||||
let solve_part_1 lines =
|
||||
let valves, get_dist = parse_valves lines in
|
||||
let states = traverse get_dist valves 30 in
|
||||
match states |> Iter.take 1 |> Iter.to_list with
|
||||
| [ (_, score) ] -> score
|
||||
| _ -> failwith "no traversals ?"
|
||||
;;
|
||||
|
||||
let%expect_test "Day 16.1 example" =
|
||||
Printf.printf "%i\n" @@ solve_part_1 example_lines;
|
||||
[%expect {| 1651 |}]
|
||||
;;
|
||||
|
||||
let%expect_test "Day 16.1" =
|
||||
Printf.printf "%i\n" @@ solve_part_1 @@ Utils.lines_of_input 16;
|
||||
[%expect {| 2265 |}]
|
||||
;;
|
||||
|
||||
let solve_part_2 lines =
|
||||
let valves, get_dist = parse_valves @@ lines in
|
||||
let states = traverse get_dist valves 26 in
|
||||
states
|
||||
|> Iter.filter_map (fun (a_set, a_score) ->
|
||||
match Iter.find_pred (fun (b_set, _) -> Int.(a_set land b_set) = 0) states with
|
||||
| Some (_, b_score) -> Some (a_score + b_score)
|
||||
| None -> None)
|
||||
|> Iter.fold Int.max 0
|
||||
;;
|
||||
|
||||
let%expect_test "Day 16.2 example" =
|
||||
Printf.printf "%i\n" @@ solve_part_2 example_lines;
|
||||
[%expect {| 1707 |}]
|
||||
;;
|
||||
|
||||
(* god damn bitmasks are fast, 30x speedup from StrSet! down to 50ms now *)
|
||||
let%expect_test "Day 16.2" =
|
||||
Printf.printf "%i\n" @@ solve_part_2 @@ Utils.lines_of_input 16;
|
||||
[%expect {| 2811 |}]
|
||||
;;
|
||||
+201
@@ -0,0 +1,201 @@
|
||||
open Containers
|
||||
|
||||
let cave_width = 7
|
||||
let example_lines = [ ">>><<><>><<<>><>>><<<>>><<<><<<>><>><<>>" ]
|
||||
|
||||
let dir_of_char = function
|
||||
| '<' -> Vec2.left
|
||||
| '>' -> Vec2.right
|
||||
| _ -> failwith "oof"
|
||||
;;
|
||||
|
||||
let next_stream_idx stream idx = (idx + 1) mod Array.length stream
|
||||
|
||||
(*[{
|
||||
#
|
||||
# # #
|
||||
### # # ##
|
||||
#### # ### # ##
|
||||
|
||||
row plus angle col square
|
||||
|
||||
}]*)
|
||||
type shape =
|
||||
| Row
|
||||
| Plus
|
||||
| Angle
|
||||
| Col
|
||||
| Square
|
||||
|
||||
let get_shape idx = [| Row; Plus; Angle; Col; Square |].(idx mod 5)
|
||||
|
||||
let shape_points shape pos =
|
||||
let points =
|
||||
match shape with
|
||||
| Row -> [ 0, 0; 1, 0; 2, 0; 3, 0 ]
|
||||
| Plus -> [ 0, 1; 1, 0; 1, 1; 1, 2; 2, 1 ]
|
||||
| Angle -> [ 0, 0; 1, 0; 2, 0; 2, 1; 2, 2 ]
|
||||
| Col -> [ 0, 0; 0, 1; 0, 2; 0, 3 ]
|
||||
| Square -> [ 0, 0; 1, 0; 0, 1; 1, 1 ]
|
||||
in
|
||||
points |> List.map (fun point -> Vec2.(pos + of_tuple point))
|
||||
;;
|
||||
|
||||
type loop_key =
|
||||
{ rock : shape
|
||||
; stream_idx : int
|
||||
; normalized_topo : int array
|
||||
}
|
||||
|
||||
type loop =
|
||||
{ rock_idx : int
|
||||
; height : int
|
||||
}
|
||||
|
||||
type cave =
|
||||
{ grid : char Grid.t
|
||||
; mutable grid_topo : int array
|
||||
; mutable grid_height : int
|
||||
; total_rocks : int
|
||||
; mutable rocks : int
|
||||
; mutable stream_idx : int
|
||||
; loop_cache : (loop_key, loop) Hashtbl.t
|
||||
; mutable height : int
|
||||
}
|
||||
|
||||
let init_cave max_height total_rocks =
|
||||
let grid = Grid.init ~width:7 ~height:max_height (Fun.const '.') in
|
||||
{ grid
|
||||
; height = -1
|
||||
; grid_height = -1
|
||||
; rocks = 0
|
||||
; stream_idx = 0
|
||||
; grid_topo = Array.init cave_width (Fun.const 0)
|
||||
; loop_cache = Hashtbl.create max_height
|
||||
; total_rocks
|
||||
}
|
||||
;;
|
||||
|
||||
let draw_cave cave = Grid.draw cave.grid ~rev_y:true (fun _ contents -> contents)
|
||||
|
||||
let place_shape cave shape pos =
|
||||
shape_points shape pos
|
||||
|> List.iter (fun point ->
|
||||
let delta = point.Vec2.y - cave.grid_height in
|
||||
if delta > 0
|
||||
then (
|
||||
cave.height <- cave.height + delta;
|
||||
cave.grid_height <- cave.grid_height + delta);
|
||||
cave.grid_topo.(point.x) <- max point.y cave.grid_topo.(point.x);
|
||||
Grid.set_e cave.grid point '#')
|
||||
;;
|
||||
|
||||
let can_place_shape cave shape pos =
|
||||
shape_points shape pos
|
||||
|> List.fold_while
|
||||
(fun _ point ->
|
||||
match cave.grid.Grid.%(point) with
|
||||
| Some '.' -> true, `Continue
|
||||
| _ -> false, `Stop)
|
||||
false
|
||||
;;
|
||||
|
||||
let drop_shape cave stream =
|
||||
let shape = get_shape cave.rocks in
|
||||
let rec drop pos =
|
||||
let stream_pos = Vec2.(pos + stream.(cave.stream_idx)) in
|
||||
cave.stream_idx <- next_stream_idx stream cave.stream_idx;
|
||||
let pos = if can_place_shape cave shape stream_pos then stream_pos else pos in
|
||||
let drop_pos = Vec2.(pos + Vec2.up) in
|
||||
if can_place_shape cave shape drop_pos
|
||||
then drop drop_pos
|
||||
else place_shape cave shape pos
|
||||
in
|
||||
cave.rocks <- cave.rocks + 1;
|
||||
drop Vec2.{ x = 2; y = Int.(cave.grid_height + 4) }
|
||||
;;
|
||||
|
||||
let normalize_topo topo =
|
||||
let min = Array.min_exn Int.compare topo in
|
||||
Array.map (fun x -> x - min) topo
|
||||
;;
|
||||
|
||||
let rec drop_shapes cave stream =
|
||||
let loop_key =
|
||||
{ rock = get_shape cave.rocks
|
||||
; stream_idx = cave.stream_idx
|
||||
; normalized_topo = normalize_topo cave.grid_topo
|
||||
}
|
||||
in
|
||||
let remaining_rocks cave = cave.total_rocks - cave.rocks in
|
||||
let loop_rocks loop = cave.rocks - loop.rock_idx in
|
||||
let loop_fits loop = loop_rocks loop < remaining_rocks cave in
|
||||
match Hashtbl.get cave.loop_cache loop_key with
|
||||
| Some loop when loop_fits loop ->
|
||||
let loop_height = cave.height - loop.height in
|
||||
cave.height <- cave.height + loop_height;
|
||||
cave.rocks <- cave.rocks + loop_rocks loop;
|
||||
drop_shapes cave stream
|
||||
| _ when remaining_rocks cave > 0 ->
|
||||
let loop = { height = cave.height; rock_idx = cave.rocks } in
|
||||
Hashtbl.add cave.loop_cache loop_key loop;
|
||||
drop_shape cave stream;
|
||||
drop_shapes cave stream
|
||||
| _ -> ()
|
||||
;;
|
||||
|
||||
let solve remaining_rocks lines =
|
||||
let stream = lines |> List.hd |> Iter.of_str |> Iter.map dir_of_char |> Iter.to_array in
|
||||
let cave = init_cave 100_000 remaining_rocks in
|
||||
drop_shapes cave stream;
|
||||
cave.height + 1
|
||||
;;
|
||||
|
||||
let%expect_test "Day 17.1 Example" =
|
||||
Printf.printf "height: %i\n" @@ solve 2022 example_lines;
|
||||
[%expect {| height: 3068 |}]
|
||||
;;
|
||||
|
||||
let%expect_test "Day 17.1" =
|
||||
Printf.printf "height: %i\n" @@ solve 2022 (Utils.lines_of_input 17);
|
||||
[%expect {| height: 3227 |}]
|
||||
;;
|
||||
|
||||
let%expect_test "Day 17.2 Example" =
|
||||
Printf.printf "height: %i\n" @@ solve 1_000_000_000_000 example_lines;
|
||||
[%expect {| height: 1514285714288 |}]
|
||||
;;
|
||||
|
||||
let%expect_test "Day 17.2" =
|
||||
Printf.printf "height: %i\n" @@ solve 1_000_000_000_000 (Utils.lines_of_input 17);
|
||||
[%expect {| height: 1597714285698 |}]
|
||||
;;
|
||||
|
||||
let%expect_test "Smol tower" =
|
||||
let stream =
|
||||
example_lines |> List.hd |> Iter.of_str |> Iter.map dir_of_char |> Iter.to_array
|
||||
in
|
||||
let cave = init_cave 18 8 in
|
||||
drop_shapes cave stream;
|
||||
Printf.printf "%s" @@ draw_cave cave;
|
||||
[%expect
|
||||
{|
|
||||
.......
|
||||
.......
|
||||
.......
|
||||
.....#.
|
||||
.....#.
|
||||
..####.
|
||||
.###...
|
||||
..#....
|
||||
.####..
|
||||
....##.
|
||||
....##.
|
||||
....#..
|
||||
..#.#..
|
||||
..#.#..
|
||||
#####..
|
||||
..###..
|
||||
...#...
|
||||
..####. |}]
|
||||
;;
|
||||
+121
@@ -0,0 +1,121 @@
|
||||
open Containers
|
||||
|
||||
let example_lines =
|
||||
String.lines
|
||||
{|2,2,2
|
||||
1,2,2
|
||||
3,2,2
|
||||
2,1,2
|
||||
2,3,2
|
||||
2,2,1
|
||||
2,2,3
|
||||
2,2,4
|
||||
2,2,6
|
||||
1,2,5
|
||||
3,2,5
|
||||
2,1,5
|
||||
2,3,5|}
|
||||
;;
|
||||
|
||||
module Vec3 = struct
|
||||
type t = int * int * int [@@deriving show, eq, ord, hash]
|
||||
|
||||
let directions = [ 1, 0, 0; -1, 0, 0; 0, 1, 0; 0, -1, 0; 0, 0, 1; 0, 0, -1 ]
|
||||
let ( + ) (x1, y1, z1) (x2, y2, z2) = x1 + x2, y1 + y2, z1 + z2
|
||||
let ( - ) (x1, y1, z1) (x2, y2, z2) = x1 - x2, y1 - y2, z1 - z2
|
||||
let ( = ) = equal
|
||||
|
||||
let iter_region (ax, ay, az) (bx, by, bz) callback =
|
||||
for z = az to bz do
|
||||
for y = ay to by do
|
||||
for x = ax to bx do
|
||||
let p = x, y, z in
|
||||
callback p
|
||||
done
|
||||
done
|
||||
done
|
||||
;;
|
||||
|
||||
let in_bounds (lx, ly, lz) (hx, hy, hz) (x, y, z) =
|
||||
not (x < lx || x > hx || y < ly || y > hy || z < lz || z > hz)
|
||||
;;
|
||||
|
||||
let find_bounds points =
|
||||
let first = Iter.head_exn points in
|
||||
let padding = 1, 1, 1 in
|
||||
let min, max =
|
||||
points
|
||||
|> Iter.drop 1
|
||||
|> Iter.fold
|
||||
(fun ((lx, ly, lz), (hx, hy, hz)) (x, y, z) ->
|
||||
(min lx x, min ly y, min lz z), (max hx x, max hy y, max hz z))
|
||||
(first, first)
|
||||
in
|
||||
min - padding, max + padding
|
||||
;;
|
||||
end
|
||||
|
||||
module Vec3Set = Set.Make (Vec3)
|
||||
|
||||
let parse_points lines =
|
||||
lines
|
||||
|> List.map (fun line ->
|
||||
match List.map Int.of_string_exn Re.(matches (Pcre.regexp {|\d+|}) line) with
|
||||
| [ x; y; z ] -> x, y, z
|
||||
| _ -> failwith "oopzi doopers")
|
||||
|> Vec3Set.of_list
|
||||
;;
|
||||
|
||||
let solve_part_1 lines =
|
||||
let points = parse_points lines in
|
||||
let min, max = Vec3.find_bounds @@ Vec3Set.to_iter points in
|
||||
let surface_area = ref 0 in
|
||||
Vec3.iter_region min max (fun point ->
|
||||
if not @@ Vec3Set.mem point points
|
||||
then
|
||||
Vec3.directions
|
||||
|> List.iter (fun dir ->
|
||||
let n = Vec3.(point + dir) in
|
||||
if Vec3Set.mem n points then incr surface_area));
|
||||
!surface_area
|
||||
;;
|
||||
|
||||
let%expect_test "Day 18.1 example" =
|
||||
Format.printf "%i" @@ solve_part_1 example_lines;
|
||||
[%expect {| 64 |}]
|
||||
;;
|
||||
|
||||
let%expect_test "Day 18.1" =
|
||||
Format.printf "%i" @@ solve_part_1 @@ Utils.lines_of_input 18;
|
||||
[%expect {| 3662 |}]
|
||||
;;
|
||||
|
||||
let solve_part_2 lines =
|
||||
let points = parse_points lines in
|
||||
let min, max = Vec3.find_bounds @@ Vec3Set.to_iter points in
|
||||
let in_bounds = Vec3.in_bounds min max in
|
||||
let surface_area = ref 0 in
|
||||
let directions_iter = Iter.of_list Vec3.directions in
|
||||
let get_neighbors point =
|
||||
directions_iter
|
||||
|> Iter.map Vec3.(fun dir -> point + dir)
|
||||
|> Iter.filter (fun neighbor ->
|
||||
let in_droplet = Vec3Set.mem neighbor points in
|
||||
if in_droplet then incr surface_area;
|
||||
(not in_droplet) && in_bounds neighbor)
|
||||
in
|
||||
let _ignore =
|
||||
Utils.djikstra_hash ~get_weight:(fun _ _ -> 1) ~get_neighbors ~start_nodes:[ min ] ()
|
||||
in
|
||||
!surface_area
|
||||
;;
|
||||
|
||||
let%expect_test "Day 18.2 example" =
|
||||
Format.printf "%i" @@ solve_part_2 example_lines;
|
||||
[%expect {| 58 |}]
|
||||
;;
|
||||
|
||||
let%expect_test "Day 18.2" =
|
||||
Format.printf "%i" @@ solve_part_2 @@ Utils.lines_of_input 18;
|
||||
[%expect {| 2060 |}]
|
||||
;;
|
||||
+12
-7
@@ -52,7 +52,8 @@ let match_outcome = function
|
||||
| _, _ -> Lose
|
||||
;;
|
||||
|
||||
let part1 lines =
|
||||
let part1 () =
|
||||
let lines = Utils.lines_of_input 2 in
|
||||
let parse_line line =
|
||||
match Re.Pcre.(split ~rex:(regexp {|\s+|}) line) with
|
||||
| them :: me :: _ -> parse_move them, parse_move me
|
||||
@@ -66,7 +67,8 @@ let part1 lines =
|
||||
lines
|
||||
;;
|
||||
|
||||
let part2 lines =
|
||||
let part2 () =
|
||||
let lines = Utils.lines_of_input 2 in
|
||||
let parse_line =
|
||||
function%pcre
|
||||
| {|(?<them>\w)\s*(?<outcome>\w)|} -> parse_move them, parse_outcome outcome
|
||||
@@ -86,9 +88,12 @@ let part2 lines =
|
||||
lines
|
||||
;;
|
||||
|
||||
let print () =
|
||||
let lines = Utils.lines_of_input 2 in
|
||||
Printf.(
|
||||
printf "Day 2.1: %d\n" @@ part1 lines;
|
||||
printf "Day 2.2: %d\n" @@ part2 lines)
|
||||
let%expect_test "Day 2.1" =
|
||||
Printf.printf "%d" @@ part1 ();
|
||||
[%expect {| 11841 |}]
|
||||
;;
|
||||
|
||||
let%expect_test "Day 2.2" =
|
||||
Printf.printf "%d" @@ part2 ();
|
||||
[%expect {| 13022 |}]
|
||||
;;
|
||||
+20
-21
@@ -10,22 +10,17 @@ let priority char =
|
||||
| _ -> failwith @@ Printf.sprintf "'%c' is not a valid item" char
|
||||
;;
|
||||
|
||||
|
||||
let parse_line line =
|
||||
let half_len = String.length line / 2 in
|
||||
let first_half = String.sub line 0 half_len in
|
||||
let second_half = String.sub line half_len half_len in
|
||||
set_of_string first_half, set_of_string second_half
|
||||
;;
|
||||
|
||||
let part1 lines =
|
||||
let part1 () =
|
||||
let lines = Utils.lines_of_input 3 in
|
||||
List.fold_left
|
||||
(fun acc line ->
|
||||
let first, second = parse_line line in
|
||||
let half_len = String.length line / 2 in
|
||||
let first, second = Pair.map_same set_of_string (String.take_drop half_len line) in
|
||||
let item =
|
||||
match CharSet.elements @@ CharSet.inter first second with
|
||||
| [ item ] -> item
|
||||
| _ -> failwith "sad"
|
||||
| _ ->
|
||||
failwith "first and second half of each line should only have 1 intersection"
|
||||
in
|
||||
acc + priority item)
|
||||
0
|
||||
@@ -33,26 +28,30 @@ let part1 lines =
|
||||
;;
|
||||
|
||||
(*
|
||||
x thank you https://doc.sherlocode.com/ for helping me find Containers and its
|
||||
x List.chunks and List.reduce functions
|
||||
x*)
|
||||
let part2 lines =
|
||||
shout out https://doc.sherlocode.com/ for helping me find Containers and its
|
||||
List.chunks and List.reduce functions
|
||||
*)
|
||||
let part2 () =
|
||||
let lines = Utils.lines_of_input 3 in
|
||||
let groups = List.chunks 3 (List.map set_of_string lines) in
|
||||
List.fold_left
|
||||
(fun acc group ->
|
||||
let item =
|
||||
match CharSet.elements @@ List.reduce_exn CharSet.inter group with
|
||||
| [ item ] -> item
|
||||
| _ -> failwith "sad"
|
||||
| _ -> failwith "each group of 3 lines should only have 1 intersection"
|
||||
in
|
||||
acc + priority item)
|
||||
0
|
||||
groups
|
||||
;;
|
||||
|
||||
let print () =
|
||||
let lines = Utils.lines_of_input 3 in
|
||||
Printf.(
|
||||
printf "Day 3.1: %d\n" @@ part1 lines;
|
||||
printf "Day 3.2: %d\n" @@ part2 lines)
|
||||
let%expect_test "Day 3.1" =
|
||||
Printf.printf "%d" @@ part1 ();
|
||||
[%expect {| 7446 |}]
|
||||
;;
|
||||
|
||||
let%expect_test "Day 3.2" =
|
||||
Printf.printf "%d" @@ part2 ();
|
||||
[%expect {| 2646 |}]
|
||||
;;
|
||||
+44
@@ -0,0 +1,44 @@
|
||||
open Containers
|
||||
|
||||
let lines = Utils.lines_of_input 4
|
||||
|
||||
let parse_line =
|
||||
function%pcre
|
||||
| {|(?<a>\d+)-(?<b>\d+),(?<c>\d+)-(?<d>\d+)|} ->
|
||||
(int_of_string a, int_of_string b), (int_of_string c, int_of_string d)
|
||||
| line -> failwith @@ Printf.sprintf "cannot parse line '%s'" line
|
||||
;;
|
||||
|
||||
let count_overlaps is_overlapping =
|
||||
lines
|
||||
|> List.fold_left
|
||||
(fun acc line ->
|
||||
match is_overlapping @@ parse_line line with
|
||||
| true -> acc + 1
|
||||
| false -> acc)
|
||||
0
|
||||
;;
|
||||
|
||||
let part1 () =
|
||||
count_overlaps (fun pairs ->
|
||||
match pairs with
|
||||
| (l1, r1), (l2, r2) when (l1 <= l2 && r1 >= r2) || (l2 <= l1 && r2 >= r1) -> true
|
||||
| _ -> false)
|
||||
;;
|
||||
|
||||
let part2 () =
|
||||
count_overlaps (fun pairs ->
|
||||
match pairs with
|
||||
| (l1, r1), (l2, r2) when r1 < l2 || r2 < l1 -> false
|
||||
| _ -> true)
|
||||
;;
|
||||
|
||||
let%expect_test "Day 4.1" =
|
||||
Printf.printf "%d" @@ part1 ();
|
||||
[%expect {| 547 |}]
|
||||
;;
|
||||
|
||||
let%expect_test "Day 4.2" =
|
||||
Printf.printf "%d" @@ part2 ();
|
||||
[%expect {| 843 |}]
|
||||
;;
|
||||
+84
@@ -0,0 +1,84 @@
|
||||
open Containers
|
||||
|
||||
let crane_drop stacks index boxes = stacks.(index) <- boxes @ stacks.(index)
|
||||
|
||||
let crane_lift stacks index count =
|
||||
let stack = stacks.(index) in
|
||||
let boxes, rest = List.take_drop count stack in
|
||||
stacks.(index) <- rest;
|
||||
boxes
|
||||
;;
|
||||
|
||||
let crane_move1 stacks (count, lift, drop) =
|
||||
List.iter
|
||||
(fun _ ->
|
||||
let box = crane_lift stacks lift 1 in
|
||||
crane_drop stacks drop box)
|
||||
List.Infix.(0 --^ count)
|
||||
;;
|
||||
|
||||
let crane_move stacks (count, lift, drop) =
|
||||
let boxes = crane_lift stacks lift count in
|
||||
crane_drop stacks drop boxes
|
||||
;;
|
||||
|
||||
let init_stacks lines =
|
||||
let stacks = Array.init 10 (fun _ -> []) in
|
||||
let rec parse_line index line =
|
||||
let chunk, rest = String.take_drop 4 line in
|
||||
match%pcre chunk with
|
||||
| {|(?<letter>\w)|} ->
|
||||
crane_drop stacks index [ letter ];
|
||||
parse_line (index + 1) rest
|
||||
| {| |} -> parse_line (index + 1) rest
|
||||
| _ -> ()
|
||||
in
|
||||
List.iter (parse_line 1) (List.rev lines);
|
||||
stacks
|
||||
;;
|
||||
|
||||
let move_stacks stacks lines crane_move =
|
||||
let parse_line =
|
||||
function%pcre
|
||||
| {|move (?<count>\d+) from (?<lift>\d+) to (?<drop>\d+)|} ->
|
||||
int_of_string count, int_of_string lift, int_of_string drop
|
||||
| line -> failwith @@ Printf.sprintf "could not parse line '%s'" line
|
||||
in
|
||||
List.iter
|
||||
(fun line ->
|
||||
let instructions = parse_line line in
|
||||
crane_move stacks instructions)
|
||||
lines
|
||||
;;
|
||||
|
||||
let parse_input lines =
|
||||
let init_lines, lines = List.take_drop_while (String.starts_with ~prefix:"[") lines in
|
||||
let move_lines = List.drop_while Fun.(not % String.starts_with ~prefix:"move") lines in
|
||||
init_lines, move_lines
|
||||
;;
|
||||
|
||||
let solve crane_move =
|
||||
let init_lines, move_lines = parse_input @@ Utils.lines_of_input 5 in
|
||||
let stacks = init_stacks init_lines in
|
||||
let () = move_stacks stacks move_lines crane_move in
|
||||
Array.fold_left
|
||||
(fun acc stack ->
|
||||
match stack with
|
||||
| top :: _ -> acc ^ top
|
||||
| [] -> acc)
|
||||
""
|
||||
stacks
|
||||
;;
|
||||
|
||||
let part1 () = solve crane_move1
|
||||
let part2 () = solve crane_move
|
||||
|
||||
let%expect_test "Day 5.1" =
|
||||
Printf.printf "%s" @@ part1 ();
|
||||
[%expect {| PSNRGBTFT |}]
|
||||
;;
|
||||
|
||||
let%expect_test "Day 5.2" =
|
||||
Printf.printf "%s" @@ part2 ();
|
||||
[%expect {| BNTZFPMMW |}]
|
||||
;;
|
||||
+35
@@ -0,0 +1,35 @@
|
||||
open Containers
|
||||
module CharSet = Set.Make (Char)
|
||||
|
||||
let window = 4
|
||||
|
||||
let stream =
|
||||
match Utils.lines_of_input 6 with
|
||||
| [ line ] -> line
|
||||
| _ -> failwith "more than one line in input"
|
||||
;;
|
||||
|
||||
let find_start window =
|
||||
let length = String.length stream in
|
||||
let start_index =
|
||||
List.Infix.(0 --^ (length - window))
|
||||
|> List.drop_while (fun index ->
|
||||
let chunk = String.take window (String.drop index stream) in
|
||||
window <> (chunk |> String.to_list |> CharSet.of_list |> CharSet.cardinal))
|
||||
|> List.hd
|
||||
in
|
||||
start_index + window
|
||||
;;
|
||||
|
||||
let part1 () = find_start 4
|
||||
let part2 () = find_start 14
|
||||
|
||||
let%expect_test "Day 6.1" =
|
||||
Printf.printf "%d" @@ part1 ();
|
||||
[%expect {| 1833 |}]
|
||||
;;
|
||||
|
||||
let%expect_test "Day 6.2" =
|
||||
Printf.printf "%d" @@ part2 ();
|
||||
[%expect {| 3425 |}]
|
||||
;;
|
||||
+112
@@ -0,0 +1,112 @@
|
||||
open Containers
|
||||
|
||||
(* could have simplified this a lot by getting rid of File *)
|
||||
type node =
|
||||
| File of
|
||||
{ name : string
|
||||
; size : int
|
||||
}
|
||||
| Dir of
|
||||
{ name : string
|
||||
; parent : node option
|
||||
; mutable children : node list
|
||||
}
|
||||
|
||||
let get_dir_tree () =
|
||||
let lines = List.drop 1 @@ Utils.lines_of_input 7 in
|
||||
let line_num = ref 0 in
|
||||
let tree = Dir { name = "/"; children = []; parent = None } in
|
||||
let _ =
|
||||
lines
|
||||
|> List.fold_left
|
||||
(fun node line ->
|
||||
incr line_num;
|
||||
match node with
|
||||
| File _ -> failwith "current directory cannot be a file"
|
||||
| Dir dir ->
|
||||
(match String.split ~by:" " line with
|
||||
| [ "$"; "ls" ] -> node
|
||||
| [ "dir"; name ] ->
|
||||
let new_dir = Dir { name; parent = Some (Dir dir); children = [] } in
|
||||
dir.children <- new_dir :: dir.children;
|
||||
node
|
||||
| [ "$"; "cd"; ".." ] ->
|
||||
(match dir.parent with
|
||||
| Some parent -> parent
|
||||
| _ ->
|
||||
failwith
|
||||
@@ Printf.sprintf
|
||||
"ERROR:%d: cant cd .. because node '%s' has no parent"
|
||||
!line_num
|
||||
dir.name)
|
||||
| [ "$"; "cd"; name ] ->
|
||||
dir.children
|
||||
|> List.find (fun child ->
|
||||
match child with
|
||||
| Dir child_dir -> String.Infix.(name = child_dir.name)
|
||||
| _ -> false)
|
||||
| [ size; name ] ->
|
||||
let new_file = File { name; size = int_of_string size } in
|
||||
dir.children <- new_file :: dir.children;
|
||||
node
|
||||
| _ -> failwith @@ Printf.sprintf "failed to parse line '%s'" line))
|
||||
tree
|
||||
in
|
||||
tree
|
||||
;;
|
||||
|
||||
let rec get_node_size fn node =
|
||||
let get_node_size' = get_node_size fn in
|
||||
match node with
|
||||
| File file -> file.size
|
||||
| Dir dir ->
|
||||
let size =
|
||||
match List.reduce ( + ) @@ List.map get_node_size' dir.children with
|
||||
| Some size -> size
|
||||
| None -> 0
|
||||
in
|
||||
fn size;
|
||||
size
|
||||
;;
|
||||
|
||||
let part1 () =
|
||||
let tree = get_dir_tree () in
|
||||
let answer = ref 0 in
|
||||
let build_answer dir_size =
|
||||
if dir_size <= 100000 then answer := !answer + dir_size;
|
||||
()
|
||||
in
|
||||
let _ = get_node_size build_answer tree in
|
||||
!answer
|
||||
;;
|
||||
|
||||
let part2 () =
|
||||
let tree = get_dir_tree () in
|
||||
let dir_sizes = ref [] in
|
||||
let collect_dir_sizes dir_size =
|
||||
dir_sizes := dir_size :: !dir_sizes;
|
||||
()
|
||||
in
|
||||
let used_space = get_node_size collect_dir_sizes tree in
|
||||
let total_space = 70_000_000 in
|
||||
let required_space = 30_000_000 in
|
||||
let free_space = total_space - used_space in
|
||||
match
|
||||
!dir_sizes
|
||||
|> List.sort ( - )
|
||||
|> List.drop_while (fun size -> size < required_space - free_space)
|
||||
|> List.head_opt
|
||||
with
|
||||
| Some size -> size
|
||||
| None -> failwith "not possible!!"
|
||||
;;
|
||||
|
||||
let%expect_test "Day 7.1" =
|
||||
Printf.printf "%d" @@ part1 ();
|
||||
[%expect {| 1453349 |}]
|
||||
;;
|
||||
|
||||
let%expect_test "Day 7.2" =
|
||||
Printf.printf "%d" @@ part2 ();
|
||||
[%expect {| 2948823 |}]
|
||||
;;
|
||||
+55
@@ -0,0 +1,55 @@
|
||||
open Containers
|
||||
|
||||
let parse_grid () =
|
||||
Grid.of_lines Fun.(Char.to_string %> int_of_string) @@ Utils.lines_of_input 8
|
||||
;;
|
||||
|
||||
let part1 () =
|
||||
let grid = parse_grid () in
|
||||
let num_visible = ref 0 in
|
||||
Grid.iter grid (fun start ->
|
||||
let start_height = Option.get_exn_or "unreachable" @@ Grid.at grid start in
|
||||
let rec walk_shorter_trees start step =
|
||||
let next = Vec2.(start + step) in
|
||||
match Grid.at grid next with
|
||||
| Some height when height < start_height -> walk_shorter_trees next step
|
||||
| opt -> opt
|
||||
in
|
||||
let visible =
|
||||
Vec2.directions
|
||||
|> List.map @@ walk_shorter_trees start
|
||||
|> List.map Option.is_none
|
||||
|> List.reduce_exn ( || )
|
||||
in
|
||||
if visible then incr num_visible);
|
||||
!num_visible
|
||||
;;
|
||||
|
||||
let part2 () =
|
||||
let grid = parse_grid () in
|
||||
let best_score = ref 0 in
|
||||
Grid.iter grid (fun start ->
|
||||
let start_height = Option.get_exn_or "unreachable" @@ Grid.at grid start in
|
||||
let rec trees_in_view start in_view step =
|
||||
let next = Vec2.(start + step) in
|
||||
match Grid.at grid next with
|
||||
| Some height when height < start_height -> trees_in_view next (in_view + 1) step
|
||||
| Some _ -> in_view + 1
|
||||
| None -> in_view
|
||||
in
|
||||
let score =
|
||||
Vec2.directions |> List.map @@ trees_in_view start 0 |> List.reduce_exn ( * )
|
||||
in
|
||||
if score > !best_score then best_score := score);
|
||||
!best_score
|
||||
;;
|
||||
|
||||
let%expect_test "Day 8.1" =
|
||||
Printf.printf "%d" @@ part1 ();
|
||||
[%expect {| 1803 |}]
|
||||
;;
|
||||
|
||||
let%expect_test "Day 8.2" =
|
||||
Printf.printf "%d" @@ part2 ();
|
||||
[%expect {| 268912 |}]
|
||||
;;
|
||||
+72
@@ -0,0 +1,72 @@
|
||||
open Containers
|
||||
|
||||
let parse_input () =
|
||||
Utils.lines_of_input 9
|
||||
|> List.concat_map (fun line ->
|
||||
match String.split ~by:" " line with
|
||||
| [ dir; count ] ->
|
||||
let count = int_of_string count in
|
||||
let dir =
|
||||
match dir with
|
||||
| "U" -> Vec2.up
|
||||
| "D" -> Vec2.down
|
||||
| "L" -> Vec2.left
|
||||
| "R" -> Vec2.right
|
||||
| _ -> failwith "failed to parse instructions"
|
||||
in
|
||||
List.init count (fun _ -> dir)
|
||||
| _ -> failwith "failed to parse instructions")
|
||||
;;
|
||||
|
||||
let next_pos head tail =
|
||||
let dx, dy = Vec2.(to_tuple @@ (tail - head)) in
|
||||
if abs dx <= 1 && abs dy <= 1
|
||||
then tail
|
||||
else (
|
||||
let x_dir = if dx > 0 then Vec2.right else Vec2.left in
|
||||
let y_dir = if dy > 0 then Vec2.down else Vec2.up in
|
||||
let dir =
|
||||
if abs dx = abs dy
|
||||
then Vec2.(x_dir + y_dir)
|
||||
else if abs dx > abs dy
|
||||
then x_dir
|
||||
else y_dir
|
||||
in
|
||||
Vec2.(head + dir))
|
||||
;;
|
||||
|
||||
let solve length =
|
||||
let moves = parse_input () in
|
||||
let start = Vec2.origin in
|
||||
let tail = List.init (length - 1) (fun _ -> start) in
|
||||
let _, _, last_knot_hist =
|
||||
List.fold_left
|
||||
(fun (head, tail, last_knot_hist) dir ->
|
||||
let new_head = Vec2.(head + dir) in
|
||||
let last_knot, new_tail =
|
||||
List.fold_map
|
||||
(fun head knot ->
|
||||
let new_knot = next_pos head knot in
|
||||
new_knot, new_knot)
|
||||
new_head
|
||||
tail
|
||||
in
|
||||
new_head, new_tail, last_knot :: last_knot_hist)
|
||||
(start, tail, [ start ])
|
||||
moves
|
||||
in
|
||||
last_knot_hist |> List.uniq ~eq:Vec2.( = ) |> List.length
|
||||
;;
|
||||
|
||||
let part1 () = solve 2
|
||||
let part2 () = solve 10
|
||||
|
||||
let%expect_test "Day 9.1" =
|
||||
Printf.printf "%d" @@ part1 ();
|
||||
[%expect {| 6030 |}]
|
||||
;;
|
||||
|
||||
let%expect_test "Day 9.2" =
|
||||
Printf.printf "%d" @@ part2 ();
|
||||
[%expect {| 2545 |}]
|
||||
;;
|
||||
@@ -1,7 +1,19 @@
|
||||
(library
|
||||
(name aoc)
|
||||
(libraries re containers dune-site)
|
||||
(preprocess (pps ppx_regexp)))
|
||||
(libraries re containers iter dune-site angstrom)
|
||||
(inline_tests)
|
||||
(preprocess (pps
|
||||
ppx_regexp
|
||||
ppx_deriving.show
|
||||
ppx_deriving.eq
|
||||
ppx_deriving.ord
|
||||
ppx_deriving_hash
|
||||
ppx_expect
|
||||
ppx_inline_test)))
|
||||
|
||||
(env
|
||||
(dev
|
||||
(flags (:standard -warn-error -A))))
|
||||
|
||||
(install
|
||||
(section (site (aoc inputs)))
|
||||
|
||||
+99
@@ -0,0 +1,99 @@
|
||||
open Containers
|
||||
|
||||
type 'a t =
|
||||
{ width : int
|
||||
; height : int
|
||||
; items : 'a array
|
||||
}
|
||||
[@@deriving show]
|
||||
|
||||
let vec2_of_idx ~width ~idx =
|
||||
let y = idx / width in
|
||||
let x = idx mod width in
|
||||
Vec2.of_tuple (x, y)
|
||||
;;
|
||||
|
||||
let idx_of_vec2 width vec = Vec2.(Int.((width * vec.y) + vec.x))
|
||||
|
||||
let in_bounds grid point =
|
||||
let x, y = Vec2.to_tuple point in
|
||||
x >= 0 && x < grid.width && y >= 0 && y < grid.height
|
||||
;;
|
||||
|
||||
let at grid point =
|
||||
if in_bounds grid point
|
||||
then Array.get_safe grid.items @@ idx_of_vec2 grid.width point
|
||||
else None
|
||||
;;
|
||||
|
||||
let at_e (grid : 'a t) (point : Vec2.t) =
|
||||
match at grid point with
|
||||
| Some point -> point
|
||||
| None -> failwith @@ Format.sprintf "point %a out of bounds!" Vec2.pp point
|
||||
;;
|
||||
|
||||
let set_e grid point item =
|
||||
if in_bounds grid point
|
||||
then Array.set grid.items (idx_of_vec2 grid.width point) item
|
||||
else failwith (Format.sprintf "point %a out of bounds!" Vec2.pp point)
|
||||
;;
|
||||
|
||||
let ( .%() ) = at
|
||||
let ( .%()<- ) = set_e
|
||||
|
||||
let find (grid : 'a t) pred =
|
||||
let open Option.Infix in
|
||||
let* idx, item = Array.find_idx pred grid.items in
|
||||
Some (vec2_of_idx ~width:grid.width ~idx, item)
|
||||
;;
|
||||
|
||||
let count grid pred =
|
||||
Array.fold (fun count item -> if pred item then count + 1 else count) 0 grid.items
|
||||
;;
|
||||
|
||||
let init ~width ~height init =
|
||||
{ width
|
||||
; height
|
||||
; items = Array.init (width * height) (fun idx -> init @@ vec2_of_idx ~width ~idx)
|
||||
}
|
||||
;;
|
||||
|
||||
let of_lines parse_char lines : 'a t =
|
||||
match lines with
|
||||
| first_line :: _ ->
|
||||
let width = String.length first_line in
|
||||
let height = List.length lines in
|
||||
let yeet =
|
||||
lines
|
||||
|> List.map String.to_list
|
||||
|> List.flatten
|
||||
|> List.map parse_char
|
||||
|> Array.of_list
|
||||
in
|
||||
{ width; height; items = yeet }
|
||||
| _ -> failwith "somethin fucd up"
|
||||
;;
|
||||
|
||||
let iter_region grid a b callback =
|
||||
Vec2.iter_region a b (fun pos -> if in_bounds grid pos then callback pos)
|
||||
;;
|
||||
|
||||
let iter grid callback =
|
||||
let a = Vec2.of_tuple (0, 0) in
|
||||
let b = Vec2.of_tuple (grid.width - 1, grid.height - 1) in
|
||||
iter_region grid a b callback
|
||||
;;
|
||||
|
||||
let draw grid ?(rev_y = false) ?(rev_x = false) printer =
|
||||
let line = ref [] in
|
||||
let lines = ref [] in
|
||||
iter grid (fun point ->
|
||||
let item = grid.%(point) in
|
||||
let char = printer point (Option.get_exn_or "iter is broken" item) in
|
||||
line := if rev_x then char :: !line else !line @ [ char ];
|
||||
if List.length !line = grid.width
|
||||
then (
|
||||
lines := !lines @ [ String.of_list !line ];
|
||||
line := []));
|
||||
String.concat "\n" (if rev_y then List.rev !lines else !lines)
|
||||
;;
|
||||
@@ -0,0 +1,14 @@
|
||||
type 'a t [@@deriving show]
|
||||
|
||||
val at : 'a t -> Vec2.t -> 'a option
|
||||
val at_e : 'a t -> Vec2.t -> 'a
|
||||
val set_e : 'a t -> Vec2.t -> 'a -> unit
|
||||
val ( .%() ) : 'a t -> Vec2.t -> 'a option
|
||||
val ( .%()<- ) : 'a t -> Vec2.t -> 'a -> unit
|
||||
val init : width:int -> height:int -> (Vec2.t -> 'a) -> 'a t
|
||||
val of_lines : (char -> 'a) -> string list -> 'a t
|
||||
val find : 'a t -> ('a -> bool) -> (Vec2.t * 'a) option
|
||||
val count : 'a t -> ('a -> bool) -> int
|
||||
val iter_region : 'a t -> Vec2.t -> Vec2.t -> (Vec2.t -> unit) -> unit
|
||||
val iter : 'a t -> (Vec2.t -> unit) -> unit
|
||||
val draw : 'a t -> ?rev_y:bool -> ?rev_x:bool -> (Vec2.t -> 'a -> char) -> string
|
||||
+121
@@ -9,3 +9,124 @@ let lines_of_input day =
|
||||
let path = Printf.sprintf "%s/day%d.tt" base_path day in
|
||||
IO.(with_in path read_lines_l)
|
||||
;;
|
||||
|
||||
(** [f] in [memo f] should be a function that makes recursive calls
|
||||
via the memoized function passed as its first argument. ie:
|
||||
{[
|
||||
let fib_m =
|
||||
memo (fun self x ->
|
||||
match x with
|
||||
| 0 | 1 -> 1
|
||||
| x -> self (x - 1) + self (x - 2))
|
||||
;;
|
||||
]} *)
|
||||
let memo f =
|
||||
let open Hashtbl in
|
||||
let cache = create 100000 in
|
||||
let rec f_mem k =
|
||||
try find cache k with
|
||||
| Not_found ->
|
||||
let v = f f_mem k in
|
||||
add cache k v;
|
||||
v
|
||||
in
|
||||
f_mem
|
||||
;;
|
||||
|
||||
let%expect_test "fib memoized" =
|
||||
let fib_m =
|
||||
memo (fun fib_m x ->
|
||||
match x with
|
||||
| 0 | 1 -> 1
|
||||
| x -> fib_m (x - 1) + fib_m (x - 2))
|
||||
in
|
||||
Printf.printf "%i\n" @@ fib_m 100;
|
||||
[%expect {| 1298777728820984005 |}]
|
||||
;;
|
||||
|
||||
let djikstra ~eq ~get_info ~set_info ~get_weight ~get_neighbors ~goal ~start_nodes =
|
||||
let seen = ref [] in
|
||||
let rec djikstra' c_node =
|
||||
let c_dist, _ = get_info c_node in
|
||||
set_info c_node (c_dist, true);
|
||||
get_neighbors c_node
|
||||
|> Iter.iter (fun neighbor ->
|
||||
let n_dist, n_visited = get_info neighbor in
|
||||
if not n_visited
|
||||
then (
|
||||
let new_dist = c_dist + get_weight c_node neighbor in
|
||||
if new_dist < n_dist then set_info neighbor (new_dist, n_visited);
|
||||
seen := List.add_nodup ~eq neighbor !seen));
|
||||
seen
|
||||
:= List.fast_sort
|
||||
(fun a b ->
|
||||
let a_dist, _ = get_info a in
|
||||
let b_dist, _ = get_info b in
|
||||
Int.compare a_dist b_dist)
|
||||
!seen;
|
||||
match goal, !seen with
|
||||
| Some goal_node, next :: _ when eq goal_node next ->
|
||||
let dist, _ = get_info next in
|
||||
Some dist
|
||||
| None, [] -> Some 0
|
||||
| _, next :: rest ->
|
||||
seen := rest;
|
||||
djikstra' next
|
||||
| Some _, [] -> None
|
||||
in
|
||||
List.iter (fun node -> set_info node (0, false)) start_nodes;
|
||||
match start_nodes with
|
||||
| first :: rest ->
|
||||
seen := rest;
|
||||
djikstra' first
|
||||
| _ -> failwith "start_nodes cannot be empty"
|
||||
;;
|
||||
|
||||
let djikstra_hash
|
||||
(type k)
|
||||
?(hash = Hashtbl.hash)
|
||||
?(eq = Stdlib.( = ))
|
||||
?(slots = 100)
|
||||
~get_weight
|
||||
~get_neighbors
|
||||
~start_nodes
|
||||
()
|
||||
=
|
||||
let module Tbl =
|
||||
CCHashtbl.Make (struct
|
||||
type t = k
|
||||
|
||||
let equal = eq
|
||||
let hash = hash
|
||||
end)
|
||||
in
|
||||
let table = Tbl.create slots in
|
||||
let get_info node = Tbl.get_or ~default:(Int.max_int, false) table node in
|
||||
let set_info node info = Tbl.replace table node info in
|
||||
let dist_of node = Option.(Tbl.get table node >|= fun (dist, _) -> dist) in
|
||||
let _ =
|
||||
djikstra ~eq ~get_info ~set_info ~get_weight ~get_neighbors ~goal:None ~start_nodes
|
||||
in
|
||||
dist_of
|
||||
;;
|
||||
|
||||
module Parse = struct
|
||||
include Angstrom
|
||||
|
||||
let sign = option 1 (char '-' >>= fun _ -> return (-1))
|
||||
|
||||
let digits =
|
||||
take_while1 (function
|
||||
| '0' .. '9' -> true
|
||||
| _ -> false)
|
||||
>>| int_of_string
|
||||
;;
|
||||
|
||||
let int = map2 sign digits ~f:( * )
|
||||
|
||||
let not_int =
|
||||
skip_while (function
|
||||
| '0' .. '9' | '-' -> false
|
||||
| _ -> true)
|
||||
;;
|
||||
end
|
||||
+57
@@ -0,0 +1,57 @@
|
||||
open Containers
|
||||
|
||||
type t =
|
||||
{ x : int
|
||||
; y : int
|
||||
}
|
||||
[@@deriving eq, ord, hash]
|
||||
|
||||
let pp (fmt : Format.formatter) v = Format.fprintf fmt "(%i, %i)" v.x v.y
|
||||
let show v = Format.asprintf "%a" pp v
|
||||
let origin = { x = 0; y = 0 }
|
||||
let up = { x = 0; y = -1 }
|
||||
let down = { x = 0; y = 1 }
|
||||
let right = { x = 1; y = 0 }
|
||||
let left = { x = -1; y = 0 }
|
||||
let directions = [ up; down; left; right ]
|
||||
let of_tuple (x, y) = { x; y }
|
||||
let to_tuple { x; y } = x, y
|
||||
let ( + ) a b = { x = a.x + b.x; y = a.y + b.y }
|
||||
let ( - ) a b = { x = a.x - b.x; y = a.y - b.y }
|
||||
let ( = ) = equal
|
||||
let abs a = Int.{ x = abs a.x; y = abs a.y }
|
||||
|
||||
let iter_region a b callback =
|
||||
for y = min a.y b.y to max a.y b.y do
|
||||
for x = min a.x b.x to max a.x b.x do
|
||||
callback { x; y }
|
||||
done
|
||||
done
|
||||
;;
|
||||
|
||||
let fold_region a b callback init =
|
||||
let acc = ref init in
|
||||
iter_region a b (fun pos -> acc := callback !acc pos);
|
||||
!acc
|
||||
;;
|
||||
|
||||
let find_bounds padding points =
|
||||
let lx, hx, ly, hy =
|
||||
points
|
||||
|> Iter.fold
|
||||
(fun (lx, hx, ly, hy) { x; y } ->
|
||||
let lx = min lx x in
|
||||
let hx = max hx x in
|
||||
let ly = min ly y in
|
||||
let hy = max hy y in
|
||||
lx, hx, ly, hy)
|
||||
(Int.max_int, 0, Int.max_int, 0)
|
||||
in
|
||||
let lx = Int.(lx - padding) in
|
||||
let hx = Int.(hx + padding) in
|
||||
let ly = Int.(ly - padding) in
|
||||
let hy = Int.(hy + padding) in
|
||||
of_tuple (lx, ly), of_tuple (hx, hy)
|
||||
;;
|
||||
|
||||
let in_bounds l h p = p.x >= l.x && p.x <= h.x && p.y >= l.y && p.y <= h.y
|
||||
@@ -0,0 +1,24 @@
|
||||
type t =
|
||||
{ x : int
|
||||
; y : int
|
||||
}
|
||||
[@@deriving eq, ord, hash]
|
||||
|
||||
val show : t -> string
|
||||
val pp : Format.formatter -> t -> unit
|
||||
val origin : t
|
||||
val up : t
|
||||
val down : t
|
||||
val left : t
|
||||
val right : t
|
||||
val directions : t list
|
||||
val of_tuple : int * int -> t
|
||||
val to_tuple : t -> int * int
|
||||
val ( + ) : t -> t -> t
|
||||
val ( - ) : t -> t -> t
|
||||
val ( = ) : t -> t -> bool
|
||||
val abs : t -> t
|
||||
val iter_region : t -> t -> (t -> unit) -> unit
|
||||
val fold_region : t -> t -> ('a -> t -> 'a) -> 'a -> 'a
|
||||
val find_bounds : int -> t Iter.t -> t * t
|
||||
val in_bounds : t -> t -> t -> bool
|
||||
Reference in new issue
Block a user