aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorNat Lasseter <user@4574.co.uk>2022-12-23 01:53:54 +0000
committerNat Lasseter <user@4574.co.uk>2022-12-23 01:53:54 +0000
commit6e39227aa5ae68ff69a79b63f5c28b2e2544bb74 (patch)
treee38bbf4cfce2fc2b2306db985ff65283d8b3adba
parent6734e8dee0ff45229100bfbed9935ce080639981 (diff)
Day 22 Part 1HEADmain
-rw-r--r--day22/input202
-rw-r--r--day22/part1.rb84
-rw-r--r--day22/test14
3 files changed, 300 insertions, 0 deletions
diff --git a/day22/input b/day22/input
new file mode 100644
index 0000000..e68946b
--- /dev/null
+++ b/day22/input
@@ -0,0 +1,202 @@
+ ....#.......##.....#......#...#...#.........#.#...................................#.................
+ .......#.......#........#............#.......#.....#..............#..............#..................
+ ..............#...#.........#................................................#....##..........#..#..
+ ..#..#.##.......#..........#....#...##......#............................................#........#.
+ .......#...............................#.......#.............#................#......#..............
+ .............#................................#.........#.........#.#.....#..................#......
+ ....#....................#...#......#...##....................................#..#..#.#.............
+ ...............#...............#..#.#.........#...#.............##.....#............................
+ ..##.#....#.....#..#..#....#.........#............#...#.#................................#...#......
+ ..........#...#..#.....##.#......#...#.........#.....#........#......................#.#............
+ ....#......#............#.#........##......#..................#..................#......#...........
+ #.......#.............#.......................................#.......#..............##.............
+ .............#..............#......##.....#...........#...#.....#........#...#..................#...
+ ..................................#.......................#............#.....#.............#........
+ ...............#...........#........#.....#..........##...............#.......#....#................
+ ......#............................#............................#...............................#...
+ ..#...........................##..............#.##...#...........#...................#..#......#.#.#
+ ....#...#.......#..........................#...........................#.........#....#..#..........
+ ......##........................###............#.#................#......................#..........
+ ........#.#..........#...#.......................................#...#..............#...............
+ #...............#.#......#.#................#................................#..........#..#........
+ ..................#........................#.....................#................................#.
+ ......#......................#.......#................................#..#...........#............#.
+ .....#.#................##..........................#...#..#....#....#....#.......#.#..#......#.....
+ ...#.....#.......#......#..........................##.#.#......#.#....#....##..#......#..#..........
+ ................#..#.......#..............#.............#.#.........#....#....##..#......#.........#
+ .........###...#..#.#..............#............#..........##........#..#.#.#........#....#.........
+ ..................#......#........#...........#.#....#.........................#..#........#........
+ ............##.#................#...#..................#..........#........#........................
+ ..#........##............................#.............................................#............
+ ...........#....#..#......................................#.#...#.##.#...........##....#......#.....
+ ...........#.................##.....#..................#....#....#.......#...#...#.#.........##.....
+ .....#................#............#...#............#.......#..#.....................#..............
+ ...#............#.........................#.....#................#........#.............#..##...#...
+ ....................#.............#........................#...........#.#....................#.....
+ ........#........#.#.........#..................#........#........#.#...........#.............#.....
+ .................................#..#.............#.#...............................#...............
+ #......#...#..............#..#...#........#.....#.#..#..............................................
+ .....##................#......#..........#.......##........#......#...............#.......#....#....
+ ........................#.#...#..............#..............#.......#...#...........#...............
+ ...#.#.#..................#...#..#.#.....##............................#........#..#.#..............
+ .......................#........##..........#....#.##...#...#...................#...................
+ ....#.........#......................#.#..........#...#...................##.........#..............
+ ............................#...............................#...#....#....#........#....#..#........
+ #..............................#.......................................#....#...................#...
+ ..................#.#.......#...#....#...#..................#..........#..........................#.
+ .......#......#........#......#....#.................................................#........##....
+ ..#...#.#......#.....................#..#........#...............##............##.............#....#
+ ......#..#............................................#.................#......#.......#...#..#.....
+ ........#..#.....................#....#..........#...##.....#...............#......................#
+ ....#............................#.#..............
+ ........#......#.............#..........#.........
+ .#.#.....................#..........#..#.#......#.
+ .....................................#............
+ ......#.....#...##.........#..................#...
+ .....#................#.....#.......#.............
+ ............#..#....#...............###......#....
+ ......#........#................#.##....#..#..#...
+ ..#............#......#..#........................
+ .........#...................#..................#.
+ ..##..............................#....#..........
+ .........#........................#...............
+ .#.................#............#..#.#.....#....#.
+ ..................##.................#............
+ ............#.#..........##.................#.....
+ .....#.#......#..............................##.#.
+ ........##..........#..#...#....##.........#....#.
+ .....#.....#....#.#...#..#.......#..............#.
+ #..............#.........#........................
+ .#.......#.#.#.#..............#...........##......
+ ....#..#....#.........#...#..............#........
+ ........#...#........#...............#.......#....
+ ...#...................................#..........
+ .............##..#......#.#...#.#.#...............
+ ...........#......#....#.....#....................
+ ................................#.#....##.........
+ ...................#.........................#...#
+ ......#.........................................#.
+ ....#.................#.#..#.............###......
+ .......#...#..#........#....#..........#.#........
+ .####..#...#....#.........#.......#.............#.
+ .#.......#.#...................##....#...........#
+ ....#.#....##.....##.#............#.............#.
+ ..................#....###..#...#............#....
+ ..........#.................................#.....
+ ..#..............#...............#........#.#...#.
+ .#.....#...#......#.................#.........#..#
+ .....#....#.#..#...#.#........#..#...............#
+ ............#............................#.#......
+ ......#.........#.......................#.........
+ ..........#........#.......................#......
+ .............#.................#...........#......
+ .......#...........#..#..#....#.............#..#..
+ .#....................#......#...........#........
+ ........#...#.#........#..........#...............
+ ...................#..#.................#.........
+ .....#.#..#...#........#....#.........##..###.....
+ ...........##.....#.........##......#.............
+ .............#..........#....#.......#.#......#...
+ ...............#.........#........................
+#...............................#......................#..............#...#.....#.#............#....
+#................#......#...........#...#.................#.#...##.........#.....#...#............#.
+....................#......#..#......##.#...#....................................#.....#.........#..
+.............#..#.....#..##..#.........#........#.........................................###.....#.
+#.......................#.##.......#............#...........##.......#.................#........#...
+...............#....#......#.......#..#....#.....#.....................#.......#....................
+.......##................#....#........#..#..#........#.............#...............................
+#.....#.................#........#............##.............#..............#...#......#..........#.
+..#.......#......#.#........#....#.........................#.#.....#......#.............#...#.......
+.........#..#...........................#......................##...............#...#.....#..#.....#
+...#..#...#...##.#......#..#.......#...#....#....#.......................#.........#............#.#.
+.#......................#...#................#.#........................#..........#.#.....#.....#..
+............................#...#..........#.......#.....#............#.....#...#...#..#..#.........
+..#..........#..........#..#.#..##.....................#.......#.....................#.......#......
+...#...#.........................#......#.#...............#.........#........................##.....
+..............#......#...................#..#..................................#.....###.........#..
+.#.#.........#..#........#..........#.........................#....#...........#.#.......#........#.
+#..........#............................................#..............##...#...........#...........
+....#.#..................#.#.#.............#.#...#.......#....#....................................#
+#..#.........#.......................................#.......................#...................#.#
+...............#.....#..............#...##...........#..........#.....................#.............
+...#...#.................#.#......#.#....#...............#.............................#.....#......
+............#...#...#.....#.....#...................#..#..............#..............#..............
+...............................#........#..............#...#...#........#.#..........##...#..#..#...
+........#.............#..........#..............#.......#..............................#............
+..........#..#.................................#..............#.#....###..#..#....#.........#.......
+.....................#....#............#....................#.........#...#...#....#........#......#
+.#.#.#..........##...........................#.#.............#..............#.................#.....
+..........#........................#...................................#.......#....#.........#.....
+...................#...#..#........#.#.#.........#................#..#.#.............#..............
+..#........#.......#...............#.......#...#......#..........#.....#............#...............
+........#..#.................#..#.#......#......#...#...........#.......#..#.....................#..
+.....................#.....#...........#......#...........#..#...#.....#......#................#....
+..........#......#.#..#.#..........................#..............#.........#.#................#..#.
+............#...............................#....#.....................#.....#.......#....##.......#
+................................#.............#...................#.....#..#...#.......#............
+...........#..........#.#......#......#.#..#.........#..........#..#.#........#.......#......#.....#
+..#.............................#..#......#.......#.#.#........#....................................
+......................................#.........#............#.........#.........#...............##.
+........#............#............#.#...#.#........##......#...#........#........#................#.
+...................#....................#.........#....#..#.........#.....#........#.......#........
+.#....#....#...........................#......#.........................#.....#.......#.............
+...#..............................#........#.................#........#...........................#.
+#.......#....#........#......#...#....#......................#..............................#.......
+........##......#.......#....................#....................#.#.#................#..#.......#.
+..........#............#............#.......................#..#..#...........#.......#.#........#..
+#.....................................#.#............#.........#.......#.....##..................##.
+..........#..............#..#......#.................##..................#..................#..#....
+....#..............#.#.......#.........#.........................#..................#....#...#......
+............................................#..#..#..#........#.........#.#......#.......#.....#....
+....####.....#..............#......#.....#.....#..
+....#....#.................#..#.......##..........
+.##.......#......#..........#.#.....#.............
+#........#...........#..........#..............##.
+......##......##......##....#......#.............#
+#................#...............#..#.............
+.................#.....................#..#.......
+.....#.#.....#................#....#..............
+#.##......#..##.........#.........#...#...........
+...##..#.........#......#.........##..............
+.#......#......#......#..................#........
+...#....##..#......#.................#...........#
+................................##.....#..#....#..
+#............#....#.......#.............#...#....#
+..........#.......................................
+.....#..............................#.....#...#.#.
+........#.........#...##..#...............#.......
+#........#.#..............#..#.......#..........#.
+...#...............#....#...##.............#......
+#...........#............................#........
+......##...#.........#....#.....##..#...........#.
+...#.#..#................#....................#..#
+.....#....###........#.......#......#.......#.....
+............................#.#.........#.........
+......#.#.........#...#............#......#..#....
+......#..#.#...#.................##............#..
+...#....#.................#............##....#....
+........#........................................#
+..#.............#.##..............................
+.#..............#..................#......#..#....
+.#..#.............##...........##.........##......
+..#....##...............#............#....##......
+........................#.........................
+............#...................#.................
+.#..........#..........#..........#.#.............
+........#.#................................#...#..
+..........#......#........#.....#.#..#....##...#..
+...........#.#..........................#....##...
+...............................#...#.#............
+.#.............#.................#.#.......#..#..#
+....#................#...#............#...........
+.........#...##......#..#.........................
+...#.#....#.........................#.#...........
+....#......##......##.....##..................#...
+.#.......#.......#..#.......##....#.........#..#.#
+..#...##.................#........................
+.#.#..#.................#....#................#...
+.....#...................#............#.......##..
+.#...#......#.#...#..........#..........#...#.#...
+..#.......#..#.#......#..........#.....#.........#
+
+9R30L4R39R30R41L20L17R49L35L4L43L47R15L18L7L28L21R24R3L1L46L15R4R25R7R38R7L6L3R48R16R25R16R11L50L27R11R38R20L1L41R44L13L28R37L23R16R35R47R42L4R27L47R29R44L49R31R21R15L22R17L13R24R50L29R32R11L21L40R34R43R30R23L31L42L48R33R14L32L12R10R37R3R39R26R36R15L3R14L2R6L41L8R27L12R9R29R45R39L28R23L40R2L14R34R12L25L25L34L37L45R1L18L23L35R7R14L9L1R22R16L4R11L7L6R24L19R2R13R47L6L32L44L47R2L37R6L44R31R10R42R19R8L44R1L44R49L34L19L42L12R14L8R42L19R44R6L45L7R40R32L11L2L39L11R2L10R48R14L32L24R7R16R49R9R30L20R46R25L7L20L49L1R27R33R11R2R35L8L22R35L37L4L11R17R38L49R15R30L38R43L29L44L17L26L14R2L43R46L3R7R17R19L35R6L28L43L49L1L20R26L25L48L26R48L6R25R16R13R41L41R25R30R49L46R32L8R3L46L27L47L6L1L35R4L20R40L50L33R1L26R2R4L15L25L20R31R34L40L1R9R7R8L5R9L39R8R7L47L20R22R14R39R19R32R7R30R41L7L43L2L3L16R15R49L20L48L5L23L24R29R7R25R18L40R12L21L22L50L26L8R11L40L14R2L42L16L4L7L47L21L42L16R25L12R7R22R14L18L29R20R20L39R43L30L11R26L44R38R42R7R1L36L3L31R20R3R44L39R42R3R22L40L3R38R28L47R37R45L15R5R18R21R9L36R37R34L35R20R47R49L30R32R12R24R6L35L17L39R45R10R8R11R12L16L41R18L29L40R26L21R39L35R38R30L25R6R21L7R33R49R18R8R25R42R30R28R24R11L15R33L30L14L3R24L18R3R36L4R39R14L34R12L26R14L38R9R3R25R29L13L41L26L14R44L16L41R34R16L37R4L34L1L4R31R46L29R4L31R3R50L50L11L37R34R17R48R40L47L4L29R6L11L1L29R27R34R42R48L9L5L37R28R13R30L29L26R40L6R6L39L20R2R46L37L24R15L3L32L47R47R49L6L34L8R32L44L22L39L48R40L36L35R29R9L16R11R10L39R1L45L22L22R25L37L21R5R1R9L34L50L21L17L14L2L11R33L16R17L33R3L20R8R15L33L47L43L20L45L47R46L1R25L45R43R16L17L7R49R15R29L33R40R10L29L44L28R6R24R50R20L29L12R13L24L36R9L28L14L44R6R7R29L18L1R26R4R25L8R23R49L33L41R38L17R45L39R17L44L13L19R2L32R35L18R8R18R16R50R5L28R9L16R43L9L7R10R34L30L43R7R27L12L38R21L39L11L2R20R38L44R28R18L39R25L21R24R21L28R5R36L6R4R50R33L44L41L25R35R41R19L16R35R36R28L35R19R41R20R21L4L29L10L33L7L9L23L49L32L30R49R42L9L17L32L45L5L31L24L27R34L9R48L2R41R10R27L20R44R33L19L38L45R40L26R41L38R42R13R36L6L9R50L41L19R11R44R2R31L27R23R16L26R1R50R35R21R40L4L15L7R18R41R35R33R22L4R11L25R13L30L30L41L34R9L17L13R37R42L15L40L33L46R9L50R45R43R8L41L11R4R11R26R15L8L45L30R12R28R18L8R8L41L43R1L38L4R49L8R19L46L25R27L19R47R21R26L12L33L16R39R15L24R22R43R10R37L26L15L28L47L36L19L20R3R4R19L45R15R32R7L25L48L1R4L29L32R2R34L11R21L11L18L38R21L11R7L31R1R43R40L28R1L40L21R38R29L17R3L50L45L13R40R37L32L28L18R43L25L41R3L43R25R20R22L48R38R15L17L27R4L12R50R37R37L16L1R16L14R40R13L20L49L23R13R46L7R9R22R9L10R35R17L18R14L25L12L4R40R46L28L17L20L16L16L23R7L28R29R40R28R16L43L12R26L29R23R1R49R31R17R32L19R16R29L33L11R9R4R27R13R44R19L46R41R16R32L2R15L10R32R19R19R29R25L43R24L49R26L23R10L43L1L27L43L42R34R20R44R6R32R27R23L47L24L5R44R44R18R42R34R11L27R29R29L8L32R27L12L24L30L32L33R43R36R33L6L6L19L42R25R24R4R50R44R25R24L15L12R42R44R38L30L3L16L29R24R9L7L31R2R13L44R36L39L35R20L47R41R42L5L20L34L25R43L32L41L23R6R23L27L27L10L45R6R10R46L30R33R47R46L29L49R38L38L34L19R38R30L7L43R17R20R3R13R14R20R20L21R18R30L7L15L5R43L25L50R34L33R34L2R45L47L34R3L48L17L26L40R19R19L50R25L11L25R17L28L48R10L3L44R39L9R49L13R12L3R8L2L11L42L29L10R49R20L34R26R48R12L47R13L29L32L28R34L28L2R19L42R5R13R3L44R50R2L16R41R4L3L10R30R17L35L4R50R49R9R39L22L34R27R46R29L9R34R34L43R10R9R11R48R11R29R35R21R43L22L8L45L19L42R22L18R43L32R22L16R19L31R47L34R46L50R48R48L49L46L42L38L17L45R23R19L36L2L23L33R47R4L12R41R48L49L5L22L26R31R1L10L14L21R17R43L30R32L11R11R23L44L13L32L15R25L2L15R47L23L34L15L44L34R27R33R18L42R48R30L3L38R21R5R31R43R9L38L15L20L6R4R23R31L10L36R36R26R20L5L28L49R18R45R5R44L42R37R37R49R43R43L14L24R26L28R36L15L29R50R49L6R3R43L14L3R23L36L39L34R41L6L10L29R20R38L34R18L36R18L6L36R17L11R33L22R3L46L48L42R49R37L5R46R26R18L48R45L14R46R41L13L48L26R15L50R42R38R22R11R32R41L35L5L29R36R45L6R18L22R40L16R25R46R36R25R17R48R42L31R18R13R10R31L36L25R7L36L29R34L19L26L19R35R33R3R30R39L49R24L12R33L2L27R38L26L10L2L9R1R18L33R10R37R16L1L21L39L18R21L12L33L18L13R37L16R48L38L37R35R16L43R14R44R12R32L46R13R42L5R20R27R3R4R29L6L49R33L49L13L20R24R12L44L44L21R17R27R29L15L14R21R13L7L11L4L24R48L40R16L46R47R49L1L50R13R25R41R49R1R36R47R24R42R14R31L18L18R45R38L47L29R19L30R38L14L40L44L18L42R26R28L1R47R45R27R7L45R7L4L45L19L50R11R32R4R41R19L20L21L27R9L29R23R17R47R15L42R31R49L12R47R9R41R24L19R32L14L14L18R12R19R11R31R23L10R10R41L3R24L26R41R25L15R2R8L48L31R9L2R21L33R36R33L44R27R10L21L48L2L50L7R32R6R31L17R16L27L10R9L3R35L49R37L4R33R3R46L16R10R44R44L27L31R18L43R48L29R31R17R46R6R4R35R2R24R31L3R47R13R22R37R5L13L49L36L35R46R1L44R28L30R42R31L30R1R32R42L25R18L2R4L8R27L45L19L9L35R15L44R36L1L23R28L12L6R2R12L17L2R29R11L14R19R18R19R26L44R15L27R4L10L3L47L23L17L19R42L3L16L23L12L8L27L50L27R17R19L29R31R14L40L31R32L40L16L42R7L36R27R34L47R40R46L22L26L26L15R46R20L25R2R49L48R11R14R25L50L1R50R45R7L44R32R21L43L46R10R11R46R30L30L30R44L24L34L3L6R48R34L38R50L1L25L13R28L45R23R4L26L10L45R14L20R42R27L2L34R44L41L33R7L11L45R10R49L11L6R8L1L31L27L25R1R44R23L11R42L4L7L27L50R29R1R17L46L28R19L5L50L26L16R27R20L17L44R17R40L5L34L47L23L6L48R46R39R17R14L14R31R34R39R42L4L31L46L38L3L39L21L27L16L34L33R32R15R29R8L46R19L10R10R12L22R29R40R50L42R15L28L33R45R45L42L29R30R31L23L5R2L26L1R47R17R49L25R29L38R45L16L37R44R44R39L32L1L36L23R13R49L3R49R3L3L44L41L47L28L4R39R48L21R13L36R44R40R35R8R28R15R17R50L19R31L11R46R32R44R3R8L11L3R19R29R22L24R28R18R40L7L19R27R20L32R14R23L30L40R47R48R14L42R49L13R29R11R42R40L12R50L30L8L16L19R44L4L1R16R36R39L1L50R30L19L27L49L17L3L47L1L8L37R8L28R7R4L29R5L42L47L33L32R19R28L44L11L23R32L39L29R18R35R9L50R35R31R25L25R33L1R26R22L37L31L39R5R45L11R45L9L4L2R22L31R38R1R22L26R13R33R44R21L15L1R15R45L41R18L24L32R48L27L8R14R1L7R32L50R38R14R18L42L36R3R29L40L24L3R12R1L30R2L28L34R49R5R3R25R1R28L10R33L48L36L27R5L22R21R1R20L33R50L17R10L43L30R8L42R17L14R7L22R20L29R12L37L30R13L3R1L1R28L28R29L48R6L8L9L50R39R13L45L8L45L6L20R33L24R5L7L47R6L27
diff --git a/day22/part1.rb b/day22/part1.rb
new file mode 100644
index 0000000..2aab75b
--- /dev/null
+++ b/day22/part1.rb
@@ -0,0 +1,84 @@
+def consume(path)
+ case path[0]
+ when ?L
+ [?L, path[1..-1]]
+ when ?R
+ [?R, path[1..-1]]
+ when /\d/
+ act = path.chars.take_while { |ch| ch =~ /\d/ }.join
+ l = act.length
+ [act.to_i, path[l..-1]]
+ end
+end
+
+input = $stdin.readlines.map(&:rstrip)
+map = input[0..-3]
+path = input[-1]
+
+r = 0
+c = input[0].index(?.)
+d = ?R
+
+until path.empty?
+ action, path = consume(path)
+ case action
+ when ?L
+ d = case d
+ when ?U; ?L
+ when ?R; ?U
+ when ?D; ?R
+ when ?L; ?D
+ end
+ when ?R
+ d = case d
+ when ?U; ?R
+ when ?R; ?D
+ when ?D; ?L
+ when ?L; ?U
+ end
+ else
+ action.times do
+ case d
+ when ?U
+ nr = r - 1
+ if nr < 0 || map[nr][c] == ?\s || map[nr][c].nil?
+ nr = map.length - 1
+ nr -= 1 until map[nr][c] == ?. || map[nr][c] == ?#
+ end
+ break if map[nr][c] == ?#
+ r = nr
+ when ?R
+ nc = c + 1
+ if nc >= map[r].length || map[r][nc] == ?\s || map[r][nc].nil?
+ nc = 0
+ nc += 1 until map[r][nc] == ?. || map[r][nc] == ?#
+ end
+ break if map[r][nc] == ?#
+ c = nc
+ when ?D
+ nr = r + 1
+ if nr >= map.length || map[nr][c] == ?\s || map[nr][c].nil?
+ nr = 0
+ nr += 1 until map[nr][c] == ?. || map[nr][c] == ?#
+ end
+ break if map[nr][c] == ?#
+ r = nr
+ when ?L
+ nc = c - 1
+ if nc < 0 || map[r][nc] == ?\s || map[r][nc].nil?
+ nc = map[r].length - 1
+ nc -= 1 until map[r][nc] == ?. || map[r][nc] == ?#
+ end
+ break if map[r][nc] == ?#
+ c = nc
+ end
+ end
+ end
+end
+
+puts 1000 * (r+1) + 4 * (c + 1) + case d
+ when ?R; 0
+ when ?D; 1
+ when ?L; 2
+ when ?U; 3
+ end
diff --git a/day22/test b/day22/test
new file mode 100644
index 0000000..8bc2e1e
--- /dev/null
+++ b/day22/test
@@ -0,0 +1,14 @@
+ ...#
+ .#..
+ #...
+ ....
+...#.......#
+........#...
+..#....#....
+..........#.
+ ...#....
+ .....#..
+ .#......
+ ......#.
+
+10R5L5R10L4R5L5