Compare commits

..
76 Commits
Author SHA1 Message Date
ryan 8ec58edd08 solve day 18!
it was kinda ez
2024-02-13 23:03:04 -08:00
ryan 1904239ca7 reorganize day 17 code a bit 2024-01-11 10:48:11 -08:00
ryan 46d49dc3fe add pretty printed tower test in day 17 2024-01-11 10:19:39 -08:00
ryan 950f2860df fix day 12 performance regerssion
caused by a change to Grid.at_e that would eagerly format an exception
string even if the function never throws an exception.
2024-01-08 12:48:55 -08:00
ryan d203c9a520 finish day 17 part 2 2024-01-08 12:36:14 -08:00
ryan 8b54ae782c finish day 17 part 1 2024-01-05 11:33:26 -08:00
ryan 9f1499a1d3 implement day 17 rock falling logic 2024-01-04 00:38:09 -08:00
ryan 490696c63d make Grid.draw more flexible
- printer callback includes Vec2.t in the arguments now
- added optional rev_x and rev_y params
2024-01-03 09:18:57 -08:00
ryan a7c039197b fix .ocamlinit ?? 2024-01-03 09:18:27 -08:00
ryan 94f4badcc4 30x speedup on 16.2 from using bitmasks as a set!! 2023-12-04 23:28:54 -08:00
rmanseau 4e57ad4072 clean up 15.1 implementation a bit 2023-11-27 13:45:32 -08:00
ryan f2f3e497d6 get rid of old day 16 solution 2023-11-23 21:35:32 -08:00
ryan 2a515a5323 day 16.1 down to 1.5 seconds !! 2023-11-23 12:22:17 -08:00
ryan 5c0d7867a4 speed up 16.2 by 10x but its still 10 seconds >:( 2023-11-23 11:17:41 -08:00
ryan 1df5532c24 finally solved day 16 part 2 (in 100 seconds :P) 2023-11-22 22:58:22 -08:00
ryan 8db68c9baf use djikstra to get min dist between all valves
now i should be able to rewrite traverse in a way that doesn't suck
2023-11-22 18:27:42 -08:00
ryan 360be1a368 modify djikstra to work without a goal
if you give None as a goal, then it traverses the entire grid and finds
the shortest path to every node. the distances can then be queried via the
get_info that is passed in as an argument
2023-11-22 16:10:47 -08:00
ryan ae2acb87fa refactor generalized djikstra out of day 12 2023-11-22 16:10:47 -08:00
ryan c7eae53378 doesnt work for 16.2 :( 2023-11-21 23:22:43 -08:00
ryan b9a36a476a brute force day 16.1 with incorrect algorithm lol
it gets the right answer for the input but not for the example input
2023-11-21 18:17:35 -08:00
ryan 8270ee7aa8 never touching day 15 ever again 2023-11-21 16:50:51 -08:00
ryan 894e83fe12 fix day 15 for example inputs
part 1 didn't work for the example input :(
2023-11-21 16:48:03 -08:00
ryan 11546bff5f fix ocamlformat
apparently `version = x` simply refuses to format if you dont have the
specified version. doesn't seem very useful for a repo like this.
2023-11-21 16:47:17 -08:00
ryan d1e69ba66e cosmetic refactoring for day 15 2023-11-20 18:57:00 -08:00
ryan 2887274ad9 update the comment in day 15.1 2023-11-20 18:34:44 -08:00
ryan 6758130700 speed up day 15.1 with intersections
also update the vec module to use Iter in some places
2023-11-20 18:26:55 -08:00
ryan ff4bb0ae89 simplify day 15 parsing with regex 2023-11-20 14:26:01 -08:00
ryan b69f867423 update opam file 2023-11-20 14:25:38 -08:00
ryan a652ec69da add memo wrapper for recursive functions 2023-11-20 14:11:04 -08:00
rmanseau 421616a282 add dev env packages to depends 2023-11-20 13:36:40 -08:00
rmanseau f775ed645b fix opam file and add install steps to README 2023-11-20 12:24:23 -08:00
ryan 705c9e9a7c faster 15.2 solution with line intersections :/ 2023-11-10 18:24:41 -08:00
ryan 8d97e7601c very slow solution to day 15 part 2 :)
could be sped up by doing math to find intesections points of the
borders but that sounds boring
2023-11-09 14:23:41 -08:00
ryan b89e9c05ef refac day 14 to use new Vec2.bounds function 2023-11-08 10:37:44 -08:00
ryan b90478cd03 solve day 15 part 1 ! 2023-11-08 10:37:31 -08:00
ryan 383c6c0fca add Vec2.iter_region 2023-11-08 10:36:33 -08:00
ryan 19a763b73f manually implement show & pp for Vec2
so that it prints as if it were a tuple
2023-11-08 09:14:22 -08:00
ryan dcb1338aa3 parse day 15 2023-11-08 09:14:00 -08:00
ryan 724576d120 refactor day 14 a bit 2023-11-01 14:40:16 -07:00
ryan ceaebf895d solve day 14! 2023-11-01 14:14:46 -07:00
ryan ceb0f04a78 implement sand dropping logic & pretty visuals 2023-11-01 12:10:15 -07:00
ryan c5c9b584c0 update Grid.%() operator to return option 2023-11-01 12:09:53 -07:00
ryan 80f29ae00e swap Vec2 up/down
going down on the grid increases the int for y
2023-11-01 12:08:43 -07:00
ryan 2418d2ff0d normalize points in input
this way i can print the full input in as small a space as possible!
2023-10-31 18:06:12 -07:00
ryan 1ca2a95e1d make Grid.set_e throw out of bounds errors 2023-10-31 18:05:10 -07:00
ryan 61e3520ede parse day 14 grid
haven't implemented the falling sand yet, but theres a cool expect test
that draws the grid
2023-10-31 17:04:20 -07:00
ryan 98f47654f8 change Vec2 implementation to a record type 2023-10-31 15:57:13 -07:00
ryan 88acb381f1 move Grid into its own file 2023-10-31 15:57:11 -07:00
ryan 1d60878428 add init_grid func 2023-10-31 14:43:12 -07:00
ryan 63bad67c1b create angstrom wrapper in Utils for int parser
and other common parsers for the future
2023-10-31 14:40:22 -07:00
ryan 8fe7e77b52 put packet in a inline module cuz why not 2023-10-31 10:08:20 -07:00
ryan 06f695b34c tighten up day 13
List.compare is neat!
2023-10-31 09:45:04 -07:00
ryan fa8970b0de day 13, first parser combinator! thx angstrom <3 2023-10-30 15:37:45 -07:00
ryan dfa2cf11a1 add Vec2.origin for (0,0) 2023-10-30 11:21:34 -07:00
ryan 8562bc8385 finished day 12, thx dijkstra !! 2023-10-23 19:49:18 -05:00
ryan 887d961d29 flatten array of array in grid implementation
makes the new find function much simpler to implement
2023-10-22 11:43:27 -05:00
ryan 31a75867fa add expect tests 2023-10-09 14:14:13 -07:00
ryan b6eae27d9d get rid of executable
expect tests will make them kinda pointless
2023-10-09 14:14:06 -07:00
ryan fe5cd3666f move grid parse & iter into Vec2 2023-10-09 13:58:53 -07:00
ryan 250d978a38 solve day 11 :) 2023-10-08 19:10:12 -07:00
ryan c93c273ffd solve day 10 2023-10-07 12:58:57 -07:00
ryan bf5d3c1656 clean up vec stuff 2023-10-07 12:58:50 -07:00
ryan 1ee3a5a3c5 solve day 9 :) 2023-10-05 15:56:02 -07:00
ryan 5e1c30637e move vec2 into a new file & add a pretty printer
now it shows up properly in utop !!
2023-10-05 15:55:05 -07:00
ryan 239af2f93b refactor day 8 a bit 2023-10-01 13:12:36 -07:00
ryan 7d6b43ba93 day 8 complete ! 2023-10-01 01:55:36 -07:00
ryan b7aabdedcb dont let warnings fail the build >:( 2023-10-01 01:54:23 -07:00
ryan 3d2a2f2c4d added comment & got rid of match%pcre 2023-09-30 23:20:47 -07:00
ryan 1fdb1ebc36 solved day 7 !! 2023-09-30 19:15:28 -07:00
ryan 666c81118f update day5 to use terse array syntax
array.(index) <- some_value
2023-09-27 21:26:52 -07:00
ryan 45d735bac9 solved day 6 ! 2023-09-25 11:31:59 -07:00
ryan f31499ecda solved day 5 ! 2023-09-25 09:39:17 -07:00
ryan c61676cf02 solved day 4 !
and updated main.ml lol
2023-09-22 16:59:03 -07:00
ryan 0a24022629 replace parse_line with CC map_same and take_drop
thank u https://doc.sherlocode.com
2023-09-22 15:54:11 -07:00
ryan 6a276c3c1b solved day 3 ! 2023-09-22 15:15:36 -07:00
ryan 661cdf1c95 add containers and remove jane streets stdio 2023-09-22 15:09:12 -07:00
49 changed files with 9880 additions and 30 deletions

No files matched your search

+1 -1
View File
@@ -1 +1 @@
eval $(opam config env)
eval $(opam env --switch=.)
+1
View File
@@ -1,2 +1,3 @@
.DS_Store
_build/
_opam/
-1
View File
@@ -1,2 +1 @@
profile = janestreet
version = 0.26.0
+2
View File
@@ -0,0 +1,2 @@
#install_printer Aoc.Vec2.pp;;
#install_printer Aoc.Grid.pp;;
+6
View File
@@ -0,0 +1,6 @@
## 2022 AOC problems in Ocaml
```sh
$ opam switch create . --deps-only -y
$ dune build
```
+13
View File
@@ -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
View File
@@ -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)))
-4
View File
@@ -1,4 +0,0 @@
(executable
(public_name aoc)
(name main)
(libraries aoc))
-6
View File
@@ -1,6 +0,0 @@
open Aoc
let () =
Day1.print ();
Day2.print ()
;;
+143
View File
@@ -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
+55
View File
@@ -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
+41
View File
@@ -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
View File
@@ -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
View File
@@ -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
+36
View File
@@ -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
+60
View File
@@ -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
+1
View File
@@ -0,0 +1 @@
><<<<>>>><>>><<><<<<>>>><<>>><>>><<<<>>>><<>>>><<<>>>><<<>>>><<<>>><<<<>><>><<<<>>><><<<><><>>>><<<<><<<<>><<<>>>><<>><><>>>><<<>>><<<>>><<>>>><>>>><>><>>><<>><><<<<><>><<<>>>><<<>>><<<>><>><<<>>><<<<>>>><><<<>>><<<>>><<<<><<<<>>><<<<>>><<<>>><<<<>>><<>>><<><<<>><<<>>><<<<><<<<>>><<<><<>>>><<<>><>>><<>>><<<><<<<>>><<><<<<>>>><<>>>><<>>>><<<<>>><><<<<><>><<<>>>><<<<>><>>>><>><>><>><<<>><<<>>>><<<>><<>><<<<><<<<><<>>>><<<<><<<>>><>><<<>>><<<><<<><<<<><<><<<>>><<<<>>>><<<<><<>><<<<>>><>>><<<<><<<>>>><<><>><<<<>><<<<>>>><<<><<<<><<<<>>><<<><<>>><>>><<<<>>><<>><<<<>>><<<><<<>><<<<>>>><<<<><<><<<<>>>><>>>><<<<>>>><<<>>>><<<><<>>><>>><<<<>><<<<>>><><>><<<>>>><<<<>><<<>><<>><<<>>><<<>>>><<<<>>>><<>>>><<>>>><><<<<>><<<<>>>><<<<>>><<<<>><>><<<>>><>>>><><<>><<>>><<<>>>><>>><<>><<<>><>>><>>><><>><>><<<><<<>>>><>><<<><<<>>><<<<><<>>>><<<><<<>>>><>><<<>>>><<<>>>><>>><><>>>><>><<><<<>>>><<>>>><<<>>><<<<>>><<<>><>>>><<<<>>>><>><<>>><<<<>>>><<<<><>>>><<>><<>>>><>><<<<>>>><<<<>><<<>>>><<>><><>><<<<>><<<>>>><<<>>><<>><><<<>>>><<>><>><<>><>><<<<>><<<>>><<<<>>><<>>>><<>>><<<<>>><>><<><<<>><>>><<<>><<<<>>>><<<>>><<>>><<<>>><<<<>>>><<<<>>><<<>>><<>>>><<>>><<<>>><<><<>>>><<>>>><<><<>>><<><<<>>>><<<<><<<<>><<<>>>><>>><<<<>>><<<<>>>><<>><<<<>>>><<<><<<><<>>>><<<>>>><<<>>>><<<>><<>>><>>><<<<>>><<<<>><<<>>><<<>><<<<>>><<<<><<><>>><<<<>>><<<<>>>><>><<<<>><<<<>>>><<<<><<<>>>><>><<<<><<<<>>>><>><<><<<>>><<>>><<<<>><<<><<<><>><<>>>><<<><<<<><<<>>>><<<<>><<>><<<<>>>><><<<><<<>>>><<>>>><<>><<<<>>>><><><<<<><><<>>><<><<>>><>>><<>><><<><<>>>><<<<><<<>>>><<>><><<>>>><<<<><><<<>>>><<>>><<<><<<>>>><>><<<<>>>><>>><<><>>>><>>>><<<><>>><>>>><<<>><<<>>><<<<>>>><<>>>><<<<>>>><<><>><<<<>><<<<>>><<>>><>>>><<><<>>><>>>><<><<><<><><<<>><>><<<<>>><<<>>>><<<><<<<>><>><>>><<<<><<<>>>><<<>>><><<<<>>><<<<><<<<>>>><>><>>><<<><<>><<<><>>><<<<>><><<<<><>><<>><<>><>><<<<><<<>><>>>><<>><<<<>>><><<<>><<>><<>><>>><>>>><<><>><<<<>>><>>><<>>><<>>>><<>><<<<>>><>><<<>>><<<>>><<<<>>>><<<><<<<>><<><<<><<<>>><<><<>><>><>>><<<>>><<>><<>>><<>><<>><>><<<<>>>><<<<>>><<<>>>><<<<>>><<<>><<<>><<<<>>>><<>><<<<><<<<>><<>>><><<><<<<>>>><><>>>><<<<>>>><<<<>>>><<>><<<<>>>><<<><>><<>>>><<>>>><<<<>>>><<<>>><>><<>>>><<<>>>><<<<>>><<<<>><<<<>>>><<>>><<>>>><>>><>>>><><>><<<<>>>><<<>>>><<<>><<>>><<<<>>><>>>><<>>>><<<><>>><><<>>>><<>>>><<<>>>><<<<><<<<>>>><>>>><>><<<>>><<<>>>><<<>><<<>>><>><<>>><<><><<><<>>>><>>><<<<>><><>><>>><<<<><>>><<<>>><<<><<<<>>><<<>><<<>>><<>>><<<<><<<<><>><><<<<>>><<<>><<>><<<>><<<<>><>><>>>><<>>><<<>><<<>><<<<>><><<<<>>><<<>>>><<<<>>><<>><>><<>>><><<>>><<<>>><<<>><<>>>><<<<>><<<<>>>><<<><<><<<<>><<<<>><<<>>>><>><<<><>>>><<>>>><<><<<>>>><<<<>><<<>>>><<>>><>><<<<>>>><<<<>>><>>>><<<<><<><<>><>><>>><<<><<<<><<<<>><<<>>><<<<>><<><<<<>>>><<<>>>><<<>>>><<<<>>><<><<>><<><<<<>>>><<<><<<<>>>><<>>><<<<>><>>>><<<<>><<<>>>><<><<<<>>>><<<>><>>>><><<<>><<<><<<>>><>>>><>>><<<<><<<<>>><<>>><<<>>><<<<><<<<>>>><<>>><<<>><<>>><><<<>>>><<><>>><<>><<<>>>><<<><>><<<>>><<>>>><<<>>>><>><<><>><<>>>><<<>>>><<<<>>>><<<>>><<<>><<<<><<<<>><><<><<<>><>>><<<<>>><<<<>><<<>>><<>><<<<><<<><<<><<<>>><<<<>>><<<<>><<>>><<>><<<<>>>><<>>>><<>>>><<>><>>><>>>><<>>>><<<>>><<<<>>><>>><>>>><<<>><<>>><<>>>><<>>>><<<>>><<>>><<<><<<>><>>>><<<>><>>><<<>>><>>>><>><<>>><<<<>>><<<<>><>>><<<<>>><<<<><<<>>><><>>><<<>>><>><>>>><<>>>><<<>><<>>><<>><<<<>><<<<><>>><<>><<<<>>><<<>>><<>>>><>>>><<<><>>>><<><><>>><<>>>><<<>>>><><>><<<<>><<<>>>><<<<><<<<>>>><<<<>><>>>><<<>>>><<><<>>>><<<<>>>><<<<>>><>><>>>><>>>><>><<>>>><>>>><<>>><<<<>>>><<>>><><<>>>><<>><<<<><<><>>>><<<<>><<><<><<>><<<><<<>><<<<>>><<<<>><<>><>>><<<<>>>><<<<>>>><<<<>>><><<<<><<<<><><<<<><<<<>>>><<<<>>>><><>>><<<<><<<<><<<><><<<<>><><<<><<<<>><>>><><><<<><>>><<><<>><<<>><<<>>>><<<<>>><<>><<<<><>>><>>><<>>>><<<<>>><<<>>>><<<>>>><<<>><<<>><<<<>>><<<<>><>>><<<<><>>>><<<>><>>><<>>><<<<>><<><<<>><>>><<<>><<<<>>><<<>>>><>>><><<<><<<>>>><<>>><<><>>>><>>>><<<<>>><><><>>>><<<<>><<<<>>><<>>><<<><<<>>>><<><<<>><<<>>>><<<<>>>><>>><<<>>><><<<>><<<<>><<<>>>><>><<><><<>><<<>><<<>>><<<<>>>><<<><<<<>><<<<>>>><<<<>>>><<><<<<>>><<<<>><<<<>><<<>><<<<>>><<>>>><<>>><>><<>>>><>>><>>><<<><>>>><<<>>><<<<><<<<>>><<><><>>>><<>>>><<>>>><<<<>>>><<><<><<<>>><<<>>>><<><<<><<>>><<<><<<>>>><<<<>>><<>>>><<>><><<<><<>><<>>><<<<>><>><<<>><<<<>><<<<><<>>><<><<<<>>>><<<>><<<<>><<>>>><>>>><>>><>>>><<<>>><<<>>>><<>>>><>><>><<<>><<<>>><<>>><<<<>>><<<<>>><<>>>><>>><>><<<<>>>><<>>>><<>>>><<<<>>>><>>>><><>>><<>>>><<<<><<>>>><<<<>><<<<>>>><<>><<<<><<<<>>><<<<>><<>>>><<<>>>><<<><>><<<><<>>><<<<>><<<>>><><<<<>><<<<>><>>><<<<>>><<<<>>>><>>>><<>>>><<>>><>>>><<<<>>><<>><<<><<><<<>>>><<<>>>><<<<><<>>><>><<<<><<<>>><>><><<<><<>>>><>>>><>><<>>><<>>>><<>>>><<<<>><<>><><<>>><<>><<>><<>>><>><<<<>>>><<>>>><<<<>>><<>><><<<><>><<<>><>>><>><<>>><><>>><<>>>><<<>>><<<<>>><<<>><<>><<<<>>><<<><<<>><<<<><<>><>><<<<>><<>>>><<<>><<<>>>><<<<>>>><<<<>><<>>><<<>>><<<>>>><<<<>>><<<<>>>><>><<<<>>>><<>>><><<>>>><<<<>>>><<<<>>>><>><<>><<<<><<<<>>><><>>><<<<>>><<><>>>><<<<><<<>>>><>>>><<<>>>><<<>>>><<>>><<>>><<<<><<<>><>>><<<><<<>>><Line truncated
+2025
View File
File diff suppressed because it is too large. Load diff
+300
View File
@@ -0,0 +1,300 @@
JppMDcJPcQbqGqFb
ZStgnHtsSjGBhqFbBmsm
djzzwgHHggdnfwjtMPDPMGpPlNfpLDll
dRCtwtlCSttPtlNPNtgvPrDqmBsjGSpjBBsJsqqmrp
ZhWnZhzMMfnWWTDzBrmsmjsBccJB
TFQMrZrMfZrLZZnLQdlvNdCgdHPlCllHNF
PVddPnZWDDPqmHZzqVPzqdHdMRMJjQtvmvjvtTQQtlRtbbQl
fsNswFpChpNwfgtMvCbjTRJBbtRj
SFgfSMShLcsLgNMFhpwShFFZPHqZGZPqHdzPZHZcdzDDqd
dHffzCqSfJCCzCPvdcpzRrBDDBSBBBMtthDDrFMT
bVsZbsrgbWshBTFtDTtZTD
slWGNbNWgWwnmNnwgnlGjdJJdPHcvcrcHjqPzdqPvp
vBFBzGvGBvjFpGWcvCCvBvGPPhZbgLhMnhrPgFgPFgLLPF
dVlslfdJNVJJmQQwdNRNwLZZZrrqhbPbZndpdgMhLP
HJRHJpNJlVmftHfNQNRsHmmGCtGWjGDDTvCzcjWDStvcvT
cVQzCCCpVVjgHsNwwFRqSRSRRtNH
PWfhfPhbWWdWllPDdTvdbnvhLJLLMJFTSNwJtMRwJLqJJNMq
DnfblllPbDrbWmbdPFdvlhdgQzzZZzQgcpcsZGcGQQgcpr
hdFnnrdLnJRrZMzVlMbrwZvz
TgfjGCcfsqfqqBfRMPDVvVVvTZRPbP
qQqffcGStBSCQcsqCCBRjGqWhHFptFdnhNLmhnLWmphLLt
WHPqWhLWHBMqddCdtDRwStDSwgnw
rfCfZTmvpvvpFVfFrbvTbvcgtwgtStntggwbSJttgJtwgw
fpQFsmfFmfZcrFCMhWNQWLCzhhCM
zdqqJHDWwqNNZjQSmtdjpmfnjj
GFBcPfBLPThcTcLRbpTQQjpTQrjSnQjlvn
MFVLcsPVbPcRGfVPFRgDzJsHZNDCZNCNZsHg
WQdMhlmQMwfZlQdgdHfddvtzmbJbcsctbBJqqcvqzB
rSTrDDCSSGRCnnSGwwzJsbBvJsCCttccsvsz
VnFwDrNwPwVSDrLgjfZZdMQFMWgljQ
rJNjBLNQjvLQjFFLQJCFTvGWlRRgfGWDWlCDzlGnRRWG
tMMhShhwhbgplflwDlnnnzDH
ZcSZVMSqshhQBQqQvqQgjJ
btTtWGbvtcvHHccdNRhHdl
TDzqLPSqBzqVSldPddHhhNNlRQ
jBLDqDgZZBzJJmsbWjppmmpTWw
LLDTRRfTwZRGZfDCRTwRsVHsVFBVZVlmVFBFlFJl
QjWpQrzQcbhfMqrVVHVPFslFVpVmHH
hqhzqMfNvjvMMzhdRDdCwGDSSdnvRn
jmMdNCLjLmJPtHtSHhSVVJ
pDBqgBgCvbfGBBbCGHZhtQZtPHVSVHPV
pBnWgBpzWzBbWDWvzwpgCvqcmLNTrdLmmrnRLTrmrTdmLd
dRWWtRGBDPQctQDZ
CMfnCfFMmTTFVCmfmTLvsnMPZjccHRcPrRPsZQQZPQDRrQ
fLCffmRTCvRnmTllzVvpdpphNJggpGbJJJpdlh
cfsfbbWqqZqDScbhGDPDjTPmpVtmmPjPntFD
dCBBCRQCHNHLMQvrJJJBJLrGPMnjVtPjVMmnjPFmPmMpFn
HvRGLddgHHvqhwzbWhcgcf
DHmhhDDhbqrRhvbrHqhPbPvBwwWwTmMGTVwwBMGWVNNwVw
gSzJjnnjsscfcsZcSfWwQGdMMcWTBcTTMTMw
nsFCCFZsnSlCFBFflfflsztRPCqvvHPttRbHbhvPrrRr
SGNRLzpNpgNSNNlWFNwzqJfHfJHBtBdJhBJrHd
bQnjPTnjVdZtPPrfLP
TTnTccLnjGFcDNggFl
lBJmNzJlzmmQBlzgVVjLWRDfLjRsRLWWRS
vTMvTvtrfdhrrrPTdZwTTwtDqSSnWFWDFMMsRssjjsRqWD
ZpbvHbZddtbrdrdhcBmmpGQfBQgJNcmz
qsmhTmTVcDdcffhPhPvvzFhF
BNNlJbjWBWjtRtNljbmBBCpFzPlFPgpPfwFnlffnlPgg
JtBmmrrrRbDSrVqDqVSD
VmSgpSLgJjVDMrFrmMlfFmsG
bZWhZbzWcCwTWPRCwwwSPQzwMHnflHnGsMGnTrsflGMnlfTF
CqWhWqWCCWRRZQcLqDLpVDDLNStpgD
JwzTVzzcLzVJVVlJpVTwzGcrWhFjqsBjCjQFjWcCCjCjBF
MDSNQMtbSSnSbgbRDvnRNgvhmrqrjBCBtmCrCCWFqthhWm
bgMfNSSNZTwZQddGJZ
jjPgbFjjStjjPcSbrbtpvNrGnGDvBnMGvNDNGG
LwdZwsTdWTTmwDNCNppGBsnpBR
mWmHwZWhTTJWHBdQQWBjcFczSgjlSftjbtQPzg
fCBlrffzlCzcmfLDlfgRRnHScsHvRSQHMQvs
LthpZqtpVThZhGJtqTFvHsVnvsvMsggjHQjgQH
ZWFWGTLTWBNCWfDfmD
BpFqJrpcZZBDhDsNqMHhRG
zwlzPdmzPLhwvhMgsHnN
mPlWjlQfQjjllWtjQCWzCrBFJFTBcSNcJbbZfcZJSb
FpzNFTThBDChnnzNBCBNDzWGndgWqbJWVGqmPbJqQgQm
HQRctcvwgddVcJGd
LwRMZLjQfSRjFNzFSrhNsThS
WgRWVLWhFqgqgcgWHqLRWHVRbbbNwBmtBcNcwdwwBNwBzwBN
pSfssjDSrSvJpNJCztbJBtMNbt
TzsvGGnjGPsPjSTpDrPfPDSHhWqLgZZVHVhZZZZVQQFLnZ
sHjtPjQTtDbsfrrqWR
ZmccchvlvSvvZNMVNhvBLWRJJblWJWJlJfwHbwlL
hMMBzSMppVSzSNNmNgHjPgGPFTCpTTgTgG
rPQpCPPCQQZdcFhcZgzVJgwt
vDBSHmvHSSMlDWWmljnHBvFwzzcrwhVSJwVFtzcJJghw
bmmrsrsbsvNdCTdbPTdb
NgzBnsBNnfjgNvvfvWbtShSSFSMLJMFjjbPh
CCcRHdlQrQPLTJPLGP
HrDlRcqcDJCCDJHlcplrDJDfgfzBWWNZfvsnNqWwngZWwW
TggFVbjVTVzRwFFjjqBBqpzNztqcQqNNqN
SnZPrWndmShSZSPsnSLsJhpMQpcJtNqBClltqctC
mfWsGdnZZWmZmrLSfsrnmPggwtggRgGTVHvRwgFDjTGT
wQMZFQwppbPHPbLQJsgQNJJmBnds
qrSGvRRCvTzTDNnhNgmCgdBm
qzRrcRlGjvvzlzrvjcGqSSzMHWwVdPMWFpFMHMHWlPWMVV
BccsFzrBcsfpccccgFmQqlGNqCTLTlQnqgLlRG
MZbVSMddddSPPtdHPVJPJdTllqLNLGGTNCCRhTnHTQHh
DMwtbVZDZbSbpprcpccppwrq
bSZTdNqFjjzjqQMQ
WtRztLsWJpPLzrsMDlDQjMhVMC
pcgHRpHmWPJgLRzBJHBPPRBfvvfGNGvvFwfvSvfTmNNZfN
RjvBljWTTWTlqmBvHjGptRgccZcbPtcttbpzbn
VhDSDdJLJpSNNVVznPzzzSzcZFngZt
LsMdQNVMHsBHjqps
rSPSLTnSCClfSFCR
MwtZgwNBzzTjzZMbbmjNtwmBcRvFqQllqtQRlFRVqRqVVcvq
TsMhZsjNjBbTbBbwZLpDnHdDGdHWnpGHnh
LfdssTFBjFHSwlhzCcZZgMMfMhZZ
DmtDvrpmNStVvqpPczrZMMhZhhChCC
vJtJpQWvNVDtJFbHlJSlBbSF
PgvHLbcgRcGGHzRvgGgchBzsCZnmNZmZddrCrvdddZCZrF
JQBMjlStJrQsZFrNCZ
JSJTlqMtjptlplSSqJVDBqphwhhwHRPRggGbGzHbgzVRPH
pBsztsZdBsnWhntVnhtVTqTWNQlGGTGGFFlQFlTl
fDvLSMcbDbfMrGqFqSGwSQPzqz
zjcvLMMvffLjgggzfjjJCCLcdBtRphddBmmZBpCZZpZpmmhs
gmmSDplcPHDfHDlbVNrtCtCCNqHvTn
QGwJjzdPMzJhFLwnbvMqrTVCCMnvMv
LQQZdGjGdJhFBFQGjLGBJzzsBSWcPflllcfmDmfBsmBWPs
sMppbLDRMQbrTDTJjwcqnfnjwwnw
CgmFgSPHPzHgdmJWZZFzCzZZcVnGGnttWtVVVnccfjVqwVff
PhCChPSNgPgPJhPHhFZgsDNRspsvMNQLRvNDvpbD
pHnVnlRGVpfgpfgCpCTz
LCNQPqZCqNSSZCStzPgTmztwPfzwzT
dbSqhjhqQhNLQLFjLjGvFcRnCcsvRVvvsFnG
QTdnDTDQbCnMdbqdwSmJBljFJZhttJZMSh
HfNfLNzGLsgWBpGJthlZFBSB
ssRPHPfNsWHzZZvrvHfgLzNwnbbVVRwwRbVVcqDTddCVdD
ZhZBrJssjrNsbRtWpjwjlmlm
qTfHzGTfTGqqLGMdCCRcmmRRZcbPMccWmcRw
dVCZdDHdGHQhBVNJSsBhBF
NsplbGDbblHcbCpDlDGDPlPpJjdrVjgrvHnghvVdJrJdvvdn
tQFMZNWSmWFQRzQSwtzFmwFFJdVBghVrnBjVjBgrvVjMvrhJ
FFRmFZZRzQRmFLQSZZWQWFCPCNGcTCpGpfGfLTpblpff
dnhQHqQCnqWwNQCwCRRdJjjJVVPmVVJsJP
LccFRDgfMgLFBJVlmVVmgjrPzZ
pvfGpRpSpTnTQbvbTv
nwNlWwhWwNmJvQQdzdzZGMqDzn
rcVscPfrLcfvjTFcQDqGdZqMzMSHZHjS
LsfbbFcvVgRRblJRNR
Rmrrlmltcffhllfl
DDZMMMFZVsFsWZDSHhPPfgQbPPnQgcHctf
zGMGSBVDWCrvwjtBvm
DCZHwdDwNNGNZDZCjjtpTHLvtlgLbRLttlTL
BzPzBJffJJQgLlRgGztQ
PJffcJhJfNNSwFhGZC
blplfHbwZSfbcbwSbfVSHDHcNvdrvrWsCrvWVCRWnvNndtWW
hQzBTQLLMBWBsnsnNC
zMsgTjqTqPpZHbfp
ZLNNLtfZhRJQtpQhNRttZRqcGFcqGBzjrcqclGScFljjcj
VnvVVPMWHwgJCMvwdcGFdFrGcwzGBG
WHgPJJvWVTgnvgvTHmWCHmsNZRtNRDZpfZQffZZssR
rZgMFMVVjGbVSqZbhftLRDmCGRCNDCtm
cdddQzdWsWnQvzscnfRHmfnDNtLNChRmfH
zplDQdDzwszlDsWdPcldzMFFrFrBFgpqVBZgSgZFrF
gbzfbTvbJgbvzvTvJvJmzvjcBBQSfWDLCSBQQfLZWSCdBHHD
GhnMhsGrMNPPwnwsRPNsFCZDWHZdWBWHdrZLdCHBBC
PsnGsssGNsNRFsLGwMVNccJVmbjcjJblbzTVjlTz
RfBqNfVmPLTTTVRZMMBWjlMvBgbbMs
rHJzDwJdHzQgbMQlWMhd
HtJrpCcHflLPFfpq
SSGtmjQFStDbQbqGWJNnpZwgPsZjnJNNfZ
RdClRMhlldHdlvdThNgwfJNRspNwJpwZcN
CMBLgvvBLhrrBHTCVVLBQrWtbrDGmbtWGtzDQFGb
ZRRCqHpRdztLSqWz
hRsGjMVccGshPVDVcBmfgFFzggFgfBmWWtSd
PVjlGhcGJjGPsGMjjDVrMTpRnvRZlHnZNNQbHppTTC
QjbjWWlndRbwwwQWQdtpTVVZtzRPhHDzThhP
fFfLsvrLCrmvGlSfLSrlPHThDzTztHVtzDzGtTVh
fvrgsfccFLLLSvfMCCSWBjdMqdqNWBdBQNnWld
pjGPvvbllvqGvGjwMbpbRmgSmSwtRtShgSSWWQmW
DffTZLLzFFFTCRJMhWBzhmhgJt
CVVZLLTTsZTFCnMffMTFHffLVpGpNqGjNbNPljqVPcGNGlcv
rvJfztqQJqqrqHHwCzClTbBhDBBDrbSgphbVTrrV
FFGdNWFLGWMmLDbpRwVbgRBp
dmNGmZjMjQwtHCCw
MSGbqbqMbbGDhSSGDhLNBPNcrDPPfzfczPfrnv
rRwsrljslRgslwwgpssCjRtBNvnmPmBmccvmPnmzcP
CjVjsssJQpTCrCCgHJLMSZbhMhWGZhHG
JtBGBFGRVGVLLctRttthLFRBDQlDppljJwNQlpHHQqDHbHHN
szSZTrzdzTSMdzsmsqqQqwdbgDNqgQNjlN
SzmrlWPrlfPMsMZTPtCVCFRhhvhccLFPvL
chmbsMDMMcBnGbZBzZGL
JjjgJrJJggNgtrQSQBLjWBZlGnnB
rFNrFtFCRNVrrsHmMDcsLqMhMF
DLMwrBGgrBBDrcBcNBgWhpGhqVhhqSjqqqmjjp
JfJCZCdtlbZlHHbjWVpPmHWb
lTtZtnFQCztWFzJflZLcsrLFNDRNBcswcLMM
tsVttVCBsCcCqPqwvtqNPQjWDDWjzQQWnpJQSrWJJN
LMRdZvHGgMmZZGGLGLbhLhJpjWrSjndWJpSJrJppJnpj
RhRgLMlmgMGMFGLlTtcBvwcfFCtVvfFT
llBBmtncBglfqwsdwsjdbHwQHm
zGRhPJvFzhvFvMDGFvGPwSWWQpdpHSwSjWjHsWMw
JGFhDPrLTzhLhvFPzPjLjTzFlBqltnCqqBffcTgfnZfCfCnB
QWQGNHQBffCNDMPdRTDLPVMN
hrtlhtzZwJtwwgFgtlJthJJtZMqPVVpLmDVqRDmVPmMPVRTV
SJSSnJwJlsFFvcHSBbfLQHGL
zMNVzhNFsdNssmhlvtQvlttBlVGbTt
wHpFwjHjLFHlwtncTQlnwn
CCpjpqLCLqJggghqRmFsNRFmPszh
CTjmprmNcnmCNVQbstnstvbnQv
jqqdGhHgPRdfRRQvfLQffz
BGgqBhMdgqBHMDDqqMPwgdhSTJNjjmJWWCTCCmwTWZNpmZ
LqSDFFmdqDBDbbBHWl
dQcRpgwRQPngBWHbVWht
vdQMJQCQQvrJNqrTNsSZSmZT
cqrHcHHFNFPLLNPHLWnHHFHFjvlbZfWjSjBjZfSblhbBSbSf
VdVTGwTzTwTpMJslvjfsbbZSvnBClj
nJdGmmTpTTdmNQNNLPPmDFQL
VcjpTTtpcbThJBTTcjBvSPJzJlvPlwfJrgrgvw
dmshCNqnqdhmRsCsqCnrNgPPrPfzrNLfSwSgzl
ddQZdFnhsMttFTbDDD
hLThMTSdfMzzLzTLsFTbwtDvtsFTnttF
pZlNllPWrPCQPQlWNqjrqrjsnfDFbbtbstwswtvDnwtwjt
pCNNQBCClQrplrfHQpQdSRMSVRhJzRchRhGHSh
RZfVfRnTcPQWZcRVcRNSvljQsSSjNvvNqvss
pwbwgmqJhGlNvvzgMM
pthrhpmthmwhHHpLbbdrJmLWWRPTRZnCnPCPBnWTWTZq
nzsJJsMjGMMsQFbnNmLnmCfb
HlllPPTPlWTPDRRDRHcwwhrLLZfQmgmmQCFHvNZCgfggZQ
lPcNTwNWddGsMSttdjzj
bTbJZJDVFdqpBZTFTZJprdcsjjGszmjQszcjzDvsgccv
HHLnhMNCCPhfhCLMlPlnvgGfctscSvtSjGjztQtm
wWNQMPPMwlPHHPnnRLwWpJbrbbqbdppqJVJdZV
gpgpNnnrhwBVWFqgjqqF
ZCTsdRbCGZpZzCSGbWmtMBmWtqBBqdjjmq
LcsTSlplZrJNcQQPvH
DJDpMcqJDcDddNcJPGcJGFfnfZZmZZfRQZRNmVQVnBNn
WWThvSSHFshlSsHvgTHLlzBQfVWwmwnnfmRQWnQVRn
vljlgHjhstHbLhjLjrbPqMGJcJFJCMPrdF
pJlPMpMBrrMcnrBBMMrvdhdgFvmcFdWtmdtftg
bVVRmTRVTVVSVVVzZZqsggFHWTWtWffWFfWdtHdH
RjLQDSzmVsjRRZSZQrCMJDPwlnJJnGGrPB
GRgJtglPGlCrhQQrfW
vSjvZvZHNBjZSvwjvmvNDqhhFqhHrMhrHpfWqQfhpW
NBmwDSbZbvsNNBjmZfJzJgbVnGJbzVzPVRtL
QQZVQCdlVmdZnWmJBrLwSJRdggwdJr
DqHhPhcpvDqPFjhHjtFPssSJNfSBwBvffrgJwwJLBJbr
jpsHcptHsqtPttsjctpFhGlZwCMlWMmWGCWVQnTMVWmz
zzvnHjHWSfnvzpnfSRHdgrrsmWmhVrrwwbTrTmsrwm
NlLNGqqclqlZZCLCGGCPllJhhPJbrmpmrwVshFVsJbwr
DMLDNCZQCGLQGDtQpGtMjRdfdSRSSBtjtBjfjgjS
WBBJfjBQJjftGCbttVJptC
sdlmTHsqNsqpRtGcbWdbnR
svNMhmWHNmvmvHZWTvBQDgSSjDFPSBSFPP
mrlgqncgwHdqWWhRNtRttSvbRwwSvN
jZLCZVZzVcCTcpCDVSBBSbvvRFbfDBSDNS
VPJVpQjTZLjVLJJQGZTZGcQVghsGlmhshlqnghqrdrgldhlW
qwGDMqMFWbFbqbDwMgqgnjfnffffcTTjNnpTfBncZZ
lSdclSltlzPsJlhNNfTQPTmQhpPh
LtllsscLLLvvJlSzWGqwrDGqvbqMwMGb
bnfvnnQsVTdHQDmdNN
fwlttwrfSfLwdGZGmGND
qlPrjjplfSpjSltfttBBsvgzgbgnggBqWVvC
HHrBSmBqBHdHCFcQsc
WqtMDDnMMZhMhcsQVM
bqtbGDLLTTnRPwvGgBNmNrwvjm
RwWzWFwBcdSdMgJW
mrTjVQDQthQvjrvTmggFbbdgSJcJDFgSdg
phhFtvjNvFvTTvmTHZzlGlzZRZLBlzRp
cHlZmZmJSHZcTVGmvZVcGVHlNtbDNbtWFWdtlbCWbWtQDFdr
pwfwgRhngPjjtdWdNtFrdFwT
RTgMpfhBcMJGHqcz
dmCbpCLQVFmCRddCTFLCgZtWPNBhSNNwZWgWZvSwhN
rDzGDjJHhhwzThBS
rJrclsjjsJMJnJMLnbQQQFmRTqLVRT
TgFTGPtrWHzgCJDz
fQbfLwbbFbWjHJHWjd
LvQvwVfQvQhLLLLsmMBfLfBhqchtGFSNSFNqrSqPcqSGttSN
MsMmFgTVMMgMdFVMhdzWqCCBCWjWqBWqhzzL
nHfZDlbvcrDpcpcfDJbNJqGLbCjBmjLzJC
RnDZHwmmTwVMTsMS
NpdpdnjNCRjBnHRPpBDnhSdSwFFLFdScFFWcFWLd
stqMrMZtsQMJmMqvrtqMbstQVchPFWgFVVFVwfWJcSSWVSSV
MQrZzbvMrrrZZtZmstMtMsDRRjPHCGTjBnzpnDHTCGjG
ClGGvDMGMNhNSmFVPbpgFgmFgZPb
WhTTLWsBBWTcrPpggtQpsQFpVb
fBRTqWLjTrzDNhMvCSGDzl
jbzjttVzpbWzWVbTtzWzVwPbPPcwDDccccFNFLMFsm
rlghJZHmCHvHJvRLSNLhhhccNPwcMP
QffmBZRBGtVTBdTG
bDRqHwwRpNPnbppn
FqrlQSQJSVsQrSCmpdPNpcNCcP
jFZjrssjBhrZVhJLLGHfMHfwtqRjMqRTvD
SMMCTBzFfSRhTThCSMRSzzHnJgqGDHQgGVDnqrqnqqnqcQ
ljvjpWPbrWWtrbmDVDlmnDnqVmgJ
bNjsNPrNPtswfZzfTSTBwhSM
hNMNdssdMqdTQchqgNZzHtwmwGHHzmQZGHDH
JrbJvJrvLrPjrPCVCjRBLPbzfRFZmzwHgFHmGHmwFwzFZR
rpbrvVjPCBbCJrCSLSPsTlphNncMglcNTMWMql
fGWGHbrllCCWWllFNPQSZvdPSvdZTffZ
tqssVjJMJWzWVvSvWS
qtwMwDWjnRRwssWjngwjjnhhDcCLhhCFHlcmcbCHFmDC
rFTdFjdRDTTlDWCqvhwLhwZdLS
QzfJfnfsbsJHMnNmHhVpCZwSQSWqSqVQhS
nJnczsHzNMmBJnbnbNwnfzJfcDTltllRTgPlFlgPrTDjPRGl
ZLCGDvvJlvGChSPZWPSsZWdRRN
rQccBwcccnHmQggnVLPLWpgVWPpWzSRs
fmwTfTHnMBTfJDbfftJLvhlL
+1000
View File
@@ -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
View File
@@ -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
+1
View File
@@ -0,0 +1 @@
cmpmbppqmqsqzzrrswrrnqrnqqjzjvzzqvzvjvnnlclrrjhrrrnggmgwwdhhfttmmjrjzrzrhrbrgbrbsbjbcjjvpjjcvjvttfwffjtffqqqldqllhthhljhllfffbfbzbczzznmznnrrtgrgppdcppdfpfjjrggpjgjwgjwgghdggzzshzhrhttmhhdqhqsqgglhljjbggjhggfsfvfggrmggwwbwvvwssqtqzqlqvlqqvtthjhjrjssclscsszhzbztbbdhdbbqfbqqvdqdjjjspsqslsnlljnljjhttdtbdttjpjggtfftlldpdzzqhzqqcwwvggmgmppmhpmpddgjjbzbmzmllndldblbwbswsbbmzzwnnpdndzznmnjnjmnnzwwrqwrqrvqvqmmbmhmzzdqqfnqqgnqqfppmnnqzzvvcfclcrrzfzrzttchttshsphshddrgdggvwgvwwjjzbbprrgwrrcttwbwpwfffqppwnpwpqwwwbmwwjrjprrrsfrfdfrddvdzvzqzgzmgmpgpmmpspdssdlsldsdwssgzgddttqpphllvbvccjzjppffsjsbbvnbvbttgwtgtftzzlhzzjvzvsvtsttfrfrsswpwnwccqtqrqqrhqhjhccpfpgpjgpprnprrscctddqmdqqncqctqqrpqrprwpwnwnrnccmfmdfmfdfnfdnnphhbhttsszgssvhhprprnrsrrvggdllvfvrvbrbsrbrpphhqbbhllpttjmttrstszzwllbsbzzgmzgzbzcbcbjcbbjdjpjtttwggqhhpzpzszqqzhqqhrhlrrrvnrnqrqgrqggzccnnjrrcmmzvmmvtmtltvvlzlmmbnmmbbclljnjhhbjbhbjbbfcbfcfbbqwwftfhttwvwhhwfwcffwvwmmwtwftfjttwdtwdtwttqnttmdtdjtdjjlzjzhjhwwnbbmdmhhjmhmjjwmmpsmmhrrfnnqrqjrrpmpjpzpbzpztppswsmsnnlnppscsgcgsccsfcctbtcctvcvhvjhhccppbrbcrbrmbmvmllnmllgfgmgdmmslmlrmllhttgrrsttlmmnrrrlqqsjjddzzsbsdbbrjbjvbbfwwwglljplpglltlztzvtzzmbzbmbmcchlchcnhccbhhhzrrglgmgwwwwrddvmmvdvvpjpnpspmpsmpsscrrphpdhdllrsspcspsqslsspbbmcbmmdhdwhwpphfhmmfhmhjmjrrhtrtffsddwsddwccvncczlzjzdjzddszdsstgtbthhjhddwppvhvvvwrvwrrpspjpvjjsmsccszzgpzzmjzmzvmvrmmgbglgppbfppvvqffgdgtgpgdgnghhbhgbbpbdbrrjrtjtggvzzvttwbwlbwbttrbttvdttpctcrtrccddfrrmqqjrqqsvqsqzsslnlggmrggnllvdvbvmbmsmwmfmvvdwvwbbnddvfvzzjppbpgpvgppblbzznsscwssqppgbbfwwfmfzzqqgnnjnffvbfvbbfllbhlltvtnvnbnsnddcjcbjbbjpbbhhjghhqjjlttnmmhwmhwwddlppsjppgtthllsclcvvlfvvvlzvlvcccrhrrvqrvvzrvzrrmqqbtbnnwssvhvtttnsttrnnghgdggmgdmmnbnhbhdbddvppvhvlvttzmttljlflvfvpfpwffqbffjllnvlltslsttrvrdrmddtwdwmmlplhlnlffmzzrssvsgsffzjfjcffrcrppzfzbbtltjljtjftfmmmrjmjqmjqmjqmjqjsqqhzzhdhrrcwwbcltfjdgmhvmqmmsclsdgmdqzcvzznwgtdbzgvlpzvdqrvwpmndtzmdpznnplmbvvmffdpbjztvzpwffvqbwmvbmtwjrdpngrftvgznmtzwzmsrvpgpzjcdwvnqplfgncgcdtjbhcqztgqpdhwlmrjbzhcfhnzqmpzzghzpfzbgwmlqztnbdnntgdcfssgzqndhfwdtrbpzbmqjgjflmcllscjnnnrzzsjhnwptjlbhpcwwhsvqqlvjzghnwvzmwtbjgwfgmpdfcjfswvqzwdbnvlwfbmdcjvgjcdhjfbjccsjqrgdrhrjnhgpvvfjqvfwqpgmgfsbsnlrfnbtpzljmzrjmjlldgbvvwbnpqgsnzzmswtwgshdlwhsttdjlhnnlgbprwltbppttctttftrmbjccvwtljqffrcpwnwjgcwjnhmphfsnbfdnfbvzqqlwbnjjdvplrjbflcrwjtrngwzznzhsmnwzfbpjrdmjlwzvrvrblrscjlrmswjpbrtjjbsgzwjnfwwgmnbbppqfnlmfsbpwbdnjmrcvqdhhvrrvmghlbbpfsqzsnbjvrvthnrhlttsnlbgvsdvsmncdglrgpsqjqthnlrhnzpnnjgvrnmdnrtjbmlppfppnmgjhtbzpztdmclgbqjzsgfjllplpnnmjhgpcfcpcmbnwjsdmfmrqvqvjfsrnqhbrzdvwcsmmjvqpjnzbgrhwcwggvvjzbrswplgvbbqhdlqptzjvzcznspjbpvfmgbcfjbgmztmqtlzmzzzpmcdmmvhvnphpcfwcmwqwwqvmwpwhhnspmhrdmjblzhhlphwldfclsfjbzhjglvllldnmtjtwqtztfcvjdngslhnsmmlwlpzdbrrthtwfpjfvfljddplfgnhcnwwmmpgwwspnsprsvprccwvvljwbqwrzqjmwfrnnjbrfsrglnrwdfnsswqwsbpplgnfnvvvhqwmtgsdwmvnzmbjpbscdtcrmsllljwlntjzpwqvvnznmfddtgrmqbdsczhtvjdwrwvjccrqnjlnqbvqhhvnmqmrmnqllcjzcjgzwctrntjsnhrwmcqzrwzzqgqlmbqczlgtmtwlztclhwcjsgbdlfrppwrpbnpgsjfhprvzjwnpdwsjwmdcbmljclcgcnsqcpzgvrrbnnhjhblgnpcbzbcdmgjmpmpcwwdngmggmfqcjcwrzblsfmrslbblhdlwjqrrgtnvcfsccbdgnjcztrblrwbrvdzcnnshwzzvgcqwpqmjzhzlllbtzmcqpnwwqqlcjtrrzfmdpmpblmwztwqdgbmtfggjwnmffzvszgdmhfvflthzmwqgqvgmldzpbwbdvrjldhbnzsthqsczttbbthzgzmmrcmzmzmjfrhbtmsbqrbnsnzzfpvwlwpszdptljqphrdznhbwbfdfhsrqnmlqdcdgbrbsmgwwbbjsmwhzgmqtmfbndzlmlvmrrvrmqbjqbhhqtvvgbhbmsrtljwmtnhtpwjvlrgqljvgpsfrwgdfbcwlmvfdrrlgwvvzvcftwpjhcplgwvqbzftjfbmmcpvrrsvbnwqdhtlsfcjzlrmwvgvgwpbffsrrpdpssqhqrqdglnwcqznzlqqvjzpsdnpwfqtfjqhqwvlfpwrqqmntcnnbfprlwrfdwstvbpjmjdbcdffmwvqbsdnvcgrtccvcfzpwjscmrtbbjjnmlcztbldfnwbqcpqlshthrcbdrfldcmhtgwrgqhnnglbzgdgglzjbgjtdvgzgrspjtbhpmzvpplgjpjbthmjtwqqzsslnfrtmpznbqvmccqccrtdvrssmdgrptsjglvrmlcwfllptczvpgwbdfbrnpzdzmpfjwdhqlsqlzlzrwcsmhcmjhhfhfvcdrzhsmqbwcfshslsnswpslbjnrzqllwbnddhrngmjqtnvhrjpcpmggvgqbwtwcmbvhnwggdrzfgmhhvpqzbvlghsvgmhngwdsrwlzffbpzqmfzvbhbjvqlcswhctpcqnptrvlwblnvpfbzsjnsdjnhqbzddsnthhcfbcvmqgfmvztlcwjbmdtgvgwqbqgdrvbgbnbcnqwzfzqpsgbvtwlphgvqlzshndcbffzcbllgzrzrnhdvqnvtndhcdslqbbhcdftlmnltmsmgfcgvmpbsljdbthjtqlfbmczznwcvfcsnftsnpzcwfqbfhjpswzfzfswfgtzplppsglsdncblddsmftmfdmmnsjjgg
+1032
View File
File diff suppressed because it is too large. Load diff
+99
View File
@@ -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
View File
File diff suppressed because it is too large. Load diff
+12 -7
View File
@@ -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 |}]
;;
+57
View File
@@ -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 {|
#### #### ## #### ### # # ### #####
# # # # # # # # # # # # #
### ### # ### # # # # # # ### #
# # # ## # ### # # ### #
# # # # # # # # # # # #
#### # ### #### # # ## # # #### |}]
;;
+87
View File
@@ -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
View File
@@ -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 |}]
;;
+55
View File
@@ -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
View File
@@ -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
View File
@@ -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
View File
@@ -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
View File
@@ -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
View File
@@ -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
View File
@@ -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 |}]
;;
+57
View File
@@ -0,0 +1,57 @@
open Containers
module CharSet = Set.Make (Char)
let set_of_string string = CharSet.of_list (String.to_list string)
let priority char =
match char with
| 'a' .. 'z' -> 1 + Char.compare char 'a'
| 'A' .. 'Z' -> 27 + Char.compare char 'A'
| _ -> failwith @@ Printf.sprintf "'%c' is not a valid item" char
;;
let part1 () =
let lines = Utils.lines_of_input 3 in
List.fold_left
(fun acc line ->
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 "first and second half of each line should only have 1 intersection"
in
acc + priority item)
0
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 "each group of 3 lines should only have 1 intersection"
in
acc + priority item)
0
groups
;;
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
View File
@@ -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
View File
@@ -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
View File
@@ -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
View File
@@ -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
View File
@@ -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
View File
@@ -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 |}]
;;
+14 -2
View File
@@ -1,7 +1,19 @@
(library
(name aoc)
(libraries stdio re 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
View File
@@ -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)
;;
+14
View File
@@ -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
+124 -1
View File
@@ -1,3 +1,5 @@
open Containers
let lines_of_input day =
let base_path =
match Inputs.Sites.inputs with
@@ -5,5 +7,126 @@ let lines_of_input day =
| _ -> failwith "cant find path containing inputs"
in
let path = Printf.sprintf "%s/day%d.tt" base_path day in
Stdio.In_channel.(with_file path ~f:input_lines)
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
View File
@@ -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
+24
View File
@@ -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