├── python ├── day01.py ├── day02.py ├── day05.py ├── day08.py ├── day09.py ├── day07.py ├── day11.py ├── day03.py ├── day06.py ├── day04.py └── day10.py ├── inputs ├── 06.txt ├── 07.txt ├── 02.txt ├── 01.txt ├── 10.txt ├── 03.txt └── 04.txt ├── LICENCE.txt ├── README.md └── nim ├── day05.nim ├── day08.nim ├── day07.nim ├── day01.nim ├── day02.nim ├── day11.nim ├── day09.nim ├── day04.nim ├── day10.nim ├── day03.nim └── day10out.txt /python/day01.py: -------------------------------------------------------------------------------- 1 | with open('./inputs/01.txt') as f: 2 | instructions = f.readlines() 3 | 4 | changes = [int(line) for line in instructions] 5 | 6 | def solve(changes, frequency=0, seen=None, iterations=0): 7 | seen = seen or {0} 8 | for change in changes: 9 | frequency += change 10 | if frequency in seen: 11 | return frequency, iterations 12 | else: 13 | seen.add(frequency) 14 | iterations += 1 15 | return solve(changes, frequency=frequency, seen=seen, iterations=iterations) 16 | 17 | print('part 1') 18 | print(sum(changes)) 19 | print('part 2') 20 | print(solve(changes)) -------------------------------------------------------------------------------- /inputs/06.txt: -------------------------------------------------------------------------------- 1 | 137, 282 2 | 229, 214 3 | 289, 292 4 | 249, 305 5 | 90, 289 6 | 259, 316 7 | 134, 103 8 | 96, 219 9 | 92, 308 10 | 269, 59 11 | 141, 132 12 | 71, 200 13 | 337, 350 14 | 40, 256 15 | 236, 105 16 | 314, 219 17 | 295, 332 18 | 114, 217 19 | 43, 202 20 | 160, 164 21 | 245, 303 22 | 339, 277 23 | 310, 316 24 | 164, 44 25 | 196, 335 26 | 228, 345 27 | 41, 49 28 | 84, 298 29 | 43, 51 30 | 158, 347 31 | 121, 51 32 | 176, 187 33 | 213, 120 34 | 174, 133 35 | 259, 263 36 | 210, 205 37 | 303, 233 38 | 265, 98 39 | 359, 332 40 | 186, 340 41 | 132, 99 42 | 174, 153 43 | 206, 142 44 | 341, 162 45 | 180, 166 46 | 152, 249 47 | 221, 118 48 | 95, 227 49 | 152, 186 50 | 72, 330 -------------------------------------------------------------------------------- /LICENCE.txt: -------------------------------------------------------------------------------- 1 | MIT License 2 | 3 | Copyright (c) 2017 narimiran 4 | 5 | Permission is hereby granted, free of charge, to any person obtaining a copy 6 | of this software and associated documentation files (the "Software"), to deal 7 | in the Software without restriction, including without limitation the rights 8 | to use, copy, modify, merge, publish, distribute, sublicense, and/or sell 9 | copies of the Software, and to permit persons to whom the Software is 10 | furnished to do so, subject to the following conditions: 11 | 12 | The above copyright notice and this permission notice shall be included in all 13 | copies or substantial portions of the Software. 14 | 15 | THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR 16 | IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, 17 | FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE 18 | AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER 19 | LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, 20 | OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE 21 | SOFTWARE. 22 | -------------------------------------------------------------------------------- /python/day02.py: -------------------------------------------------------------------------------- 1 | from collections import Counter 2 | 3 | with open('./inputs/02.txt') as f: 4 | ids = f.readlines() 5 | 6 | def count23(id): 7 | count = Counter(id) 8 | exactly_two = bool({k for k, v in count.items() if v == 2}) 9 | exactly_three = bool({k for k, v in count.items() if v == 3}) 10 | return exactly_two, exactly_three 11 | 12 | def solve(ids): 13 | twos = 0 14 | threes = 0 15 | for id in ids: 16 | two, three = count23(id) 17 | twos += two 18 | threes += three 19 | return twos, threes 20 | 21 | test = """ 22 | abcdef 23 | bababc 24 | abbcde 25 | abcccd 26 | aabcdd 27 | abcdee 28 | ababab 29 | """ 30 | 31 | test_ids = test.splitlines() 32 | 33 | print(count23('bababc')) 34 | a, b = solve(test_ids) 35 | print(a, b, a*b) 36 | a, b = solve(ids) 37 | print(len(ids)) 38 | print(a, b, a*b) 39 | 40 | # second part 41 | 42 | # distance bewteen ids 43 | def distance(id1, id2): 44 | return sum([0 if c1 == c2 else 1 for c1, c2 in zip(id1, id2)]) 45 | 46 | print(distance("abcde", "axcye")) 47 | 48 | # cycle over all pairs of ids 49 | for i, id1 in enumerate(ids): 50 | for id2 in ids[(i+1):]: 51 | dist = distance(id1, id2) 52 | if dist == 1: 53 | break 54 | if dist == 1: 55 | break 56 | print(id1) 57 | print(id2) 58 | print(''.join([c for i, c in enumerate(id1) if id2[i] == c])) -------------------------------------------------------------------------------- /README.md: -------------------------------------------------------------------------------- 1 | # Advent of Code 2018 2 | 3 | Forked from [narimiran's AoC 2017](https://github.com/narimiran/AdventOfCode2017), I plan to progressively fill in my solution for [Advent of Code 2018](https://adventofcode.com/2018). 4 | 5 | My goal is to have fun and learn [Nim](https://nim-lang.org/). Since I know better Python, I will try first to solve the puzzle using Python. Then port the code to Nim. Since I really want to learn Nim, I will not submit a solution until the Nim code works. 6 | 7 |   8 | 9 | Task | Python solution | Nim solution | Learning Notes 10 | --- | --- | --- | --- 11 | [Day 1: Chronal Calibration](http://adventofcode.com/2018/day/1) | [day01.py](python/day01.py) | [day01.nim](nim/day01.nim) | At first I was not able to get Nim as fast as Python, still have to check exact times (remember to use d:release flag for nim) 12 | [Day 2: Inventory Management System](http://adventofcode.com/2018/day/2) | [day02.py](python/day02.py) | [day02.nim](nim/day02.nim) | Had some hard time finding out an issue with CountTable in proc (see mega thread in forum), in the end my solution was more correct than the python one 13 | [Day 3: No Matter How You Slice It](http://adventofcode.com/2018/day/3) | [day03.py](python/day03.py) | [day03.nim](nim/day03.nim) | Learned about objects and custom types in nim, code with a lot of parallelism between python and nim (I did not use numpy and arraymancer, but I should later on) 14 | -------------------------------------------------------------------------------- /nim/day05.nim: -------------------------------------------------------------------------------- 1 | import sequtils, strutils 2 | 3 | const testInput = "dabAcCaCBAcCcaDA" 4 | const myInput = readFile("./inputs/05.txt") 5 | 6 | proc match(a, b: char): bool = 7 | if a.toLowerAscii == b.toLowerAscii and a != b: 8 | return true 9 | return false 10 | 11 | proc solve(s: var seq[char]) = 12 | var i = 0 13 | while i < s.len - 1: 14 | if s[i].match(s[i+1]): 15 | s.delete(i) # watch out for del proc which does something different! 16 | s.delete(i) 17 | if i > 0: 18 | dec i 19 | else: 20 | inc i 21 | 22 | var 23 | sequence: seq[char] 24 | 25 | echo "test input" 26 | sequence = toSeq(testInput.items) 27 | echo sequence.len 28 | solve(sequence) 29 | echo sequence.join("") 30 | echo sequence.len 31 | 32 | echo "my input" 33 | sequence = toSeq(myInput.items) 34 | echo sequence.len 35 | solve(sequence) 36 | echo sequence.len 37 | # takes much more time than python! why? because of the sequence? 38 | # ah, possibly because of not doing it in release mode... 39 | 40 | # part 2 41 | const alphabet = toSeq("abcdefghijklmnopqrstuvwxyz".items) 42 | 43 | proc solve2(text: string): int = 44 | var 45 | minLen = 12_000 46 | minChar = '.' 47 | newInput: string 48 | newInputSeq: seq[char] 49 | newLen: int 50 | 51 | for c in alphabet: 52 | newInput = text.replace($c, "") 53 | newInput = newInput.replace($(c.toUpperAscii), "") 54 | newInputSeq = toSeq(newInput.items) 55 | solve(newInputSeq) 56 | newLen = newInputSeq.len 57 | if newLen < minLen: 58 | minLen = newLen 59 | minChar = c 60 | echo minChar 61 | return minLen 62 | 63 | echo solve2(testInput) 64 | echo solve2(myInput) -------------------------------------------------------------------------------- /nim/day08.nim: -------------------------------------------------------------------------------- 1 | import strutils, sequtils, algorithm, strformat, math 2 | 3 | let test_input = "2 3 0 3 10 11 12 1 1 0 1 99 2 1 1 2" 4 | 5 | proc process(text: string): seq[int] = 6 | reversed(text.split.map(parseInt)) 7 | 8 | var sequence: seq[int] 9 | 10 | sequence = process(test_input) 11 | echo test_input 12 | echo sequence 13 | 14 | type 15 | Node = ref object 16 | numChildren, numMetas: int 17 | children: seq[Node] 18 | metas: seq[int] 19 | 20 | proc initNode(sequence: var seq[int]): Node = 21 | var node: Node 22 | # why do I need this initialization? without it the rest will not work 23 | result = Node(numChildren: 0, numMetas: 0, children: @[], metas: @[]) 24 | result.numChildren = sequence.pop() 25 | result.numMetas = sequence.pop() 26 | result.children = @[] 27 | for i in 1 .. result.numChildren: 28 | result.children.add(initNode(sequence)) 29 | result.metas = @[] 30 | for i in 1 .. result.numMetas: 31 | result.metas.add(sequence.pop()) 32 | 33 | var root = initNode(sequence) 34 | echo root.numChildren 35 | const tabStr = " " 36 | 37 | proc `$`(node: Node, tab: int = 0, deep: bool = true): string = 38 | result = "" 39 | for i in 1 .. tab: 40 | result &= " " 41 | result &= fmt"Node(numChildren={node.numChildren}, numMetas={node.numMetas}, metas={node.metas})" 42 | if not deep: 43 | return result 44 | for child in node.children: 45 | result &= "\n" & `$`(child, tab + 1) 46 | echo $root 47 | 48 | proc sumMetas(node: Node): int = 49 | result += sum(node.metas) 50 | for child in node.children: 51 | result += child.sumMetas() 52 | 53 | echo root.sumMetas() 54 | 55 | proc value(node: Node): int = 56 | if node.numChildren == 0: 57 | return sum(node.metas) 58 | for i in node.metas: 59 | if 0 < i and i <= node.numChildren: 60 | result += node.children[i-1].value() 61 | 62 | echo root.value() 63 | 64 | # real case: 65 | const input = readFile("./inputs/08.txt") 66 | sequence = process(input) 67 | root = initNode(sequence) 68 | echo root.sumMetas() 69 | echo root.value() 70 | -------------------------------------------------------------------------------- /python/day05.py: -------------------------------------------------------------------------------- 1 | test_input = "dabAcCaCBAcCcaDA" 2 | with open('./inputs/05.txt') as f: 3 | my_input = f.read() 4 | 5 | def match(a, b): 6 | if a.lower() == b.lower() and a != b: 7 | return True 8 | return False 9 | 10 | print("xx", match("x", "x")) 11 | 12 | def solve(s, verbose=0): 13 | i = 0 14 | if verbose == 1: 15 | print(''.join(s)) 16 | while i < len(s) - 1: 17 | if match(s[i], s[i+1]): 18 | # print(i, s[i], s[i+1]) 19 | if verbose == 2: 20 | print(f"{s[i]}{s[i+1]}") 21 | del s[i] 22 | del s[i] # of course I should not do: del s[i+1]!! :) 23 | # print(s) 24 | if i > 0: 25 | i -= 1 26 | if verbose == 1: 27 | print(''.join(s)) 28 | else: 29 | i += 1 30 | sequence = list(test_input) 31 | # print(sequence) 32 | print(len(sequence)) 33 | solve(sequence) 34 | print(''.join(sequence)) 35 | print(len(sequence)) 36 | 37 | # my input 38 | sequence = list(my_input) 39 | print(len(sequence)) 40 | solve(sequence) 41 | print(len(sequence)) 42 | 43 | # my input - reduced 44 | # sequence = list(my_input)[:100] 45 | # print(len(sequence)) 46 | # solve(sequence, verbose=True) 47 | # print(len(sequence)) 48 | 49 | # part 2 50 | alphabet = list('abcdefghijklmnopqrstuvwxyz') 51 | print(len(alphabet), ''.join(alphabet)) 52 | 53 | def solve2(text, verbose=0): 54 | min_len = 12_000 55 | min_char = '.' 56 | for c in alphabet: 57 | # print(c) 58 | new_input = text.replace(c, '') 59 | new_input = new_input.replace(c.upper(), '') 60 | if verbose > 0: 61 | print(new_input) 62 | new_input = list(new_input) 63 | solve(new_input, verbose=verbose) 64 | new_len = len(new_input) 65 | if verbose > 0: 66 | print(''.join(new_input)) 67 | # print(new_len) 68 | if new_len < min_len: 69 | min_len= new_len 70 | min_char = c 71 | return min_char, min_len 72 | 73 | print(solve2(test_input)) 74 | print(solve2(my_input)) -------------------------------------------------------------------------------- /python/day08.py: -------------------------------------------------------------------------------- 1 | test_input = "2 3 0 3 10 11 12 1 1 0 1 99 2 1 1 2" 2 | 3 | class node: 4 | 5 | def __init__(self, sequence): 6 | # reversed sequence of integer 7 | self.num_children = sequence.pop() 8 | self.num_meta = sequence.pop() 9 | self.children = list() 10 | for _ in range(self.num_children): 11 | self.children.append(node(sequence)) 12 | self.meta = list() 13 | for _ in range(self.num_meta): 14 | self.meta.append(sequence.pop()) 15 | 16 | def __repr__(self, tab=0, deep=True): 17 | text = f"{tab*' '}Node(num_children={self.num_children}, num_meta={self.num_meta}, meta={self.meta})" 18 | if not deep: 19 | return text 20 | tab += 1 21 | for child in self.children: 22 | text += f"\n{child.__repr__(tab)}" 23 | return text 24 | 25 | def sum_metas(self): 26 | sum_metas = sum(self.meta) 27 | for child in self.children: 28 | sum_metas += child.sum_metas() 29 | return sum_metas 30 | 31 | def value(self): 32 | # print(self.__repr__(deep=False)) 33 | if self.num_children == 0: 34 | return sum(self.meta) 35 | value = 0 36 | for m in self.meta: 37 | if 0 < m <= len(self.children): 38 | value += self.children[m-1].value() 39 | return value 40 | 41 | # def __iter__(self): 42 | # return self 43 | 44 | # def __next__(self): 45 | # yield self 46 | # for child in self.children: 47 | # for node in child: 48 | # yield node 49 | 50 | sequence = test_input.split() 51 | sequence.reverse() 52 | sequence = list(map(lambda x: int(x), sequence)) 53 | root = node(sequence) 54 | print(root) 55 | 56 | # summing all metas 57 | print(root.sum_metas()) 58 | print(root.value()) # part 2 59 | 60 | # real case 61 | # real case: 62 | with open('./inputs/08.txt') as f: 63 | input = f.read() 64 | sequence = input.split() 65 | sequence.reverse() 66 | sequence = list(map(lambda x: int(x), sequence)) 67 | root = node(sequence) 68 | print(root.sum_metas()) 69 | print(root.value()) # part 2 70 | -------------------------------------------------------------------------------- /nim/day07.nim: -------------------------------------------------------------------------------- 1 | let test_input = """Step C must be finished before step A can begin. 2 | Step C must be finished before step F can begin. 3 | Step A must be finished before step B can begin. 4 | Step A must be finished before step D can begin. 5 | Step B must be finished before step E can begin. 6 | Step D must be finished before step E can begin. 7 | Step F must be finished before step E can begin.""" 8 | #1234567890123456789012345678901234567 9 | # 1 2 3 10 | # * (5) * (36) 11 | 12 | import tables, strutils, algorithm, sequtils 13 | 14 | # I would like nodes to be a set but then I do not find easy functions on it 15 | proc process(text: string): (seq[char], Table[char, set[char]]) = 16 | var nodes: seq[char] 17 | var arrows = initTable[char, set[char]](1024) 18 | var a, b: char 19 | # process input 20 | for line in text.splitLines(): 21 | a = line[5] 22 | b = line[36] 23 | nodes.add(a) 24 | nodes.add(b) 25 | if arrows.hasKey(b): 26 | arrows[b].incl(a) 27 | else: 28 | arrows[b] = {a} 29 | return (nodes, arrows) 30 | 31 | var nodes: seq[char] 32 | var arrows: Table[char, set[char]] 33 | 34 | (nodes, arrows) = process(test_input) 35 | echo nodes 36 | echo arrows 37 | 38 | # solve data 39 | proc solve(nodes: var seq[char], arrows: var Table[char, set[char]]): seq[char] = 40 | var sequence: seq[char] 41 | var select: char 42 | var available: seq[char] 43 | var arrowsNew = initTable[char, set[char]](1024) 44 | while len(nodes) > 0: 45 | available = nodes.filterIt(not arrows.hasKey(it)) 46 | select = sorted(available, system.cmp)[0] 47 | sequence.add(select) 48 | nodes.keepItIf(it != select) 49 | clear[char, set[char]](arrowsNew) 50 | for k, v in arrows: 51 | var v = v 52 | if select in v: 53 | v.excl(select) 54 | if card(v) > 0: 55 | arrowsNew[k] = v 56 | arrows = arrowsNew 57 | return sequence 58 | 59 | var solution = solve(nodes, arrows) 60 | 61 | echo solution.join("") 62 | 63 | const input = readFile("./inputs/05.txt") 64 | 65 | (nodes, arrows) = process(input) 66 | solution = solve(nodes, arrows) 67 | echo solution.join("") -------------------------------------------------------------------------------- /nim/day01.nim: -------------------------------------------------------------------------------- 1 | # Learning: splitLines and parseInt from strutils, map from sequtils, sum from math 2 | import strutils, sequtils, math 3 | 4 | # Learning: built in set can only hold int8 or int16, but we need bigger ints for our input data 5 | # Note that the error is seen already in visual code! I think this is because I am using const, nice! 6 | # const changes = map(readFile("./inputs/01.txt").splitLines, proc(x: string): int16 = int16 parseInt(x)) 7 | # to manage any type (that can be hashed) into a set, there is HashSet 8 | # also from gitter, I lerned there is also the option of IntSets (module intsets) - have not tried. 9 | import sets 10 | const changes = map(readFile("./inputs/01.txt").splitLines, proc(x: string): int = parseInt(x)) 11 | 12 | # watch out for some variables that need to be passed with var keyword. Also for multiple returns another options would have been (int, int) 13 | proc solve(changes : seq[int], frequency : var int, seen : var HashSet[int], iterations : var int): tuple[frequency: int, iterations: int] = 14 | for change in changes: 15 | frequency += change 16 | if frequency in seen: 17 | return (frequency, iterations) 18 | else: 19 | seen.incl(frequency) 20 | inc iterations 21 | solve(changes, frequency, seen, iterations) 22 | 23 | # Learning: this is not valid, the following is a valid way to initialize a HashSet (while for built-int sets this would have worked) 24 | # const emptySet : HashSet[int] = {0} 25 | var initialFrequency = 0 26 | # the initialization size is crucial for performance: too small and the set will be continously recreated every time the size increase beyond the initial limit 27 | var initialSet = initSet[int](2^17) # weird that it accepts only powers of two, it could accept directly the log 2 of size, then. 28 | initialSet.incl(initialFrequency) 29 | var iterations = 0 30 | var frequency : int 31 | 32 | # Question: how do I do this? tried also $type(instructions) but it did not work! 33 | # echo type(instructions) 34 | # actually I can see the types in the IDE (Visual Code), so I should not be too worried about printing them... (I guess this is a Python reflex, where type can keep changing) 35 | echo "part 1" 36 | frequency = sum(changes) 37 | echo "frequency: ", frequency 38 | echo "part 2" 39 | (frequency, iterations) = solve(changes, initialFrequency, seen = initialSet, iterations = iterations) 40 | echo "frequency: ", frequency, " iterations: ", iterations 41 | -------------------------------------------------------------------------------- /nim/day02.nim: -------------------------------------------------------------------------------- 1 | import tables, strutils 2 | 3 | var counter = initCountTable[char]() 4 | var test = "abc" 5 | 6 | echo counter 7 | for c in test: 8 | echo c 9 | counter.inc(c) 10 | echo counter 11 | echo counter 12 | 13 | proc countChars(text : string) : CountTable[char] = 14 | echo result 15 | for c in text: 16 | echo c 17 | result.inc(c) 18 | echo result 19 | 20 | # this throws an error and I cannot understand why! 21 | # echo countChars(test) 22 | #[ output: 23 | {:} 24 | a 25 | {'a': 1} 26 | b 27 | {'a': 1, 'b': 1} 28 | c 29 | {'a': 1, 'b': 1, 'c': 1} 30 | {'a': 1, 'b': 1, 'c': 1} 31 | {:} 32 | a 33 | day02.nim(22) day02 34 | day02.nim(19) countChars 35 | tables.nim(1004) inc 36 | system.nim(414) rawGet 37 | system.nim(2830) sysFatal 38 | Error: unhandled exception: index out of bounds [IndexError] 39 | Error: execution of an external program failed: 'C:\Users\ppeterlongo\Documents\nim\AdventOfCode2018\nim\day02.exe ' 40 | ]# 41 | 42 | const ids = readFile("./inputs/02.txt").strip().splitLines() 43 | 44 | echo ids[0] 45 | # echo countChars(ids[0]) 46 | 47 | var twos = 0 48 | var threes = 0 49 | var hasTwo : bool 50 | var hasThree : bool 51 | echo len ids 52 | for id in ids: 53 | clear(counter) 54 | # echo id 55 | for c in id: 56 | counter.inc(c) 57 | # echo counter 58 | hasTwo = false 59 | hasThree = false 60 | for k, v in counter: 61 | if v == 2: 62 | hasTwo = true 63 | elif v == 3: 64 | hasThree = true 65 | if hasTwo: 66 | twos += 1 67 | if hasThree: 68 | threes += 1 69 | echo twos 70 | echo threes 71 | echo twos*threes 72 | 73 | # second part 74 | 75 | # distance bewteen ids 76 | var id1 : string 77 | var id2 : string 78 | var dist : int 79 | 80 | id1 = "abcde" 81 | id2 = "axcye" 82 | dist = 0 83 | for i in 0.. 2: 6 | return parseInt($ns[^3]) 7 | return 0 8 | 9 | echo 12.hundredDigit 10 | echo 123.hundredDigit 11 | echo 43210.hundredDigit 12 | echo 4321.hundredDigit 13 | 14 | proc powerLevel(x, y, serial: int): int {.memoized.} = 15 | let rackId = x + 10 16 | hundredDigit((rackId*y + serial)*rackId) - 5 17 | 18 | echo powerLevel(3, 5, 8) 19 | echo(power_level(122, 79, 57), "== -5") 20 | echo(power_level(217, 196, 39), "== 0") 21 | echo(power_level(101, 153, 71), "== 4") 22 | 23 | # non memo version 24 | proc squareTotalPower(x, y, serial, size: int): int = 25 | for i in 0 ..< size: 26 | for j in 0 ..< size: 27 | result += powerLevel(x + i, y + j, serial) 28 | 29 | proc squareTotalPowerMemo(x, y, serial, size: int): int {.memoized.} = 30 | if size <= 3: 31 | return squareTotalPower(x, y, serial, size) 32 | result += squareTotalPowerMemo(x, y, serial, size - 1) 33 | for i in 0 ..< size: # side plus corner 34 | result += powerLevel(x + i, y + size - 1, serial) 35 | for j in 0 ..< size - 1: # only side 36 | result += powerLevel(x + size - 1, y + j, serial) 37 | 38 | echo squareTotalPower(33, 45, 18, 3) 39 | echo squareTotalPower(21, 61, 42, 3) 40 | 41 | proc solve(serial, sizeLow, sizeHigh: int) = 42 | const sizeGrid = 300 43 | var 44 | power: int 45 | maxPower = -100 46 | xs = -1 47 | ys = -1 48 | sizeBest = -1 49 | coordHigh: int 50 | for sizeSquare in sizeLow .. sizeHigh: 51 | coordHigh = (sizeGrid - sizeSquare + 1) 52 | for x in 1 .. coordHigh: 53 | for y in 1 .. coordHigh: 54 | # use squareTotalPower to avoid memoization 55 | power = squareTotalPowerMemo(x, y, serial, sizeSquare) 56 | if power > maxPower: 57 | maxPower = power 58 | xs = x 59 | ys = y 60 | sizeBest = sizeSquare 61 | echo xs, ",", ys, ",", sizeBest, " (", maxPower, ")" 62 | 63 | var time = cpuTime() 64 | const mySerial = 1309 65 | solve(mySerial, 3, 3) 66 | echo "Time taken: ", cpuTime() - time 67 | 68 | # default compile 69 | # Time taken: 1.203983 70 | # with compile flag -d:release 71 | # Time taken: 0.19564 72 | 73 | # my first template 74 | # in some blogs (e.g. Hookrace) you find stmt/expr instead of untyped/typed 75 | template timeIt(body: untyped): untyped = 76 | # I need to have a time variable declared before 77 | time = cpuTime() 78 | body 79 | echo "Time taken: ", cpuTime() - time 80 | 81 | # part 2 82 | echo "tests part 2" 83 | timeIt solve(18, 3, 20) 84 | timeIt solve(42, 3, 20) 85 | echo "solution part 2" 86 | timeIt solve(mySerial, 3, 20) 87 | # times without memoization (but in d:release compile mode) 88 | # tests part 2 89 | # 90,269,16 (113) 90 | # Time taken: 35.002495 91 | # 232,251,12 (119) 92 | # Time taken: 39.802366 93 | # solution part 2 94 | # 233,271,13 (108) 95 | # Time taken: 47.442567 96 | 97 | # times with memoization (and d:release mode!) 98 | # tests part 2 99 | # 90,269,16 (113) 100 | # Time taken: 3.64298 101 | # 232,251,12 (119) 102 | # Time taken: 4.014614999999999 103 | # solution part 2 104 | # 233,271,13 (108) 105 | # Time taken: 3.121841 106 | 107 | # very nice, I see a 5-7x improvement over equivalent python version 108 | 109 | # In principle in Nim I could add a compile flag to try with and without memoization with a minimal change to the code? 110 | # in solve I would use when keyword, but for the pragmas how would it work?? -------------------------------------------------------------------------------- /nim/day09.nim: -------------------------------------------------------------------------------- 1 | import strformat 2 | 3 | # test inputs 4 | var num_players = 9 5 | var highest_marble = 25 6 | 7 | # string are not immutable as in python! I can replace the index 8 | var text = "hello" 9 | echo text 10 | text[1] = 'u' 11 | echo text 12 | 13 | type 14 | Circle = ref object 15 | marbles: seq[int] 16 | current: int 17 | 18 | proc initCircle(): Circle = 19 | result = Circle(marbles: @[0], current: 0) # I always need to initialize in this way? 20 | 21 | var circle = initCircle() 22 | 23 | proc `$`(c: Circle): string = 24 | for i, m in c.marbles: # no need for enumerate 25 | if i == c.current: 26 | result &= fmt" ({m})" 27 | else: 28 | result &= fmt" {m} " 29 | 30 | echo circle 31 | 32 | # I like the fact that I can spread the methods around (and test them one by one) 33 | proc index(c: Circle, offset: int): int = 34 | result = (c.current + offset) mod c.marbles.len() + 1 35 | if result < 0: 36 | result += c.marbles.len 37 | 38 | proc add(c: var Circle, marble: int, offset: int = 1) = 39 | c.current = c.index(offset) 40 | c.marbles.insert(marble, c.current) 41 | 42 | for m in 1 .. 5: 43 | circle.add(m) 44 | echo circle 45 | 46 | proc remove(c: var Circle, offset: int = -8): int = 47 | c.current = c.index(offset) 48 | # echo "removing at index ", c.current 49 | result = c.marbles[c.current] 50 | c.marbles.delete(c.current) 51 | 52 | var removed: int 53 | for m in 6 .. highest_marble: 54 | if m mod 23 == 0: 55 | echo "not adding ", m 56 | removed = circle.remove() 57 | echo "removed ", removed 58 | else: 59 | circle.add(m) 60 | echo circle 61 | 62 | # I forgot to use Nim's convention for variables... 63 | proc play(num_players, highest_marble: int): seq[int] = 64 | for i in 1 .. num_players: 65 | result.add(0) 66 | var current = 0 67 | var circle = initCircle() 68 | for m in 1 .. highest_marble: 69 | if m mod 23 == 0: 70 | # echo "not adding ", m 71 | # echo circle 72 | result[current] += m 73 | removed = circle.remove() 74 | result[current] += removed 75 | else: 76 | circle.add(m) 77 | current += 1 78 | if current == result.len: 79 | current = 0 80 | 81 | var players = play(num_players, highest_marble) 82 | echo players 83 | echo players.max 84 | 85 | let 86 | gamePlayers = @[10, 13, 17, 21, 30, 452] 87 | gameHighestMarbles = @[1618, 7999, 1104, 6111, 5807, 70784] 88 | 89 | import times 90 | var time = cpuTime() 91 | 92 | for i in 0 .. gamePlayers.high: 93 | num_players = gamePlayers[i] 94 | highest_marble = gameHighestMarbles[i] 95 | time = cpuTime() 96 | players = play(num_players, highest_marble) 97 | echo fmt"{num_players} players; last marble is worth {highest_marble} points: high score is {players.max}" 98 | echo "time taken ", cpuTime() - time 99 | 100 | # oddly enough my first correct nim version is much slower than python's version 101 | # but I should compare with flag d:release 102 | 103 | # part 2 104 | num_players = gamePlayers[gamePlayers.high] 105 | highest_marble = gameHighestMarbles[gameHighestMarbles.high]*100 106 | echo fmt"{num_players} players; last marble is worth {highest_marble} points:" 107 | time = cpuTime() 108 | players = play(num_players, highest_marble) 109 | echo fmt"{num_players} players; last marble is worth {highest_marble} points: high score is {players.max}" 110 | echo "time taken ", cpuTime() - time 111 | # compiled with flag d:release 112 | # 1.5 secs 113 | # *2: 5 secs (around *3 times) 114 | # *4: 29 secs (around *6 times) 115 | # *8: 96 secs (around *3 times than previous) 116 | # estimate for *8*2*2*2*2=128 is 1.5 mins *3*3*3*3=81 is around 2 hours (or 16 times that...) 117 | # what if I change the above to use array instead of sequences? -------------------------------------------------------------------------------- /python/day07.py: -------------------------------------------------------------------------------- 1 | test_input = """Step C must be finished before step A can begin. 2 | Step C must be finished before step F can begin. 3 | Step A must be finished before step B can begin. 4 | Step A must be finished before step D can begin. 5 | Step B must be finished before step E can begin. 6 | Step D must be finished before step E can begin. 7 | Step F must be finished before step E can begin.""" 8 | #1234567890123456789012345678901234567 9 | # 1 2 3 10 | # * (5) * (36) 11 | 12 | def process(text): 13 | nodes = set() 14 | arrows = {} 15 | for line in text.split('\n'): 16 | a = line[5] 17 | b = line[36] 18 | nodes = nodes.union({a, b}) 19 | if b in arrows: 20 | arrows[b].add(a) 21 | else: 22 | arrows[b] = {a} 23 | return nodes, arrows 24 | 25 | nodes, arrows = process(test_input) 26 | print(nodes) 27 | print(arrows) 28 | 29 | def solve(nodes, arrows): 30 | sequence = [] 31 | while nodes: 32 | select = sorted([e for e in nodes if e not in arrows.keys()])[0] 33 | sequence.append(select) 34 | nodes.remove(select) 35 | arrows = {k: v - {select} if select in v else v for k, v in arrows.items() if select not in v or len(v) > 1} 36 | return sequence 37 | 38 | sequence = solve(nodes, arrows) 39 | 40 | print(''.join(sequence)) 41 | 42 | # real case: 43 | with open('./inputs/07.txt') as f: 44 | input = f.read() 45 | 46 | nodes, arrows = process(input) 47 | sequence = solve(nodes, arrows) 48 | print(''.join(sequence)) 49 | 50 | # part 2: 51 | def time_to_complete(node, base_time=0): 52 | return base_time + ord(node) - ord('A') + 1 53 | 54 | print('A', time_to_complete('A')) 55 | print('C', time_to_complete('C')) 56 | 57 | max_time = 10000 58 | 59 | def parallel_solve(nodes, arrows, num_workers, base_time=0): 60 | todo = {e: 0 for e in nodes} 61 | done = [] 62 | time = -1 63 | workers = [[] for i in range(num_workers)] 64 | while todo: 65 | # print("todo", todo) 66 | print("done", done) 67 | # print("arrows", arrows) 68 | time += 1 69 | if time >= max_time: 70 | break 71 | print("time", time) 72 | available = sorted([e for e in todo.keys() if todo[e] == 0 and e not in arrows.keys()], reverse=True) 73 | print("available", available) 74 | # assign nodes to worker not already working 75 | for i, worker in enumerate(workers): 76 | # print("worker", worker) 77 | # not already working 78 | if time + 1 != len(worker): 79 | # print("not working") 80 | # if there is a node available to process: 81 | if available: 82 | worker.append(available.pop()) 83 | print("assigned", worker[-1], "to worker", i) 84 | else: 85 | worker.append('.') 86 | # print("goes idle") 87 | continue 88 | # now it is for sure working on something 89 | something = worker[time] 90 | todo[something] += 1 91 | if todo[something] == time_to_complete(something, base_time=base_time): 92 | # if done on this node 93 | print("worker", i, "completed", something) 94 | todo.pop(something) 95 | done.append(something) 96 | arrows = {k: v - {something} if something in v else v for k, v in arrows.items() if something not in v or len(v) > 1} 97 | else: 98 | # if not done, next step I will still be working on this 99 | worker.append(something) 100 | # print(worker) 101 | return time + 1, done, workers 102 | 103 | nodes, arrows = process(test_input) 104 | time, done, workers = parallel_solve(nodes, arrows, num_workers=2) 105 | print(time) 106 | print(done) 107 | print(workers) 108 | 109 | print("\npart 2") 110 | nodes, arrows = process(input) 111 | print(nodes) 112 | time, done, workers = parallel_solve(nodes, arrows, num_workers=5, base_time=60) 113 | print(time) 114 | print(done) 115 | -------------------------------------------------------------------------------- /nim/day04.nim: -------------------------------------------------------------------------------- 1 | # regular expressions in nim. there are (currently) 2 packages in stdlib: re and nre 2 | # see: https://github.com/nim-lang/Nim/issues/7278 3 | # let's try first re 4 | import re, strutils 5 | 6 | # 0: day 1: hour 2: minute 3: id 4: asleep 5: awake 7 | let pattern = re"\[\d{4}-(\d{2}-\d{2}) (\d{2}):(\d{2})\] (?:Guard #(\d+) begins shift)?(falls asleep)?(wakes up)?" 8 | 9 | var matches: array[6, string] 10 | 11 | let test_input = """[1518-11-01 00:00] Guard #10 begins shift 12 | [1518-11-01 00:05] falls asleep 13 | [1518-11-01 00:25] wakes up 14 | [1518-11-01 00:30] falls asleep 15 | [1518-11-01 00:55] wakes up 16 | [1518-11-01 23:58] Guard #99 begins shift 17 | [1518-11-02 00:40] falls asleep 18 | [1518-11-02 00:50] wakes up 19 | [1518-11-03 00:05] Guard #10 begins shift 20 | [1518-11-03 00:24] falls asleep 21 | [1518-11-03 00:29] wakes up 22 | [1518-11-04 00:02] Guard #99 begins shift 23 | [1518-11-04 00:36] falls asleep 24 | [1518-11-04 00:46] wakes up 25 | [1518-11-05 00:03] Guard #99 begins shift 26 | [1518-11-05 00:45] falls asleep 27 | [1518-11-05 00:55] wakes up""" 28 | 29 | # processing test input 30 | for line in test_input.splitLines(): 31 | echo line 32 | if match(line, pattern, matches): 33 | echo matches 34 | # bizarre behaviour, last element of array is not reset when no match is given! ("wakes up" always appear after processing line 3!) 35 | 36 | # I will do something different from python: a Table (similar to a python dict) of guards minutes 37 | import tables, math 38 | 39 | # not seeing in the documentation the fact that [A,B] refer to types of key, values of table 40 | var guards = initTable[int, array[60, int]](1024) # remember to set an adequate initial size! 41 | 42 | var id, minute: int 43 | var events: seq[int] 44 | var minutes: array[60, int] 45 | 46 | proc zero(minutes: var array[60, int]) = 47 | for i in minutes.low .. minutes.high: # better way to zero again an array? 48 | minutes[i] = 0 49 | 50 | 51 | proc update(minutes: var array[60, int], events: seq[int]) = 52 | for i in 0 ..< (events.len div 2): 53 | for j in events[2*i] ..< events[2*i + 1]: 54 | inc minutes[j] 55 | 56 | minutes.update(@[5, 10]) 57 | echo minutes 58 | minutes.update(@[5, 15]) 59 | echo minutes 60 | zero(minutes) 61 | echo minutes 62 | 63 | proc process(text: string): Table[int, array[60, int]] = 64 | result = initTable[int, array[60, int]](1024) 65 | for line in text.splitLines(): 66 | if not match(line, pattern, matches): 67 | echo "cannot understand this line: ", line 68 | continue 69 | if matches[3].len > 0: # id: update guard table with last shift and create new shift 70 | if id != 0: # first pass id is == 0 71 | # update guards 72 | if not guards.hasKey(id): 73 | zero(minutes) 74 | result[id] = minutes 75 | result[id].update(events) 76 | # create new shift data 77 | id = parseInt(matches[3]) 78 | events = @[] 79 | else: 80 | events.add(parseInt(matches[2])) # minute of other event 81 | 82 | guards = process(test_input) 83 | 84 | proc solve(guards: Table[int, array[60, int]]) = 85 | # guard with most minutes 86 | var idMax, totMins: int 87 | for id, minutes in guards: 88 | echo id, ": ", minutes.sum() 89 | if minutes.sum() > totMins: 90 | totMins = minutes.sum() 91 | idMax = id 92 | 93 | echo "guards with most minutes: ", idMax 94 | 95 | # minutes more often asleep 96 | var bestMinute, timesAsleep: int 97 | for minute in guards[idMax].low .. guards[idMax].high: 98 | if guards[idMax][minute] > timesAsleep: 99 | timesAsleep = guards[idMax][minute] 100 | bestMinute = minute 101 | 102 | echo "best minute: ", bestMinute 103 | echo "answer part 1: ", bestMinute*idMax 104 | 105 | solve(guards) 106 | 107 | # with real input: 108 | import algorithm 109 | 110 | const input = sorted(readFile("./inputs/04.txt").strip().splitLines(), system.cmp).join(sep="\n") 111 | 112 | guards = process(input) 113 | solve(guards) 114 | 115 | # part 2 116 | var idBest, minuteBest, asleepTimes: int 117 | for id, minutes in guards: 118 | for i in minutes.low .. minutes.high: 119 | if minutes[i] > asleepTimes: 120 | idBest = id 121 | minuteBest = i 122 | asleepTimes = minutes[i] 123 | 124 | echo "best guard: ", idBest 125 | echo "best minute: ", minuteBest 126 | echo "thier product: ", idBest*minuteBest 127 | # this is correct while the python version is not! -------------------------------------------------------------------------------- /python/day11.py: -------------------------------------------------------------------------------- 1 | import itertools 2 | import time 3 | 4 | # I want to use the memoize pattern (instead of setting up a grid) - to see how it changes and if it is possible in Nim: 5 | def memoize(func): 6 | cache = dict() 7 | 8 | def memoized_func(*args): 9 | if args in cache: 10 | return cache[args] 11 | result = func(*args) 12 | cache[args] = result 13 | return result 14 | 15 | return memoized_func 16 | 17 | print("tests") 18 | # serial 8 19 | # cell 3, 5 20 | # -> power level is 4 21 | def hundred_digit(number): 22 | number = str(number) 23 | if len(number) > 2: 24 | return int(number[-3]) 25 | else: 26 | return 0 27 | 28 | print(hundred_digit(12)) 29 | print(hundred_digit(123)) 30 | print(hundred_digit(43210)) 31 | print(hundred_digit(4321)) 32 | 33 | # @memoize # comment this line to have results without memoize 34 | def power_level(x, y, serial): 35 | rack_id = x + 10 36 | return hundred_digit((rack_id*y + serial)*rack_id) - 5 37 | 38 | print(power_level(3, 5, 8)) 39 | # Here are some more example power levels: 40 | 41 | # Fuel cell at 122,79, grid serial number 57: power level -5. 42 | # Fuel cell at 217,196, grid serial number 39: power level 0. 43 | # Fuel cell at 101,153, grid serial number 71: power level 4. 44 | print(power_level(122, 79, 57), "== -5") 45 | print(power_level(217, 196, 39), "== 0") 46 | print(power_level(101, 153, 71), "== 4") 47 | 48 | # @memoize # comment this line to have results without memoize 49 | def square_total_power(x, y, serial, size): 50 | if size <= 3: 51 | return sum([power_level(x + i, y + j, serial) for i in range(size) for j in range(size)]) 52 | return square_total_power(x, y, serial, size - 1) \ 53 | + sum([power_level(x + i, y + size - 1, serial) for i in range(size - 1)]) \ 54 | + sum([power_level(x + size - 1, y + j, serial) for j in range(size)]) 55 | 56 | # For grid serial number 18, the largest total 3x3 square has a top-left corner of 33,45 (with a total power of 29); these fuel cells appear in the middle of this 5x5 region: 57 | 58 | # -2 -4 4 4 4 59 | # -4 4 4 4 -5 60 | # 4 3 3 4 -4 61 | # 1 1 2 4 -3 62 | # -1 0 2 -5 -2 63 | 64 | # For grid serial number 42, the largest 3x3 square's top-left is 21,61 (with a total power of 30); they are in the middle of this region: 65 | 66 | # -3 4 2 2 2 67 | # -4 4 3 3 4 68 | # -5 3 3 4 -4 69 | # 4 3 3 4 -3 70 | # 3 3 3 -5 -1 71 | 72 | def example_plot(xs, ys, serial): 73 | print('\n'.join([''.join([f"{power_level(x, y, serial):4}" for x in range(xs - 1, xs - 1 + 5)]) for y in range(ys - 1, ys - 1 + 5)])) 74 | print(square_total_power(xs, ys, serial, 3), xs, ys) 75 | 76 | example_plot(33, 45, 18) 77 | example_plot(21, 61, 42) 78 | 79 | def solve(serial, size=300, size_square=None): 80 | if size_square is None: 81 | size_square = [3] 82 | max_power = -100 83 | xs, ys = None, None 84 | best_square_size = None 85 | for square in size_square: 86 | for x, y in itertools.product(range(1, size - square + 1), range(1, size - square + 1)): 87 | power = square_total_power(x, y, serial, square) 88 | if power > max_power: 89 | max_power = power 90 | xs, ys = x, y 91 | best_square_size = square 92 | return max_power, xs, ys, best_square_size 93 | 94 | print(solve(18, size=50)) 95 | print(solve(18, size=47)) 96 | print(solve(42, size=70)) 97 | print(solve(42, size=63)) 98 | 99 | my_serial = 1309 100 | start = time.time() 101 | print("\npart 1 solution:", solve(my_serial)) 102 | print("time taken: ", time.time() - start) 103 | # a bit more than 1 second without memoize 104 | # a bit less than 1 second with memoize 105 | # I expected more of an improvement, but I guess that the function I am caching is already pretty fast 106 | 107 | # part 2 108 | # I have memoized also the squares 109 | start = time.time() 110 | print("\npart 2 test serial 18:", solve(18, size_square=list(range(3, 20)))) 111 | print("time taken: ", time.time() - start) 112 | 113 | start = time.time() 114 | print("\npart 2 test serial 42:", solve(42, size_square=list(range(3, 20)))) 115 | print("time taken: ", time.time() - start) 116 | 117 | start = time.time() 118 | print("\npart 2 my solution:", solve(my_serial, size_square=list(range(3, 20)))) 119 | print("time taken: ", time.time() - start) 120 | 121 | # part 1 solution: (31, 20, 43, 3) 122 | # time taken: 0.8248319625854492 123 | 124 | # part 2 test serial 18: (113, 90, 269, 16) 125 | # time taken: 17.45703935623169 126 | 127 | # part 2 test serial 42: (119, 232, 251, 12) 128 | # time taken: 21.266549110412598 129 | 130 | # part 2 my solution: (108, 233, 271, 13) 131 | # time taken: 23.892771005630493 132 | -------------------------------------------------------------------------------- /python/day03.py: -------------------------------------------------------------------------------- 1 | # In this day I will make use of objects in Python 2 | # in this way I hope to learn the equivalent for Nim 3 | 4 | # regular expresion are used to parse the claim 5 | import re 6 | 7 | pattern = re.compile('#(\d+) @ (\d+),(\d+): (\d+)x(\d+)') 8 | 9 | # test cases 10 | claim1 = "#1 @ 1,3: 4x4" 11 | claim2 = "#2 @ 3,1: 4x4" 12 | claim3 = "#3 @ 5,5: 2x2" 13 | test_claims = [claim1, claim2, claim3] 14 | 15 | # testing the regular expression is working 16 | for claim in test_claims: 17 | print(claim) 18 | match = pattern.match(claim) 19 | print(match.groups()) 20 | 21 | # output: 22 | """ 23 | #1 @ 1,3: 4x4 24 | ('1', '1', '3', '4', '4') 25 | #2 @ 3,1: 4x4 26 | ('2', '3', '1', '4', '4') 27 | #3 @ 5,5: 2x2 28 | ('3', '5', '5', '2', '2') 29 | """ 30 | 31 | # a claim object to hold the claim of each elf 32 | class Claim: 33 | 34 | def __init__(self, text): 35 | match = pattern.match(text) 36 | self.id = int(match.group(1)) 37 | self.x = int(match.group(2)) 38 | self.y = int(match.group(3)) 39 | self.w = int(match.group(4)) 40 | self.h = int(match.group(5)) 41 | 42 | def __repr__(self): 43 | return f'Claim(id={self.id}, x={self.x}, y={self.y}, w={self.w}, h={self.h})' 44 | 45 | # test the claim object 46 | for claim in [claim1, claim2, claim3]: 47 | print(claim) 48 | claim_obj = Claim(claim) 49 | print(claim_obj) 50 | 51 | # output: 52 | """ 53 | #1 @ 1,3: 4x4 54 | Claim(id=1, x=1, y=3, w=4, h=4) 55 | #2 @ 3,1: 4x4 56 | Claim(id=2, x=3, y=1, w=4, h=4) 57 | #3 @ 5,5: 2x2 58 | Claim(id=3, x=5, y=5, w=2, h=2) 59 | """ 60 | 61 | # use a tissue "matrix" to count how many claims insist on each square inch of the grid 62 | # I want to go with basic python, so I will avoid numpy (but I will miss the slicing on both indices) 63 | # (also, I am working offline on a train on a new windows laptop on which numpy build is broken...) 64 | class Tissue: 65 | 66 | def __init__(self, size=7): 67 | # always square 68 | self.size = size 69 | self.grid = [[0 for x in range(size)] for y in range(size)] 70 | 71 | def __repr__(self): 72 | return '\n'.join([''.join([str(i) for i in line]) for line in self.grid]) 73 | 74 | def add(self, claim): 75 | # since I do not have numpy slicing capabilities I need a for loop over lines: 76 | for y in range(claim.y, claim.y + claim.h): 77 | # not only that, since I do not have a simple +1 on a list I need to loop over columns too! 78 | for x in range(claim.x, claim.x + claim.w): 79 | self.grid[x][y] += 1 80 | 81 | def overlap_coordinates(self): 82 | return [(x, y) for x in range(len(self.grid)) 83 | for y in range(len(self.grid[x])) 84 | if self.grid[x][y] > 1] 85 | 86 | 87 | # test tissue: 88 | tissue = Tissue() 89 | print(tissue) 90 | 91 | for claim in test_claims: 92 | print(claim) 93 | tissue.add(Claim(claim)) 94 | print(tissue) 95 | 96 | # finally I can output the number of contested square inches: 97 | print("overlapping square inches: ", len(tissue.overlap_coordinates())) 98 | 99 | # output: 100 | """ 101 | 0000000 102 | 0000000 103 | 0000000 104 | 0000000 105 | 0000000 106 | 0000000 107 | 0000000 108 | #1 @ 1,3: 4x4 109 | 0000000 110 | 0001111 111 | 0001111 112 | 0001111 113 | 0001111 114 | 0000000 115 | 0000000 116 | #2 @ 3,1: 4x4 117 | 0000000 118 | 0001111 119 | 0001111 120 | 0112211 121 | 0112211 122 | 0111100 123 | 0111100 124 | #3 @ 5,5: 2x2 125 | 0000000 126 | 0001111 127 | 0001111 128 | 0112211 129 | 0112211 130 | 0111111 131 | 0111111 132 | overlapping square inches: 4 133 | """ 134 | 135 | # now let's process the real input: 136 | with open('./inputs/03.txt') as f: 137 | claims = f.readlines() 138 | 139 | tissue = Tissue(size=1000) 140 | 141 | for claim in claims: 142 | tissue.add(Claim(claim)) 143 | 144 | # finally I can output the number of contested square inches: 145 | print("overlapping square inches: ", len(tissue.overlap_coordinates())) 146 | 147 | ### second part 148 | 149 | # find non overlapping coordinates and lengths 150 | grid = tissue.grid 151 | x, y = min([(x, y) for x in range(len(grid)) for y in range(len(grid[x])) if grid[x][y] == 1]) 152 | print(x, y) 153 | # I do not atcually need to find w and h! The following formulas do not give me the correct w and h! 154 | w = max([w for w in range(1000 - x) if grid[x + w][y] == 1]) 155 | h = max([h for h in range(1000 - y) if grid[x][y + h] == 1]) 156 | print(w, h) 157 | # print(tissue) 158 | 159 | # find non overlapping id 160 | for claim in claims: 161 | c = Claim(claim) 162 | # if c.x == x and c.y == y and c.w == w and c.h == h: 163 | if c.x == x and c.y == y: # since it does not overlap I am guaranteed to find only one claim id 164 | print(c.id) 165 | break 166 | print(claim) 167 | 168 | # wrong answer. 169 | # let's go simpler. we reprocess all claims: 170 | for claim in claims: 171 | c = Claim(claim) 172 | if all([grid[c.x + w][c.y + h] == 1 for w in range(c.w) for h in range(c.h)]): 173 | print(c) 174 | break -------------------------------------------------------------------------------- /nim/day10.nim: -------------------------------------------------------------------------------- 1 | import re, strutils, strformat, sets, hashes, math, sequtils 2 | 3 | # pattern cannot be a const! why? 4 | const test_input = """position=< 9, 1> velocity=< 0, 2> 5 | position=< 7, 0> velocity=<-1, 0> 6 | position=< 3, -2> velocity=<-1, 1> 7 | position=< 6, 10> velocity=<-2, -1> 8 | position=< 2, -4> velocity=< 2, 2> 9 | position=<-6, 10> velocity=< 2, -2> 10 | position=< 1, 8> velocity=< 1, -1> 11 | position=< 1, 7> velocity=< 1, 0> 12 | position=<-3, 11> velocity=< 1, -2> 13 | position=< 7, 6> velocity=<-1, -1> 14 | position=<-2, 3> velocity=< 1, 0> 15 | position=<-4, 3> velocity=< 2, 0> 16 | position=<10, -3> velocity=<-1, 1> 17 | position=< 5, 11> velocity=< 1, -2> 18 | position=< 4, 7> velocity=< 0, -1> 19 | position=< 8, -2> velocity=< 0, 1> 20 | position=<15, 0> velocity=<-2, 0> 21 | position=< 1, 6> velocity=< 1, 0> 22 | position=< 8, 9> velocity=< 0, -1> 23 | position=< 3, 3> velocity=<-1, 1> 24 | position=< 0, 5> velocity=< 0, -1> 25 | position=<-2, 2> velocity=< 2, 0> 26 | position=< 5, -2> velocity=< 1, 2> 27 | position=< 1, 4> velocity=< 2, 1> 28 | position=<-2, 7> velocity=< 2, -2> 29 | position=< 3, 6> velocity=<-1, -1> 30 | position=< 5, 0> velocity=< 1, 0> 31 | position=<-6, 0> velocity=< 2, 0> 32 | position=< 5, 9> velocity=< 1, -2> 33 | position=<14, 7> velocity=<-2, 0> 34 | position=<-3, 6> velocity=< 2, -1>""" 35 | 36 | const my_input = readFile("./inputs/10.txt") 37 | 38 | type 39 | Point = ref object 40 | x, y, vx, vy: int 41 | PointSet = HashSet[Point] 42 | 43 | var 44 | point: Point 45 | pointSet: PointSet 46 | 47 | proc `$`(p: Point): string = 48 | fmt"Point(x={p.x}, y={p.y}, vx={p.vx}, vy={p.vy})" 49 | 50 | proc hash(p: Point): Hash = 51 | ## Computes a Hash from point `p`. 52 | var h: Hash = 0 53 | h = h !& hash(p.x) 54 | h = h !& hash(p.y) 55 | h = h !& hash(p.vx) 56 | h = h !& hash(p.vy) 57 | result = !$h 58 | 59 | proc process(input: string): PointSet = 60 | let 61 | lines = toSeq(input.splitLines()) 62 | initialsize = nextPowerOfTwo(lines.len) 63 | pattern = re"position=<([\d+\- ]+),([\d+\- ]+)> velocity=<([\d+\- ]+),([\d+\- ]+)>" 64 | var 65 | matches: array[4, string] 66 | point: Point 67 | result = initSet[Point](initialsize) 68 | for line in lines: 69 | # echo line 70 | if match(line, pattern, matches): 71 | # echo matches 72 | # transposing 73 | point = Point(y: parseInt(matches[0].strip()), x: parseInt(matches[1].strip()), 74 | vy: parseInt(matches[2].strip()), vx: parseInt(matches[3].strip())) 75 | # echo point 76 | result.incl(point) 77 | 78 | echo "processing test input" 79 | pointSet = process(test_input) 80 | echo "#Points ", card(pointSet) 81 | 82 | type 83 | Grid = ref object 84 | maxX, maxY, minX, minY: int 85 | data: seq[seq[int]] # I would like to make something more efficient with arrays 86 | var 87 | grid: Grid 88 | 89 | proc reset(grid: var Grid) = 90 | var 91 | row: seq[int] 92 | grid.data = @[] 93 | for x in grid.minX .. grid.maxX: 94 | row = @[] 95 | for y in grid.minY .. grid.maxY: 96 | row.add(0) 97 | grid.data.add(row) 98 | 99 | proc initGrid(pointSet: PointSet): Grid = 100 | var 101 | maxX, maxY, minX, minY: int 102 | 103 | # getting min and max to initialize grid 104 | for p in pointSet: 105 | # here I copy and paste from Python and I do not have to correct (thanks to Nim id insensitivity) 106 | if p.x < min_x: 107 | min_x = p.x 108 | elif p.x > max_x: 109 | max_x = p.x 110 | if p.y < min_y: 111 | min_y = p.y 112 | elif p.y > max_y: 113 | max_y = p.y 114 | result = Grid(maxX: maxX, maxY: maxY, minX: minX, minY: minY, data: @[]) 115 | result.reset() 116 | 117 | # fill grid with points 118 | for p in pointSet: 119 | result.data[p.x - result.minX][p.y - result.minY] += 1 120 | 121 | proc plot(grid: Grid): string = 122 | var lines: seq[string] 123 | for row in grid.data: 124 | lines.add row.mapIt(if it > 0: "#" else: ".").join() 125 | lines.join(sep="\n") 126 | 127 | # plotting test input 128 | grid = initGrid(pointSet) 129 | echo "Initial Grid" 130 | echo grid.plot 131 | 132 | proc step(p: Point, n: int = 1): Point = 133 | # I would like to have it as a non returning method: 134 | # point.x += n*point.vx 135 | # point.y += n*point.vy 136 | # but for next step on pointSet I need it like this 137 | Point(x: p.x + n*p.vx, y: p.y + n*p.vy, vx: p.vx, vy: p.vy) 138 | 139 | # I would like to modify inplace the pointSet but I was not able to 140 | proc step(pointSet: var PointSet, n: int = 1): PointSet = 141 | var 142 | point: Point 143 | result = initSet[Point](pointSet.len.nextPowerOfTwo) 144 | for p in pointSet: 145 | point = p.step(n) 146 | result.incl(point) 147 | 148 | for time in 1..4: 149 | echo "\nSeconds: ", time 150 | pointSet = pointSet.step() 151 | echo initGrid(pointSet).plot 152 | 153 | echo "My input" 154 | pointSet = process(myInput) 155 | echo "#Points ", card(pointSet) 156 | 157 | let waitTime = 10_000 + 239 + 1 158 | pointSet = pointSet.step(waitTime) 159 | 160 | writeFile("./nim/day10out.txt", pointSet.initGrid.plot) 161 | echo "Wait time: ", waitTime -------------------------------------------------------------------------------- /inputs/07.txt: -------------------------------------------------------------------------------- 1 | Step G must be finished before step M can begin. 2 | Step T must be finished before step E can begin. 3 | Step P must be finished before step M can begin. 4 | Step V must be finished before step L can begin. 5 | Step Y must be finished before step B can begin. 6 | Step K must be finished before step Z can begin. 7 | Step H must be finished before step I can begin. 8 | Step D must be finished before step U can begin. 9 | Step C must be finished before step L can begin. 10 | Step R must be finished before step Z can begin. 11 | Step U must be finished before step B can begin. 12 | Step J must be finished before step M can begin. 13 | Step M must be finished before step E can begin. 14 | Step I must be finished before step X can begin. 15 | Step N must be finished before step O can begin. 16 | Step S must be finished before step F can begin. 17 | Step X must be finished before step A can begin. 18 | Step F must be finished before step Q can begin. 19 | Step B must be finished before step Z can begin. 20 | Step Q must be finished before step W can begin. 21 | Step L must be finished before step W can begin. 22 | Step O must be finished before step Z can begin. 23 | Step A must be finished before step Z can begin. 24 | Step E must be finished before step W can begin. 25 | Step W must be finished before step Z can begin. 26 | Step G must be finished before step R can begin. 27 | Step H must be finished before step A can begin. 28 | Step A must be finished before step W can begin. 29 | Step Y must be finished before step D can begin. 30 | Step O must be finished before step A can begin. 31 | Step V must be finished before step U can begin. 32 | Step H must be finished before step W can begin. 33 | Step K must be finished before step F can begin. 34 | Step J must be finished before step X can begin. 35 | Step V must be finished before step R can begin. 36 | Step Q must be finished before step A can begin. 37 | Step F must be finished before step B can begin. 38 | Step G must be finished before step P can begin. 39 | Step L must be finished before step A can begin. 40 | Step B must be finished before step Q can begin. 41 | Step H must be finished before step J can begin. 42 | Step J must be finished before step L can begin. 43 | Step F must be finished before step E can begin. 44 | Step U must be finished before step A can begin. 45 | Step G must be finished before step Q can begin. 46 | Step G must be finished before step S can begin. 47 | Step K must be finished before step J can begin. 48 | Step N must be finished before step B can begin. 49 | Step F must be finished before step O can begin. 50 | Step C must be finished before step Z can begin. 51 | Step B must be finished before step E can begin. 52 | Step M must be finished before step S can begin. 53 | Step A must be finished before step E can begin. 54 | Step E must be finished before step Z can begin. 55 | Step K must be finished before step I can begin. 56 | Step P must be finished before step A can begin. 57 | Step Y must be finished before step L can begin. 58 | Step Y must be finished before step J can begin. 59 | Step G must be finished before step N can begin. 60 | Step Q must be finished before step L can begin. 61 | Step D must be finished before step X can begin. 62 | Step C must be finished before step I can begin. 63 | Step K must be finished before step B can begin. 64 | Step N must be finished before step F can begin. 65 | Step D must be finished before step M can begin. 66 | Step B must be finished before step A can begin. 67 | Step U must be finished before step J can begin. 68 | Step Q must be finished before step Z can begin. 69 | Step X must be finished before step F can begin. 70 | Step K must be finished before step X can begin. 71 | Step U must be finished before step E can begin. 72 | Step X must be finished before step W can begin. 73 | Step K must be finished before step Q can begin. 74 | Step I must be finished before step E can begin. 75 | Step D must be finished before step J can begin. 76 | Step P must be finished before step I can begin. 77 | Step K must be finished before step D can begin. 78 | Step S must be finished before step X can begin. 79 | Step C must be finished before step R can begin. 80 | Step P must be finished before step W can begin. 81 | Step I must be finished before step O can begin. 82 | Step S must be finished before step O can begin. 83 | Step K must be finished before step C can begin. 84 | Step N must be finished before step Q can begin. 85 | Step L must be finished before step E can begin. 86 | Step L must be finished before step Z can begin. 87 | Step K must be finished before step W can begin. 88 | Step Y must be finished before step A can begin. 89 | Step L must be finished before step O can begin. 90 | Step N must be finished before step W can begin. 91 | Step R must be finished before step W can begin. 92 | Step C must be finished before step O can begin. 93 | Step H must be finished before step X can begin. 94 | Step V must be finished before step Y can begin. 95 | Step S must be finished before step W can begin. 96 | Step V must be finished before step E can begin. 97 | Step Q must be finished before step E can begin. 98 | Step P must be finished before step H can begin. 99 | Step V must be finished before step H can begin. 100 | Step N must be finished before step Z can begin. 101 | Step C must be finished before step A can begin. -------------------------------------------------------------------------------- /python/day06.py: -------------------------------------------------------------------------------- 1 | test_input = """1, 1 2 | 1, 6 3 | 8, 3 4 | 3, 4 5 | 5, 5 6 | 8, 9""" 7 | 8 | with open('./inputs/06.txt') as f: 9 | my_input = f.read() 10 | 11 | # to solve this I will use two bizarre objects: Pointy and Mappy 12 | # this is not particularly good OOP 13 | class Pointy: 14 | 15 | def __init__(self, x, y, i=None, d=0): 16 | self.x = x 17 | self.y = y 18 | self.i = i # to which point is assigned: None not assigned, -1: conflicted 19 | self.d = d # distance to point which is assigned 20 | 21 | def border(self, d, mappy): 22 | coords = {(self.x + x_abs*signs[0], self.y + (d - x_abs)*signs[1]) 23 | for x_abs in range(d + 1) 24 | for signs in [(1,1), (1, -1), (-1, -1), (-1, 1)]} 25 | return [Pointy(c[0], c[1], self.i, d) for c in coords if 0 <= c[0] <= mappy.max_x and 0 <= c[1] <= mappy.max_y] 26 | 27 | def __repr__(self): 28 | return f"Pointy(x={self.x}, y={self.y}, i={self.i}, d={self.d})" 29 | 30 | def __str__(self): 31 | alphabet = "abcdefghijklmnopqrstuvwxyz" 32 | if self.i == -1: 33 | return '.' 34 | elif self.i is None: 35 | return ' ' 36 | elif self.d == 0: 37 | return alphabet[self.i % len(alphabet)].upper() 38 | else: 39 | return alphabet[self.i % len(alphabet)] 40 | 41 | class Mappy: 42 | 43 | def __init__(self, max_x, max_y): 44 | self.max_x = max_x 45 | self.max_y = max_y 46 | self.grid = [[Pointy(x, y) for y in range(self.max_y + 1)] for x in range(self.max_x + 1)] 47 | self.points = list() 48 | 49 | def assign(self, point): 50 | if self.grid[point.x][point.y].i is None: 51 | self.grid[point.x][point.y] = point 52 | if point.d == 0: 53 | self.points.append(point) 54 | return 1 55 | elif self.grid[point.x][point.y].d == point.d: 56 | self.grid[point.x][point.y].i = -1 # mark conflict 57 | return 0 58 | 59 | def extend(self, d): 60 | filt = list() 61 | tot_count = 0 62 | for j, p in enumerate(self.points): 63 | count = 0 64 | for q in p.border(d, self): 65 | count += self.assign(q) 66 | if count == 0: 67 | filt.append(j) 68 | tot_count += count 69 | # remove points that did not extend 70 | self.points = [p for j, p in enumerate(self.points) if j not in filt] 71 | return tot_count 72 | 73 | def plot(self): 74 | print('\n'.join([''.join([str(v) for v in row]) for row in self.grid])) 75 | 76 | def max_area(self): 77 | areas = dict() 78 | border_indexes = set() 79 | for row in self.grid: 80 | for p in row: 81 | if p.i >= 0: 82 | if p.i in areas: 83 | areas[p.i] += 1 84 | else: 85 | areas[p.i] = 1 86 | if p.x == 0 or p.y == 0 or p.x == self.max_x or p.y == self.max_y: 87 | border_indexes.add(p.i) 88 | return max([v for k, v in areas.items() if k not in border_indexes])#, areas, border_indexes 89 | 90 | # global and modified by process 91 | max_x = 0 92 | max_y = 0 93 | 94 | def line_to_coords(line): 95 | seq = line.split(',') 96 | x = int(seq[0]) 97 | y = int(seq[1]) 98 | return x, y 99 | 100 | def process(text): 101 | global max_x, max_y 102 | points = list() 103 | for i, line in enumerate(text.split('\n')): 104 | y, x = line_to_coords(line) 105 | if x > max_x: 106 | max_x = x 107 | if y > max_y: 108 | max_y = y 109 | points.append(Pointy(x, y, i=i)) 110 | mappy = Mappy(max_x, max_y) 111 | for p in points: 112 | mappy.assign(p) 113 | return points, mappy 114 | 115 | points, mappy = process(test_input) 116 | print("#points: ", len(points)) 117 | print(f"max_x={max_x}, max_y={max_y}") 118 | 119 | # print(points[0]) 120 | # border = points[0].border(1, mappy) 121 | # print(len(border), border) 122 | # border = points[0].border(2, mappy) 123 | # print(len(border), border) 124 | # border = points[0].border(3, mappy) 125 | # print(len(border)) 126 | # border = points[3].border(2, mappy) 127 | # print(len(border)) 128 | # border = points[3].border(3, mappy) 129 | # print(len(border)) 130 | 131 | print("extending pins on mappy") 132 | for d in range(1, 10): 133 | # print(d) 134 | tot_count = mappy.extend(d) 135 | # print(tot_count) 136 | if tot_count == 0: 137 | break 138 | mappy.plot() 139 | # from Advent of Code: 140 | # aaaaa.cccc 141 | # aAaaa.cccc 142 | # aaaddecccc 143 | # aadddeccCc 144 | # ..dDdeeccc 145 | # bb.deEeecc 146 | # bBb.eeee.. 147 | # bbb.eeefff 148 | # bbb.eeffff 149 | # bbb.ffffFf 150 | 151 | # My plot: 152 | # aaaaa.ccc 153 | # aAaaa.ccc 154 | # aaaddeccc 155 | # aadddeccC 156 | # ..dDdeecc 157 | # bb.deEeec 158 | # bBb.eeee. 159 | # bbb.eeeff 160 | # bbb.eefff 161 | # bbb.ffffF 162 | print(mappy.max_area()) 163 | 164 | # my input 165 | print("my input") 166 | points, mappy = process(my_input) 167 | print("#points: ", len(points)) 168 | print(f"max_x={max_x}, max_y={max_y}") 169 | 170 | print("extending pins on mappy") 171 | for d in range(1, 200): 172 | # print(d) 173 | tot_count = mappy.extend(d) 174 | # print(tot_count) 175 | if tot_count == 0: 176 | break 177 | print(tot_count) 178 | print(mappy.max_area()) 179 | -------------------------------------------------------------------------------- /python/day04.py: -------------------------------------------------------------------------------- 1 | import re 2 | 3 | # why this does not work 4 | # pattern = re.compile('\[\d{4}-(?P\d{2}-\d{2}) (?P\d{2}):(?P\d{2})\] (?:Guard #(\d+) begins shift)|(falls asleep)|(wakes up)') 5 | # while this does? 6 | pattern = re.compile('\[\d{4}-(?P\d{2}-\d{2}) (?P\d{2}):(?P\d{2})\] (?:Guard #(?P\d+) begins shift)?(?Pfalls asleep)?(?Pwakes up)?') 7 | 8 | # how much easier would be to "compile" a func that produces a string given some inputs? it would be a different approach that re and maybe doable in Nim! (because of programmability) 9 | 10 | test_input = """[1518-11-01 00:00] Guard #10 begins shift 11 | [1518-11-01 00:05] falls asleep 12 | [1518-11-01 00:25] wakes up 13 | [1518-11-01 00:30] falls asleep 14 | [1518-11-01 00:55] wakes up 15 | [1518-11-01 23:58] Guard #99 begins shift 16 | [1518-11-02 00:40] falls asleep 17 | [1518-11-02 00:50] wakes up 18 | [1518-11-03 00:05] Guard #10 begins shift 19 | [1518-11-03 00:24] falls asleep 20 | [1518-11-03 00:29] wakes up 21 | [1518-11-04 00:02] Guard #99 begins shift 22 | [1518-11-04 00:36] falls asleep 23 | [1518-11-04 00:46] wakes up 24 | [1518-11-05 00:03] Guard #99 begins shift 25 | [1518-11-05 00:45] falls asleep 26 | [1518-11-05 00:55] wakes up""" 27 | #123456789012345678901234567890 28 | # 111111111122222222222 29 | # I think I will need a regular expression here! 30 | 31 | # processing test input 32 | for line in test_input.split('\n'): 33 | print(line) 34 | match = pattern.search(line) 35 | if match is None: 36 | print('None') 37 | else: 38 | print({key: match.group(key) for key in 'day hour minute id asleep awake'.split()}) 39 | 40 | 41 | # I will have a set containing all shifts processed from input 42 | class Shift: 43 | 44 | def __init__(self, id, date): 45 | self.id = id 46 | self.date = date 47 | # 0 index: asleep, 1 index: awake, 2: asleep, 3: awake, ... 48 | self.sleeps = list() 49 | self.events = 0 50 | 51 | def __repr__(self): 52 | return f"Shift(id={self.id}, date={self.date}, events={self.events}, sleeps={self.sleeps})" 53 | 54 | def add_sleep_awake(self, minute, asleep=True): 55 | self.sleeps.append(minute) 56 | if asleep: 57 | self.events += 1 58 | 59 | 60 | # I will also have a dictionary with all guard history (with id as key) 61 | class GuardHistory: 62 | 63 | def __init__(self, id): 64 | self.id = id 65 | self.minutes = [0 for i in range(60)] 66 | 67 | def __repr__(self): 68 | return f"Guard(id={self.id}, minutes={self.minutes})" 69 | 70 | def add_shift(self, shift): 71 | for event in range(shift.events): 72 | for m in range(shift.sleeps[2*event], shift.sleeps[2*event+1]): 73 | self.minutes[m] += 1 74 | return self 75 | 76 | 77 | 78 | def process_input(text): 79 | shifts = set() 80 | guards = {} 81 | shift = None 82 | for line in text.split('\n'): 83 | if line == '': 84 | continue 85 | match = pattern.search(line) 86 | if match is None: 87 | raise ValueError('cannot process line:', line) 88 | if match.group('id'): 89 | # new shift, if there was a previous shift (if this is not the first one), update guard history 90 | if shift: 91 | shifts.add(shift) 92 | if shift.id in guards: 93 | guards[shift.id].add_shift(shift) 94 | else: 95 | guards[shift.id] = GuardHistory(shift.id).add_shift(shift) 96 | shift = Shift(id=match.group('id'), date=match.group('day')) 97 | elif match.group('asleep'): 98 | shift.add_sleep_awake(int(match.group('minute'))) 99 | else: # awake 100 | shift.add_sleep_awake(int(match.group('minute')), asleep=False) 101 | # update date if first date fell on day before 102 | if shift.date != match.group('day'): 103 | shift.date = match.group('day') 104 | return shifts, guards 105 | 106 | 107 | shifts, guards = process_input(test_input) 108 | print(shifts) 109 | print(guards) 110 | 111 | # Strategy 1 - test case 112 | guards_by_minutes = {id: sum(guard.minutes) for id, guard in guards.items()} 113 | print(guards_by_minutes) 114 | guard_id = max(guards_by_minutes, key=guards_by_minutes.get) 115 | print("Guard who spend the most minutes asleep", guard_id) 116 | minutes = guards[guard_id].minutes 117 | minute_max_asleep = max(range(len(minutes)), key=minutes.__getitem__) 118 | print("Minute most asleep for guard", guard_id, ":", minute_max_asleep) 119 | print("Solution: ", int(guard_id)*minute_max_asleep) 120 | 121 | # Strategy 1 - real case 122 | print("Real case:") 123 | with open('./inputs/04.txt') as f: 124 | input = '\n'.join(sorted(f.readlines())) 125 | 126 | shifts, guards = process_input(input) 127 | guards_by_minutes = {id: sum(guard.minutes) for id, guard in guards.items()} 128 | guard_id = max(guards_by_minutes, key=guards_by_minutes.get) 129 | print("Guard who spend the most minutes asleep", guard_id) 130 | minutes = guards[guard_id].minutes 131 | minute_max_asleep = max(range(len(minutes)), key=minutes.__getitem__) 132 | print("Minute most asleep for guard", guard_id, ":", minute_max_asleep) 133 | print("Solution: ", int(guard_id)*minute_max_asleep) 134 | 135 | # part 2 136 | best_minute_by_guard = {id: max(range(len(guard.minutes)), key=guard.minutes.__getitem__) for id, guard in guards.items()} 137 | best_guard = max(best_minute_by_guard, key=best_minute_by_guard.get) 138 | best_minute = best_minute_by_guard[best_guard] 139 | print("best guard: ", best_guard, "; its best minute: ", best_minute, "; their product: ", int(best_guard)*best_minute) -------------------------------------------------------------------------------- /nim/day03.nim: -------------------------------------------------------------------------------- 1 | # in Nim instead of using regular expression 2 | # I will proceed with a simple for loop for parsing 3 | # (I can use for loops without losing efficiency, yee!) 4 | 5 | # let block and @ are the only changes need to go pyton -> nim here: 6 | let 7 | claim1 = "#1 @ 1,3: 4x4" 8 | claim2 = "#2 @ 3,1: 4x4" 9 | claim3 = "#3 @ 5,5: 2x2" 10 | test_claims = @[claim1, claim2, claim3] 11 | 12 | echo test_claims 13 | 14 | # for parseInt 15 | import strutils 16 | 17 | # processing a single claim 18 | # this will work only for claims with single digits 19 | var groups : seq[int] 20 | var i = 0 21 | for c in claim1: 22 | case c: 23 | of ' ': 24 | continue 25 | of '#', '@', ',', ':', 'x': 26 | inc i 27 | else: 28 | groups.add(parseInt($c)) 29 | echo groups 30 | 31 | # for map 32 | import sequtils 33 | 34 | # let's try to make it work with more complex claims: 35 | let longer_claim = "#105 @ 90,423: 15x10" 36 | echo longer_claim 37 | var groupStr : seq[string] 38 | i = -1 39 | for c in longer_claim: 40 | case c: 41 | of ' ': 42 | continue 43 | of '#', '@', ',', ':', 'x': 44 | inc i 45 | else: 46 | if groupStr.len <= i: 47 | groupStr.add($c) 48 | else: 49 | groupStr[i] = groupStr[i] & c 50 | echo groupStr 51 | groups = groupStr.map(parseInt) 52 | echo groups 53 | 54 | # Claim object 55 | type 56 | Claim = ref object 57 | id*, x*, y*, w*, h*: int 58 | 59 | var claim_obj : Claim 60 | 61 | claim_obj = Claim(id: 105, x: 90, y: 423, w: 15, h: 10) 62 | 63 | # equivalent to __repr__ (or __str__) of python 64 | proc `$`(c: Claim): string = 65 | result = "Claim(id=" & $c.id & ", x=" & $c.x & ", y=" & $c.y & ", w=" & $c.w & ", h=" & $c.h & ")" 66 | 67 | echo claim_obj 68 | 69 | # now the code to process the claim text will become the equivalent of __init__ for Claim 70 | proc initClaim(text: string): Claim = 71 | var groupStr : seq[string] 72 | var groupInt : seq[int] 73 | var i = -1 74 | for c in text: 75 | case c: 76 | of ' ': 77 | continue 78 | of '#', '@', ',', ':', 'x': 79 | inc i 80 | else: 81 | if groupStr.len <= i: 82 | groupStr.add($c) 83 | else: 84 | groupStr[i] = groupStr[i] & c 85 | groupInt = groupStr.map(parseInt) 86 | # this is taken as return value 87 | Claim(id: groupInt[0], x: groupInt[1], y: groupInt[2], w: groupInt[3], h: groupInt[4]) 88 | 89 | echo initClaim(longer_claim) 90 | for text in test_claims: 91 | echo initClaim(text) 92 | 93 | # instead of creating an object where grid is seq[seq[int]], I can use directly a new type (see Matrix type in Nim by example): 94 | type 95 | Tissue[size: static[int]] = 96 | array[size, array[size, int]] 97 | # note the different syntax with respect to object definition 98 | # reminder: refactor size to something else (see https://nim-lang.org/docs/apis.html) 99 | 100 | # ... and also different initialization syntaz 101 | var tissue: Tissue[7] 102 | # since it is based on existing types it has automatic initialization and conversion to string 103 | echo tissue 104 | 105 | # ...but I want to override with a personal conversion to string 106 | 107 | # first I need to understand how do I do the equivalent of join for strings in python... 108 | # luckily it is join from strutils! 109 | let s = @[@["1", "2"].join(), @["3", "4"].join()].join(sep="\n") 110 | echo s 111 | 112 | proc `$`(t: Tissue): string = 113 | var s: seq[string] 114 | for line in t: 115 | s.add(line.join()) 116 | s.join(sep="\n") 117 | 118 | # now $ is overridden 119 | echo $tissue 120 | echo tissue 121 | echo tissue[0][0] 122 | 123 | # method that changes the value of Tissue (note no return type is given): 124 | proc add(t: var Tissue, c: Claim) = 125 | for y in c.y ..< c.y + c.h: 126 | for x in c.x ..< c.x + c.w: 127 | t[x][y] += 1 128 | 129 | for claim in test_claims: 130 | echo claim 131 | tissue.add(initClaim(claim)) 132 | echo tissue 133 | echo tissue 134 | 135 | proc countOverlaps(t: Tissue): int = 136 | # how to do a single for: 137 | for x in 0 ..< t.len: 138 | for y in 0 ..< t.len: 139 | if t[x][y] > 1: inc result 140 | 141 | echo tissue.countOverlaps() 142 | 143 | # now with the real data 144 | const elfClaims = readFile("./inputs/03.txt").strip().splitLines() 145 | var santasTissue: Tissue[1000] 146 | 147 | for claim in elfClaims: 148 | santasTissue.add(initClaim(claim)) 149 | echo santasTissue.countOverlaps() 150 | 151 | ### second part 152 | 153 | # find non overlapping coordinates and lengths 154 | var my_x: int 155 | var my_y: int 156 | var found = false 157 | for x in 0 ..< santasTissue.len: 158 | for y in 0 ..< santasTissue.len: 159 | if santasTissue[x][y] == 1: 160 | my_x = x 161 | my_y = y 162 | found = true 163 | break # how do I break from two loops? 164 | if found: 165 | break 166 | echo my_x, " ", my_y 167 | 168 | var c: Claim 169 | for claim in elfClaims: 170 | c = initClaim(claim) 171 | if c.x == my_x and c.y == my_y: 172 | echo c 173 | break 174 | 175 | # find non overlapping id 176 | #[ 177 | for claim in claims: 178 | c = Claim(claim) 179 | # if c.x == x and c.y == y and c.w == w and c.h == h: 180 | if c.x == x and c.y == y: # since it does not overlap I am guaranteed to find only one claim id 181 | print(c.id) 182 | break 183 | print(claim) 184 | ]# 185 | 186 | # wrong answer. 187 | # let's go simpler. we reprocess all claims: 188 | found = false 189 | for claim in elfClaims: 190 | c = initClaim(claim) 191 | for w in 0 ..< c.w: 192 | for h in 0 ..< c.h: 193 | if santasTissue[c.x + w][c.y + h] == 1: 194 | found = true 195 | else: 196 | found = false 197 | break 198 | if not found: break 199 | if found: 200 | echo c 201 | break 202 | # equivalent for list comprehension in nim? 203 | #if all([grid[c.x + w][c.y + h] == 1 for w in range(c.w) for h in range(c.h)]): 204 | -------------------------------------------------------------------------------- /python/day10.py: -------------------------------------------------------------------------------- 1 | import re, sys 2 | 3 | test_input = """position=< 9, 1> velocity=< 0, 2> 4 | position=< 7, 0> velocity=<-1, 0> 5 | position=< 3, -2> velocity=<-1, 1> 6 | position=< 6, 10> velocity=<-2, -1> 7 | position=< 2, -4> velocity=< 2, 2> 8 | position=<-6, 10> velocity=< 2, -2> 9 | position=< 1, 8> velocity=< 1, -1> 10 | position=< 1, 7> velocity=< 1, 0> 11 | position=<-3, 11> velocity=< 1, -2> 12 | position=< 7, 6> velocity=<-1, -1> 13 | position=<-2, 3> velocity=< 1, 0> 14 | position=<-4, 3> velocity=< 2, 0> 15 | position=<10, -3> velocity=<-1, 1> 16 | position=< 5, 11> velocity=< 1, -2> 17 | position=< 4, 7> velocity=< 0, -1> 18 | position=< 8, -2> velocity=< 0, 1> 19 | position=<15, 0> velocity=<-2, 0> 20 | position=< 1, 6> velocity=< 1, 0> 21 | position=< 8, 9> velocity=< 0, -1> 22 | position=< 3, 3> velocity=<-1, 1> 23 | position=< 0, 5> velocity=< 0, -1> 24 | position=<-2, 2> velocity=< 2, 0> 25 | position=< 5, -2> velocity=< 1, 2> 26 | position=< 1, 4> velocity=< 2, 1> 27 | position=<-2, 7> velocity=< 2, -2> 28 | position=< 3, 6> velocity=<-1, -1> 29 | position=< 5, 0> velocity=< 1, 0> 30 | position=<-6, 0> velocity=< 2, 0> 31 | position=< 5, 9> velocity=< 1, -2> 32 | position=<14, 7> velocity=<-2, 0> 33 | position=<-3, 6> velocity=< 2, -1>""" 34 | 35 | with open('./inputs/10.txt') as f: 36 | real_input = f.read() 37 | 38 | pattern = re.compile('position=<([\d+\- ]+),([\d+\- ]+)> velocity=<([\d+\- ]+),([\d+\- ]+)>') 39 | 40 | # for line in test_input.split('\n'): 41 | # print(line) 42 | # match = pattern.match(line) 43 | # if match is None: 44 | # print('None') 45 | # else: 46 | # print(match.groups()) 47 | 48 | class Point: 49 | 50 | def __init__(self, x, y, vx, vy, reflect=False): 51 | self.x = int(x) 52 | self.y = int(y) 53 | self.vx = int(vx) 54 | self.vy = int(vy) 55 | if reflect: 56 | self.reflect() 57 | 58 | def step(self, n=1): 59 | self.x += n*self.vx 60 | self.y += n*self.vy 61 | 62 | def reflect(self): 63 | self.x, self.y = self.y, self.x 64 | self.vx, self.vy = self.vy, self.vx 65 | 66 | def __repr__(self): 67 | return f"Point(x={self.x}, y={self.y}, vx={self.vx}, vy={self.vy})" 68 | 69 | def process(text, reflect=False): 70 | """returns a set of points""" 71 | points = set() 72 | for line in text.split('\n'): 73 | match = pattern.match(line) 74 | if match is None: continue 75 | points.add(Point(*match.groups(), reflect=reflect)) 76 | 77 | return points 78 | 79 | points = process(test_input, reflect=True) 80 | # print(points) 81 | 82 | class Grid: 83 | 84 | def __init__(self, max_x=16, max_y=16, min_x=0, min_y=0): 85 | self.max_x = max_x 86 | self.max_y = max_y 87 | self.min_x = min_x 88 | self.min_y = min_y 89 | self.reset() 90 | 91 | def reset(self): 92 | # crucial choice: grid as list of rows 93 | self.grid = [[0 for y in range(self.min_y, self.max_y)] for x in range(self.min_x, self.max_x)] 94 | 95 | def add(self, point): 96 | if self.min_x <= point.x < self.max_x and self.min_y <= point.y < self.max_y: 97 | self.grid[point.x - self.min_x][point.y - self.min_y] += 1 98 | 99 | def count(self): 100 | return sum([v for row in self.grid for v in row]) 101 | 102 | def plot(self, meta=True): 103 | if meta: 104 | print(grid) 105 | print('\n'.join([''.join(['#' if v > 0 else '.' for v in row]) for row in self.grid])) 106 | 107 | def __repr__(self): 108 | return f"Grid(max_x={self.max_x}, max_y={self.max_y}, min_x={self.min_x}, min_y={self.min_y}) count: {self.count()}" 109 | 110 | 111 | def bounding(points, border=3): 112 | min_x, max_x, min_y, max_y = 0, 0, 0, 0 113 | for p in points: 114 | if p.x < min_x: 115 | min_x = p.x 116 | elif p.x > max_x: 117 | max_x = p.x 118 | if p.y < min_y: 119 | min_y = p.y 120 | elif p.y > max_y: 121 | max_y = p.y 122 | return max_x + border, max_y + border, min_x - border, min_y - border 123 | 124 | 125 | grid = Grid(*bounding(points)) 126 | grid.plot() 127 | 128 | def draw(points, grid, meta=True, seconds=None): 129 | if seconds is not None: 130 | print(f"\nSeconds: {seconds}") 131 | grid.reset() 132 | for p in points: 133 | grid.add(p) 134 | grid.plot(meta=meta) 135 | 136 | # plotting test input 137 | draw(points, grid, seconds=0) 138 | for time in range(4): 139 | for p in points: 140 | p.step() 141 | draw(points, grid, seconds=time+1) 142 | 143 | # processing real input: 144 | print('\n***Real input') 145 | points = process(real_input) 146 | # 10K steps forward in time 147 | for p in points: 148 | p.step(n=10_000) 149 | min_size_x = 10_000 150 | min_size_y = 10_000 151 | min_size_t = None 152 | for t in range(1_000): 153 | for p in points: 154 | p.step() 155 | max_x, max_y, min_x, min_y = bounding(points) 156 | size_x = max_x - min_x 157 | size_y = max_y - min_y 158 | if size_x < min_size_x: 159 | min_size_x = size_x 160 | min_size_t = t 161 | if size_y < min_size_y: 162 | min_size_y = size_y 163 | min_size_t = t 164 | print(f"min_size_x={min_size_x}, min_size_y={min_size_y}, min_size_t={min_size_t}") 165 | # min_size_x=252, min_size_y=115, min_size_t=239 (run without reflect) 166 | 167 | min_size_t = 239 168 | minus_t = -3 169 | plus_t = +3 170 | points = process(real_input, reflect=True) 171 | for p in points: 172 | p.step(n=10_000 + min_size_t + minus_t) 173 | 174 | # redirect print to file 175 | with open('./python/day10out.txt', 'w') as f: 176 | sys.stdout = f 177 | 178 | for t in range(plus_t - minus_t): 179 | for p in points: 180 | p.step() 181 | grid = Grid(*bounding(points)) 182 | draw(points, grid, seconds=10_000 + min_size_t + minus_t + t + 1) -------------------------------------------------------------------------------- /inputs/02.txt: -------------------------------------------------------------------------------- 1 | ayitmcjvlhedbsyoqfzukjpxwt 2 | agirmcjvlheybsyogfzuknpxxt 3 | wgirmcjvlvedbsyoqfzujnpxwt 4 | agizmcjvlhedbsyoqfzuenlxwt 5 | aryrmcjvlheebsyoqfzuknpxwt 6 | agirmcjelhedbsyoqfzukosxwt 7 | azirmcjvlhedbsooqfzuknpxvt 8 | agirmcjvffedbsyoqfzudnpxwt 9 | agilmcjvlhedbsyrqfzuknpxrt 10 | agirmcjvlhndbsyoofzukcpxwt 11 | awirmcjvlhedbsyoqfzuknpxlz 12 | aghrmcjmlhewbsyoqfzuknpxwt 13 | apirmcjvlmedbsyoqfzcknpxwt 14 | jgiricjvlhedbsyrqfzuknpxwt 15 | abirmcjvlbedbsyoqfzuknpxwo 16 | agirmcjvlhedbsyojfzuknpgkt 17 | agicmclvlhedbmyoqfzuknpxwt 18 | aslrzcjvlhedbsyoqfzuknpxwt 19 | agiqmcjvlhedbsymqfzurnpxwt 20 | agirmcjvlwedbsyoqfzuknfxmt 21 | agiumcjvlhedbsyoqfzuknpbyt 22 | xgirxcjvlwedbsyoqfzuknpxwt 23 | bgtrvcjvlhedbsyoqfzuknpxwt 24 | afirmcjvlpedbsyoqvzuknpxwt 25 | agirmcjjvhedbsyoqfzukmpxwt 26 | ggirmcjvlhedbsyoqfzukypxvt 27 | agirmdjulhekbsyoqfzuknpxwt 28 | agirmcjqlhedbsyoqfztknixwt 29 | agirmcjvjhedbsyomfduknpxwt 30 | agirmcjvlhedbgyoqfzuknpxtq 31 | agirmvjvlhbdbsyfqfzuknpxwt 32 | agirmcjvlhedbsyatfzbknpxwt 33 | agirmcjvlrlybsyoqfzuknpxwt 34 | agirmajvlhedbsqovfzuknpxwt 35 | abinmcrvlhedbsyoqfzuknpxwt 36 | agnrmcjvlhedbsyurfzuknpxwt 37 | agirmpjvlhedbsyoqezuknpxct 38 | agirmxjvlhedbsgoqjzuknpxwt 39 | agirmcjvlhehbstoqfzuknpxht 40 | qgirmcjvlhepcsyoqfzuknpxwt 41 | tgirmcjvlhkdbsyoqszuknpxwt 42 | agirmcjvdhedbscoqftuknpxwt 43 | agbrmcjvlhedbsyoqfzukqpxwj 44 | agurmcjvlhedbsyaqfzuknpxmt 45 | agirmcjvohudbsyoqfmuknpxwt 46 | agirmcjvlhekbsyoqfbuktpxwt 47 | agirmcjvlhedhsyoqfzugnnxwt 48 | agirmcjvlhedbsyjqyzuknpxft 49 | agirmcjvlhedbsymufznknpxwt 50 | agirmcjhlheubsyoqfzuknpxmt 51 | agirmcjvlhwdbsywqfzwknpxwt 52 | agirmcjvljedbsgqqfzuknpxwt 53 | aglrmcjelhedbsyoqfzuknpxkt 54 | agxrmcjvlhxdbsyoqfquknpxwt 55 | agirmcjvnhedbsyoqfzuenfxwt 56 | agirmcjvlhedbsyoqfzatnqxwt 57 | agirmcvvlhedbsboqfzuknuxwt 58 | agirncjvlhezbsyoqfzulnpxwt 59 | agiamcjvdiedbsyoqfzuknpxwt 60 | agirmcjvwhedbskoqfzhknpxwt 61 | agiwmcjflhedbsyoqfzulnpxwt 62 | agirmcjvlhedboyoqfzuknpjwl 63 | agivmcjslhedbsyoqfzdknpxwt 64 | agirmcjvlcedbsyoqfzukepxyt 65 | akirmcjvlhjdbssoqfzuknpxwt 66 | agvrmcjvldedmsyoqfzuknpxwt 67 | agirecjvlhidbsyoqfzukbpxwt 68 | abirmcjvlhjdbsyoqfkuknpxwt 69 | agirmcjelhedbfyoqfzuknpxwj 70 | agirmcjvlhedbbyoqrzukwpxwt 71 | akirmcjvlhedbsyoyfzuknplwt 72 | agirmcjvlhedbsydsfzuknpxwq 73 | agirrcjvlhedbsyoqazuknpmwt 74 | aeirmcjvlhedbsyoqfvuknpwwt 75 | akirmcjvlhedbsyoqpzudnpxwt 76 | agijmcjvlhedbsyuqfzunnpxwt 77 | agirmcjilhedasyoqizuknpxwt 78 | agirmczvlhzdbsyoqfzuknpxwx 79 | agirmcjvlhehbsyoifzuknpxwo 80 | agirwcjvlhedbsyoqfzuenpxst 81 | agirmcjvlhedbsyoquzuknhxft 82 | agirmcqvlkedbsyoqfzrknpxwt 83 | agirmcqvlhenbsyoqfzuknpuwt 84 | agirmcjvleedbsyoqfzhhnpxwt 85 | agirmcjvlhembsyrqfauknpxwt 86 | agirmcjvlhedbssoqflcknpxwt 87 | aqirmcjvlnedbsyoqfzuknpxpt 88 | agirmcjqlhedbxpoqfzuknpxwt 89 | fgirmcjvlhedbsyoqfzukqpqwt 90 | aggrmcjvlhpdbsyoqfzuknpxjt 91 | agirmwjvlhedbsywqfzuknpzwt 92 | agirmcailhembsyoqfzuknpxwt 93 | aglrmcjvlhxdbsyoqfzuknpxet 94 | xgirmcjvlhzdbsyoqfzukrpxwt 95 | agvrmcjvuhedbsyoqfzuknpxgt 96 | agikmcjvlhecbsyoqfzuknpxwr 97 | agyrmcjvlhezbsyoqfouknpxwt 98 | agirmcjvfhjdbsyokfzuknpxwt 99 | agkrmjjvlhedtsyoqfzuknpxwt 100 | agirmgjvlhedbiyoqfzuknpxwv 101 | wcirmcjvlhedbsyoqfzuknpxwo 102 | aairmcjvlhedbstoqfguknpxwt 103 | hgirmcjvlhedwfyoqfzuknpxwt 104 | agirmcjvmhfdbmyoqfzuknpxwt 105 | agirmcjvlhvdbsioqfzuanpxwt 106 | agrrmcjvgsedbsyoqfzuknpxwt 107 | agirmcjvlqetbsysqfzuknpxwt 108 | agirccjvlhedbsyoqfzuknkcwt 109 | agirmqjvlhedbsdoqfzkknpxwt 110 | agirmcjvlheobsyopfzuknpxwg 111 | agirmcjolhedbsyofpzuknpxwt 112 | agirmcjnlhedbsyoqkzukfpxwt 113 | agiumcjvlheabsyoqfzuknpxbt 114 | agipmcjvlhedbsyoqfzukupxwz 115 | atirmcrvlhedbsyoqfnuknpxwt 116 | agirmcjvnhedfkyoqfzuknpxwt 117 | agirmrjvlhedboyoqfzvknpxwt 118 | abhrmcjvlhedbtyoqfzuknpxwt 119 | cbirmcjvlhedbfyoqfzuknpxwt 120 | agirmcjvlhedbsyoqfmwknjxwt 121 | ahirmcjvlhedbsloqfzuknpfwt 122 | agarmjjvlhedbsyoqfzyknpxwt 123 | ajirmcjvlhevjsyoqfzuknpxwt 124 | agirmcjvlhpdbstoqfzuknpewt 125 | agirmcsvlhedbsyoqfbupnpxwt 126 | agirmcjvlhexbsyodfzukqpxwt 127 | auiymcjblhedbsyoqfzuknpxwt 128 | azirmcjvchedbsyoqfziknpxwt 129 | aeirmcjvlhedvsyoqfzuonpxwt 130 | agirmcjvlhedbfyoqfbukjpxwt 131 | ygirmcjvlhidbsyoqfzukncxwt 132 | agirmxpvlhedbsyoqffuknpxwt 133 | ztirmcjvlhedosyoqfzuknpxwt 134 | agirmcjvlhepbsyoqfzuenppwt 135 | agirmcjvshedbsyoqnzaknpxwt 136 | awirmcjvlhydbsyoqfzuknoxwt 137 | ucirmcjvlhedbsyoqfjuknpxwt 138 | agirmwjvlhkbbsyoqfzuknpxwt 139 | agirmcjvldedbsyohfzuknpxzt 140 | agirmcjvwhedbsyoqfznknpxgt 141 | agiricjvlhedxqyoqfzuknpxwt 142 | agirmcjvlhzdbjyoqfzukapxwt 143 | agirmcgvlhedbsyoqfzuknaowt 144 | agidmcjvlhedbsyoqayuknpxwt 145 | agirmcjvlhedisnoqfzuknpxnt 146 | wkjrmcjvlhedbsyoqfzuknpxwt 147 | agirmcjvlhedbuyojfzukxpxwt 148 | agkrmcjvlhedbsybqfzurnpxwt 149 | agirmcjvghedbsyoqfzuknexwj 150 | agirmcjvnhedbsyoqfzuznpxit 151 | agirmcjvlbedbsyoqfiukwpxwt 152 | agirlctvlheabsyoqfzuknpxwt 153 | agirmcjzzhedbsyoqfzcknpxwt 154 | akirmcjvlnedbsyoqfzlknpxwt 155 | agirmdjvlhedpsyoqfzuknpjwt 156 | agiyjcuvlhedbsyoqfzuknpxwt 157 | agirmcbvltedysyoqfzuknpxwt 158 | agirmcjvlhedfdyoqfzubnpxwt 159 | agidmcjvlhedesfoqfzuknpxwt 160 | aeirmcjvlhedqsyoqfxuknpxwt 161 | agifmcjvlhedbsyoqfquknptwt 162 | agidmcjvlhedbsyfqfzuknpxwb 163 | agirvcjvlhedbsroqfzuknjxwt 164 | agirmcqvlhddbsyoqfzuknpxwj 165 | agirmcjvlhmdqsyoqizuknpxwt 166 | atirmcjvltedbsyoqfzuknpxwz 167 | agirxnjvlhedbsyoqfzuknpxkt 168 | agihmcjvlhedbsyoqfzukepxqt 169 | agirmcjvlhedbsmoqzsuknpxwt 170 | agirycjvlhedbuyoqfwuknpxwt 171 | agirmcjvlhedbsyoqfzfkrfxwt 172 | agirzcjvlhedbsyoqfhuknpxnt 173 | agigmcjvlhedbsqnqfzuknpxwt 174 | agirmgzvlhedbsyoqfzuonpxwt 175 | agirmcjvqhedbqyoqfzukqpxwt 176 | anarmcjvlhedbsyocfzuknpxwt 177 | agirmcjuihedbshoqfzuknpxwt 178 | agirdckvlhedbsyoqfzxknpxwt 179 | ugirmujvlhwdbsyoqfzuknpxwt 180 | mgirmcjvlheobsyovfzuknpxwt 181 | agirmcjvghedbsyoqfzufxpxwt 182 | agirmcjvlhedbsyoinzuknuxwt 183 | agirmzjvlhbdbsyoqfzlknpxwt 184 | agivmcjvlhedbsconfzuknpxwt 185 | agirmwfvlhedtsyoqfzuknpxwt 186 | agirmcjvlhedbbyoqrzukncxwt 187 | agirmcjvlhelbsyoqfzupnlxwt 188 | agirmmjvluedqsyoqfzuknpxwt 189 | agjrmcjvlhedbsyaqfcuknpxwt 190 | agiwmcjvlhedbsyoqzzuknpswt 191 | agirxcjvlhedbsyoqfyvknpxwt 192 | agirmljvlhedbsyoqkzuknpxjt 193 | agirmcjvchedbsyoqfzmknyxwt 194 | agirmcjvlhedbsyovfzuynpxwl 195 | agtrmcjvlhedysyoqfzuknexwt 196 | agirmcjvmhedbslonfzuknpxwt 197 | agirmcjfshedbsyoqfziknpxwt 198 | agirmcjvlhedbsygqfzkknpbwt 199 | agyrmcivlhedbsyovfzuknpxwt 200 | agirmcjvghedbsyoqjzuknkxwt 201 | agirmcjvlhedqsyoqfzukspxmt 202 | ayirmcjvhhedbsyomfzuknpxwt 203 | agirmcjvlnembsypqfzuknpxwt 204 | agirmcjqlhedbsyuvfzuknpxwt 205 | agirmcjvlhembsybqfzuknpxwa 206 | agirjcfvlhedbsyoqfuuknpxwt 207 | agirmcjvohedbsyowfzuknxxwt 208 | agirmcjvlhedroyoqfzukncxwt 209 | agrrmijvlhedbsyoqfnuknpxwt 210 | agirmjjvlhsdbsyoqfzumnpxwt 211 | agirrcjvnhedbsyoqfzuktpxwt 212 | agirmcjvlzedjsyoqfzuknpdwt 213 | agirmkjvlhedbsyoqfzxinpxwt 214 | agirmcjvlhedbzyojfzuknpvwt 215 | arirmcjvlheddsyoqfzuknrxwt 216 | agirmcjvlhedbsyoqhzuanpxmt 217 | agirmcjvluedbsyoqozuknwxwt 218 | afirmcjwlhedxsyoqfzuknpxwt 219 | agirmcjvlhefbsyoqfkuinpxwt 220 | agirycjvltedbsypqfzuknpxwt 221 | agirmrxvlhedbsyoqfzeknpxwt 222 | agfrmcqvlhedbsyoqxzuknpxwt 223 | agormcjvuhexbsyoqfzuknpxwt 224 | agyrmcjvehddbsyoqfzuknpxwt 225 | agirmcjvlheqbsynqfzgknpxwt 226 | agirmcjvlhedbsloufwuknpxwt 227 | tgirmcjvlwedbsyoqfzuknpqwt 228 | agirmcjvlhesbzyogfzuknpxwt 229 | agitmdjvlhedpsyoqfzuknpjwt 230 | bgirmejvlhtdbsyoqfzuknpxwt 231 | aginmcjvlhedzsyoqfzuknoxwt 232 | agvrzcjvlhedbsuoqfzuknpxwt 233 | agormcjvlhedbsyoqfzuknpodt 234 | agirmcevlhedbgyojfzuknpxwt 235 | agirmcjblhedboytqfzuknpxwt 236 | qgibmcjvlhedbsyoqfzuknbxwt 237 | agirmcjvlhedbsyoafzutnnxwt 238 | agiamcjvchkdbsyoqfzuknpxwt 239 | agirmcjvehedblyoqwzuknpxwt 240 | agirmcpvlhwdbsyoafzuknpxwt 241 | agirmcjvlhtdbsyoqfzumnpxtt 242 | agirmcjalhegtsyoqfzuknpxwt 243 | agirdijvlhedbsyoqfzutnpxwt 244 | agirmckvlhgdbsyovfzuknpxwt 245 | qgmrmcjvlkedbsyoqfzuknpxwt 246 | agirjcjvlhodbsyoqfzuanpxwt 247 | ajirmcjvlhedbpyoqftuknpxwt 248 | cgirmcjvlhedbsyoqfiuonpxwt 249 | ayirmcjvlhedbsyaqfzuknwxwt 250 | agirmcjvlhedbdyoqbzwknpxwt -------------------------------------------------------------------------------- /inputs/01.txt: -------------------------------------------------------------------------------- 1 | +15 2 | -14 3 | -9 4 | -15 5 | +5 6 | -1 7 | -6 8 | +5 9 | -19 10 | -11 11 | +13 12 | -20 13 | -5 14 | -19 15 | -16 16 | -5 17 | -5 18 | -7 19 | +16 20 | +3 21 | +7 22 | +16 23 | +2 24 | +5 25 | +10 26 | +13 27 | -4 28 | -17 29 | +4 30 | -8 31 | -18 32 | +16 33 | -14 34 | +3 35 | +12 36 | +8 37 | +15 38 | +15 39 | -8 40 | -6 41 | +9 42 | +2 43 | +16 44 | +19 45 | +18 46 | -6 47 | +13 48 | +7 49 | -12 50 | -11 51 | +19 52 | -20 53 | -15 54 | -19 55 | -10 56 | +19 57 | +3 58 | +6 59 | +15 60 | -1 61 | -5 62 | +3 63 | -1 64 | +14 65 | +17 66 | -4 67 | +18 68 | +19 69 | +6 70 | -13 71 | +12 72 | +2 73 | +7 74 | -5 75 | +3 76 | -17 77 | +15 78 | +8 79 | +18 80 | -19 81 | +11 82 | -8 83 | +5 84 | -17 85 | +7 86 | +7 87 | +17 88 | -13 89 | -7 90 | +10 91 | -6 92 | +19 93 | -12 94 | +20 95 | -19 96 | -10 97 | +17 98 | -14 99 | -8 100 | -13 101 | -2 102 | -15 103 | -11 104 | -6 105 | +3 106 | +12 107 | +14 108 | +6 109 | +9 110 | +20 111 | +21 112 | +16 113 | -14 114 | +1 115 | +3 116 | +8 117 | +3 118 | -18 119 | -5 120 | +14 121 | -3 122 | +7 123 | +17 124 | -1 125 | -1 126 | -4 127 | +13 128 | +5 129 | +11 130 | +15 131 | +5 132 | +14 133 | -12 134 | +5 135 | -13 136 | -19 137 | -8 138 | -18 139 | +16 140 | +12 141 | +13 142 | +18 143 | +10 144 | +18 145 | -8 146 | -8 147 | +17 148 | -12 149 | +4 150 | -14 151 | +6 152 | +17 153 | +14 154 | -1 155 | +7 156 | +7 157 | +4 158 | -8 159 | +10 160 | -12 161 | +14 162 | +6 163 | +6 164 | -1 165 | -6 166 | -3 167 | +12 168 | +12 169 | -8 170 | -17 171 | -4 172 | -4 173 | -9 174 | -3 175 | -1 176 | -11 177 | +14 178 | +6 179 | -2 180 | +16 181 | -9 182 | -12 183 | -8 184 | -1 185 | -2 186 | +5 187 | +19 188 | +15 189 | -1 190 | +18 191 | +8 192 | +14 193 | +14 194 | -19 195 | -14 196 | -5 197 | -18 198 | +12 199 | +4 200 | -6 201 | -2 202 | +1 203 | -8 204 | -9 205 | +5 206 | +9 207 | +23 208 | +6 209 | +10 210 | +18 211 | -13 212 | +19 213 | -7 214 | +11 215 | -1 216 | +17 217 | +18 218 | +16 219 | +15 220 | +12 221 | +16 222 | -8 223 | -4 224 | +19 225 | +11 226 | -19 227 | -12 228 | +15 229 | +3 230 | -1 231 | -1 232 | -13 233 | -13 234 | -11 235 | +13 236 | -19 237 | +15 238 | +16 239 | +7 240 | -17 241 | +4 242 | -2 243 | -15 244 | +10 245 | +4 246 | +19 247 | -15 248 | -16 249 | -17 250 | +5 251 | -12 252 | +16 253 | -17 254 | -18 255 | +7 256 | -14 257 | -2 258 | -10 259 | -8 260 | +16 261 | +13 262 | +18 263 | -9 264 | +2 265 | -15 266 | +8 267 | +6 268 | -3 269 | -15 270 | -16 271 | +9 272 | +10 273 | -5 274 | -10 275 | +19 276 | -16 277 | +18 278 | -19 279 | -9 280 | -15 281 | -20 282 | +13 283 | +15 284 | -13 285 | -7 286 | +13 287 | -2 288 | +18 289 | -21 290 | +6 291 | +3 292 | -7 293 | -15 294 | +2 295 | +19 296 | -13 297 | +15 298 | -19 299 | -14 300 | -13 301 | +1 302 | +7 303 | +26 304 | -13 305 | -19 306 | +7 307 | +8 308 | +1 309 | +8 310 | -15 311 | +3 312 | -44 313 | -15 314 | -15 315 | +10 316 | -11 317 | +9 318 | -2 319 | -5 320 | -15 321 | +3 322 | -10 323 | -2 324 | -14 325 | -10 326 | -1 327 | +4 328 | -6 329 | -10 330 | -15 331 | +8 332 | +15 333 | +11 334 | -18 335 | +13 336 | +17 337 | +2 338 | +11 339 | +7 340 | +6 341 | -14 342 | -15 343 | -10 344 | -13 345 | -6 346 | -18 347 | -1 348 | -10 349 | -17 350 | -18 351 | -2 352 | +8 353 | +4 354 | +5 355 | -6 356 | -8 357 | +11 358 | +1 359 | -20 360 | +28 361 | -10 362 | -4 363 | +17 364 | +3 365 | +4 366 | -14 367 | +21 368 | +2 369 | +4 370 | +16 371 | +8 372 | +17 373 | -22 374 | -11 375 | +10 376 | +9 377 | +18 378 | -15 379 | +16 380 | +13 381 | -2 382 | +31 383 | -14 384 | +1 385 | +4 386 | -8 387 | -18 388 | -17 389 | +15 390 | +10 391 | -14 392 | +36 393 | +62 394 | +15 395 | -7 396 | +18 397 | +21 398 | +19 399 | +14 400 | +6 401 | -15 402 | +20 403 | +2 404 | -9 405 | +8 406 | +20 407 | +4 408 | -15 409 | +12 410 | -15 411 | +16 412 | -14 413 | +10 414 | +10 415 | -2 416 | -13 417 | +37 418 | -19 419 | +2 420 | +4 421 | +16 422 | +19 423 | +7 424 | +18 425 | +1 426 | -11 427 | -13 428 | -9 429 | +3 430 | +5 431 | +16 432 | -20 433 | +16 434 | +10 435 | +9 436 | +10 437 | -12 438 | -14 439 | +19 440 | -1 441 | +6 442 | +7 443 | +21 444 | +10 445 | +17 446 | +2 447 | +7 448 | +9 449 | -1 450 | +4 451 | -11 452 | -5 453 | -14 454 | +4 455 | -17 456 | +2 457 | -10 458 | +14 459 | -2 460 | +6 461 | +16 462 | +11 463 | +5 464 | +32 465 | +18 466 | -11 467 | +7 468 | -6 469 | -16 470 | -20 471 | +6 472 | -3 473 | +21 474 | -5 475 | +21 476 | +16 477 | +5 478 | -9 479 | +6 480 | +15 481 | -19 482 | +11 483 | -10 484 | -17 485 | +26 486 | -5 487 | -9 488 | -19 489 | +13 490 | +24 491 | +7 492 | -5 493 | +8 494 | -12 495 | -13 496 | +19 497 | +15 498 | -20 499 | -4 500 | -31 501 | -7 502 | -21 503 | +1 504 | +18 505 | -12 506 | +3 507 | +16 508 | +17 509 | +66 510 | +30 511 | +21 512 | -15 513 | +3 514 | +13 515 | -4 516 | +2 517 | +23 518 | -46 519 | -1 520 | -203 521 | +15 522 | +2 523 | -22 524 | +2 525 | -13 526 | -2 527 | -23 528 | -16 529 | -16 530 | -8 531 | +21 532 | +9 533 | +2 534 | +3 535 | +2 536 | +11 537 | -4 538 | -13 539 | +3 540 | +19 541 | -7 542 | +13 543 | +3 544 | +24 545 | +14 546 | -21 547 | +9 548 | -18 549 | +5 550 | -50 551 | -19 552 | -36 553 | -11 554 | -22 555 | -16 556 | +22 557 | -17 558 | -21 559 | +7 560 | +12 561 | -14 562 | +55 563 | -4 564 | +5 565 | +51 566 | +30 567 | +27 568 | +69 569 | -23 570 | +4 571 | -13 572 | -34 573 | -41 574 | -31 575 | +15 576 | -36 577 | -169 578 | +14 579 | -19 580 | -214 581 | +16 582 | -79870 583 | +16 584 | -12 585 | +17 586 | +15 587 | -6 588 | -7 589 | +18 590 | +13 591 | +11 592 | +18 593 | +18 594 | -9 595 | +19 596 | +11 597 | -12 598 | -3 599 | +18 600 | -13 601 | +19 602 | +11 603 | +8 604 | -4 605 | +9 606 | +10 607 | -12 608 | -20 609 | -18 610 | +3 611 | +19 612 | -3 613 | +11 614 | +12 615 | +3 616 | -8 617 | -11 618 | -2 619 | -12 620 | -8 621 | -21 622 | -20 623 | -12 624 | -13 625 | +19 626 | -14 627 | +15 628 | +17 629 | -5 630 | -17 631 | +13 632 | -18 633 | -18 634 | -3 635 | -2 636 | +6 637 | -8 638 | +9 639 | -4 640 | -10 641 | -15 642 | -6 643 | -5 644 | +3 645 | -20 646 | +11 647 | -20 648 | +2 649 | -12 650 | -3 651 | +7 652 | -15 653 | +3 654 | -13 655 | -14 656 | -6 657 | -6 658 | +10 659 | +11 660 | +19 661 | +10 662 | -17 663 | -17 664 | -11 665 | -11 666 | +3 667 | -13 668 | +15 669 | +20 670 | +10 671 | -16 672 | +7 673 | +7 674 | -4 675 | -16 676 | +2 677 | +8 678 | +18 679 | -1 680 | +3 681 | +15 682 | +15 683 | -19 684 | +12 685 | -5 686 | -10 687 | +19 688 | +14 689 | +1 690 | +14 691 | -24 692 | -4 693 | -19 694 | -15 695 | -13 696 | -10 697 | -18 698 | -12 699 | -6 700 | -8 701 | -17 702 | -15 703 | +10 704 | +16 705 | -18 706 | +12 707 | -16 708 | -9 709 | -6 710 | +17 711 | +19 712 | +18 713 | -5 714 | +4 715 | +13 716 | -11 717 | -17 718 | +8 719 | +19 720 | +10 721 | -5 722 | -2 723 | -9 724 | +3 725 | -2 726 | -8 727 | -19 728 | -13 729 | +8 730 | +2 731 | -14 732 | -9 733 | -14 734 | -16 735 | -1 736 | -14 737 | +3 738 | -8 739 | -6 740 | -18 741 | -7 742 | +6 743 | +14 744 | -6 745 | -19 746 | -18 747 | +3 748 | -7 749 | -1 750 | -12 751 | -12 752 | +1 753 | +15 754 | +19 755 | -7 756 | +16 757 | -10 758 | -7 759 | -12 760 | +7 761 | -18 762 | -12 763 | -11 764 | +8 765 | -12 766 | -16 767 | -15 768 | -9 769 | +14 770 | -19 771 | -3 772 | -1 773 | -9 774 | -14 775 | +7 776 | +14 777 | +15 778 | +11 779 | +8 780 | -1 781 | +8 782 | -18 783 | -5 784 | -1 785 | -12 786 | +5 787 | +9 788 | +9 789 | +15 790 | +14 791 | +12 792 | -1 793 | -10 794 | +13 795 | -18 796 | +19 797 | -11 798 | +6 799 | -7 800 | -11 801 | -4 802 | -6 803 | +5 804 | -14 805 | -1 806 | -20 807 | -18 808 | -16 809 | -16 810 | -3 811 | -4 812 | +6 813 | -4 814 | +1 815 | -11 816 | +5 817 | -10 818 | +21 819 | +6 820 | +11 821 | -14 822 | +4 823 | +2 824 | +15 825 | +11 826 | +6 827 | +3 828 | -10 829 | +13 830 | -10 831 | -19 832 | -2 833 | +11 834 | +9 835 | +12 836 | +14 837 | -9 838 | +1 839 | -2 840 | +9 841 | +10 842 | -7 843 | +18 844 | +14 845 | -10 846 | -14 847 | +5 848 | +11 849 | -12 850 | +11 851 | +5 852 | +7 853 | +21 854 | +4 855 | -14 856 | +3 857 | -9 858 | +17 859 | -16 860 | +20 861 | -2 862 | -6 863 | +10 864 | +6 865 | +12 866 | -11 867 | +19 868 | +10 869 | -13 870 | +5 871 | +12 872 | -13 873 | -2 874 | -1 875 | -16 876 | -19 877 | +16 878 | +24 879 | +20 880 | -5 881 | -6 882 | +4 883 | +1 884 | -8 885 | -18 886 | -13 887 | -12 888 | -29 889 | -12 890 | +24 891 | -35 892 | +13 893 | -24 894 | -18 895 | -9 896 | -7 897 | +17 898 | -11 899 | -17 900 | -20 901 | -4 902 | -5 903 | +8 904 | -13 905 | -1 906 | -7 907 | -9 908 | -11 909 | +8 910 | -16 911 | +10 912 | -15 913 | +12 914 | -3 915 | +11 916 | -13 917 | -4 918 | -10 919 | +1 920 | +4 921 | -18 922 | +10 923 | -13 924 | -16 925 | -7 926 | -17 927 | -4 928 | -1 929 | -24 930 | +3 931 | +3 932 | -10 933 | +8 934 | -9 935 | +6 936 | -18 937 | +5 938 | -11 939 | -12 940 | -16 941 | +2 942 | -20 943 | +23 944 | -7 945 | +19 946 | +14 947 | -19 948 | +6 949 | +8 950 | -1 951 | +17 952 | +2 953 | -15 954 | +19 955 | -3 956 | +14 957 | +18 958 | +7 959 | +10 960 | -7 961 | -6 962 | +14 963 | -4 964 | -1 965 | +80922 -------------------------------------------------------------------------------- /inputs/10.txt: -------------------------------------------------------------------------------- 1 | position=<-50948, 20587> velocity=< 5, -2> 2 | position=< 20732, -51094> velocity=<-2, 5> 3 | position=<-30471, -10131> velocity=< 3, 1> 4 | position=<-40758, 10355> velocity=< 4, -1> 5 | position=< 30912, 20590> velocity=<-3, -2> 6 | position=< 30927, 30827> velocity=<-3, -3> 7 | position=<-20237, 20591> velocity=< 2, -2> 8 | position=< 51423, -51086> velocity=<-5, 5> 9 | position=<-40732, -20370> velocity=< 4, 2> 10 | position=<-20271, -51094> velocity=< 2, 5> 11 | position=<-40764, -30605> velocity=< 4, 3> 12 | position=<-30492, 41073> velocity=< 3, -4> 13 | position=<-30473, -30614> velocity=< 3, 3> 14 | position=<-51004, 41074> velocity=< 5, -4> 15 | position=<-30481, 30829> velocity=< 3, -3> 16 | position=<-50961, -10130> velocity=< 5, 1> 17 | position=<-50968, 51306> velocity=< 5, -5> 18 | position=<-30489, -40850> velocity=< 3, 4> 19 | position=<-20273, 51307> velocity=< 2, -5> 20 | position=<-40732, 10351> velocity=< 4, -1> 21 | position=<-40764, -30612> velocity=< 4, 3> 22 | position=< 10483, 51307> velocity=<-1, -5> 23 | position=<-30511, -30614> velocity=< 3, 3> 24 | position=< 20719, -40848> velocity=<-2, 4> 25 | position=<-20249, -10129> velocity=< 2, 1> 26 | position=< 30919, -51090> velocity=<-3, 5> 27 | position=<-20281, 20595> velocity=< 2, -2> 28 | position=< 30931, 30830> velocity=<-3, -3> 29 | position=<-20240, 41071> velocity=< 2, -4> 30 | position=< -9988, -51087> velocity=< 1, 5> 31 | position=<-50991, 51315> velocity=< 5, -5> 32 | position=<-10022, 30826> velocity=< 1, -3> 33 | position=<-20241, 30830> velocity=< 2, -3> 34 | position=< 10492, -30610> velocity=<-1, 3> 35 | position=<-30525, 51313> velocity=< 3, -5> 36 | position=< 10492, -20370> velocity=<-1, 2> 37 | position=< 10492, -20371> velocity=<-1, 2> 38 | position=<-20255, 30830> velocity=< 2, -3> 39 | position=< 51403, 20595> velocity=<-5, -2> 40 | position=< 10489, -20370> velocity=<-1, 2> 41 | position=< 10492, 41067> velocity=<-1, -4> 42 | position=< 20722, -40854> velocity=<-2, 4> 43 | position=< 10451, 30830> velocity=<-1, -3> 44 | position=< 10452, -10125> velocity=<-1, 1> 45 | position=< 41151, 51306> velocity=<-4, -5> 46 | position=< 51410, -30610> velocity=<-5, 3> 47 | position=<-20289, -51093> velocity=< 2, 5> 48 | position=<-40708, 30828> velocity=< 4, -3> 49 | position=<-20244, -40851> velocity=< 2, 4> 50 | position=<-20257, -30612> velocity=< 2, 3> 51 | position=< 30943, -10131> velocity=<-3, 1> 52 | position=<-40718, 10346> velocity=< 4, -1> 53 | position=<-40769, -51091> velocity=< 4, 5> 54 | position=< 30967, 41074> velocity=<-3, -4> 55 | position=<-40728, -30614> velocity=< 4, 3> 56 | position=<-40711, 20589> velocity=< 4, -2> 57 | position=< 10487, -51090> velocity=<-1, 5> 58 | position=< 10459, 20595> velocity=<-1, -2> 59 | position=<-10025, 10346> velocity=< 1, -1> 60 | position=< 30913, 41066> velocity=<-3, -4> 61 | position=< 51407, 20595> velocity=<-5, -2> 62 | position=< 30911, -10134> velocity=<-3, 1> 63 | position=<-40769, 51310> velocity=< 4, -5> 64 | position=<-10001, -51085> velocity=< 1, 5> 65 | position=<-10004, 20594> velocity=< 1, -2> 66 | position=<-20281, -40849> velocity=< 2, 4> 67 | position=< 51444, -20365> velocity=<-5, 2> 68 | position=<-40769, 20593> velocity=< 4, -2> 69 | position=< 41183, 20588> velocity=<-4, -2> 70 | position=< 30932, 51315> velocity=<-3, -5> 71 | position=< 41192, -10130> velocity=<-4, 1> 72 | position=< 10488, 41068> velocity=<-1, -4> 73 | position=<-10022, -20370> velocity=< 1, 2> 74 | position=< 30954, 30831> velocity=<-3, -3> 75 | position=<-30513, -40845> velocity=< 3, 4> 76 | position=< 51428, 30831> velocity=<-5, -3> 77 | position=<-40760, -40845> velocity=< 4, 4> 78 | position=<-10009, 30832> velocity=< 1, -3> 79 | position=< 41151, 20586> velocity=<-4, -2> 80 | position=< 30972, 30831> velocity=<-3, -3> 81 | position=< 20675, -30607> velocity=<-2, 3> 82 | position=< 51436, -30606> velocity=<-5, 3> 83 | position=<-50977, -40852> velocity=< 5, 4> 84 | position=< 10471, -40847> velocity=<-1, 4> 85 | position=< 10463, 20590> velocity=<-1, -2> 86 | position=< 30911, -10129> velocity=<-3, 1> 87 | position=< 10476, 41074> velocity=<-1, -4> 88 | position=< 51423, 51309> velocity=<-5, -5> 89 | position=<-50948, -20367> velocity=< 5, 2> 90 | position=< 51419, 30835> velocity=<-5, -3> 91 | position=< 10474, 51306> velocity=<-1, -5> 92 | position=< 10431, 51308> velocity=<-1, -5> 93 | position=<-40733, 41074> velocity=< 4, -4> 94 | position=< 30915, 51306> velocity=<-3, -5> 95 | position=< 30959, 10354> velocity=<-3, -1> 96 | position=< 30972, 20595> velocity=<-3, -2> 97 | position=< 30913, -30610> velocity=<-3, 3> 98 | position=<-10041, -20368> velocity=< 1, 2> 99 | position=<-50972, -20368> velocity=< 5, 2> 100 | position=<-30476, 30828> velocity=< 3, -3> 101 | position=< 41196, -40851> velocity=<-4, 4> 102 | position=<-40753, -20374> velocity=< 4, 2> 103 | position=< 30927, -20368> velocity=<-3, 2> 104 | position=<-20271, -10130> velocity=< 2, 1> 105 | position=<-10046, -40850> velocity=< 1, 4> 106 | position=<-20244, 51308> velocity=< 2, -5> 107 | position=<-20280, 30835> velocity=< 2, -3> 108 | position=< 51391, -30610> velocity=<-5, 3> 109 | position=< 20724, -20365> velocity=<-2, 2> 110 | position=<-40710, 10352> velocity=< 4, -1> 111 | position=<-20289, 41075> velocity=< 2, -4> 112 | position=< 20690, -51085> velocity=<-2, 5> 113 | position=<-40729, 30834> velocity=< 4, -3> 114 | position=< 51428, 51313> velocity=<-5, -5> 115 | position=< -9998, -10129> velocity=< 1, 1> 116 | position=< 20728, -30612> velocity=<-2, 3> 117 | position=< 51447, 41075> velocity=<-5, -4> 118 | position=< 41159, -30605> velocity=<-4, 3> 119 | position=<-40744, -20374> velocity=< 4, 2> 120 | position=< 41188, -51085> velocity=<-4, 5> 121 | position=< 30943, -10126> velocity=<-3, 1> 122 | position=<-10006, -10134> velocity=< 1, 1> 123 | position=< 51399, -10131> velocity=<-5, 1> 124 | position=< 41204, 30834> velocity=<-4, -3> 125 | position=< 30914, -40850> velocity=<-3, 4> 126 | position=< 30948, -51093> velocity=<-3, 5> 127 | position=<-30486, 30826> velocity=< 3, -3> 128 | position=< 10439, 10346> velocity=<-1, -1> 129 | position=< 20721, -51089> velocity=<-2, 5> 130 | position=<-50956, -10130> velocity=< 5, 1> 131 | position=< 10464, -30613> velocity=<-1, 3> 132 | position=< 10492, -30608> velocity=<-1, 3> 133 | position=<-10031, 10346> velocity=< 1, -1> 134 | position=< 30953, 30830> velocity=<-3, -3> 135 | position=< 41204, 51308> velocity=<-4, -5> 136 | position=< 20695, -10127> velocity=<-2, 1> 137 | position=<-40709, -10126> velocity=< 4, 1> 138 | position=<-30497, -20369> velocity=< 3, 2> 139 | position=< 51396, 10354> velocity=<-5, -1> 140 | position=< 20698, 41075> velocity=<-2, -4> 141 | position=<-20286, -51089> velocity=< 2, 5> 142 | position=< 30955, 41066> velocity=<-3, -4> 143 | position=<-10046, 30830> velocity=< 1, -3> 144 | position=<-20254, 10352> velocity=< 2, -1> 145 | position=< -9993, -51094> velocity=< 1, 5> 146 | position=<-50967, -40850> velocity=< 5, 4> 147 | position=<-40753, -51088> velocity=< 4, 5> 148 | position=<-20272, 30835> velocity=< 2, -3> 149 | position=< 10475, 51313> velocity=<-1, -5> 150 | position=<-40769, -40851> velocity=< 4, 4> 151 | position=< 51447, -10128> velocity=<-5, 1> 152 | position=<-10036, 20595> velocity=< 1, -2> 153 | position=< 51431, -40852> velocity=<-5, 4> 154 | position=< 41204, -10127> velocity=<-4, 1> 155 | position=< 51448, 51307> velocity=<-5, -5> 156 | position=<-51008, -51094> velocity=< 5, 5> 157 | position=< 20727, -20369> velocity=<-2, 2> 158 | position=<-50969, 41075> velocity=< 5, -4> 159 | position=< 20707, 10353> velocity=<-2, -1> 160 | position=< 51447, -10130> velocity=<-5, 1> 161 | position=< 10439, 20588> velocity=<-1, -2> 162 | position=< 10490, -20368> velocity=<-1, 2> 163 | position=<-40769, 41068> velocity=< 4, -4> 164 | position=< 30915, -51090> velocity=<-3, 5> 165 | position=<-20273, 30831> velocity=< 2, -3> 166 | position=< 10463, 20586> velocity=<-1, -2> 167 | position=< 51417, 41075> velocity=<-5, -4> 168 | position=<-50948, 41071> velocity=< 5, -4> 169 | position=<-30470, 20591> velocity=< 3, -2> 170 | position=< 51439, 51311> velocity=<-5, -5> 171 | position=< 51399, 51307> velocity=<-5, -5> 172 | position=<-30478, -40849> velocity=< 3, 4> 173 | position=<-40727, 41070> velocity=< 4, -4> 174 | position=<-30503, 51306> velocity=< 3, -5> 175 | position=<-20252, 51308> velocity=< 2, -5> 176 | position=<-20265, -51094> velocity=< 2, 5> 177 | position=<-30468, -40846> velocity=< 3, 4> 178 | position=<-30501, -30611> velocity=< 3, 3> 179 | position=<-20263, -40849> velocity=< 2, 4> 180 | position=< 20714, 20591> velocity=<-2, -2> 181 | position=<-20252, -40854> velocity=< 2, 4> 182 | position=<-40729, -40853> velocity=< 4, 4> 183 | position=<-10047, 30826> velocity=< 1, -3> 184 | position=< 10479, -51088> velocity=<-1, 5> 185 | position=< 51443, 41071> velocity=<-5, -4> 186 | position=<-50969, -40854> velocity=< 5, 4> 187 | position=<-40742, -20374> velocity=< 4, 2> 188 | position=< 41155, 20592> velocity=<-4, -2> 189 | position=< 41175, 41074> velocity=<-4, -4> 190 | position=< 20679, 20594> velocity=<-2, -2> 191 | position=<-20265, 10355> velocity=< 2, -1> 192 | position=< 41184, 20587> velocity=<-4, -2> 193 | position=< 41177, -40845> velocity=<-4, 4> 194 | position=< 30938, -20374> velocity=<-3, 2> 195 | position=< 20732, 30830> velocity=<-2, -3> 196 | position=<-20273, 51314> velocity=< 2, -5> 197 | position=< 41178, 51310> velocity=<-4, -5> 198 | position=< 20687, 30829> velocity=<-2, -3> 199 | position=<-50964, 10347> velocity=< 5, -1> 200 | position=< 51391, -51093> velocity=<-5, 5> 201 | position=<-30485, -51088> velocity=< 3, 5> 202 | position=<-30468, -30611> velocity=< 3, 3> 203 | position=<-30513, 51312> velocity=< 3, -5> 204 | position=<-40753, 10347> velocity=< 4, -1> 205 | position=<-50993, 51308> velocity=< 5, -5> 206 | position=< 41194, -51089> velocity=<-4, 5> 207 | position=< 30919, -30607> velocity=<-3, 3> 208 | position=< 51436, 51315> velocity=<-5, -5> 209 | position=<-20245, -20368> velocity=< 2, 2> 210 | position=< 30913, -20370> velocity=<-3, 2> 211 | position=< 30943, -51086> velocity=<-3, 5> 212 | position=<-20273, 41073> velocity=< 2, -4> 213 | position=< 10484, -40850> velocity=<-1, 4> 214 | position=< 10492, -40848> velocity=<-1, 4> 215 | position=<-10009, 30826> velocity=< 1, -3> 216 | position=< 20679, -20368> velocity=<-2, 2> 217 | position=<-50959, -30614> velocity=< 5, 3> 218 | position=<-40741, -10134> velocity=< 4, 1> 219 | position=< 30919, 30834> velocity=<-3, -3> 220 | position=<-10033, 30833> velocity=< 1, -3> 221 | position=<-30489, 30831> velocity=< 3, -3> 222 | position=<-30492, -40848> velocity=< 3, 4> 223 | position=<-40720, -30613> velocity=< 4, 3> 224 | position=<-50993, -30612> velocity=< 5, 3> 225 | position=<-40745, -20365> velocity=< 4, 2> 226 | position=<-10024, -20368> velocity=< 1, 2> 227 | position=< 41152, 30830> velocity=<-4, -3> 228 | position=< 30951, 20586> velocity=<-3, -2> 229 | position=<-40740, 41075> velocity=< 4, -4> 230 | position=< 51416, -40845> velocity=<-5, 4> 231 | position=<-30527, -51090> velocity=< 3, 5> 232 | position=< 41161, 51315> velocity=<-4, -5> 233 | position=<-40764, -20365> velocity=< 4, 2> 234 | position=< 51448, -51093> velocity=<-5, 5> 235 | position=<-30521, 10349> velocity=< 3, -1> 236 | position=<-20249, 51312> velocity=< 2, -5> 237 | position=<-30513, 10354> velocity=< 3, -1> 238 | position=< 30945, 30830> velocity=<-3, -3> 239 | position=< -9996, 30832> velocity=< 1, -3> 240 | position=< 10468, -51085> velocity=<-1, 5> 241 | position=<-30487, 10346> velocity=< 3, -1> 242 | position=< 51391, 10352> velocity=<-5, -1> 243 | position=< 10471, 41067> velocity=<-1, -4> 244 | position=<-10033, 30830> velocity=< 1, -3> 245 | position=< 30932, 30835> velocity=<-3, -3> 246 | position=< 41199, 51308> velocity=<-4, -5> 247 | position=<-40713, -10134> velocity=< 4, 1> 248 | position=<-10005, -51088> velocity=< 1, 5> 249 | position=< 10475, -20370> velocity=<-1, 2> 250 | position=< 10484, 41071> velocity=<-1, -4> 251 | position=< 10439, -20367> velocity=<-1, 2> 252 | position=< 10448, -51090> velocity=<-1, 5> 253 | position=<-30529, 20591> velocity=< 3, -2> 254 | position=< 41188, 41068> velocity=<-4, -4> 255 | position=< 51419, 10349> velocity=<-5, -1> 256 | position=<-20289, 10348> velocity=< 2, -1> 257 | position=<-20265, -10134> velocity=< 2, 1> 258 | position=< 30927, 30831> velocity=<-3, -3> 259 | position=< 41183, -40849> velocity=<-4, 4> 260 | position=< 10487, -10128> velocity=<-1, 1> 261 | position=<-20236, -51086> velocity=< 2, 5> 262 | position=< 30943, -20371> velocity=<-3, 2> 263 | position=< 30948, 20589> velocity=<-3, -2> 264 | position=<-10015, -30611> velocity=< 1, 3> 265 | position=< 41208, -20372> velocity=<-4, 2> 266 | position=< 51431, -20372> velocity=<-5, 2> 267 | position=<-10016, 41068> velocity=< 1, -4> 268 | position=< 41180, -40852> velocity=<-4, 4> 269 | position=<-20230, -10129> velocity=< 2, 1> 270 | position=<-40713, -51092> velocity=< 4, 5> 271 | position=<-40712, 41067> velocity=< 4, -4> 272 | position=< 51418, 20595> velocity=<-5, -2> 273 | position=< 41191, 30827> velocity=<-4, -3> 274 | position=<-20233, -10133> velocity=< 2, 1> 275 | position=< 51395, 10352> velocity=<-5, -1> 276 | position=< 41212, -30609> velocity=<-4, 3> 277 | position=< 41167, -51086> velocity=<-4, 5> 278 | position=<-40737, 20595> velocity=< 4, -2> 279 | position=<-10040, -10125> velocity=< 1, 1> 280 | position=<-40753, -10129> velocity=< 4, 1> 281 | position=< 30927, 51310> velocity=<-3, -5> 282 | position=< 20676, 20589> velocity=<-2, -2> 283 | position=<-30529, -10128> velocity=< 3, 1> 284 | position=< 20729, 51310> velocity=<-2, -5> 285 | position=<-20229, -40847> velocity=< 2, 4> 286 | position=< 41196, 20587> velocity=<-4, -2> 287 | position=< 10468, 51314> velocity=<-1, -5> 288 | position=< 20676, 41067> velocity=<-2, -4> 289 | position=< -9993, 30834> velocity=< 1, -3> 290 | position=<-51004, 51307> velocity=< 5, -5> 291 | position=< 51410, 30835> velocity=<-5, -3> 292 | position=<-30476, 41075> velocity=< 3, -4> 293 | position=<-20281, 20590> velocity=< 2, -2> 294 | position=< 20727, -40852> velocity=<-2, 4> 295 | position=<-10001, -30609> velocity=< 1, 3> 296 | position=< 20691, 30826> velocity=<-2, -3> 297 | position=<-51001, 20587> velocity=< 5, -2> 298 | position=<-51001, 51310> velocity=< 5, -5> 299 | position=<-20252, -30612> velocity=< 2, 3> 300 | position=<-20257, -30610> velocity=< 2, 3> 301 | position=< 20703, -20370> velocity=<-2, 2> 302 | position=< 41207, -51093> velocity=<-4, 5> 303 | position=<-30481, 20593> velocity=< 3, -2> 304 | position=<-30510, -30614> velocity=< 3, 3> 305 | position=<-10001, -20366> velocity=< 1, 2> 306 | position=<-30485, 20590> velocity=< 3, -2> 307 | position=< 10460, -51094> velocity=<-1, 5> 308 | position=< 51410, -40850> velocity=<-5, 4> 309 | position=<-20236, 20589> velocity=< 2, -2> 310 | position=<-20241, 20594> velocity=< 2, -2> 311 | position=<-10044, -10132> velocity=< 1, 1> 312 | position=<-10048, 20586> velocity=< 1, -2> 313 | position=<-20245, -10130> velocity=< 2, 1> 314 | position=< 30951, -10131> velocity=<-3, 1> 315 | position=< -9993, -40852> velocity=< 1, 4> 316 | position=< 30971, -30607> velocity=<-3, 3> 317 | position=< 51391, 20594> velocity=<-5, -2> 318 | position=<-50951, -51091> velocity=< 5, 5> 319 | position=< -9993, 20593> velocity=< 1, -2> 320 | position=< 10480, -10129> velocity=<-1, 1> 321 | position=< 41211, 51314> velocity=<-4, -5> 322 | position=< 30912, -10134> velocity=<-3, 1> 323 | position=< 30944, 30828> velocity=<-3, -3> 324 | position=< 30915, -51090> velocity=<-3, 5> 325 | position=< -9999, 10351> velocity=< 1, -1> 326 | position=< 51395, 51312> velocity=<-5, -5> 327 | position=<-40729, 20588> velocity=< 4, -2> 328 | position=<-20229, -40846> velocity=< 2, 4> 329 | position=<-10033, 30833> velocity=< 1, -3> 330 | position=< 41168, 41066> velocity=<-4, -4> 331 | position=< 20703, 51306> velocity=<-2, -5> 332 | position=< 20732, 51309> velocity=<-2, -5> 333 | position=<-10020, 10347> velocity=< 1, -1> 334 | position=<-40716, -10130> velocity=< 4, 1> 335 | position=< 41212, 10352> velocity=<-4, -1> 336 | position=< 10464, -51093> velocity=<-1, 5> 337 | position=< 10434, 41066> velocity=<-1, -4> 338 | position=< 10451, 51315> velocity=<-1, -5> 339 | position=<-40764, -10133> velocity=< 4, 1> 340 | position=<-10049, -10126> velocity=< 1, 1> 341 | position=< 10463, 10347> velocity=<-1, -1> 342 | position=< 20732, 41075> velocity=<-2, -4> 343 | position=<-30488, -10130> velocity=< 3, 1> 344 | position=<-10009, 10349> velocity=< 1, -1> 345 | position=<-40744, -10134> velocity=< 4, 1> 346 | position=< 20703, 41073> velocity=<-2, -4> 347 | position=< 41204, -51092> velocity=<-4, 5> 348 | position=<-50960, -51093> velocity=< 5, 5> 349 | position=<-40748, 20586> velocity=< 4, -2> 350 | position=< 51428, 20591> velocity=<-5, -2> 351 | position=<-30489, 30831> velocity=< 3, -3> 352 | position=< 10472, 10350> velocity=<-1, -1> 353 | position=< 41199, -20371> velocity=<-4, 2> 354 | position=<-30489, 41069> velocity=< 3, -4> 355 | position=<-20241, 10352> velocity=< 2, -1> 356 | position=< 41188, -51090> velocity=<-4, 5> 357 | position=<-10004, -40845> velocity=< 1, 4> 358 | position=<-30497, -51088> velocity=< 3, 5> 359 | position=< 30943, 20591> velocity=<-3, -2> 360 | position=<-50956, -10129> velocity=< 5, 1> 361 | position=< 41186, -20369> velocity=<-4, 2> 362 | position=< 30948, 41066> velocity=<-3, -4> 363 | position=< 30919, 51309> velocity=<-3, -5> 364 | position=< 10451, 10355> velocity=<-1, -1> 365 | position=< 10475, 20586> velocity=<-1, -2> 366 | position=< 30959, 20588> velocity=<-3, -2> 367 | position=< 41187, -51087> velocity=<-4, 5> 368 | position=< 30956, 51309> velocity=<-3, -5> 369 | position=<-30497, 41075> velocity=< 3, -4> 370 | position=< 51396, 51309> velocity=<-5, -5> 371 | position=< 30962, -51094> velocity=<-3, 5> 372 | position=< 30967, -51091> velocity=<-3, 5> 373 | position=< 10487, 20587> velocity=<-1, -2> 374 | position=<-40732, 30826> velocity=< 4, -3> 375 | position=<-50985, 10354> velocity=< 5, -1> 376 | position=<-40753, -40850> velocity=< 4, 4> 377 | position=< 10476, -51092> velocity=<-1, 5> 378 | position=<-50966, 10350> velocity=< 5, -1> 379 | position=< 30930, 51306> velocity=<-3, -5> -------------------------------------------------------------------------------- /nim/day10out.txt: -------------------------------------------------------------------------------- 1 | ............................................................................................................................................................................................................................................................. 2 | ............................................................................................................................................................................................................................................................. 3 | ............................................................................................................................................................................................................................................................. 4 | ............................................................................................................................................................................................................................................................. 5 | ............................................................................................................................................................................................................................................................. 6 | ............................................................................................................................................................................................................................................................. 7 | ............................................................................................................................................................................................................................................................. 8 | ............................................................................................................................................................................................................................................................. 9 | ............................................................................................................................................................................................................................................................. 10 | ............................................................................................................................................................................................................................................................. 11 | ............................................................................................................................................................................................................................................................. 12 | ............................................................................................................................................................................................................................................................. 13 | ............................................................................................................................................................................................................................................................. 14 | ............................................................................................................................................................................................................................................................. 15 | ............................................................................................................................................................................................................................................................. 16 | ............................................................................................................................................................................................................................................................. 17 | ............................................................................................................................................................................................................................................................. 18 | ............................................................................................................................................................................................................................................................. 19 | ............................................................................................................................................................................................................................................................. 20 | ............................................................................................................................................................................................................................................................. 21 | ............................................................................................................................................................................................................................................................. 22 | ............................................................................................................................................................................................................................................................. 23 | ............................................................................................................................................................................................................................................................. 24 | ............................................................................................................................................................................................................................................................. 25 | ............................................................................................................................................................................................................................................................. 26 | ............................................................................................................................................................................................................................................................. 27 | ............................................................................................................................................................................................................................................................. 28 | ............................................................................................................................................................................................................................................................. 29 | ............................................................................................................................................................................................................................................................. 30 | ............................................................................................................................................................................................................................................................. 31 | ............................................................................................................................................................................................................................................................. 32 | ............................................................................................................................................................................................................................................................. 33 | ............................................................................................................................................................................................................................................................. 34 | ............................................................................................................................................................................................................................................................. 35 | ............................................................................................................................................................................................................................................................. 36 | ............................................................................................................................................................................................................................................................. 37 | ............................................................................................................................................................................................................................................................. 38 | ............................................................................................................................................................................................................................................................. 39 | ............................................................................................................................................................................................................................................................. 40 | ............................................................................................................................................................................................................................................................. 41 | ............................................................................................................................................................................................................................................................. 42 | ............................................................................................................................................................................................................................................................. 43 | ............................................................................................................................................................................................................................................................. 44 | ............................................................................................................................................................................................................................................................. 45 | ............................................................................................................................................................................................................................................................. 46 | ............................................................................................................................................................................................................................................................. 47 | ............................................................................................................................................................................................................................................................. 48 | ............................................................................................................................................................................................................................................................. 49 | ............................................................................................................................................................................................................................................................. 50 | ............................................................................................................................................................................................................................................................. 51 | ............................................................................................................................................................................................................................................................. 52 | ............................................................................................................................................................................................................................................................. 53 | ............................................................................................................................................................................................................................................................. 54 | ............................................................................................................................................................................................................................................................. 55 | ............................................................................................................................................................................................................................................................. 56 | ............................................................................................................................................................................................................................................................. 57 | ............................................................................................................................................................................................................................................................. 58 | ............................................................................................................................................................................................................................................................. 59 | ............................................................................................................................................................................................................................................................. 60 | ............................................................................................................................................................................................................................................................. 61 | ............................................................................................................................................................................................................................................................. 62 | ............................................................................................................................................................................................................................................................. 63 | ............................................................................................................................................................................................................................................................. 64 | ............................................................................................................................................................................................................................................................. 65 | ............................................................................................................................................................................................................................................................. 66 | ............................................................................................................................................................................................................................................................. 67 | ............................................................................................................................................................................................................................................................. 68 | ............................................................................................................................................................................................................................................................. 69 | ............................................................................................................................................................................................................................................................. 70 | ............................................................................................................................................................................................................................................................. 71 | ............................................................................................................................................................................................................................................................. 72 | ............................................................................................................................................................................................................................................................. 73 | ............................................................................................................................................................................................................................................................. 74 | ............................................................................................................................................................................................................................................................. 75 | ............................................................................................................................................................................................................................................................. 76 | ............................................................................................................................................................................................................................................................. 77 | ............................................................................................................................................................................................................................................................. 78 | ............................................................................................................................................................................................................................................................. 79 | ............................................................................................................................................................................................................................................................. 80 | ............................................................................................................................................................................................................................................................. 81 | ............................................................................................................................................................................................................................................................. 82 | ............................................................................................................................................................................................................................................................. 83 | ............................................................................................................................................................................................................................................................. 84 | ............................................................................................................................................................................................................................................................. 85 | ............................................................................................................................................................................................................................................................. 86 | ............................................................................................................................................................................................................................................................. 87 | ............................................................................................................................................................................................................................................................. 88 | ............................................................................................................................................................................................................................................................. 89 | ............................................................................................................................................................................................................................................................. 90 | ............................................................................................................................................................................................................................................................. 91 | ............................................................................................................................................................................................................................................................. 92 | ............................................................................................................................................................................................................................................................. 93 | ............................................................................................................................................................................................................................................................. 94 | ............................................................................................................................................................................................................................................................. 95 | ............................................................................................................................................................................................................................................................. 96 | ............................................................................................................................................................................................................................................................. 97 | ............................................................................................................................................................................................................................................................. 98 | ............................................................................................................................................................................................................................................................. 99 | ............................................................................................................................................................................................................................................................. 100 | ............................................................................................................................................................................................................................................................. 101 | ............................................................................................................................................................................................................................................................. 102 | ............................................................................................................................................................................................................................................................. 103 | ............................................................................................................................................................................................................................................................. 104 | ............................................................................................................................................................................................................................................................. 105 | ............................................................................................................................................................................................................................................................. 106 | ............................................................................................................................................................................................................................................................. 107 | ...............................................................................................................................................................................................#####...#.......######..######..#....#..#####.....##....#....# 108 | ...............................................................................................................................................................................................#....#..#.......#............#..##...#..#....#...#..#...##...# 109 | ...............................................................................................................................................................................................#....#..#.......#............#..##...#..#....#..#....#..##...# 110 | ...............................................................................................................................................................................................#....#..#.......#...........#...#.#..#..#....#..#....#..#.#..# 111 | ...............................................................................................................................................................................................#####...#.......#####......#....#.#..#..#####...#....#..#.#..# 112 | ...............................................................................................................................................................................................#..#....#.......#.........#.....#..#.#..#..#....######..#..#.# 113 | ...............................................................................................................................................................................................#...#...#.......#........#......#..#.#..#...#...#....#..#..#.# 114 | ...............................................................................................................................................................................................#...#...#.......#.......#.......#...##..#...#...#....#..#...## 115 | ...............................................................................................................................................................................................#....#..#.......#.......#.......#...##..#....#..#....#..#...## 116 | ...............................................................................................................................................................................................#....#..######..######..######..#....#..#....#..#....#..#....# -------------------------------------------------------------------------------- /inputs/03.txt: -------------------------------------------------------------------------------- 1 | #1 @ 749,666: 27x15 2 | #2 @ 118,560: 22x18 3 | #3 @ 194,731: 16x29 4 | #4 @ 295,407: 21x29 5 | #5 @ 717,30: 29x24 6 | #6 @ 969,722: 11x25 7 | #7 @ 117,596: 20x22 8 | #8 @ 557,190: 19x17 9 | #9 @ 445,84: 22x24 10 | #10 @ 527,900: 28x12 11 | #11 @ 48,71: 20x17 12 | #12 @ 644,603: 29x16 13 | #13 @ 786,478: 19x10 14 | #14 @ 40,483: 14x15 15 | #15 @ 683,475: 22x13 16 | #16 @ 173,683: 10x10 17 | #17 @ 862,778: 12x29 18 | #18 @ 169,513: 20x13 19 | #19 @ 151,719: 28x13 20 | #20 @ 49,342: 15x29 21 | #21 @ 678,900: 13x29 22 | #22 @ 97,522: 6x16 23 | #23 @ 888,500: 11x21 24 | #24 @ 781,576: 12x22 25 | #25 @ 122,367: 28x18 26 | #26 @ 625,149: 22x27 27 | #27 @ 668,803: 15x11 28 | #28 @ 822,317: 26x15 29 | #29 @ 685,945: 19x11 30 | #30 @ 786,296: 13x18 31 | #31 @ 848,839: 15x16 32 | #32 @ 663,448: 28x24 33 | #33 @ 941,785: 13x24 34 | #34 @ 579,902: 26x11 35 | #35 @ 343,206: 19x11 36 | #36 @ 301,174: 27x12 37 | #37 @ 539,52: 16x20 38 | #38 @ 740,676: 17x26 39 | #39 @ 771,191: 11x18 40 | #40 @ 80,930: 22x29 41 | #41 @ 402,979: 16x18 42 | #42 @ 978,896: 14x27 43 | #43 @ 299,185: 20x24 44 | #44 @ 885,32: 20x25 45 | #45 @ 28,376: 13x26 46 | #46 @ 103,323: 22x22 47 | #47 @ 495,160: 18x14 48 | #48 @ 318,567: 13x20 49 | #49 @ 206,353: 11x13 50 | #50 @ 763,100: 21x13 51 | #51 @ 852,973: 18x12 52 | #52 @ 50,249: 20x26 53 | #53 @ 329,579: 11x11 54 | #54 @ 546,884: 12x16 55 | #55 @ 425,681: 18x18 56 | #56 @ 152,610: 17x16 57 | #57 @ 802,735: 29x21 58 | #58 @ 113,567: 22x18 59 | #59 @ 361,386: 27x25 60 | #60 @ 921,9: 25x19 61 | #61 @ 68,903: 23x21 62 | #62 @ 368,599: 16x25 63 | #63 @ 553,182: 11x16 64 | #64 @ 391,822: 26x28 65 | #65 @ 589,207: 12x20 66 | #66 @ 188,348: 23x22 67 | #67 @ 499,43: 16x21 68 | #68 @ 849,175: 14x10 69 | #69 @ 650,527: 20x10 70 | #70 @ 108,72: 11x25 71 | #71 @ 685,124: 12x29 72 | #72 @ 364,370: 25x10 73 | #73 @ 578,357: 18x24 74 | #74 @ 514,961: 25x28 75 | #75 @ 376,981: 22x11 76 | #76 @ 96,496: 16x17 77 | #77 @ 682,6: 14x13 78 | #78 @ 191,804: 17x19 79 | #79 @ 202,556: 28x23 80 | #80 @ 390,525: 11x20 81 | #81 @ 836,610: 22x20 82 | #82 @ 566,79: 22x28 83 | #83 @ 441,68: 16x12 84 | #84 @ 270,609: 12x10 85 | #85 @ 520,392: 20x16 86 | #86 @ 104,416: 23x26 87 | #87 @ 104,763: 22x16 88 | #88 @ 669,877: 11x24 89 | #89 @ 277,658: 27x12 90 | #90 @ 909,134: 25x14 91 | #91 @ 414,925: 29x28 92 | #92 @ 304,618: 15x23 93 | #93 @ 838,975: 23x14 94 | #94 @ 761,377: 19x26 95 | #95 @ 923,178: 11x10 96 | #96 @ 901,945: 22x20 97 | #97 @ 179,325: 18x24 98 | #98 @ 877,792: 27x17 99 | #99 @ 870,233: 24x24 100 | #100 @ 945,390: 13x14 101 | #101 @ 697,868: 10x19 102 | #102 @ 823,154: 19x27 103 | #103 @ 444,900: 16x27 104 | #104 @ 538,45: 25x14 105 | #105 @ 90,423: 15x10 106 | #106 @ 425,822: 26x19 107 | #107 @ 968,167: 20x21 108 | #108 @ 721,420: 25x12 109 | #109 @ 516,30: 27x29 110 | #110 @ 316,565: 11x13 111 | #111 @ 379,278: 26x16 112 | #112 @ 940,770: 13x24 113 | #113 @ 429,913: 16x18 114 | #114 @ 278,174: 25x20 115 | #115 @ 659,232: 22x16 116 | #116 @ 482,36: 20x10 117 | #117 @ 162,410: 19x11 118 | #118 @ 160,949: 21x27 119 | #119 @ 48,268: 15x17 120 | #120 @ 50,512: 12x27 121 | #121 @ 215,330: 26x12 122 | #122 @ 504,400: 28x28 123 | #123 @ 129,529: 21x18 124 | #124 @ 160,370: 26x19 125 | #125 @ 955,275: 21x29 126 | #126 @ 576,320: 13x28 127 | #127 @ 492,955: 24x29 128 | #128 @ 111,918: 24x17 129 | #129 @ 654,910: 13x10 130 | #130 @ 390,607: 21x23 131 | #131 @ 498,581: 16x21 132 | #132 @ 1,126: 20x24 133 | #133 @ 108,809: 4x3 134 | #134 @ 600,572: 13x29 135 | #135 @ 67,717: 21x27 136 | #136 @ 387,392: 21x15 137 | #137 @ 510,44: 10x15 138 | #138 @ 940,137: 10x26 139 | #139 @ 375,506: 18x10 140 | #140 @ 825,669: 18x10 141 | #141 @ 528,338: 24x13 142 | #142 @ 657,492: 20x28 143 | #143 @ 659,677: 3x6 144 | #144 @ 885,878: 16x24 145 | #145 @ 310,214: 26x27 146 | #146 @ 947,823: 13x17 147 | #147 @ 10,222: 18x26 148 | #148 @ 56,575: 24x16 149 | #149 @ 646,914: 16x20 150 | #150 @ 313,512: 18x16 151 | #151 @ 321,622: 24x17 152 | #152 @ 937,195: 21x14 153 | #153 @ 386,23: 18x26 154 | #154 @ 922,148: 18x29 155 | #155 @ 126,45: 20x27 156 | #156 @ 590,14: 13x11 157 | #157 @ 538,739: 22x18 158 | #158 @ 497,171: 24x21 159 | #159 @ 824,484: 12x21 160 | #160 @ 329,843: 23x28 161 | #161 @ 163,179: 22x18 162 | #162 @ 160,98: 18x22 163 | #163 @ 664,1: 24x17 164 | #164 @ 414,502: 21x12 165 | #165 @ 15,792: 11x20 166 | #166 @ 454,169: 12x27 167 | #167 @ 260,924: 24x14 168 | #168 @ 565,223: 13x15 169 | #169 @ 247,165: 20x13 170 | #170 @ 72,41: 23x26 171 | #171 @ 640,265: 28x24 172 | #172 @ 150,867: 28x18 173 | #173 @ 478,577: 21x29 174 | #174 @ 654,695: 13x25 175 | #175 @ 426,674: 23x17 176 | #176 @ 664,290: 19x5 177 | #177 @ 427,509: 10x14 178 | #178 @ 349,382: 21x21 179 | #179 @ 416,582: 17x25 180 | #180 @ 340,270: 22x10 181 | #181 @ 835,750: 15x12 182 | #182 @ 944,548: 11x22 183 | #183 @ 590,509: 17x11 184 | #184 @ 378,224: 13x15 185 | #185 @ 682,283: 28x19 186 | #186 @ 607,82: 26x15 187 | #187 @ 604,468: 28x15 188 | #188 @ 719,127: 29x28 189 | #189 @ 319,15: 22x26 190 | #190 @ 119,285: 13x14 191 | #191 @ 235,512: 26x24 192 | #192 @ 191,473: 11x20 193 | #193 @ 0,840: 10x27 194 | #194 @ 617,528: 21x16 195 | #195 @ 206,474: 24x11 196 | #196 @ 285,197: 20x19 197 | #197 @ 347,352: 15x22 198 | #198 @ 412,735: 26x20 199 | #199 @ 372,931: 23x15 200 | #200 @ 461,497: 13x28 201 | #201 @ 689,943: 28x12 202 | #202 @ 621,93: 26x25 203 | #203 @ 897,795: 12x13 204 | #204 @ 652,648: 11x21 205 | #205 @ 259,367: 11x26 206 | #206 @ 43,187: 26x22 207 | #207 @ 170,194: 27x29 208 | #208 @ 539,760: 22x22 209 | #209 @ 404,291: 20x29 210 | #210 @ 782,419: 25x27 211 | #211 @ 613,61: 3x10 212 | #212 @ 821,325: 16x21 213 | #213 @ 65,689: 12x11 214 | #214 @ 303,270: 24x24 215 | #215 @ 836,463: 17x17 216 | #216 @ 1,643: 23x15 217 | #217 @ 953,540: 13x28 218 | #218 @ 140,530: 28x27 219 | #219 @ 625,447: 12x13 220 | #220 @ 492,638: 26x21 221 | #221 @ 156,711: 10x12 222 | #222 @ 35,699: 17x27 223 | #223 @ 301,187: 14x24 224 | #224 @ 805,618: 23x11 225 | #225 @ 550,881: 11x21 226 | #226 @ 209,536: 24x20 227 | #227 @ 181,331: 14x26 228 | #228 @ 849,922: 15x19 229 | #229 @ 100,832: 12x18 230 | #230 @ 224,410: 6x6 231 | #231 @ 437,952: 17x25 232 | #232 @ 299,494: 16x22 233 | #233 @ 37,9: 14x19 234 | #234 @ 177,563: 22x18 235 | #235 @ 152,230: 17x11 236 | #236 @ 18,250: 16x28 237 | #237 @ 759,373: 28x24 238 | #238 @ 202,724: 24x18 239 | #239 @ 291,769: 10x12 240 | #240 @ 816,908: 27x21 241 | #241 @ 228,198: 11x18 242 | #242 @ 164,233: 27x11 243 | #243 @ 957,624: 27x24 244 | #244 @ 840,726: 29x24 245 | #245 @ 4,797: 24x12 246 | #246 @ 172,879: 15x17 247 | #247 @ 972,905: 14x27 248 | #248 @ 674,845: 10x15 249 | #249 @ 846,573: 21x21 250 | #250 @ 806,277: 20x29 251 | #251 @ 812,900: 22x12 252 | #252 @ 147,361: 24x20 253 | #253 @ 865,723: 18x18 254 | #254 @ 416,125: 21x22 255 | #255 @ 899,831: 13x18 256 | #256 @ 570,189: 20x21 257 | #257 @ 302,498: 15x28 258 | #258 @ 360,65: 15x14 259 | #259 @ 178,394: 18x25 260 | #260 @ 543,744: 13x24 261 | #261 @ 746,590: 23x12 262 | #262 @ 803,586: 26x26 263 | #263 @ 381,559: 26x14 264 | #264 @ 513,391: 14x19 265 | #265 @ 647,20: 17x21 266 | #266 @ 611,53: 11x26 267 | #267 @ 60,387: 22x21 268 | #268 @ 118,142: 19x11 269 | #269 @ 550,816: 25x19 270 | #270 @ 249,538: 24x29 271 | #271 @ 423,966: 20x13 272 | #272 @ 921,676: 20x12 273 | #273 @ 238,145: 14x12 274 | #274 @ 278,650: 24x24 275 | #275 @ 629,561: 23x15 276 | #276 @ 98,784: 11x12 277 | #277 @ 281,169: 18x29 278 | #278 @ 929,427: 29x19 279 | #279 @ 164,384: 20x12 280 | #280 @ 145,46: 28x26 281 | #281 @ 717,115: 20x11 282 | #282 @ 929,798: 25x11 283 | #283 @ 275,457: 21x12 284 | #284 @ 898,437: 16x17 285 | #285 @ 466,643: 20x16 286 | #286 @ 744,930: 22x11 287 | #287 @ 857,719: 26x20 288 | #288 @ 860,527: 17x21 289 | #289 @ 212,530: 18x27 290 | #290 @ 328,630: 25x10 291 | #291 @ 476,7: 23x29 292 | #292 @ 787,796: 22x12 293 | #293 @ 18,243: 26x10 294 | #294 @ 389,25: 21x15 295 | #295 @ 687,942: 25x10 296 | #296 @ 380,626: 13x11 297 | #297 @ 357,559: 15x29 298 | #298 @ 1,849: 25x14 299 | #299 @ 457,819: 13x21 300 | #300 @ 719,52: 20x25 301 | #301 @ 895,473: 10x22 302 | #302 @ 301,196: 11x15 303 | #303 @ 432,392: 25x22 304 | #304 @ 591,11: 25x25 305 | #305 @ 101,628: 29x14 306 | #306 @ 322,860: 10x10 307 | #307 @ 300,754: 5x5 308 | #308 @ 437,297: 29x21 309 | #309 @ 451,518: 24x16 310 | #310 @ 649,518: 22x15 311 | #311 @ 558,368: 27x20 312 | #312 @ 432,928: 17x25 313 | #313 @ 784,483: 22x23 314 | #314 @ 316,351: 23x21 315 | #315 @ 10,374: 20x20 316 | #316 @ 321,278: 22x10 317 | #317 @ 524,808: 21x17 318 | #318 @ 389,977: 15x10 319 | #319 @ 102,804: 20x19 320 | #320 @ 17,868: 19x15 321 | #321 @ 303,198: 16x11 322 | #322 @ 872,72: 20x10 323 | #323 @ 331,126: 21x27 324 | #324 @ 137,462: 19x23 325 | #325 @ 170,318: 21x29 326 | #326 @ 268,836: 19x10 327 | #327 @ 390,961: 13x23 328 | #328 @ 161,296: 10x29 329 | #329 @ 204,722: 18x20 330 | #330 @ 249,689: 11x11 331 | #331 @ 912,153: 20x29 332 | #332 @ 66,730: 10x15 333 | #333 @ 87,63: 29x14 334 | #334 @ 745,390: 19x20 335 | #335 @ 105,304: 14x12 336 | #336 @ 833,313: 29x12 337 | #337 @ 451,852: 27x17 338 | #338 @ 0,640: 25x14 339 | #339 @ 204,256: 21x13 340 | #340 @ 663,493: 15x18 341 | #341 @ 35,222: 22x26 342 | #342 @ 326,17: 21x14 343 | #343 @ 670,801: 18x11 344 | #344 @ 902,248: 12x21 345 | #345 @ 730,584: 19x13 346 | #346 @ 387,214: 20x25 347 | #347 @ 298,933: 25x12 348 | #348 @ 242,815: 19x21 349 | #349 @ 62,556: 27x28 350 | #350 @ 652,594: 20x10 351 | #351 @ 250,564: 25x28 352 | #352 @ 206,348: 24x14 353 | #353 @ 232,167: 21x11 354 | #354 @ 478,282: 26x13 355 | #355 @ 268,556: 18x13 356 | #356 @ 656,673: 11x21 357 | #357 @ 631,753: 23x29 358 | #358 @ 311,276: 12x27 359 | #359 @ 899,131: 23x11 360 | #360 @ 940,134: 26x28 361 | #361 @ 345,407: 20x16 362 | #362 @ 816,301: 19x12 363 | #363 @ 844,773: 17x23 364 | #364 @ 850,494: 15x28 365 | #365 @ 967,366: 17x19 366 | #366 @ 549,894: 11x10 367 | #367 @ 318,398: 28x21 368 | #368 @ 9,394: 24x15 369 | #369 @ 725,304: 11x27 370 | #370 @ 829,266: 13x12 371 | #371 @ 880,136: 25x21 372 | #372 @ 166,871: 19x10 373 | #373 @ 210,229: 14x18 374 | #374 @ 351,364: 17x13 375 | #375 @ 182,37: 23x21 376 | #376 @ 675,798: 12x14 377 | #377 @ 809,180: 16x19 378 | #378 @ 488,465: 15x10 379 | #379 @ 452,314: 29x24 380 | #380 @ 501,528: 20x23 381 | #381 @ 299,752: 13x15 382 | #382 @ 783,579: 22x22 383 | #383 @ 579,641: 12x23 384 | #384 @ 904,948: 17x16 385 | #385 @ 812,580: 10x27 386 | #386 @ 117,929: 11x14 387 | #387 @ 129,127: 28x20 388 | #388 @ 714,740: 25x22 389 | #389 @ 732,307: 26x11 390 | #390 @ 885,415: 15x18 391 | #391 @ 45,406: 28x13 392 | #392 @ 356,360: 29x26 393 | #393 @ 630,285: 20x28 394 | #394 @ 854,831: 14x19 395 | #395 @ 451,819: 26x24 396 | #396 @ 424,435: 22x24 397 | #397 @ 243,682: 20x13 398 | #398 @ 284,466: 22x16 399 | #399 @ 605,25: 25x11 400 | #400 @ 959,643: 24x12 401 | #401 @ 140,504: 23x17 402 | #402 @ 6,234: 16x25 403 | #403 @ 872,805: 14x13 404 | #404 @ 466,632: 14x19 405 | #405 @ 944,484: 17x16 406 | #406 @ 619,507: 10x27 407 | #407 @ 8,551: 28x26 408 | #408 @ 435,931: 8x10 409 | #409 @ 901,123: 21x25 410 | #410 @ 55,375: 10x19 411 | #411 @ 424,921: 10x11 412 | #412 @ 822,618: 28x17 413 | #413 @ 823,948: 15x25 414 | #414 @ 580,893: 6x18 415 | #415 @ 597,892: 14x26 416 | #416 @ 615,582: 27x24 417 | #417 @ 52,916: 20x11 418 | #418 @ 679,329: 22x14 419 | #419 @ 32,136: 20x12 420 | #420 @ 921,367: 27x21 421 | #421 @ 292,100: 23x11 422 | #422 @ 508,353: 13x13 423 | #423 @ 376,31: 24x11 424 | #424 @ 718,390: 26x24 425 | #425 @ 429,526: 26x26 426 | #426 @ 406,540: 17x19 427 | #427 @ 144,36: 22x25 428 | #428 @ 218,974: 18x24 429 | #429 @ 742,592: 12x22 430 | #430 @ 934,39: 15x10 431 | #431 @ 638,445: 21x14 432 | #432 @ 944,193: 24x23 433 | #433 @ 825,961: 17x22 434 | #434 @ 235,427: 23x14 435 | #435 @ 661,461: 29x26 436 | #436 @ 715,33: 29x11 437 | #437 @ 728,939: 21x10 438 | #438 @ 312,498: 27x28 439 | #439 @ 224,517: 24x21 440 | #440 @ 670,307: 22x16 441 | #441 @ 194,703: 15x14 442 | #442 @ 117,957: 17x20 443 | #443 @ 884,102: 20x12 444 | #444 @ 438,183: 18x17 445 | #445 @ 178,907: 28x23 446 | #446 @ 235,694: 14x28 447 | #447 @ 61,245: 25x12 448 | #448 @ 289,54: 15x23 449 | #449 @ 373,310: 17x13 450 | #450 @ 425,313: 28x15 451 | #451 @ 298,750: 11x14 452 | #452 @ 916,779: 27x28 453 | #453 @ 373,824: 17x24 454 | #454 @ 503,926: 16x16 455 | #455 @ 549,166: 18x28 456 | #456 @ 723,366: 14x20 457 | #457 @ 904,798: 18x10 458 | #458 @ 177,165: 13x24 459 | #459 @ 353,128: 12x29 460 | #460 @ 289,714: 14x21 461 | #461 @ 471,276: 17x23 462 | #462 @ 812,660: 14x26 463 | #463 @ 239,890: 10x21 464 | #464 @ 89,374: 24x12 465 | #465 @ 128,566: 11x19 466 | #466 @ 454,272: 12x11 467 | #467 @ 736,285: 29x28 468 | #468 @ 27,621: 20x21 469 | #469 @ 194,257: 26x17 470 | #470 @ 305,347: 25x16 471 | #471 @ 602,684: 21x15 472 | #472 @ 182,38: 28x29 473 | #473 @ 540,792: 22x28 474 | #474 @ 313,867: 23x10 475 | #475 @ 163,692: 16x23 476 | #476 @ 348,949: 25x10 477 | #477 @ 890,473: 18x21 478 | #478 @ 35,904: 24x15 479 | #479 @ 861,310: 19x11 480 | #480 @ 24,242: 17x29 481 | #481 @ 314,433: 28x14 482 | #482 @ 498,914: 10x29 483 | #483 @ 556,58: 15x22 484 | #484 @ 960,92: 11x29 485 | #485 @ 375,7: 27x16 486 | #486 @ 871,553: 20x28 487 | #487 @ 289,167: 11x24 488 | #488 @ 312,699: 10x29 489 | #489 @ 584,487: 16x23 490 | #490 @ 299,574: 21x19 491 | #491 @ 354,616: 17x25 492 | #492 @ 675,516: 11x5 493 | #493 @ 847,671: 11x18 494 | #494 @ 960,161: 28x29 495 | #495 @ 910,246: 19x14 496 | #496 @ 448,818: 13x20 497 | #497 @ 288,167: 16x25 498 | #498 @ 845,436: 18x18 499 | #499 @ 197,351: 13x18 500 | #500 @ 882,410: 13x16 501 | #501 @ 372,301: 25x28 502 | #502 @ 423,927: 21x10 503 | #503 @ 423,447: 17x24 504 | #504 @ 797,895: 20x20 505 | #505 @ 769,136: 22x10 506 | #506 @ 811,269: 20x26 507 | #507 @ 837,983: 19x12 508 | #508 @ 571,121: 12x23 509 | #509 @ 904,472: 13x11 510 | #510 @ 610,565: 20x10 511 | #511 @ 335,464: 23x14 512 | #512 @ 550,206: 22x16 513 | #513 @ 452,845: 23x20 514 | #514 @ 410,945: 18x16 515 | #515 @ 943,804: 19x28 516 | #516 @ 14,472: 26x21 517 | #517 @ 12,983: 16x13 518 | #518 @ 110,757: 28x19 519 | #519 @ 373,292: 24x22 520 | #520 @ 886,833: 26x25 521 | #521 @ 980,663: 13x19 522 | #522 @ 847,842: 29x14 523 | #523 @ 803,520: 11x26 524 | #524 @ 510,276: 15x15 525 | #525 @ 542,50: 28x26 526 | #526 @ 830,313: 10x28 527 | #527 @ 941,514: 13x20 528 | #528 @ 269,385: 11x20 529 | #529 @ 841,752: 28x26 530 | #530 @ 650,602: 23x21 531 | #531 @ 536,201: 24x13 532 | #532 @ 591,62: 18x20 533 | #533 @ 975,955: 20x23 534 | #534 @ 675,8: 18x17 535 | #535 @ 165,431: 27x16 536 | #536 @ 621,191: 18x17 537 | #537 @ 876,259: 24x23 538 | #538 @ 194,571: 24x15 539 | #539 @ 821,913: 24x29 540 | #540 @ 538,203: 11x8 541 | #541 @ 479,960: 21x17 542 | #542 @ 488,598: 15x13 543 | #543 @ 234,408: 21x15 544 | #544 @ 114,229: 24x12 545 | #545 @ 903,17: 13x12 546 | #546 @ 360,877: 11x16 547 | #547 @ 327,146: 11x27 548 | #548 @ 904,439: 11x25 549 | #549 @ 38,180: 16x27 550 | #550 @ 495,591: 26x12 551 | #551 @ 376,26: 29x14 552 | #552 @ 111,325: 12x16 553 | #553 @ 303,638: 27x17 554 | #554 @ 755,890: 17x11 555 | #555 @ 883,909: 11x16 556 | #556 @ 897,264: 10x17 557 | #557 @ 766,888: 22x15 558 | #558 @ 217,394: 19x28 559 | #559 @ 55,747: 11x25 560 | #560 @ 753,381: 19x24 561 | #561 @ 584,647: 23x19 562 | #562 @ 922,745: 21x29 563 | #563 @ 902,319: 24x11 564 | #564 @ 369,320: 13x19 565 | #565 @ 373,371: 12x16 566 | #566 @ 547,442: 16x28 567 | #567 @ 579,496: 27x23 568 | #568 @ 494,917: 17x17 569 | #569 @ 323,377: 20x16 570 | #570 @ 887,666: 24x25 571 | #571 @ 394,268: 23x26 572 | #572 @ 255,113: 17x28 573 | #573 @ 838,788: 19x14 574 | #574 @ 933,145: 14x16 575 | #575 @ 159,468: 26x19 576 | #576 @ 434,179: 12x19 577 | #577 @ 44,472: 27x17 578 | #578 @ 774,563: 24x27 579 | #579 @ 35,693: 28x14 580 | #580 @ 411,667: 21x10 581 | #581 @ 524,732: 23x12 582 | #582 @ 451,173: 25x12 583 | #583 @ 946,642: 17x20 584 | #584 @ 8,345: 25x29 585 | #585 @ 901,143: 29x12 586 | #586 @ 202,840: 14x10 587 | #587 @ 631,970: 21x17 588 | #588 @ 885,685: 14x12 589 | #589 @ 410,522: 24x27 590 | #590 @ 58,517: 25x28 591 | #591 @ 85,1: 22x20 592 | #592 @ 465,913: 29x22 593 | #593 @ 807,498: 11x29 594 | #594 @ 194,208: 14x18 595 | #595 @ 666,835: 16x22 596 | #596 @ 971,649: 13x18 597 | #597 @ 428,231: 22x22 598 | #598 @ 575,667: 18x27 599 | #599 @ 192,265: 18x15 600 | #600 @ 297,387: 22x24 601 | #601 @ 500,185: 14x17 602 | #602 @ 440,937: 20x25 603 | #603 @ 636,565: 10x4 604 | #604 @ 356,290: 20x11 605 | #605 @ 246,887: 19x12 606 | #606 @ 835,307: 18x21 607 | #607 @ 624,431: 17x26 608 | #608 @ 325,620: 25x14 609 | #609 @ 266,631: 27x10 610 | #610 @ 195,601: 13x24 611 | #611 @ 762,406: 6x17 612 | #612 @ 431,949: 18x14 613 | #613 @ 267,555: 24x19 614 | #614 @ 856,787: 28x13 615 | #615 @ 175,191: 20x12 616 | #616 @ 598,7: 21x26 617 | #617 @ 183,435: 12x17 618 | #618 @ 419,542: 17x20 619 | #619 @ 343,124: 15x15 620 | #620 @ 345,402: 17x26 621 | #621 @ 70,64: 12x13 622 | #622 @ 911,723: 3x4 623 | #623 @ 593,56: 13x12 624 | #624 @ 474,928: 18x26 625 | #625 @ 195,612: 14x27 626 | #626 @ 200,249: 22x17 627 | #627 @ 515,717: 13x29 628 | #628 @ 324,342: 12x18 629 | #629 @ 252,509: 24x19 630 | #630 @ 796,789: 11x12 631 | #631 @ 270,579: 15x14 632 | #632 @ 913,817: 16x17 633 | #633 @ 235,326: 27x21 634 | #634 @ 199,656: 17x20 635 | #635 @ 11,538: 16x18 636 | #636 @ 40,630: 15x21 637 | #637 @ 918,819: 6x12 638 | #638 @ 319,952: 18x13 639 | #639 @ 552,558: 24x29 640 | #640 @ 129,817: 28x22 641 | #641 @ 443,428: 11x13 642 | #642 @ 86,281: 14x10 643 | #643 @ 944,86: 14x25 644 | #644 @ 309,583: 21x25 645 | #645 @ 423,433: 27x12 646 | #646 @ 10,196: 10x17 647 | #647 @ 385,878: 10x24 648 | #648 @ 578,890: 14x26 649 | #649 @ 817,478: 13x11 650 | #650 @ 936,254: 23x14 651 | #651 @ 964,466: 24x17 652 | #652 @ 191,477: 26x12 653 | #653 @ 92,730: 23x20 654 | #654 @ 318,840: 22x17 655 | #655 @ 975,277: 25x18 656 | #656 @ 680,62: 14x28 657 | #657 @ 752,146: 27x27 658 | #658 @ 529,411: 20x19 659 | #659 @ 205,785: 12x14 660 | #660 @ 551,562: 28x15 661 | #661 @ 302,190: 29x13 662 | #662 @ 237,421: 27x11 663 | #663 @ 117,845: 22x11 664 | #664 @ 911,851: 12x22 665 | #665 @ 571,142: 15x12 666 | #666 @ 708,389: 22x18 667 | #667 @ 711,310: 20x23 668 | #668 @ 795,289: 13x27 669 | #669 @ 236,712: 16x27 670 | #670 @ 566,343: 10x15 671 | #671 @ 469,818: 27x27 672 | #672 @ 84,914: 21x16 673 | #673 @ 47,621: 10x19 674 | #674 @ 891,103: 10x29 675 | #675 @ 638,296: 15x18 676 | #676 @ 354,415: 29x27 677 | #677 @ 269,519: 14x15 678 | #678 @ 735,337: 24x19 679 | #679 @ 365,980: 17x16 680 | #680 @ 545,35: 20x11 681 | #681 @ 968,640: 22x23 682 | #682 @ 202,660: 7x12 683 | #683 @ 502,189: 22x20 684 | #684 @ 196,797: 20x16 685 | #685 @ 741,103: 27x12 686 | #686 @ 353,671: 11x23 687 | #687 @ 962,626: 27x26 688 | #688 @ 406,831: 20x28 689 | #689 @ 927,860: 26x15 690 | #690 @ 550,880: 26x11 691 | #691 @ 104,503: 18x27 692 | #692 @ 393,882: 16x29 693 | #693 @ 565,607: 10x20 694 | #694 @ 859,823: 19x26 695 | #695 @ 298,126: 10x21 696 | #696 @ 897,331: 20x26 697 | #697 @ 969,955: 21x21 698 | #698 @ 855,730: 16x11 699 | #699 @ 366,598: 18x10 700 | #700 @ 190,794: 23x10 701 | #701 @ 81,903: 17x19 702 | #702 @ 13,383: 10x24 703 | #703 @ 674,941: 20x18 704 | #704 @ 621,966: 23x19 705 | #705 @ 609,463: 26x11 706 | #706 @ 787,441: 26x27 707 | #707 @ 238,397: 29x15 708 | #708 @ 790,815: 10x26 709 | #709 @ 615,906: 22x10 710 | #710 @ 77,647: 11x28 711 | #711 @ 370,548: 29x15 712 | #712 @ 669,514: 21x10 713 | #713 @ 360,957: 28x18 714 | #714 @ 615,493: 16x29 715 | #715 @ 880,901: 26x17 716 | #716 @ 161,446: 12x25 717 | #717 @ 88,2: 18x11 718 | #718 @ 221,237: 15x29 719 | #719 @ 258,222: 25x16 720 | #720 @ 131,263: 22x10 721 | #721 @ 382,591: 21x24 722 | #722 @ 651,145: 20x12 723 | #723 @ 470,494: 12x25 724 | #724 @ 843,164: 17x25 725 | #725 @ 278,982: 23x13 726 | #726 @ 237,711: 19x20 727 | #727 @ 358,621: 28x22 728 | #728 @ 548,500: 19x16 729 | #729 @ 6,129: 29x17 730 | #730 @ 312,300: 26x21 731 | #731 @ 838,252: 19x27 732 | #732 @ 470,155: 16x28 733 | #733 @ 832,942: 14x12 734 | #734 @ 673,283: 26x29 735 | #735 @ 296,162: 17x22 736 | #736 @ 568,640: 26x23 737 | #737 @ 833,453: 13x15 738 | #738 @ 724,399: 13x24 739 | #739 @ 942,102: 12x18 740 | #740 @ 233,137: 19x20 741 | #741 @ 581,459: 17x19 742 | #742 @ 64,398: 21x11 743 | #743 @ 978,635: 13x21 744 | #744 @ 352,90: 20x21 745 | #745 @ 77,534: 24x28 746 | #746 @ 704,310: 27x20 747 | #747 @ 729,298: 15x25 748 | #748 @ 93,275: 27x12 749 | #749 @ 748,69: 11x15 750 | #750 @ 362,36: 16x29 751 | #751 @ 30,955: 13x19 752 | #752 @ 574,294: 22x23 753 | #753 @ 202,305: 11x13 754 | #754 @ 318,504: 13x12 755 | #755 @ 760,556: 21x27 756 | #756 @ 930,474: 28x11 757 | #757 @ 445,743: 19x18 758 | #758 @ 406,674: 27x27 759 | #759 @ 380,594: 22x20 760 | #760 @ 273,162: 29x24 761 | #761 @ 305,845: 26x12 762 | #762 @ 177,233: 23x10 763 | #763 @ 458,197: 26x18 764 | #764 @ 25,434: 21x28 765 | #765 @ 322,792: 17x22 766 | #766 @ 209,734: 10x25 767 | #767 @ 623,904: 18x14 768 | #768 @ 795,9: 14x27 769 | #769 @ 316,625: 21x21 770 | #770 @ 733,72: 29x25 771 | #771 @ 113,809: 19x15 772 | #772 @ 548,504: 18x18 773 | #773 @ 884,460: 12x18 774 | #774 @ 583,275: 20x25 775 | #775 @ 714,134: 13x13 776 | #776 @ 375,135: 11x18 777 | #777 @ 33,275: 16x17 778 | #778 @ 468,204: 16x13 779 | #779 @ 244,554: 21x15 780 | #780 @ 850,446: 12x16 781 | #781 @ 908,346: 21x25 782 | #782 @ 158,324: 16x14 783 | #783 @ 689,478: 17x12 784 | #784 @ 484,724: 14x16 785 | #785 @ 604,599: 24x13 786 | #786 @ 657,717: 19x11 787 | #787 @ 475,724: 13x10 788 | #788 @ 169,75: 29x25 789 | #789 @ 439,597: 13x13 790 | #790 @ 826,466: 22x24 791 | #791 @ 306,939: 11x22 792 | #792 @ 858,502: 16x28 793 | #793 @ 114,609: 26x29 794 | #794 @ 667,800: 29x21 795 | #795 @ 842,33: 19x18 796 | #796 @ 20,859: 10x17 797 | #797 @ 304,957: 22x23 798 | #798 @ 755,358: 28x23 799 | #799 @ 20,951: 16x24 800 | #800 @ 100,10: 15x28 801 | #801 @ 779,139: 20x12 802 | #802 @ 786,25: 18x24 803 | #803 @ 40,581: 20x10 804 | #804 @ 804,599: 23x15 805 | #805 @ 676,980: 11x11 806 | #806 @ 736,434: 22x21 807 | #807 @ 435,714: 14x25 808 | #808 @ 124,30: 22x26 809 | #809 @ 620,428: 11x21 810 | #810 @ 364,216: 26x23 811 | #811 @ 457,12: 28x22 812 | #812 @ 46,121: 18x29 813 | #813 @ 530,810: 21x14 814 | #814 @ 404,800: 10x27 815 | #815 @ 84,323: 19x25 816 | #816 @ 693,129: 21x11 817 | #817 @ 532,21: 11x20 818 | #818 @ 256,133: 20x28 819 | #819 @ 476,10: 23x16 820 | #820 @ 953,255: 27x13 821 | #821 @ 766,505: 14x10 822 | #822 @ 127,541: 16x20 823 | #823 @ 900,854: 16x23 824 | #824 @ 80,918: 15x26 825 | #825 @ 169,347: 25x26 826 | #826 @ 941,810: 12x20 827 | #827 @ 543,776: 27x21 828 | #828 @ 82,845: 28x28 829 | #829 @ 824,939: 24x20 830 | #830 @ 168,272: 16x17 831 | #831 @ 554,821: 16x17 832 | #832 @ 304,78: 17x20 833 | #833 @ 575,460: 13x21 834 | #834 @ 682,539: 11x24 835 | #835 @ 583,73: 16x14 836 | #836 @ 271,780: 22x27 837 | #837 @ 628,518: 10x20 838 | #838 @ 166,262: 26x17 839 | #839 @ 801,784: 24x16 840 | #840 @ 716,370: 25x25 841 | #841 @ 880,866: 13x22 842 | #842 @ 871,9: 24x24 843 | #843 @ 817,474: 26x13 844 | #844 @ 254,220: 10x16 845 | #845 @ 939,200: 11x22 846 | #846 @ 141,224: 14x14 847 | #847 @ 588,507: 24x23 848 | #848 @ 649,313: 24x28 849 | #849 @ 85,474: 11x28 850 | #850 @ 258,612: 15x21 851 | #851 @ 69,463: 26x21 852 | #852 @ 697,62: 28x23 853 | #853 @ 718,214: 27x24 854 | #854 @ 665,837: 17x22 855 | #855 @ 494,583: 25x19 856 | #856 @ 317,194: 22x27 857 | #857 @ 650,701: 18x17 858 | #858 @ 472,960: 20x26 859 | #859 @ 560,652: 27x14 860 | #860 @ 348,366: 11x16 861 | #861 @ 909,719: 11x15 862 | #862 @ 586,701: 19x20 863 | #863 @ 549,237: 18x15 864 | #864 @ 618,149: 27x17 865 | #865 @ 349,263: 12x12 866 | #866 @ 352,74: 16x18 867 | #867 @ 91,219: 26x19 868 | #868 @ 463,256: 19x23 869 | #869 @ 697,436: 25x29 870 | #870 @ 299,727: 10x11 871 | #871 @ 628,286: 29x28 872 | #872 @ 93,370: 24x20 873 | #873 @ 116,753: 16x15 874 | #874 @ 67,261: 15x10 875 | #875 @ 755,166: 19x12 876 | #876 @ 114,449: 27x14 877 | #877 @ 296,178: 27x26 878 | #878 @ 257,126: 12x9 879 | #879 @ 597,77: 14x18 880 | #880 @ 579,652: 17x27 881 | #881 @ 355,533: 27x29 882 | #882 @ 445,56: 25x22 883 | #883 @ 431,350: 25x25 884 | #884 @ 244,147: 20x23 885 | #885 @ 161,348: 22x26 886 | #886 @ 342,526: 5x3 887 | #887 @ 949,964: 24x19 888 | #888 @ 803,238: 18x18 889 | #889 @ 647,422: 17x28 890 | #890 @ 651,16: 14x17 891 | #891 @ 495,351: 17x15 892 | #892 @ 160,851: 27x23 893 | #893 @ 108,224: 25x28 894 | #894 @ 312,85: 27x24 895 | #895 @ 128,833: 12x18 896 | #896 @ 659,308: 25x15 897 | #897 @ 586,321: 10x28 898 | #898 @ 242,124: 25x19 899 | #899 @ 297,134: 19x17 900 | #900 @ 487,119: 25x26 901 | #901 @ 838,535: 29x21 902 | #902 @ 289,66: 10x28 903 | #903 @ 903,278: 26x13 904 | #904 @ 59,247: 22x19 905 | #905 @ 175,690: 11x12 906 | #906 @ 521,116: 29x27 907 | #907 @ 379,92: 17x10 908 | #908 @ 92,520: 16x26 909 | #909 @ 513,30: 18x12 910 | #910 @ 922,760: 14x15 911 | #911 @ 181,832: 22x20 912 | #912 @ 944,943: 25x25 913 | #913 @ 317,807: 12x22 914 | #914 @ 942,483: 17x10 915 | #915 @ 711,359: 22x29 916 | #916 @ 516,543: 13x29 917 | #917 @ 546,609: 24x23 918 | #918 @ 409,574: 24x12 919 | #919 @ 685,940: 21x21 920 | #920 @ 648,656: 10x29 921 | #921 @ 794,729: 27x23 922 | #922 @ 737,578: 26x18 923 | #923 @ 716,309: 21x24 924 | #924 @ 160,844: 17x21 925 | #925 @ 176,968: 12x16 926 | #926 @ 552,876: 12x25 927 | #927 @ 9,802: 18x26 928 | #928 @ 527,746: 21x16 929 | #929 @ 61,456: 17x17 930 | #930 @ 939,14: 12x29 931 | #931 @ 363,401: 19x19 932 | #932 @ 530,426: 23x21 933 | #933 @ 33,411: 29x21 934 | #934 @ 542,68: 29x16 935 | #935 @ 734,577: 12x15 936 | #936 @ 299,64: 24x19 937 | #937 @ 899,356: 17x10 938 | #938 @ 181,342: 21x17 939 | #939 @ 370,594: 20x16 940 | #940 @ 52,721: 16x23 941 | #941 @ 321,385: 26x15 942 | #942 @ 848,159: 12x27 943 | #943 @ 814,291: 23x24 944 | #944 @ 18,803: 25x25 945 | #945 @ 834,458: 14x17 946 | #946 @ 440,543: 22x18 947 | #947 @ 417,377: 20x28 948 | #948 @ 181,263: 19x20 949 | #949 @ 307,69: 17x29 950 | #950 @ 890,412: 13x29 951 | #951 @ 947,856: 17x19 952 | #952 @ 367,841: 16x17 953 | #953 @ 221,945: 24x14 954 | #954 @ 217,449: 26x19 955 | #955 @ 27,695: 15x26 956 | #956 @ 366,866: 16x17 957 | #957 @ 506,273: 12x20 958 | #958 @ 874,65: 27x13 959 | #959 @ 402,442: 24x20 960 | #960 @ 344,381: 18x15 961 | #961 @ 345,427: 11x22 962 | #962 @ 10,975: 19x22 963 | #963 @ 354,464: 16x27 964 | #964 @ 6,335: 10x16 965 | #965 @ 60,730: 21x17 966 | #966 @ 376,90: 26x17 967 | #967 @ 528,109: 18x26 968 | #968 @ 482,924: 29x12 969 | #969 @ 494,376: 20x22 970 | #970 @ 464,823: 13x26 971 | #971 @ 83,628: 28x27 972 | #972 @ 854,577: 13x19 973 | #973 @ 261,614: 13x21 974 | #974 @ 952,93: 15x15 975 | #975 @ 250,308: 10x19 976 | #976 @ 19,209: 22x14 977 | #977 @ 274,184: 14x16 978 | #978 @ 330,856: 26x24 979 | #979 @ 257,930: 19x14 980 | #980 @ 844,508: 26x12 981 | #981 @ 250,806: 15x20 982 | #982 @ 752,483: 22x26 983 | #983 @ 334,385: 25x13 984 | #984 @ 650,464: 19x20 985 | #985 @ 927,815: 17x27 986 | #986 @ 913,735: 21x11 987 | #987 @ 269,549: 25x12 988 | #988 @ 116,544: 18x26 989 | #989 @ 84,953: 26x21 990 | #990 @ 752,182: 29x19 991 | #991 @ 796,769: 21x18 992 | #992 @ 800,799: 11x20 993 | #993 @ 79,711: 21x23 994 | #994 @ 683,293: 28x19 995 | #995 @ 526,427: 16x28 996 | #996 @ 671,242: 16x14 997 | #997 @ 293,393: 11x25 998 | #998 @ 165,697: 9x6 999 | #999 @ 854,966: 29x11 1000 | #1000 @ 63,738: 26x14 1001 | #1001 @ 213,956: 20x29 1002 | #1002 @ 580,649: 25x10 1003 | #1003 @ 536,335: 15x11 1004 | #1004 @ 544,187: 27x18 1005 | #1005 @ 850,608: 15x22 1006 | #1006 @ 384,931: 19x19 1007 | #1007 @ 29,649: 26x19 1008 | #1008 @ 366,624: 26x10 1009 | #1009 @ 671,825: 23x16 1010 | #1010 @ 873,250: 28x16 1011 | #1011 @ 780,822: 20x28 1012 | #1012 @ 944,396: 12x28 1013 | #1013 @ 937,20: 13x23 1014 | #1014 @ 685,73: 3x7 1015 | #1015 @ 662,287: 25x12 1016 | #1016 @ 946,406: 14x28 1017 | #1017 @ 186,895: 19x13 1018 | #1018 @ 84,36: 19x12 1019 | #1019 @ 650,150: 26x12 1020 | #1020 @ 98,212: 13x19 1021 | #1021 @ 413,441: 14x29 1022 | #1022 @ 256,977: 15x10 1023 | #1023 @ 975,651: 5x11 1024 | #1024 @ 338,52: 29x16 1025 | #1025 @ 876,271: 21x15 1026 | #1026 @ 88,71: 16x14 1027 | #1027 @ 434,603: 10x27 1028 | #1028 @ 974,470: 21x25 1029 | #1029 @ 84,768: 25x21 1030 | #1030 @ 886,324: 21x12 1031 | #1031 @ 248,710: 28x20 1032 | #1032 @ 437,209: 10x27 1033 | #1033 @ 272,835: 18x17 1034 | #1034 @ 47,589: 21x17 1035 | #1035 @ 71,459: 26x22 1036 | #1036 @ 229,360: 23x29 1037 | #1037 @ 523,395: 26x18 1038 | #1038 @ 451,956: 27x19 1039 | #1039 @ 360,93: 13x10 1040 | #1040 @ 420,947: 22x24 1041 | #1041 @ 439,478: 27x21 1042 | #1042 @ 510,544: 13x20 1043 | #1043 @ 304,520: 15x26 1044 | #1044 @ 181,254: 27x11 1045 | #1045 @ 87,313: 26x19 1046 | #1046 @ 712,386: 11x18 1047 | #1047 @ 142,144: 14x22 1048 | #1048 @ 654,467: 20x10 1049 | #1049 @ 50,73: 23x27 1050 | #1050 @ 510,759: 21x29 1051 | #1051 @ 776,581: 11x15 1052 | #1052 @ 951,378: 24x22 1053 | #1053 @ 18,436: 14x26 1054 | #1054 @ 518,59: 26x14 1055 | #1055 @ 955,88: 16x17 1056 | #1056 @ 35,628: 27x22 1057 | #1057 @ 491,965: 29x29 1058 | #1058 @ 169,983: 19x12 1059 | #1059 @ 23,475: 24x15 1060 | #1060 @ 886,112: 28x14 1061 | #1061 @ 402,315: 25x20 1062 | #1062 @ 213,203: 22x17 1063 | #1063 @ 129,521: 16x17 1064 | #1064 @ 336,523: 18x17 1065 | #1065 @ 102,775: 28x12 1066 | #1066 @ 282,660: 15x26 1067 | #1067 @ 902,345: 10x17 1068 | #1068 @ 233,969: 29x20 1069 | #1069 @ 666,317: 3x13 1070 | #1070 @ 341,205: 16x24 1071 | #1071 @ 337,964: 27x12 1072 | #1072 @ 607,675: 14x20 1073 | #1073 @ 690,445: 12x29 1074 | #1074 @ 926,532: 26x20 1075 | #1075 @ 937,466: 29x11 1076 | #1076 @ 570,714: 25x14 1077 | #1077 @ 678,520: 19x27 1078 | #1078 @ 307,351: 27x10 1079 | #1079 @ 526,34: 29x29 1080 | #1080 @ 74,684: 18x16 1081 | #1081 @ 450,752: 23x15 1082 | #1082 @ 755,795: 22x27 1083 | #1083 @ 260,138: 21x29 1084 | #1084 @ 321,315: 19x29 1085 | #1085 @ 188,214: 17x22 1086 | #1086 @ 784,712: 21x18 1087 | #1087 @ 458,550: 14x28 1088 | #1088 @ 796,582: 27x13 1089 | #1089 @ 321,230: 21x29 1090 | #1090 @ 898,470: 22x20 1091 | #1091 @ 138,370: 11x12 1092 | #1092 @ 345,361: 10x10 1093 | #1093 @ 177,882: 19x16 1094 | #1094 @ 946,702: 26x26 1095 | #1095 @ 619,490: 24x19 1096 | #1096 @ 133,506: 20x20 1097 | #1097 @ 266,869: 25x21 1098 | #1098 @ 387,970: 19x21 1099 | #1099 @ 311,323: 17x24 1100 | #1100 @ 310,488: 28x22 1101 | #1101 @ 770,651: 13x16 1102 | #1102 @ 965,301: 28x11 1103 | #1103 @ 466,826: 19x15 1104 | #1104 @ 88,632: 17x10 1105 | #1105 @ 902,137: 25x19 1106 | #1106 @ 752,329: 18x26 1107 | #1107 @ 182,164: 23x17 1108 | #1108 @ 289,679: 14x28 1109 | #1109 @ 176,502: 18x18 1110 | #1110 @ 214,971: 12x27 1111 | #1111 @ 389,207: 28x28 1112 | #1112 @ 331,19: 4x8 1113 | #1113 @ 312,635: 25x29 1114 | #1114 @ 509,141: 14x21 1115 | #1115 @ 392,798: 13x24 1116 | #1116 @ 876,419: 27x12 1117 | #1117 @ 636,613: 28x14 1118 | #1118 @ 681,326: 11x25 1119 | #1119 @ 787,707: 20x27 1120 | #1120 @ 31,11: 25x21 1121 | #1121 @ 270,551: 20x21 1122 | #1122 @ 353,134: 17x27 1123 | #1123 @ 752,773: 17x25 1124 | #1124 @ 648,692: 12x28 1125 | #1125 @ 495,632: 27x27 1126 | #1126 @ 860,171: 14x20 1127 | #1127 @ 253,507: 20x22 1128 | #1128 @ 316,494: 16x10 1129 | #1129 @ 524,569: 29x29 1130 | #1130 @ 238,309: 20x13 1131 | #1131 @ 783,542: 15x29 1132 | #1132 @ 553,681: 23x11 1133 | #1133 @ 884,495: 10x25 1134 | #1134 @ 910,18: 17x12 1135 | #1135 @ 436,127: 14x10 1136 | #1136 @ 61,738: 12x24 1137 | #1137 @ 966,288: 12x27 1138 | #1138 @ 722,117: 7x3 1139 | #1139 @ 95,933: 28x29 1140 | #1140 @ 336,683: 25x24 1141 | #1141 @ 681,946: 25x17 1142 | #1142 @ 359,61: 22x20 1143 | #1143 @ 37,637: 22x18 1144 | #1144 @ 768,578: 20x13 1145 | #1145 @ 855,666: 15x26 1146 | #1146 @ 255,689: 10x27 1147 | #1147 @ 599,478: 20x24 1148 | #1148 @ 195,715: 18x23 1149 | #1149 @ 478,641: 21x14 1150 | #1150 @ 882,180: 27x20 1151 | #1151 @ 851,302: 28x21 1152 | #1152 @ 363,300: 27x26 1153 | #1153 @ 309,631: 4x3 1154 | #1154 @ 199,224: 12x17 1155 | #1155 @ 228,153: 19x13 1156 | #1156 @ 487,22: 14x27 1157 | #1157 @ 682,302: 17x15 1158 | #1158 @ 187,487: 16x21 1159 | #1159 @ 210,315: 19x26 1160 | #1160 @ 376,789: 18x29 1161 | #1161 @ 67,567: 13x17 1162 | #1162 @ 221,515: 14x29 1163 | #1163 @ 397,514: 12x26 1164 | #1164 @ 384,371: 18x23 1165 | #1165 @ 882,953: 27x29 1166 | #1166 @ 287,88: 28x12 1167 | #1167 @ 884,89: 21x21 1168 | #1168 @ 99,820: 17x13 1169 | #1169 @ 492,656: 21x14 1170 | #1170 @ 147,831: 29x21 1171 | #1171 @ 128,256: 10x13 1172 | #1172 @ 841,476: 24x16 1173 | #1173 @ 328,17: 11x14 1174 | #1174 @ 109,287: 20x12 1175 | #1175 @ 113,311: 12x27 1176 | #1176 @ 856,917: 18x13 1177 | #1177 @ 466,556: 24x10 1178 | #1178 @ 486,585: 19x16 1179 | #1179 @ 711,226: 10x13 1180 | #1180 @ 108,254: 26x24 1181 | #1181 @ 725,313: 10x24 1182 | #1182 @ 365,127: 23x25 1183 | #1183 @ 488,371: 22x14 1184 | #1184 @ 381,502: 16x21 1185 | #1185 @ 322,567: 17x24 1186 | #1186 @ 210,564: 12x29 1187 | #1187 @ 525,797: 21x24 1188 | #1188 @ 58,431: 29x25 1189 | #1189 @ 661,24: 20x15 1190 | #1190 @ 797,234: 17x18 1191 | #1191 @ 851,38: 13x21 1192 | #1192 @ 962,75: 11x27 1193 | #1193 @ 568,200: 16x23 1194 | #1194 @ 863,319: 12x18 1195 | #1195 @ 25,704: 27x24 1196 | #1196 @ 835,510: 29x14 1197 | #1197 @ 427,904: 23x25 1198 | #1198 @ 327,956: 18x27 1199 | #1199 @ 168,609: 16x23 1200 | #1200 @ 591,31: 16x26 1201 | #1201 @ 428,374: 13x16 1202 | #1202 @ 183,332: 6x7 1203 | #1203 @ 139,266: 12x12 1204 | #1204 @ 616,33: 19x28 1205 | #1205 @ 479,470: 18x10 1206 | #1206 @ 483,910: 19x25 1207 | #1207 @ 38,760: 28x21 1208 | #1208 @ 307,727: 10x27 1209 | #1209 @ 607,19: 28x29 1210 | #1210 @ 760,404: 12x25 1211 | #1211 @ 541,23: 10x18 1212 | #1212 @ 457,555: 14x23 1213 | #1213 @ 307,693: 12x12 1214 | #1214 @ 176,965: 11x15 1215 | #1215 @ 880,555: 3x12 1216 | #1216 @ 365,261: 21x25 1217 | #1217 @ 900,338: 24x18 1218 | #1218 @ 796,796: 15x12 1219 | #1219 @ 94,64: 12x11 1220 | #1220 @ 398,1: 28x10 1221 | #1221 @ 511,944: 11x29 1222 | #1222 @ 432,174: 17x29 1223 | #1223 @ 619,427: 19x16 1224 | #1224 @ 978,670: 19x12 1225 | #1225 @ 330,384: 26x20 1226 | #1226 @ 233,701: 16x14 1227 | #1227 @ 264,870: 21x12 1228 | #1228 @ 457,889: 23x29 1229 | #1229 @ 614,202: 25x29 1230 | #1230 @ 744,689: 26x27 1231 | #1231 @ 484,912: 16x11 1232 | #1232 @ 912,679: 21x26 1233 | #1233 @ 509,20: 24x14 1234 | #1234 @ 679,847: 21x29 1235 | #1235 @ 897,950: 14x17 1236 | #1236 @ 449,85: 25x28 1237 | #1237 @ 907,821: 25x17 1238 | #1238 @ 685,967: 19x20 1239 | #1239 @ 104,16: 22x28 1240 | #1240 @ 363,95: 5x5 1241 | #1241 @ 629,755: 23x18 1242 | #1242 @ 570,345: 15x28 1243 | #1243 @ 270,193: 23x11 1244 | #1244 @ 43,348: 12x21 1245 | #1245 @ 903,482: 22x29 1246 | #1246 @ 915,179: 27x24 1247 | #1247 @ 76,26: 16x14 1248 | #1248 @ 874,197: 16x23 1249 | #1249 @ 869,728: 26x14 1250 | #1250 @ 158,377: 10x11 1251 | #1251 @ 379,138: 26x17 1252 | #1252 @ 298,977: 21x12 1253 | #1253 @ 914,737: 27x26 1254 | #1254 @ 153,123: 21x27 1255 | #1255 @ 842,731: 20x24 1256 | #1256 @ 885,852: 24x26 1257 | #1257 @ 707,747: 23x18 1258 | #1258 @ 729,387: 19x23 1259 | #1259 @ 238,452: 24x20 -------------------------------------------------------------------------------- /inputs/04.txt: -------------------------------------------------------------------------------- 1 | [1518-03-30 00:57] wakes up 2 | [1518-04-15 23:56] Guard #2213 begins shift 3 | [1518-10-31 00:36] wakes up 4 | [1518-11-14 00:03] Guard #2129 begins shift 5 | [1518-04-01 00:54] wakes up 6 | [1518-10-03 00:42] falls asleep 7 | [1518-07-01 00:19] falls asleep 8 | [1518-08-02 00:00] Guard #3319 begins shift 9 | [1518-07-03 00:01] falls asleep 10 | [1518-08-28 00:24] falls asleep 11 | [1518-11-02 00:31] falls asleep 12 | [1518-10-15 00:04] falls asleep 13 | [1518-08-07 00:51] wakes up 14 | [1518-05-02 00:14] falls asleep 15 | [1518-05-16 00:38] falls asleep 16 | [1518-08-27 00:37] falls asleep 17 | [1518-09-18 00:47] wakes up 18 | [1518-05-29 00:52] wakes up 19 | [1518-09-07 00:06] falls asleep 20 | [1518-07-14 00:52] wakes up 21 | [1518-05-09 00:59] wakes up 22 | [1518-05-14 00:12] falls asleep 23 | [1518-04-17 23:51] Guard #439 begins shift 24 | [1518-11-20 00:04] Guard #2129 begins shift 25 | [1518-07-21 00:02] Guard #3347 begins shift 26 | [1518-11-16 00:04] Guard #241 begins shift 27 | [1518-04-02 23:48] Guard #1777 begins shift 28 | [1518-07-11 00:00] Guard #241 begins shift 29 | [1518-07-29 00:49] falls asleep 30 | [1518-09-14 00:38] falls asleep 31 | [1518-05-27 00:39] wakes up 32 | [1518-04-09 00:54] wakes up 33 | [1518-11-01 23:56] Guard #103 begins shift 34 | [1518-10-07 00:42] wakes up 35 | [1518-09-26 00:58] wakes up 36 | [1518-09-10 00:54] falls asleep 37 | [1518-08-15 00:48] falls asleep 38 | [1518-06-09 00:01] Guard #2251 begins shift 39 | [1518-11-06 23:58] Guard #103 begins shift 40 | [1518-10-04 00:29] falls asleep 41 | [1518-08-02 00:56] falls asleep 42 | [1518-08-21 00:18] falls asleep 43 | [1518-11-23 00:30] falls asleep 44 | [1518-09-29 23:59] Guard #829 begins shift 45 | [1518-09-17 00:49] falls asleep 46 | [1518-07-25 00:49] wakes up 47 | [1518-08-19 00:58] wakes up 48 | [1518-07-13 00:48] wakes up 49 | [1518-04-11 23:59] Guard #2539 begins shift 50 | [1518-04-30 00:32] wakes up 51 | [1518-07-05 00:27] falls asleep 52 | [1518-09-02 00:29] wakes up 53 | [1518-09-21 00:58] wakes up 54 | [1518-04-26 00:08] falls asleep 55 | [1518-04-23 00:26] wakes up 56 | [1518-05-25 00:55] wakes up 57 | [1518-05-14 23:58] Guard #241 begins shift 58 | [1518-09-09 23:58] Guard #3319 begins shift 59 | [1518-04-23 00:23] falls asleep 60 | [1518-08-08 00:42] wakes up 61 | [1518-06-12 00:03] falls asleep 62 | [1518-03-31 00:03] Guard #103 begins shift 63 | [1518-04-11 00:58] wakes up 64 | [1518-03-28 00:53] falls asleep 65 | [1518-06-29 23:57] Guard #103 begins shift 66 | [1518-05-08 00:36] falls asleep 67 | [1518-11-18 00:00] Guard #2137 begins shift 68 | [1518-03-31 00:21] falls asleep 69 | [1518-05-08 00:57] falls asleep 70 | [1518-06-18 00:50] falls asleep 71 | [1518-05-08 00:06] falls asleep 72 | [1518-05-09 00:23] falls asleep 73 | [1518-08-24 00:00] Guard #1301 begins shift 74 | [1518-07-07 00:57] wakes up 75 | [1518-10-24 00:51] wakes up 76 | [1518-08-29 00:31] falls asleep 77 | [1518-08-27 00:51] falls asleep 78 | [1518-08-19 00:54] falls asleep 79 | [1518-10-05 00:02] Guard #3347 begins shift 80 | [1518-04-04 00:14] falls asleep 81 | [1518-10-17 00:01] Guard #2389 begins shift 82 | [1518-05-07 00:57] wakes up 83 | [1518-11-17 00:01] Guard #1889 begins shift 84 | [1518-07-09 00:54] wakes up 85 | [1518-07-12 00:02] falls asleep 86 | [1518-04-23 00:00] Guard #2137 begins shift 87 | [1518-05-02 00:00] Guard #1283 begins shift 88 | [1518-07-08 23:58] Guard #2389 begins shift 89 | [1518-11-08 00:48] falls asleep 90 | [1518-11-06 00:48] wakes up 91 | [1518-06-25 00:46] wakes up 92 | [1518-06-03 23:57] Guard #3371 begins shift 93 | [1518-05-19 23:50] Guard #3371 begins shift 94 | [1518-06-10 00:04] Guard #3371 begins shift 95 | [1518-11-20 00:36] falls asleep 96 | [1518-10-10 23:58] Guard #2539 begins shift 97 | [1518-07-09 00:42] falls asleep 98 | [1518-09-09 00:21] wakes up 99 | [1518-05-10 00:03] Guard #3347 begins shift 100 | [1518-06-18 00:47] wakes up 101 | [1518-05-16 00:55] wakes up 102 | [1518-06-23 00:41] falls asleep 103 | [1518-08-27 00:39] wakes up 104 | [1518-05-26 00:03] falls asleep 105 | [1518-07-10 00:03] Guard #2389 begins shift 106 | [1518-10-14 00:02] Guard #2389 begins shift 107 | [1518-06-09 00:40] wakes up 108 | [1518-07-01 00:55] wakes up 109 | [1518-04-11 00:15] falls asleep 110 | [1518-10-11 00:55] wakes up 111 | [1518-06-25 00:24] falls asleep 112 | [1518-04-29 00:45] falls asleep 113 | [1518-11-04 00:02] Guard #1889 begins shift 114 | [1518-07-20 00:04] Guard #2129 begins shift 115 | [1518-05-06 00:32] falls asleep 116 | [1518-04-27 00:08] falls asleep 117 | [1518-11-11 00:33] falls asleep 118 | [1518-11-21 00:22] falls asleep 119 | [1518-10-28 00:50] falls asleep 120 | [1518-07-24 00:19] falls asleep 121 | [1518-10-21 00:10] falls asleep 122 | [1518-09-19 00:01] Guard #2389 begins shift 123 | [1518-03-31 00:57] wakes up 124 | [1518-11-20 00:46] wakes up 125 | [1518-05-28 00:41] falls asleep 126 | [1518-11-18 23:56] Guard #439 begins shift 127 | [1518-04-04 00:50] falls asleep 128 | [1518-10-09 00:27] wakes up 129 | [1518-11-16 00:47] falls asleep 130 | [1518-08-03 00:42] wakes up 131 | [1518-10-17 00:57] falls asleep 132 | [1518-10-27 00:22] wakes up 133 | [1518-07-29 00:03] Guard #2251 begins shift 134 | [1518-10-06 00:18] falls asleep 135 | [1518-07-31 00:23] falls asleep 136 | [1518-09-05 00:00] Guard #1283 begins shift 137 | [1518-11-10 23:59] Guard #439 begins shift 138 | [1518-10-16 00:53] wakes up 139 | [1518-10-31 00:57] wakes up 140 | [1518-09-15 00:58] wakes up 141 | [1518-05-30 00:59] wakes up 142 | [1518-08-13 00:38] wakes up 143 | [1518-09-08 00:42] wakes up 144 | [1518-09-05 00:17] falls asleep 145 | [1518-03-28 23:59] Guard #1777 begins shift 146 | [1518-06-11 00:52] falls asleep 147 | [1518-06-16 00:46] falls asleep 148 | [1518-06-22 00:49] wakes up 149 | [1518-06-27 23:58] Guard #2389 begins shift 150 | [1518-10-15 00:42] wakes up 151 | [1518-10-14 00:11] falls asleep 152 | [1518-07-10 00:52] falls asleep 153 | [1518-06-14 00:22] falls asleep 154 | [1518-11-01 00:50] wakes up 155 | [1518-09-21 23:59] Guard #1777 begins shift 156 | [1518-05-23 00:43] wakes up 157 | [1518-05-11 00:47] wakes up 158 | [1518-09-02 23:57] Guard #1889 begins shift 159 | [1518-06-12 00:32] wakes up 160 | [1518-03-31 00:54] falls asleep 161 | [1518-10-18 00:46] falls asleep 162 | [1518-08-24 23:56] Guard #1889 begins shift 163 | [1518-04-10 00:21] wakes up 164 | [1518-07-23 00:01] Guard #3347 begins shift 165 | [1518-10-08 00:08] falls asleep 166 | [1518-09-28 00:00] falls asleep 167 | [1518-04-18 00:57] wakes up 168 | [1518-05-26 00:44] falls asleep 169 | [1518-10-30 00:22] falls asleep 170 | [1518-11-14 00:42] falls asleep 171 | [1518-11-04 00:40] wakes up 172 | [1518-04-09 00:38] falls asleep 173 | [1518-06-24 23:57] Guard #1283 begins shift 174 | [1518-06-02 00:01] Guard #1283 begins shift 175 | [1518-07-16 00:30] wakes up 176 | [1518-07-21 00:57] wakes up 177 | [1518-11-23 00:57] falls asleep 178 | [1518-09-01 00:45] wakes up 179 | [1518-07-17 00:45] falls asleep 180 | [1518-04-01 00:51] falls asleep 181 | [1518-04-24 00:00] Guard #3347 begins shift 182 | [1518-09-18 00:02] Guard #631 begins shift 183 | [1518-05-13 00:23] wakes up 184 | [1518-04-25 00:54] wakes up 185 | [1518-04-14 00:02] Guard #1889 begins shift 186 | [1518-09-12 00:13] falls asleep 187 | [1518-08-26 00:57] falls asleep 188 | [1518-08-13 00:02] Guard #439 begins shift 189 | [1518-10-06 00:56] wakes up 190 | [1518-10-01 00:32] wakes up 191 | [1518-10-17 00:20] wakes up 192 | [1518-07-28 00:01] falls asleep 193 | [1518-10-28 00:59] wakes up 194 | [1518-04-01 00:36] falls asleep 195 | [1518-04-01 00:46] wakes up 196 | [1518-05-24 00:01] Guard #2539 begins shift 197 | [1518-04-24 00:41] wakes up 198 | [1518-10-06 23:59] Guard #2903 begins shift 199 | [1518-10-17 00:52] falls asleep 200 | [1518-10-12 00:17] falls asleep 201 | [1518-10-27 00:49] wakes up 202 | [1518-08-22 00:01] falls asleep 203 | [1518-08-16 00:57] wakes up 204 | [1518-09-06 23:59] Guard #631 begins shift 205 | [1518-04-17 00:01] Guard #103 begins shift 206 | [1518-08-06 00:25] falls asleep 207 | [1518-10-24 00:15] falls asleep 208 | [1518-11-04 00:39] falls asleep 209 | [1518-03-27 00:11] falls asleep 210 | [1518-04-19 23:59] Guard #439 begins shift 211 | [1518-10-29 00:55] wakes up 212 | [1518-05-05 00:20] wakes up 213 | [1518-10-02 00:49] wakes up 214 | [1518-05-30 23:57] Guard #631 begins shift 215 | [1518-09-11 00:41] wakes up 216 | [1518-06-02 00:08] falls asleep 217 | [1518-11-16 00:44] wakes up 218 | [1518-10-27 23:52] Guard #1319 begins shift 219 | [1518-10-10 00:00] Guard #1487 begins shift 220 | [1518-08-16 00:54] falls asleep 221 | [1518-05-20 00:00] falls asleep 222 | [1518-07-29 00:14] wakes up 223 | [1518-08-10 00:19] wakes up 224 | [1518-08-04 00:00] Guard #439 begins shift 225 | [1518-09-22 00:59] wakes up 226 | [1518-11-12 23:57] Guard #1889 begins shift 227 | [1518-11-01 00:38] falls asleep 228 | [1518-08-09 00:56] falls asleep 229 | [1518-07-20 00:47] wakes up 230 | [1518-05-08 00:29] wakes up 231 | [1518-06-12 00:56] falls asleep 232 | [1518-06-15 23:56] Guard #2213 begins shift 233 | [1518-05-13 00:03] Guard #1889 begins shift 234 | [1518-10-18 00:19] falls asleep 235 | [1518-07-10 00:30] wakes up 236 | [1518-09-21 00:50] falls asleep 237 | [1518-07-04 00:58] wakes up 238 | [1518-11-09 00:46] falls asleep 239 | [1518-05-13 00:59] wakes up 240 | [1518-06-05 23:56] Guard #2251 begins shift 241 | [1518-05-25 00:03] Guard #1213 begins shift 242 | [1518-06-19 00:01] Guard #2903 begins shift 243 | [1518-08-16 00:04] Guard #2213 begins shift 244 | [1518-11-06 00:07] falls asleep 245 | [1518-04-30 00:27] falls asleep 246 | [1518-06-24 00:50] wakes up 247 | [1518-05-27 23:58] Guard #3347 begins shift 248 | [1518-10-22 00:22] falls asleep 249 | [1518-05-26 00:29] wakes up 250 | [1518-05-20 00:37] falls asleep 251 | [1518-09-16 23:58] Guard #2903 begins shift 252 | [1518-04-29 00:08] falls asleep 253 | [1518-08-18 00:56] wakes up 254 | [1518-08-22 00:42] wakes up 255 | [1518-04-08 00:40] wakes up 256 | [1518-08-02 00:53] wakes up 257 | [1518-09-14 00:58] wakes up 258 | [1518-10-06 00:07] falls asleep 259 | [1518-04-28 00:49] wakes up 260 | [1518-09-25 23:58] Guard #3319 begins shift 261 | [1518-04-29 00:34] falls asleep 262 | [1518-04-12 00:36] wakes up 263 | [1518-05-19 00:29] wakes up 264 | [1518-06-02 00:59] wakes up 265 | [1518-08-03 00:24] falls asleep 266 | [1518-05-28 00:13] falls asleep 267 | [1518-04-15 00:02] Guard #1301 begins shift 268 | [1518-09-30 00:32] falls asleep 269 | [1518-07-27 23:50] Guard #1777 begins shift 270 | [1518-06-15 00:15] falls asleep 271 | [1518-10-09 00:03] falls asleep 272 | [1518-04-30 00:03] Guard #1889 begins shift 273 | [1518-09-15 00:03] falls asleep 274 | [1518-08-30 00:20] falls asleep 275 | [1518-06-16 00:30] falls asleep 276 | [1518-05-08 00:03] Guard #2213 begins shift 277 | [1518-05-17 00:51] falls asleep 278 | [1518-06-12 00:58] wakes up 279 | [1518-07-21 00:41] falls asleep 280 | [1518-06-08 00:43] falls asleep 281 | [1518-05-17 00:00] falls asleep 282 | [1518-06-07 00:38] wakes up 283 | [1518-05-14 00:26] falls asleep 284 | [1518-04-16 00:26] wakes up 285 | [1518-06-21 00:35] wakes up 286 | [1518-10-27 00:58] wakes up 287 | [1518-11-18 00:49] falls asleep 288 | [1518-10-29 00:23] falls asleep 289 | [1518-05-20 00:53] wakes up 290 | [1518-05-18 00:00] Guard #1777 begins shift 291 | [1518-05-24 00:44] falls asleep 292 | [1518-11-13 00:31] falls asleep 293 | [1518-07-16 00:58] wakes up 294 | [1518-08-29 00:36] wakes up 295 | [1518-10-26 23:51] Guard #2389 begins shift 296 | [1518-07-26 00:53] falls asleep 297 | [1518-07-14 00:56] wakes up 298 | [1518-05-13 00:15] falls asleep 299 | [1518-10-09 00:44] falls asleep 300 | [1518-09-11 00:48] falls asleep 301 | [1518-05-11 00:00] Guard #2903 begins shift 302 | [1518-08-01 00:00] Guard #2129 begins shift 303 | [1518-06-04 00:57] wakes up 304 | [1518-06-19 00:42] wakes up 305 | [1518-05-04 00:10] falls asleep 306 | [1518-05-09 00:24] wakes up 307 | [1518-10-21 00:51] wakes up 308 | [1518-09-01 00:03] Guard #1319 begins shift 309 | [1518-04-18 00:24] falls asleep 310 | [1518-09-16 00:03] Guard #439 begins shift 311 | [1518-07-18 00:50] falls asleep 312 | [1518-07-20 00:06] falls asleep 313 | [1518-05-08 00:46] wakes up 314 | [1518-06-19 00:26] falls asleep 315 | [1518-04-27 00:18] wakes up 316 | [1518-07-30 00:54] falls asleep 317 | [1518-07-31 00:45] wakes up 318 | [1518-07-27 00:42] wakes up 319 | [1518-08-15 00:38] wakes up 320 | [1518-10-30 00:38] wakes up 321 | [1518-08-04 23:57] Guard #1213 begins shift 322 | [1518-08-01 00:41] falls asleep 323 | [1518-08-23 00:03] Guard #829 begins shift 324 | [1518-08-06 00:29] wakes up 325 | [1518-11-08 00:50] wakes up 326 | [1518-08-28 00:47] falls asleep 327 | [1518-06-28 00:50] falls asleep 328 | [1518-05-10 00:53] wakes up 329 | [1518-06-11 00:54] wakes up 330 | [1518-06-06 00:55] wakes up 331 | [1518-10-28 23:56] Guard #103 begins shift 332 | [1518-06-10 00:06] falls asleep 333 | [1518-11-09 00:51] wakes up 334 | [1518-05-16 00:18] falls asleep 335 | [1518-03-28 00:16] falls asleep 336 | [1518-04-19 00:53] wakes up 337 | [1518-08-26 00:59] wakes up 338 | [1518-09-20 00:00] Guard #2777 begins shift 339 | [1518-10-11 00:45] falls asleep 340 | [1518-08-09 00:00] Guard #2389 begins shift 341 | [1518-06-01 00:46] wakes up 342 | [1518-10-14 00:28] falls asleep 343 | [1518-06-11 23:53] Guard #2251 begins shift 344 | [1518-11-20 00:51] falls asleep 345 | [1518-11-07 00:38] falls asleep 346 | [1518-08-20 00:02] falls asleep 347 | [1518-08-01 00:54] falls asleep 348 | [1518-06-11 00:01] falls asleep 349 | [1518-10-01 00:37] falls asleep 350 | [1518-10-31 00:50] falls asleep 351 | [1518-04-09 00:02] Guard #2129 begins shift 352 | [1518-06-01 00:15] wakes up 353 | [1518-04-21 00:02] Guard #2539 begins shift 354 | [1518-07-22 00:00] falls asleep 355 | [1518-09-28 00:58] wakes up 356 | [1518-08-06 00:00] Guard #1319 begins shift 357 | [1518-10-14 23:50] Guard #3319 begins shift 358 | [1518-03-29 00:55] wakes up 359 | [1518-08-10 00:49] wakes up 360 | [1518-06-20 00:55] wakes up 361 | [1518-04-19 00:08] falls asleep 362 | [1518-11-01 00:08] falls asleep 363 | [1518-04-01 00:01] Guard #3371 begins shift 364 | [1518-06-29 00:33] falls asleep 365 | [1518-08-21 00:01] Guard #1213 begins shift 366 | [1518-08-21 23:51] Guard #1319 begins shift 367 | [1518-06-17 00:04] falls asleep 368 | [1518-05-22 00:54] falls asleep 369 | [1518-11-12 00:30] wakes up 370 | [1518-07-17 00:04] Guard #1283 begins shift 371 | [1518-06-05 00:08] falls asleep 372 | [1518-04-04 00:55] wakes up 373 | [1518-07-23 00:53] wakes up 374 | [1518-06-09 00:14] falls asleep 375 | [1518-05-10 00:37] falls asleep 376 | [1518-08-08 00:02] Guard #1213 begins shift 377 | [1518-09-06 00:46] wakes up 378 | [1518-09-07 23:57] Guard #1889 begins shift 379 | [1518-07-18 00:55] wakes up 380 | [1518-07-24 00:59] wakes up 381 | [1518-05-05 00:54] wakes up 382 | [1518-11-22 00:36] falls asleep 383 | [1518-07-18 00:27] wakes up 384 | [1518-10-09 00:58] wakes up 385 | [1518-06-18 00:01] Guard #2137 begins shift 386 | [1518-10-19 00:53] falls asleep 387 | [1518-03-31 00:24] wakes up 388 | [1518-09-27 00:02] falls asleep 389 | [1518-09-12 00:56] wakes up 390 | [1518-11-08 00:57] wakes up 391 | [1518-10-02 00:03] Guard #1213 begins shift 392 | [1518-06-09 00:59] wakes up 393 | [1518-10-20 23:56] Guard #2539 begins shift 394 | [1518-10-12 00:01] Guard #2251 begins shift 395 | [1518-07-06 00:32] falls asleep 396 | [1518-06-05 00:55] wakes up 397 | [1518-10-22 00:12] wakes up 398 | [1518-08-20 00:47] wakes up 399 | [1518-11-17 00:42] wakes up 400 | [1518-07-11 23:52] Guard #1283 begins shift 401 | [1518-10-20 00:29] falls asleep 402 | [1518-04-10 23:58] Guard #103 begins shift 403 | [1518-07-24 00:51] falls asleep 404 | [1518-08-12 00:50] wakes up 405 | [1518-09-27 00:35] wakes up 406 | [1518-10-13 00:02] Guard #103 begins shift 407 | [1518-06-29 00:47] wakes up 408 | [1518-10-28 00:02] falls asleep 409 | [1518-05-10 00:44] wakes up 410 | [1518-10-22 00:01] falls asleep 411 | [1518-05-22 00:48] wakes up 412 | [1518-06-19 00:56] falls asleep 413 | [1518-06-25 00:41] falls asleep 414 | [1518-07-07 00:51] falls asleep 415 | [1518-10-18 00:52] wakes up 416 | [1518-09-18 00:51] falls asleep 417 | [1518-08-25 00:36] wakes up 418 | [1518-06-10 00:49] wakes up 419 | [1518-09-07 00:17] wakes up 420 | [1518-10-01 00:31] falls asleep 421 | [1518-04-18 00:05] falls asleep 422 | [1518-09-23 00:01] Guard #439 begins shift 423 | [1518-06-13 00:46] wakes up 424 | [1518-04-20 00:30] wakes up 425 | [1518-08-23 00:10] falls asleep 426 | [1518-05-29 00:03] Guard #2903 begins shift 427 | [1518-05-24 00:36] wakes up 428 | [1518-09-24 23:57] Guard #1283 begins shift 429 | [1518-05-28 00:46] wakes up 430 | [1518-05-22 00:23] falls asleep 431 | [1518-11-15 00:48] wakes up 432 | [1518-06-01 00:21] falls asleep 433 | [1518-05-17 00:58] wakes up 434 | [1518-07-14 00:55] falls asleep 435 | [1518-09-15 00:51] falls asleep 436 | [1518-11-18 00:59] wakes up 437 | [1518-05-25 00:17] falls asleep 438 | [1518-08-17 00:03] Guard #3371 begins shift 439 | [1518-04-04 00:03] Guard #1777 begins shift 440 | [1518-09-29 00:40] wakes up 441 | [1518-07-22 00:52] wakes up 442 | [1518-05-07 00:04] Guard #2129 begins shift 443 | [1518-09-27 23:54] Guard #1319 begins shift 444 | [1518-04-29 00:09] wakes up 445 | [1518-10-17 00:59] wakes up 446 | [1518-07-06 00:46] wakes up 447 | [1518-07-27 00:04] Guard #241 begins shift 448 | [1518-08-10 00:00] Guard #241 begins shift 449 | [1518-07-29 00:56] wakes up 450 | [1518-07-12 00:17] wakes up 451 | [1518-05-13 00:33] falls asleep 452 | [1518-05-30 00:26] falls asleep 453 | [1518-04-03 00:02] falls asleep 454 | [1518-08-21 00:56] wakes up 455 | [1518-04-21 00:39] wakes up 456 | [1518-11-07 00:41] wakes up 457 | [1518-10-24 00:03] Guard #2129 begins shift 458 | [1518-07-16 00:53] falls asleep 459 | [1518-04-07 00:57] wakes up 460 | [1518-06-22 00:10] falls asleep 461 | [1518-10-25 00:45] wakes up 462 | [1518-09-04 00:04] falls asleep 463 | [1518-04-14 00:58] wakes up 464 | [1518-06-15 00:52] wakes up 465 | [1518-04-13 00:02] Guard #3319 begins shift 466 | [1518-07-15 00:01] Guard #1283 begins shift 467 | [1518-07-22 00:36] wakes up 468 | [1518-06-03 00:00] Guard #439 begins shift 469 | [1518-05-23 00:27] falls asleep 470 | [1518-07-16 00:00] Guard #1777 begins shift 471 | [1518-08-15 00:06] falls asleep 472 | [1518-05-15 00:58] wakes up 473 | [1518-09-11 00:49] wakes up 474 | [1518-11-19 00:55] wakes up 475 | [1518-04-06 00:37] wakes up 476 | [1518-07-15 00:13] falls asleep 477 | [1518-08-28 00:03] Guard #1777 begins shift 478 | [1518-07-21 23:51] Guard #3371 begins shift 479 | [1518-09-08 00:27] falls asleep 480 | [1518-07-08 00:02] Guard #241 begins shift 481 | [1518-08-11 00:52] wakes up 482 | [1518-09-09 00:32] falls asleep 483 | [1518-08-13 23:59] Guard #3371 begins shift 484 | [1518-07-19 00:53] wakes up 485 | [1518-08-05 00:46] wakes up 486 | [1518-07-01 00:53] falls asleep 487 | [1518-09-11 00:03] Guard #241 begins shift 488 | [1518-11-13 00:41] wakes up 489 | [1518-11-11 00:39] wakes up 490 | [1518-08-02 00:59] wakes up 491 | [1518-09-09 00:42] wakes up 492 | [1518-10-05 00:48] falls asleep 493 | [1518-09-29 00:00] Guard #2903 begins shift 494 | [1518-08-01 00:59] wakes up 495 | [1518-04-12 00:54] wakes up 496 | [1518-09-18 00:23] falls asleep 497 | [1518-09-04 00:47] wakes up 498 | [1518-04-02 00:03] Guard #1777 begins shift 499 | [1518-04-05 23:58] Guard #2251 begins shift 500 | [1518-05-16 00:26] wakes up 501 | [1518-04-05 00:00] falls asleep 502 | [1518-05-04 00:31] wakes up 503 | [1518-06-13 00:30] falls asleep 504 | [1518-09-06 00:50] falls asleep 505 | [1518-07-02 00:05] falls asleep 506 | [1518-11-08 00:04] Guard #1213 begins shift 507 | [1518-03-29 00:08] falls asleep 508 | [1518-04-21 00:15] falls asleep 509 | [1518-06-30 00:39] falls asleep 510 | [1518-10-24 23:56] Guard #1319 begins shift 511 | [1518-05-20 00:28] wakes up 512 | [1518-06-12 00:20] wakes up 513 | [1518-09-11 00:29] falls asleep 514 | [1518-05-09 00:57] falls asleep 515 | [1518-06-03 00:33] wakes up 516 | [1518-05-18 00:31] falls asleep 517 | [1518-05-28 00:26] wakes up 518 | [1518-09-26 00:35] falls asleep 519 | [1518-05-09 00:00] Guard #3347 begins shift 520 | [1518-10-27 00:28] falls asleep 521 | [1518-04-25 00:38] falls asleep 522 | [1518-11-01 00:15] wakes up 523 | [1518-10-27 00:05] falls asleep 524 | [1518-05-26 00:48] wakes up 525 | [1518-09-25 00:49] wakes up 526 | [1518-05-21 00:44] falls asleep 527 | [1518-05-11 23:59] Guard #2137 begins shift 528 | [1518-11-02 23:58] Guard #829 begins shift 529 | [1518-04-29 00:37] wakes up 530 | [1518-07-22 00:22] wakes up 531 | [1518-03-29 00:10] wakes up 532 | [1518-06-05 00:02] Guard #2389 begins shift 533 | [1518-10-31 00:43] wakes up 534 | [1518-05-03 00:43] falls asleep 535 | [1518-05-18 00:57] wakes up 536 | [1518-06-14 00:52] wakes up 537 | [1518-07-10 00:27] falls asleep 538 | [1518-05-17 00:13] wakes up 539 | [1518-06-24 00:36] falls asleep 540 | [1518-08-02 00:21] falls asleep 541 | [1518-08-31 00:49] wakes up 542 | [1518-09-09 00:09] falls asleep 543 | [1518-08-23 00:26] wakes up 544 | [1518-06-03 00:56] wakes up 545 | [1518-07-24 23:57] Guard #3371 begins shift 546 | [1518-07-16 00:45] wakes up 547 | [1518-08-17 00:27] falls asleep 548 | [1518-10-22 00:46] wakes up 549 | [1518-04-12 00:22] wakes up 550 | [1518-05-04 00:56] wakes up 551 | [1518-10-17 00:53] wakes up 552 | [1518-04-10 00:45] wakes up 553 | [1518-06-29 00:34] wakes up 554 | [1518-09-05 00:46] wakes up 555 | [1518-04-13 00:18] falls asleep 556 | [1518-07-27 00:24] wakes up 557 | [1518-08-29 00:44] falls asleep 558 | [1518-10-19 00:54] wakes up 559 | [1518-11-02 00:41] wakes up 560 | [1518-07-11 00:33] falls asleep 561 | [1518-09-15 00:57] falls asleep 562 | [1518-07-28 00:49] wakes up 563 | [1518-06-30 23:57] Guard #1283 begins shift 564 | [1518-09-25 00:06] falls asleep 565 | [1518-11-04 00:28] falls asleep 566 | [1518-10-20 00:34] wakes up 567 | [1518-10-24 00:38] wakes up 568 | [1518-04-21 00:57] falls asleep 569 | [1518-06-25 00:29] wakes up 570 | [1518-05-16 23:51] Guard #3371 begins shift 571 | [1518-06-24 00:21] falls asleep 572 | [1518-07-17 00:47] wakes up 573 | [1518-09-09 00:02] Guard #1283 begins shift 574 | [1518-07-11 00:52] wakes up 575 | [1518-07-16 00:28] falls asleep 576 | [1518-09-30 00:52] wakes up 577 | [1518-06-30 00:36] wakes up 578 | [1518-04-20 00:06] falls asleep 579 | [1518-08-14 00:33] falls asleep 580 | [1518-10-18 00:00] Guard #241 begins shift 581 | [1518-09-14 00:48] wakes up 582 | [1518-10-02 00:06] falls asleep 583 | [1518-05-31 00:57] wakes up 584 | [1518-05-31 00:23] falls asleep 585 | [1518-03-28 00:33] wakes up 586 | [1518-11-20 23:56] Guard #1283 begins shift 587 | [1518-03-31 00:50] wakes up 588 | [1518-07-05 00:04] Guard #2213 begins shift 589 | [1518-08-25 00:22] falls asleep 590 | [1518-06-20 00:03] Guard #103 begins shift 591 | [1518-03-29 00:20] falls asleep 592 | [1518-06-27 00:12] falls asleep 593 | [1518-04-09 23:56] Guard #631 begins shift 594 | [1518-06-08 00:45] wakes up 595 | [1518-09-15 00:54] wakes up 596 | [1518-05-22 00:02] Guard #3347 begins shift 597 | [1518-08-09 00:59] wakes up 598 | [1518-04-26 23:58] Guard #829 begins shift 599 | [1518-04-25 23:56] Guard #2251 begins shift 600 | [1518-10-27 00:57] falls asleep 601 | [1518-06-27 00:35] wakes up 602 | [1518-06-03 00:51] falls asleep 603 | [1518-10-06 00:14] wakes up 604 | [1518-10-13 00:23] wakes up 605 | [1518-09-22 00:39] wakes up 606 | [1518-06-02 00:34] wakes up 607 | [1518-09-10 00:34] wakes up 608 | [1518-07-13 00:40] falls asleep 609 | [1518-06-14 00:03] Guard #1283 begins shift 610 | [1518-10-04 00:32] wakes up 611 | [1518-07-23 00:09] falls asleep 612 | [1518-06-27 00:03] Guard #2251 begins shift 613 | [1518-07-27 00:31] falls asleep 614 | [1518-07-03 00:49] wakes up 615 | [1518-10-28 00:37] wakes up 616 | [1518-08-11 00:00] falls asleep 617 | [1518-06-26 00:19] falls asleep 618 | [1518-03-27 00:03] Guard #2251 begins shift 619 | [1518-05-03 00:57] wakes up 620 | [1518-06-28 23:56] Guard #3347 begins shift 621 | [1518-05-05 00:04] Guard #3347 begins shift 622 | [1518-10-14 00:14] wakes up 623 | [1518-09-11 00:57] wakes up 624 | [1518-05-04 00:00] Guard #3319 begins shift 625 | [1518-06-11 00:41] wakes up 626 | [1518-04-29 00:50] wakes up 627 | [1518-09-17 00:41] wakes up 628 | [1518-05-10 00:57] falls asleep 629 | [1518-09-03 00:32] wakes up 630 | [1518-11-01 00:02] Guard #3371 begins shift 631 | [1518-08-01 00:43] wakes up 632 | [1518-04-16 00:23] falls asleep 633 | [1518-05-05 00:27] falls asleep 634 | [1518-07-12 00:52] wakes up 635 | [1518-04-21 00:58] wakes up 636 | [1518-06-05 00:47] falls asleep 637 | [1518-07-30 00:59] wakes up 638 | [1518-08-17 23:57] Guard #631 begins shift 639 | [1518-04-10 00:33] falls asleep 640 | [1518-08-29 00:51] wakes up 641 | [1518-06-02 00:56] falls asleep 642 | [1518-06-28 00:43] wakes up 643 | [1518-07-26 00:55] wakes up 644 | [1518-07-12 23:59] Guard #1283 begins shift 645 | [1518-07-05 00:53] wakes up 646 | [1518-07-04 00:10] falls asleep 647 | [1518-04-06 23:56] Guard #2137 begins shift 648 | [1518-11-22 00:25] wakes up 649 | [1518-08-15 00:52] wakes up 650 | [1518-08-04 00:38] falls asleep 651 | [1518-09-12 00:00] Guard #103 begins shift 652 | [1518-11-10 00:50] wakes up 653 | [1518-07-02 23:52] Guard #631 begins shift 654 | [1518-05-25 23:46] Guard #631 begins shift 655 | [1518-11-03 00:50] wakes up 656 | [1518-06-10 23:50] Guard #439 begins shift 657 | [1518-05-02 23:58] Guard #2539 begins shift 658 | [1518-09-01 00:29] falls asleep 659 | [1518-04-12 00:32] falls asleep 660 | [1518-07-07 00:02] Guard #3371 begins shift 661 | [1518-07-30 00:04] Guard #2129 begins shift 662 | [1518-08-29 00:57] falls asleep 663 | [1518-09-14 00:00] Guard #2213 begins shift 664 | [1518-09-24 00:43] falls asleep 665 | [1518-11-16 00:57] wakes up 666 | [1518-05-04 00:53] falls asleep 667 | [1518-09-29 00:34] falls asleep 668 | [1518-09-03 00:24] falls asleep 669 | [1518-11-16 00:06] falls asleep 670 | [1518-08-04 00:59] wakes up 671 | [1518-04-28 00:07] falls asleep 672 | [1518-10-03 00:54] wakes up 673 | [1518-10-08 00:27] falls asleep 674 | [1518-03-27 00:57] wakes up 675 | [1518-05-01 00:53] wakes up 676 | [1518-06-20 23:59] Guard #1319 begins shift 677 | [1518-04-08 00:02] Guard #1889 begins shift 678 | [1518-06-23 23:59] Guard #241 begins shift 679 | [1518-11-22 00:14] falls asleep 680 | [1518-09-02 00:11] falls asleep 681 | [1518-11-21 00:42] wakes up 682 | [1518-08-19 23:47] Guard #1889 begins shift 683 | [1518-04-07 00:45] falls asleep 684 | [1518-08-25 00:15] wakes up 685 | [1518-08-25 23:57] Guard #829 begins shift 686 | [1518-08-10 23:47] Guard #1213 begins shift 687 | [1518-09-16 00:09] falls asleep 688 | [1518-07-18 00:18] falls asleep 689 | [1518-10-26 00:01] Guard #829 begins shift 690 | [1518-07-14 00:35] falls asleep 691 | [1518-11-03 00:40] falls asleep 692 | [1518-09-18 00:56] wakes up 693 | [1518-10-31 00:10] falls asleep 694 | [1518-08-28 00:56] wakes up 695 | [1518-05-01 00:07] falls asleep 696 | [1518-10-06 00:02] Guard #3347 begins shift 697 | [1518-04-10 00:11] falls asleep 698 | [1518-05-08 00:58] wakes up 699 | [1518-07-24 00:24] wakes up 700 | [1518-08-29 00:59] wakes up 701 | [1518-06-29 00:39] falls asleep 702 | [1518-06-13 00:52] falls asleep 703 | [1518-06-28 00:17] falls asleep 704 | [1518-07-29 00:07] falls asleep 705 | [1518-06-16 00:43] wakes up 706 | [1518-04-22 00:01] Guard #2777 begins shift 707 | [1518-04-08 00:16] falls asleep 708 | [1518-06-13 00:59] wakes up 709 | [1518-06-01 00:35] wakes up 710 | [1518-05-29 00:35] falls asleep 711 | [1518-06-19 00:59] wakes up 712 | [1518-09-13 00:33] falls asleep 713 | [1518-09-28 00:31] wakes up 714 | [1518-06-07 00:00] Guard #3319 begins shift 715 | [1518-06-13 00:00] Guard #3347 begins shift 716 | [1518-05-09 00:48] wakes up 717 | [1518-05-10 00:32] wakes up 718 | [1518-10-23 00:03] Guard #103 begins shift 719 | [1518-10-13 00:17] falls asleep 720 | [1518-07-17 23:59] Guard #1319 begins shift 721 | [1518-06-04 00:38] falls asleep 722 | [1518-09-24 00:53] wakes up 723 | [1518-08-29 00:03] Guard #1889 begins shift 724 | [1518-08-12 00:27] falls asleep 725 | [1518-04-26 00:56] wakes up 726 | [1518-07-02 00:32] wakes up 727 | [1518-10-20 00:56] falls asleep 728 | [1518-09-13 00:50] wakes up 729 | [1518-08-31 00:33] falls asleep 730 | [1518-07-08 00:39] falls asleep 731 | [1518-10-26 00:24] wakes up 732 | [1518-05-27 00:24] falls asleep 733 | [1518-05-15 00:54] falls asleep 734 | [1518-05-10 00:16] falls asleep 735 | [1518-04-19 00:03] Guard #1319 begins shift 736 | [1518-06-09 00:55] falls asleep 737 | [1518-06-26 00:00] Guard #1319 begins shift 738 | [1518-03-28 00:54] wakes up 739 | [1518-05-09 00:46] falls asleep 740 | [1518-11-04 00:33] wakes up 741 | [1518-07-12 00:26] falls asleep 742 | [1518-04-17 00:37] wakes up 743 | [1518-05-06 00:56] wakes up 744 | [1518-05-03 00:34] wakes up 745 | [1518-04-02 00:10] wakes up 746 | [1518-06-10 00:54] wakes up 747 | [1518-03-31 00:29] falls asleep 748 | [1518-07-22 00:39] falls asleep 749 | [1518-09-14 00:52] falls asleep 750 | [1518-05-05 00:17] falls asleep 751 | [1518-06-08 00:00] Guard #2389 begins shift 752 | [1518-07-13 00:59] wakes up 753 | [1518-10-08 00:03] Guard #2251 begins shift 754 | [1518-07-08 00:40] wakes up 755 | [1518-05-14 00:39] wakes up 756 | [1518-07-25 00:33] falls asleep 757 | [1518-08-09 00:48] wakes up 758 | [1518-11-12 00:01] falls asleep 759 | [1518-08-11 00:26] wakes up 760 | [1518-05-27 00:02] Guard #1283 begins shift 761 | [1518-10-29 00:36] wakes up 762 | [1518-11-14 00:43] wakes up 763 | [1518-08-08 00:21] falls asleep 764 | [1518-10-01 00:04] Guard #829 begins shift 765 | [1518-11-12 00:56] falls asleep 766 | [1518-05-12 00:52] falls asleep 767 | [1518-04-29 00:01] Guard #1777 begins shift 768 | [1518-08-13 00:31] falls asleep 769 | [1518-05-07 00:48] falls asleep 770 | [1518-04-05 00:59] wakes up 771 | [1518-10-31 00:04] Guard #3319 begins shift 772 | [1518-10-13 00:49] wakes up 773 | [1518-05-14 00:19] wakes up 774 | [1518-10-20 00:57] wakes up 775 | [1518-09-27 00:57] wakes up 776 | [1518-09-11 00:56] falls asleep 777 | [1518-05-03 00:23] falls asleep 778 | [1518-05-12 00:58] wakes up 779 | [1518-10-08 00:54] wakes up 780 | [1518-09-26 23:48] Guard #1213 begins shift 781 | [1518-08-14 00:48] wakes up 782 | [1518-05-21 00:50] wakes up 783 | [1518-10-19 00:01] Guard #3371 begins shift 784 | [1518-11-09 23:58] Guard #241 begins shift 785 | [1518-10-18 00:42] wakes up 786 | [1518-11-05 23:59] Guard #3347 begins shift 787 | [1518-07-13 23:59] Guard #2137 begins shift 788 | [1518-11-22 00:46] wakes up 789 | [1518-11-17 00:31] falls asleep 790 | [1518-06-15 00:40] falls asleep 791 | [1518-11-09 00:09] falls asleep 792 | [1518-09-10 00:07] falls asleep 793 | [1518-05-15 00:19] falls asleep 794 | [1518-09-23 00:50] wakes up 795 | [1518-06-10 00:52] falls asleep 796 | [1518-10-07 00:39] falls asleep 797 | [1518-09-22 00:36] falls asleep 798 | [1518-05-24 00:12] falls asleep 799 | [1518-08-03 00:00] Guard #1319 begins shift 800 | [1518-06-30 00:24] falls asleep 801 | [1518-04-17 00:31] falls asleep 802 | [1518-06-15 00:00] Guard #1777 begins shift 803 | [1518-05-10 00:51] falls asleep 804 | [1518-06-07 00:32] falls asleep 805 | [1518-07-31 00:04] Guard #1213 begins shift 806 | [1518-10-30 00:03] Guard #2251 begins shift 807 | [1518-09-28 00:46] falls asleep 808 | [1518-08-10 00:41] falls asleep 809 | [1518-06-23 00:49] wakes up 810 | [1518-04-13 00:47] wakes up 811 | [1518-05-21 00:04] Guard #241 begins shift 812 | [1518-05-19 00:19] falls asleep 813 | [1518-04-24 00:39] falls asleep 814 | [1518-05-15 23:56] Guard #1777 begins shift 815 | [1518-08-09 00:15] falls asleep 816 | [1518-04-03 00:10] wakes up 817 | [1518-06-03 00:07] falls asleep 818 | [1518-08-31 00:01] Guard #1213 begins shift 819 | [1518-09-06 00:00] Guard #631 begins shift 820 | [1518-11-05 00:01] Guard #439 begins shift 821 | [1518-09-19 00:53] falls asleep 822 | [1518-06-17 00:39] wakes up 823 | [1518-08-27 00:55] wakes up 824 | [1518-10-23 00:12] falls asleep 825 | [1518-08-05 00:40] falls asleep 826 | [1518-10-13 00:26] falls asleep 827 | [1518-04-28 00:03] Guard #1889 begins shift 828 | [1518-08-19 00:01] Guard #2903 begins shift 829 | [1518-05-15 00:26] wakes up 830 | [1518-06-05 00:37] wakes up 831 | [1518-07-15 00:55] wakes up 832 | [1518-09-17 00:56] wakes up 833 | [1518-06-21 00:29] falls asleep 834 | [1518-09-20 23:59] Guard #241 begins shift 835 | [1518-04-04 00:26] wakes up 836 | [1518-10-21 23:49] Guard #241 begins shift 837 | [1518-09-06 00:15] falls asleep 838 | [1518-09-19 00:33] wakes up 839 | [1518-09-23 00:37] falls asleep 840 | [1518-09-19 00:55] wakes up 841 | [1518-04-02 00:08] falls asleep 842 | [1518-07-06 00:00] Guard #2903 begins shift 843 | [1518-07-13 00:57] falls asleep 844 | [1518-05-23 00:00] Guard #3371 begins shift 845 | [1518-10-02 23:58] Guard #2389 begins shift 846 | [1518-06-24 00:30] wakes up 847 | [1518-10-16 00:07] falls asleep 848 | [1518-09-17 00:30] falls asleep 849 | [1518-08-28 00:34] wakes up 850 | [1518-07-19 00:24] falls asleep 851 | [1518-05-31 23:57] Guard #3319 begins shift 852 | [1518-05-01 00:00] Guard #1889 begins shift 853 | [1518-03-30 00:56] falls asleep 854 | [1518-10-19 23:57] Guard #1889 begins shift 855 | [1518-08-26 23:56] Guard #2389 begins shift 856 | [1518-07-26 00:00] Guard #2389 begins shift 857 | [1518-07-19 00:00] Guard #2903 begins shift 858 | [1518-11-08 00:53] falls asleep 859 | [1518-09-14 23:48] Guard #3319 begins shift 860 | [1518-10-03 23:58] Guard #829 begins shift 861 | [1518-11-22 00:02] Guard #3347 begins shift 862 | [1518-10-21 00:42] falls asleep 863 | [1518-11-15 00:04] falls asleep 864 | [1518-08-25 00:11] falls asleep 865 | [1518-05-02 00:35] wakes up 866 | [1518-10-25 00:37] falls asleep 867 | [1518-11-11 23:48] Guard #103 begins shift 868 | [1518-10-08 23:53] Guard #631 begins shift 869 | [1518-10-23 00:38] falls asleep 870 | [1518-07-16 00:34] falls asleep 871 | [1518-11-05 00:41] falls asleep 872 | [1518-10-31 00:41] falls asleep 873 | [1518-11-09 00:04] Guard #1777 begins shift 874 | [1518-06-18 00:55] wakes up 875 | [1518-04-14 00:18] falls asleep 876 | [1518-06-21 23:58] Guard #1777 begins shift 877 | [1518-04-18 00:17] wakes up 878 | [1518-04-06 00:21] falls asleep 879 | [1518-10-05 00:57] wakes up 880 | [1518-05-29 23:58] Guard #2389 begins shift 881 | [1518-06-18 00:46] falls asleep 882 | [1518-07-27 00:18] falls asleep 883 | [1518-08-04 00:25] wakes up 884 | [1518-06-12 00:25] falls asleep 885 | [1518-04-16 00:55] wakes up 886 | [1518-06-01 00:42] falls asleep 887 | [1518-04-16 00:33] falls asleep 888 | [1518-04-24 23:57] Guard #2389 begins shift 889 | [1518-09-19 00:09] falls asleep 890 | [1518-10-14 00:58] wakes up 891 | [1518-09-16 00:53] wakes up 892 | [1518-06-20 00:26] falls asleep 893 | [1518-09-10 00:57] wakes up 894 | [1518-06-16 23:50] Guard #829 begins shift 895 | [1518-10-11 00:33] falls asleep 896 | [1518-08-17 00:53] wakes up 897 | [1518-08-12 00:03] Guard #1889 begins shift 898 | [1518-05-05 23:59] Guard #2129 begins shift 899 | [1518-10-23 00:49] wakes up 900 | [1518-10-24 00:43] falls asleep 901 | [1518-05-10 00:59] wakes up 902 | [1518-04-11 00:57] falls asleep 903 | [1518-06-15 00:35] wakes up 904 | [1518-08-15 00:00] Guard #1777 begins shift 905 | [1518-08-10 00:12] falls asleep 906 | [1518-07-01 23:52] Guard #439 begins shift 907 | [1518-06-26 00:57] wakes up 908 | [1518-11-23 00:35] wakes up 909 | [1518-11-05 00:51] wakes up 910 | [1518-04-04 23:54] Guard #2389 begins shift 911 | [1518-11-14 23:47] Guard #2903 begins shift 912 | [1518-04-11 00:50] wakes up 913 | [1518-10-26 00:11] falls asleep 914 | [1518-09-06 00:56] wakes up 915 | [1518-05-22 00:55] wakes up 916 | [1518-06-28 00:56] wakes up 917 | [1518-05-24 00:56] wakes up 918 | [1518-08-11 00:46] falls asleep 919 | [1518-06-30 00:56] wakes up 920 | [1518-06-16 00:57] wakes up 921 | [1518-09-27 00:46] falls asleep 922 | [1518-06-01 00:11] falls asleep 923 | [1518-04-12 00:07] falls asleep 924 | [1518-08-04 00:14] falls asleep 925 | [1518-07-22 00:34] falls asleep 926 | [1518-08-07 00:47] falls asleep 927 | [1518-08-29 23:59] Guard #829 begins shift 928 | [1518-11-19 00:19] falls asleep 929 | [1518-03-30 00:01] Guard #3347 begins shift 930 | [1518-09-15 00:19] wakes up 931 | [1518-08-18 00:55] falls asleep 932 | [1518-10-01 00:45] wakes up 933 | [1518-10-29 00:48] falls asleep 934 | [1518-10-21 00:27] wakes up 935 | [1518-07-03 23:56] Guard #1777 begins shift 936 | [1518-08-06 23:59] Guard #241 begins shift 937 | [1518-10-08 00:22] wakes up 938 | [1518-09-22 00:52] falls asleep 939 | [1518-06-23 00:03] Guard #241 begins shift 940 | [1518-11-20 00:57] wakes up 941 | [1518-03-27 23:58] Guard #3319 begins shift 942 | [1518-09-25 00:56] falls asleep 943 | [1518-06-06 00:52] falls asleep 944 | [1518-09-03 23:49] Guard #2137 begins shift 945 | [1518-08-30 00:39] wakes up 946 | [1518-11-12 00:59] wakes up 947 | [1518-10-23 00:25] wakes up 948 | [1518-07-24 00:01] Guard #439 begins shift 949 | [1518-04-12 00:52] falls asleep 950 | [1518-11-23 00:59] wakes up 951 | [1518-11-09 00:37] wakes up 952 | [1518-11-22 23:57] Guard #1889 begins shift 953 | [1518-05-11 00:27] falls asleep 954 | [1518-09-02 00:03] Guard #3371 begins shift 955 | [1518-10-16 00:03] Guard #3319 begins shift 956 | [1518-05-18 23:56] Guard #3319 begins shift 957 | [1518-09-13 00:02] Guard #1319 begins shift 958 | [1518-11-10 00:40] falls asleep 959 | [1518-05-13 23:56] Guard #1213 begins shift 960 | [1518-09-25 00:59] wakes up 961 | [1518-07-01 00:47] wakes up 962 | [1518-10-17 00:13] falls asleep 963 | [1518-10-12 00:31] wakes up 964 | [1518-09-24 00:03] Guard #2137 begins shift 965 | [1518-10-11 00:35] wakes up 966 | [1518-07-10 00:59] wakes up --------------------------------------------------------------------------------