annotate day14.txt @ 31:47dc75915e91

Implement falling/destroying blocks Implemented part 1 with supports/supported by logic. Implemented part 2 with cascades and summing counts. Code has caching so it is quick _but_ it gives an answer that's too low.
author IBBoard <dev@ibboard.co.uk>
date Wed, 03 Jan 2024 17:00:56 +0000
parents 46fb65f2cb94
children
Ignore whitespace changes - Everywhere: Within whitespace: At end of lines:
rev   line source
21
46fb65f2cb94 Add Day 14 part 1 implementation
IBBoard <dev@ibboard.co.uk>
parents:
diff changeset
1 --- Day 14: Parabolic Reflector Dish ---
46fb65f2cb94 Add Day 14 part 1 implementation
IBBoard <dev@ibboard.co.uk>
parents:
diff changeset
2
46fb65f2cb94 Add Day 14 part 1 implementation
IBBoard <dev@ibboard.co.uk>
parents:
diff changeset
3 Given movable objects (O) and stationary objects (#) with free space (.),
46fb65f2cb94 Add Day 14 part 1 implementation
IBBoard <dev@ibboard.co.uk>
parents:
diff changeset
4 "tilt" the map to the top so that the movable objects slide to the top
46fb65f2cb94 Add Day 14 part 1 implementation
IBBoard <dev@ibboard.co.uk>
parents:
diff changeset
5 of the map and then determine the total "load" - the sum of the number
46fb65f2cb94 Add Day 14 part 1 implementation
IBBoard <dev@ibboard.co.uk>
parents:
diff changeset
6 of rows from the movable object to the bottom of the map.
46fb65f2cb94 Add Day 14 part 1 implementation
IBBoard <dev@ibboard.co.uk>
parents:
diff changeset
7
46fb65f2cb94 Add Day 14 part 1 implementation
IBBoard <dev@ibboard.co.uk>
parents:
diff changeset
8 Given:
46fb65f2cb94 Add Day 14 part 1 implementation
IBBoard <dev@ibboard.co.uk>
parents:
diff changeset
9
46fb65f2cb94 Add Day 14 part 1 implementation
IBBoard <dev@ibboard.co.uk>
parents:
diff changeset
10 O....#....
46fb65f2cb94 Add Day 14 part 1 implementation
IBBoard <dev@ibboard.co.uk>
parents:
diff changeset
11 O.OO#....#
46fb65f2cb94 Add Day 14 part 1 implementation
IBBoard <dev@ibboard.co.uk>
parents:
diff changeset
12 .....##...
46fb65f2cb94 Add Day 14 part 1 implementation
IBBoard <dev@ibboard.co.uk>
parents:
diff changeset
13 OO.#O....O
46fb65f2cb94 Add Day 14 part 1 implementation
IBBoard <dev@ibboard.co.uk>
parents:
diff changeset
14 .O.....O#.
46fb65f2cb94 Add Day 14 part 1 implementation
IBBoard <dev@ibboard.co.uk>
parents:
diff changeset
15 O.#..O.#.#
46fb65f2cb94 Add Day 14 part 1 implementation
IBBoard <dev@ibboard.co.uk>
parents:
diff changeset
16 ..O..#O..O
46fb65f2cb94 Add Day 14 part 1 implementation
IBBoard <dev@ibboard.co.uk>
parents:
diff changeset
17 .......O..
46fb65f2cb94 Add Day 14 part 1 implementation
IBBoard <dev@ibboard.co.uk>
parents:
diff changeset
18 #....###..
46fb65f2cb94 Add Day 14 part 1 implementation
IBBoard <dev@ibboard.co.uk>
parents:
diff changeset
19 #OO..#....
46fb65f2cb94 Add Day 14 part 1 implementation
IBBoard <dev@ibboard.co.uk>
parents:
diff changeset
20
46fb65f2cb94 Add Day 14 part 1 implementation
IBBoard <dev@ibboard.co.uk>
parents:
diff changeset
21 Sliding makes it:
46fb65f2cb94 Add Day 14 part 1 implementation
IBBoard <dev@ibboard.co.uk>
parents:
diff changeset
22
46fb65f2cb94 Add Day 14 part 1 implementation
IBBoard <dev@ibboard.co.uk>
parents:
diff changeset
23 OOOO.#.O..
46fb65f2cb94 Add Day 14 part 1 implementation
IBBoard <dev@ibboard.co.uk>
parents:
diff changeset
24 OO..#....#
46fb65f2cb94 Add Day 14 part 1 implementation
IBBoard <dev@ibboard.co.uk>
parents:
diff changeset
25 OO..O##..O
46fb65f2cb94 Add Day 14 part 1 implementation
IBBoard <dev@ibboard.co.uk>
parents:
diff changeset
26 O..#.OO...
46fb65f2cb94 Add Day 14 part 1 implementation
IBBoard <dev@ibboard.co.uk>
parents:
diff changeset
27 ........#.
46fb65f2cb94 Add Day 14 part 1 implementation
IBBoard <dev@ibboard.co.uk>
parents:
diff changeset
28 ..#....#.#
46fb65f2cb94 Add Day 14 part 1 implementation
IBBoard <dev@ibboard.co.uk>
parents:
diff changeset
29 ..O..#.O.O
46fb65f2cb94 Add Day 14 part 1 implementation
IBBoard <dev@ibboard.co.uk>
parents:
diff changeset
30 ..O.......
46fb65f2cb94 Add Day 14 part 1 implementation
IBBoard <dev@ibboard.co.uk>
parents:
diff changeset
31 #....###..
46fb65f2cb94 Add Day 14 part 1 implementation
IBBoard <dev@ibboard.co.uk>
parents:
diff changeset
32 #....#....
46fb65f2cb94 Add Day 14 part 1 implementation
IBBoard <dev@ibboard.co.uk>
parents:
diff changeset
33
46fb65f2cb94 Add Day 14 part 1 implementation
IBBoard <dev@ibboard.co.uk>
parents:
diff changeset
34 The load calculation is:
46fb65f2cb94 Add Day 14 part 1 implementation
IBBoard <dev@ibboard.co.uk>
parents:
diff changeset
35
46fb65f2cb94 Add Day 14 part 1 implementation
IBBoard <dev@ibboard.co.uk>
parents:
diff changeset
36 OOOO.#.O.. 10
46fb65f2cb94 Add Day 14 part 1 implementation
IBBoard <dev@ibboard.co.uk>
parents:
diff changeset
37 OO..#....# 9
46fb65f2cb94 Add Day 14 part 1 implementation
IBBoard <dev@ibboard.co.uk>
parents:
diff changeset
38 OO..O##..O 8
46fb65f2cb94 Add Day 14 part 1 implementation
IBBoard <dev@ibboard.co.uk>
parents:
diff changeset
39 O..#.OO... 7
46fb65f2cb94 Add Day 14 part 1 implementation
IBBoard <dev@ibboard.co.uk>
parents:
diff changeset
40 ........#. 6
46fb65f2cb94 Add Day 14 part 1 implementation
IBBoard <dev@ibboard.co.uk>
parents:
diff changeset
41 ..#....#.# 5
46fb65f2cb94 Add Day 14 part 1 implementation
IBBoard <dev@ibboard.co.uk>
parents:
diff changeset
42 ..O..#.O.O 4
46fb65f2cb94 Add Day 14 part 1 implementation
IBBoard <dev@ibboard.co.uk>
parents:
diff changeset
43 ..O....... 3
46fb65f2cb94 Add Day 14 part 1 implementation
IBBoard <dev@ibboard.co.uk>
parents:
diff changeset
44 #....###.. 2
46fb65f2cb94 Add Day 14 part 1 implementation
IBBoard <dev@ibboard.co.uk>
parents:
diff changeset
45 #....#.... 1
46fb65f2cb94 Add Day 14 part 1 implementation
IBBoard <dev@ibboard.co.uk>
parents:
diff changeset
46
46fb65f2cb94 Add Day 14 part 1 implementation
IBBoard <dev@ibboard.co.uk>
parents:
diff changeset
47 Which gives 136.
46fb65f2cb94 Add Day 14 part 1 implementation
IBBoard <dev@ibboard.co.uk>
parents:
diff changeset
48
46fb65f2cb94 Add Day 14 part 1 implementation
IBBoard <dev@ibboard.co.uk>
parents:
diff changeset
49 Given a huge map, what is the load?
46fb65f2cb94 Add Day 14 part 1 implementation
IBBoard <dev@ibboard.co.uk>
parents:
diff changeset
50
46fb65f2cb94 Add Day 14 part 1 implementation
IBBoard <dev@ibboard.co.uk>
parents:
diff changeset
51 --- Part 2 ---
46fb65f2cb94 Add Day 14 part 1 implementation
IBBoard <dev@ibboard.co.uk>
parents:
diff changeset
52
46fb65f2cb94 Add Day 14 part 1 implementation
IBBoard <dev@ibboard.co.uk>
parents:
diff changeset
53 Now we want to cycle them by shifting them all in a cycle north, west, south and east.
46fb65f2cb94 Add Day 14 part 1 implementation
IBBoard <dev@ibboard.co.uk>
parents:
diff changeset
54
46fb65f2cb94 Add Day 14 part 1 implementation
IBBoard <dev@ibboard.co.uk>
parents:
diff changeset
55 After 1 cycle:
46fb65f2cb94 Add Day 14 part 1 implementation
IBBoard <dev@ibboard.co.uk>
parents:
diff changeset
56 .....#....
46fb65f2cb94 Add Day 14 part 1 implementation
IBBoard <dev@ibboard.co.uk>
parents:
diff changeset
57 ....#...O#
46fb65f2cb94 Add Day 14 part 1 implementation
IBBoard <dev@ibboard.co.uk>
parents:
diff changeset
58 ...OO##...
46fb65f2cb94 Add Day 14 part 1 implementation
IBBoard <dev@ibboard.co.uk>
parents:
diff changeset
59 .OO#......
46fb65f2cb94 Add Day 14 part 1 implementation
IBBoard <dev@ibboard.co.uk>
parents:
diff changeset
60 .....OOO#.
46fb65f2cb94 Add Day 14 part 1 implementation
IBBoard <dev@ibboard.co.uk>
parents:
diff changeset
61 .O#...O#.#
46fb65f2cb94 Add Day 14 part 1 implementation
IBBoard <dev@ibboard.co.uk>
parents:
diff changeset
62 ....O#....
46fb65f2cb94 Add Day 14 part 1 implementation
IBBoard <dev@ibboard.co.uk>
parents:
diff changeset
63 ......OOOO
46fb65f2cb94 Add Day 14 part 1 implementation
IBBoard <dev@ibboard.co.uk>
parents:
diff changeset
64 #...O###..
46fb65f2cb94 Add Day 14 part 1 implementation
IBBoard <dev@ibboard.co.uk>
parents:
diff changeset
65 #..OO#....
46fb65f2cb94 Add Day 14 part 1 implementation
IBBoard <dev@ibboard.co.uk>
parents:
diff changeset
66
46fb65f2cb94 Add Day 14 part 1 implementation
IBBoard <dev@ibboard.co.uk>
parents:
diff changeset
67 After 2 cycles:
46fb65f2cb94 Add Day 14 part 1 implementation
IBBoard <dev@ibboard.co.uk>
parents:
diff changeset
68 .....#....
46fb65f2cb94 Add Day 14 part 1 implementation
IBBoard <dev@ibboard.co.uk>
parents:
diff changeset
69 ....#...O#
46fb65f2cb94 Add Day 14 part 1 implementation
IBBoard <dev@ibboard.co.uk>
parents:
diff changeset
70 .....##...
46fb65f2cb94 Add Day 14 part 1 implementation
IBBoard <dev@ibboard.co.uk>
parents:
diff changeset
71 ..O#......
46fb65f2cb94 Add Day 14 part 1 implementation
IBBoard <dev@ibboard.co.uk>
parents:
diff changeset
72 .....OOO#.
46fb65f2cb94 Add Day 14 part 1 implementation
IBBoard <dev@ibboard.co.uk>
parents:
diff changeset
73 .O#...O#.#
46fb65f2cb94 Add Day 14 part 1 implementation
IBBoard <dev@ibboard.co.uk>
parents:
diff changeset
74 ....O#...O
46fb65f2cb94 Add Day 14 part 1 implementation
IBBoard <dev@ibboard.co.uk>
parents:
diff changeset
75 .......OOO
46fb65f2cb94 Add Day 14 part 1 implementation
IBBoard <dev@ibboard.co.uk>
parents:
diff changeset
76 #..OO###..
46fb65f2cb94 Add Day 14 part 1 implementation
IBBoard <dev@ibboard.co.uk>
parents:
diff changeset
77 #.OOO#...O
46fb65f2cb94 Add Day 14 part 1 implementation
IBBoard <dev@ibboard.co.uk>
parents:
diff changeset
78
46fb65f2cb94 Add Day 14 part 1 implementation
IBBoard <dev@ibboard.co.uk>
parents:
diff changeset
79 After 3 cycles:
46fb65f2cb94 Add Day 14 part 1 implementation
IBBoard <dev@ibboard.co.uk>
parents:
diff changeset
80 .....#....
46fb65f2cb94 Add Day 14 part 1 implementation
IBBoard <dev@ibboard.co.uk>
parents:
diff changeset
81 ....#...O#
46fb65f2cb94 Add Day 14 part 1 implementation
IBBoard <dev@ibboard.co.uk>
parents:
diff changeset
82 .....##...
46fb65f2cb94 Add Day 14 part 1 implementation
IBBoard <dev@ibboard.co.uk>
parents:
diff changeset
83 ..O#......
46fb65f2cb94 Add Day 14 part 1 implementation
IBBoard <dev@ibboard.co.uk>
parents:
diff changeset
84 .....OOO#.
46fb65f2cb94 Add Day 14 part 1 implementation
IBBoard <dev@ibboard.co.uk>
parents:
diff changeset
85 .O#...O#.#
46fb65f2cb94 Add Day 14 part 1 implementation
IBBoard <dev@ibboard.co.uk>
parents:
diff changeset
86 ....O#...O
46fb65f2cb94 Add Day 14 part 1 implementation
IBBoard <dev@ibboard.co.uk>
parents:
diff changeset
87 .......OOO
46fb65f2cb94 Add Day 14 part 1 implementation
IBBoard <dev@ibboard.co.uk>
parents:
diff changeset
88 #...O###.O
46fb65f2cb94 Add Day 14 part 1 implementation
IBBoard <dev@ibboard.co.uk>
parents:
diff changeset
89 #.OOO#...O
46fb65f2cb94 Add Day 14 part 1 implementation
IBBoard <dev@ibboard.co.uk>
parents:
diff changeset
90
46fb65f2cb94 Add Day 14 part 1 implementation
IBBoard <dev@ibboard.co.uk>
parents:
diff changeset
91
46fb65f2cb94 Add Day 14 part 1 implementation
IBBoard <dev@ibboard.co.uk>
parents:
diff changeset
92 What is the top load after 1,000,000,000 cycles?