adventofcode

git clone https://git.ce9e.org/adventofcode.git

commit
ee2b0b6598ed8ab2200e5afbd853ea978fe9f3da
parent
c056f4c1ed14a1751e8021a6e8cfd7a14af92c94
Author
Tobias Bengfort <tobias.bengfort@posteo.de>
Date
2022-12-22 07:59
wip

Diffstat

A 2022/22/input.txt 202 ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
A 2022/22/solution.rs 127 ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
A 2022/22/test.txt 14 ++++++++++++++

3 files changed, 343 insertions, 0 deletions


diff --git a/2022/22/input.txt b/2022/22/input.txt

@@ -0,0 +1,202 @@
   -1     1                                                   .............#.................................#...#.......................##..............#.....#..
   -1     2                                                   .#..#......#..............#...............#..#....#..#.............#................................
   -1     3                                                   ..........#...#......#...........................................#.......#.#............#...........
   -1     4                                                   .............#............#...#.#..........#..#...#..........#.........#......#............#......#.
   -1     5                                                   ....................#................#.............................................#................
   -1     6                                                   ....#.##..#....................#...............#..........#...............#........#.............##.
   -1     7                                                   ...#..#.........................................................#...............#...................
   -1     8                                                   ........................................#...........................#.............#.................
   -1     9                                                   ...#.............##..................#......#.....##..#.#................#............#.............
   -1    10                                                   #..............#.........................................###..............#......#.........#....#...
   -1    11                                                   .....##...#..#..#....#.....#................#.#......#......##........#......#..#.......#...........
   -1    12                                                   .......#........#.............#............#....#....#............................##................
   -1    13                                                   ..........#...........#........................#.................#..#.#..#.....#.......##..........#
   -1    14                                                   .#...#.....................#...........................##....#.................#....................
   -1    15                                                   .#.....#.#..##............................#..............#.............#............#...............
   -1    16                                                   .........#.#.................#..................#.......#......#.....................#..............
   -1    17                                                   ....#.##.....................#.......................#.................#.............#...#.........#
   -1    18                                                   ........#...........#......#..............#........#.#..#.....................................#....#
   -1    19                                                   ..#................#....#.....#......#...........#...................##..#.................#........
   -1    20                                                   ..........#.....#................#.#.#...................#...#.........................#.......#.#..
   -1    21                                                   .....#..................#........#..#................#......................#.....#.#...............
   -1    22                                                   ..........................#..............................#..........................................
   -1    23                                                   ........#..............#..#....#.##........##..#.....#........................#.......#.............
   -1    24                                                   .................#....#.........#..........#.##.#...............#..............#.#.......#...#......
   -1    25                                                   .....#..............#............................#......#..................#..............#.........
   -1    26                                                   ..............#...#.#...#........#....................#.....##..#......#........................#...
   -1    27                                                   ..................#...........#.............#........#.#.....................#.....#....##..........
   -1    28                                                   ...........##..........#..................................#.............##.#.................#......
   -1    29                                                   ...#......................#.....#.............#........###..#..................#........#...........
   -1    30                                                   .#...........#............#........#................................#...........#.........#......#.#
   -1    31                                                   ..#....................#.##.##.#...#..........#..#......#............#................#.........##..
   -1    32                                                   ...##.#.....#......##.......#.#....#......................#......#...#..#............#...........#..
   -1    33                                                   ...............#...#.............##........#.........#..........#...................................
   -1    34                                                   #................###.....#......#.............#...#...........#.#...................................
   -1    35                                                   ..........#..........#....#.#.............#....#..........#......................#......#.....#.....
   -1    36                                                   ...#..#..........................#.#...#..............................................##............
   -1    37                                                   ..#..................#............##............#.....#...#.....#..........#....#........#.........#
   -1    38                                                   ......#...............#.....#............................#.....#........................#.........#.
   -1    39                                                   #..#........#.................#......................#..#.................#.#....#.....#.#..#....##.
   -1    40                                                   .#..#...............#.................#.#...#........#.........#................................#...
   -1    41                                                   #......#.#..........................................................................................
   -1    42                                                   ..........#.....#.....#...........................#..#.......#...##......#......#.#.......##........
   -1    43                                                   ....................##.......###.........#...#...........#.................#......#...#.....#.......
   -1    44                                                   ..............#........#.......#...................#..........................#..........#....#..#..
   -1    45                                                   .........##...#........#.###...#...........#...............#..................#......#.#.#.#.#......
   -1    46                                                   ....#.....................................................................#.........................
   -1    47                                                   ....................#..........#..#...#..#............#..........#....##....#...#...................
   -1    48                                                   .........#.........#......................#....##...........#.......#................#....#..#......
   -1    49                                                   ..........#...................#.......#.##..........#..........#....................................
   -1    50                                                   #...........#....#.......#............#.......#...#..#.....#..........#.#..................#........
   -1    51                                                   .#..............#..#...#....#.......##....#.......
   -1    52                                                   .#..#......................#..................#.##
   -1    53                                                   ..#.......................................#.#.....
   -1    54                                                   .#..........#........................#............
   -1    55                                                   .#........#.................................#.....
   -1    56                                                   #......#..#........#..#...........................
   -1    57                                                   .......#.....#......#..........#..#..............#
   -1    58                                                   ........#....#................#........##....#....
   -1    59                                                   .............#......#.............#.........#.....
   -1    60                                                   .................................#......#.........
   -1    61                                                   ....#.........#.....#.........#.#.................
   -1    62                                                   .......#.###.....##.#.#..........................#
   -1    63                                                   ............#..........#.........#......##..#..#..
   -1    64                                                   ...............................#......#.#.........
   -1    65                                                   ....#........#..#...#.................#...........
   -1    66                                                   #...##...#.........#..............##...#..........
   -1    67                                                   .......#..#.............#....#..#..#.....#.....#..
   -1    68                                                   #............................#....#..#.....#......
   -1    69                                                   ............##...........#......#.................
   -1    70                                                   ........#..............#........#.................
   -1    71                                                   ...........#..........#............#.#..#........#
   -1    72                                                   .................#..#.............................
   -1    73                                                   ..........#.........................#....#........
   -1    74                                                   ......#........................#............#.....
   -1    75                                                   .......#...#.............#.#........###...........
   -1    76                                                   ................#.#.....#.#......#.....#..#.#.....
   -1    77                                                   ........#.............#......#.............#...#..
   -1    78                                                   ...#.#....#.............##.#...........#.......#..
   -1    79                                                   .##..........#.......#...#...#...###..........#...
   -1    80                                                   ...#......#.........#....#.....##.................
   -1    81                                                   ..........#......#........#..#.#.......#..........
   -1    82                                                   .................#........#.....#.................
   -1    83                                                   ...#..........##......#..........#..#...#......#..
   -1    84                                                   .............#....#..#.#......#...............##..
   -1    85                                                   ....#...#......#....#....#.#..#...................
   -1    86                                                   ...#.............#...................#............
   -1    87                                                   .....#................##..#....#.......#.......#.#
   -1    88                                                   ........#.........#....#........#.................
   -1    89                                                   ..................#..........................#....
   -1    90                                                   .....................................#............
   -1    91                                                   ..........#.....#..........................#.....#
   -1    92                                                   ..#.........##...#...#..#.........................
   -1    93                                                   .............#.......#................#...........
   -1    94                                                   ..........#..................................#.#..
   -1    95                                                   ...#........#....................#.#.....#........
   -1    96                                                   ..................#...........#..............#....
   -1    97                                                   ....#......#......#...#...#...#...................
   -1    98                                                   ......................................#...#.......
   -1    99                                                   .....#.....#...........#......#...................
   -1   100                                                   ..........#...................#..............#..##
   -1   101 .....#..#............##.......##...#................#........................#.........#...#........
   -1   102 ........................................#..............................##...............#...........
   -1   103 .....##.#..........#.#..........#...#........#..................##...#................#.............
   -1   104 .......................................##......#......#......#....................#............#....
   -1   105 ................#.......#........##.......#............#..........................#.............#...
   -1   106 .................................#.#.....#............#....................#.#....#..#....##.##..#..
   -1   107 .................#..#.......#.....#................#......................#.............#.......##..
   -1   108 ........#.........#..........................#....#.#..#.......#...#................#......#..#.....
   -1   109 ............#.#.....#............##.#...............#...........................#........#..........
   -1   110 .............................#..##..............#................................##..#..............
   -1   111 .................#.#...#..........#.....#...........................................................
   -1   112 ..............#.....#.................#..#....#.............##.........#...................#......#.
   -1   113 .#.#...........#......................#..................#...........#....#..#....#...#......#......
   -1   114 .#.#........................#......#....#......#...........................#..#.#..#.........#......
   -1   115 .....#............#...#...........#..............................#..........#.....................#.
   -1   116 ....#.##.....#.....................#........#.................#........#.....##..#.........#..#...##
   -1   117 ..................#...##..........................................#.#...............................
   -1   118 .....#....#.......................#.#.........................#..###..........#.......#.......##....
   -1   119 ##.........#................###...#..#......#.....#.................................................
   -1   120 .........#..........###....#.....#..#...#.#..................#.............#..#......##..#.......#..
   -1   121 .#.......#............#.........#.............#...#..........#.......#..#...............#...........
   -1   122 ...#....#......#....#..........#.#..#.#.#............#..........#..............#......#.............
   -1   123 ...........#....#.....#.#......................#..#.........#.........#....#........................
   -1   124 ...............##....#...............#..........#..#..#....................#.##..................#.#
   -1   125 ........##..#..................#..........#.............#.................#..#.................#....
   -1   126 .#....................#...................................#..#....##..#.#..............#............
   -1   127 ...#..#.....#...#....#.........................#.....................#.#..#........#..........#.....
   -1   128 ........##....#....#..............................#......#...........#................#.............
   -1   129 ................#....................#................#.#...........#...........#..#.....#..#.....#.
   -1   130 ...#..#.#.........#.#...#............#..#...............#..............................#........#...
   -1   131 .##.......##...............#.......#.......#...#.......#.#....#.....................#.#......#.##...
   -1   132 .....#........#.#.............##......#.........................................................#...
   -1   133 ##...........................................#.......#..#........##..................#..............
   -1   134 ..#.#...............#..................#..........#........#...........................#............
   -1   135 ..............#....#.#...........#...........#.......#.............#........#..#.#.................#
   -1   136 .......................#..........#.......#............................#............#.......#.#....#
   -1   137 #........................#...##..#.................#.#......................#......#.#.........#....
   -1   138 ............#......#.##........#.....#........#.............#...........#...#......#..........#.....
   -1   139 .......#..#....#........#..............#.......#.#.....#..#................#..#.....#...............
   -1   140 ....#.................#.....................#......#........##......#...............................
   -1   141 .............#.......#.#.........##.#..............##................#......#................#..#.#.
   -1   142 .....#.......................#...................................................#...............#..
   -1   143 #.......#...............#.......#.........................#...........#.#...#.......##..............
   -1   144 #.......................#..#........#............##............#..#..##..........#......#.#.....#...
   -1   145 .#....#....#.##.#......##.#..#.#.##..#.#..............#........................#...#................
   -1   146 ....#...#......#.#.............................##..........#......#...#..#............#.............
   -1   147 .....................#..#.#.......#............................#.#.............#...#...#...#.....#..
   -1   148 ...............................###..........................#.......#..#...............##...........
   -1   149 ..............#..#......#....................#................#...#...........##.............#......
   -1   150 ......#.......#...#.....#..#..................#...#...#.........#.....#.............#.........#..#..
   -1   151 ...#.......................#..#.....##............
   -1   152 ......................#..#....#..#................
   -1   153 ....#............#....#....#.#....................
   -1   154 ..............#............#..................#...
   -1   155 ....#.#.......#..................................#
   -1   156 ..#.....#..........#.........#..................#.
   -1   157 ............#...............#...........#.........
   -1   158 ...#......#..........#..#..##.............#.......
   -1   159 ....#.....#................#......#....##.........
   -1   160 ....#.#.........#...............................#.
   -1   161 ...........................#........#.............
   -1   162 ...#.................................#............
   -1   163 ...........................##..#..................
   -1   164 .....#...#......#.........#............#........#.
   -1   165 ............#.......................#..........#..
   -1   166 #.#.........#.................#.....##.#.......#..
   -1   167 #...........#....#.....#.......#...#..............
   -1   168 .......#...#....#........................#.#......
   -1   169 .#......................#....#...#...#............
   -1   170 ..........#..........#..#..........#..........#.#.
   -1   171 ............................#..............#..#...
   -1   172 .......#.......#..................................
   -1   173 ...#.........................#.........#........##
   -1   174 .#...#......#....#..#.....#....##............#....
   -1   175 ..#....#.....#............##........#.........#...
   -1   176 ............#............#....................##..
   -1   177 ................#.........#.................#.....
   -1   178 ......................#..#..#.......#.............
   -1   179 ....##..#...................#..................#..
   -1   180 .............#.......#..........#.........#......#
   -1   181 ....#...#......#....#..#......#...................
   -1   182 ............#..............#...........#..........
   -1   183 .#............#..............#....................
   -1   184 .....###........................#.................
   -1   185 ...............#..................................
   -1   186 ....#.......#.....................................
   -1   187 .................#..............#......#..........
   -1   188 .........#...........#.....#.....#.......#.#..##..
   -1   189 ....#.#............#....#..#.......#........#..#..
   -1   190 ..#...#.................#........#.##.......#.....
   -1   191 ..............#..................##...#...........
   -1   192 .......#..................#.#..........#..........
   -1   193 ...........................#.....................#
   -1   194 ......#.................#.........................
   -1   195 ....#.....................#.....#......#......#...
   -1   196 ..................#.#.....#....#.............#....
   -1   197 ..........#..................#.#..................
   -1   198 ......#....#....................#................#
   -1   199 #.#..................#............................
   -1   200 .............................................#....
   -1   201 
   -1   202 24R38L36R1R28L11R39L5R36R41L31R9L16R4R36L38R31L38R17L18R31R6L40L2L19R41R27R24L33R21L27R7R11R27R11R2L46L34R3L23R29L45L13L25L37R46L21L20L22L4R31R36R10R13R39R27L27R20L12R49R21R44R50L5L9R13L11R26R44L48R44L24R44R46L49R20R13R27R4L25L5L39R10L29L12R3R39L11R49L13R45L2R3L50L12L33R22L20L2R37L32R32L1L41L26R1R10R25R49L48L24R48L27R43L28R7L30L15R46R32L11R7L2R24R32R16R16R10R28R11R19R5L45R4L20R49R24R44L31L46L29L32R2L48L33R36R44L41R37L17L35R40R14R48L45L16R42R30L22R28L17L2R24R22L37R3R6R32L4R1R42L33R44L9R22R19L16L17R17R37L45R46R1R34R45L10R22R12R28L42R31L27L33R24R29R24L40L41L26R9R23R11R20R13R28R20R16L17L14R48L34L12R16L12L30R42R15R19R20R15L39L8R33L31R35L12R29L37R42R4L41L30R15L12L6R27L10R23R17L10L23R35L48R47L46L12L27L22L46R50L37R45L37R21L8L2L18R46L3R23R18R32R37L27R43L39L23L40L27L22L22R30L30R35R38L40L50R8R9L20R29L27R9R2R16R32L4R49L44L13R17L47L29R46R22L27L7L37L17L7R2R3R24L47R50L17L17R31L23R19L6L42L42L43L5R42R36R47R13L7L42R22L2L5R31R49R43R35L19L29R11R3R29R34L41R45L28L39L14R31L4R23L35R40R32R39L36L6R13R37R23R21L14R37L35R12R50L35L5R25L45L8L8R14L24R25L29L20R3L36L16R22R2R19L23L8L3R43L22R27L31L48R21R2R7L27R36L5L15L5R8R41L46R28L26R45R42R9L38R35R38R22R18R13L40L11L5L44L27L28L23L37R8L40L13R35R48R18R29R7L9L10L45L12L45R21L28L36R49R18R40L41L8R2L40R9R10R42L23R19R12L27L33R42L30L25R12R5R36L14L14L4L24L39R14R37L1R16L28L44L12L45R21R7R5R1L7R48L38R1L49R15L26L12R36L7R46L24L28R39R7R33L49R34R37L34R40R18R44R26R48L31L50R48R33R15L48L2R36L46L12R38R10R20R48R38R25L9L23R39R28R50L47L47L49L39L46L8R15L19R27L48R48L25R46R27R1R15R15R46R41L50R25R38R33L41L18L43L35L43R18L29R8R7R35L43L46R32L17R31R39R30L32L20L10L34R25R11R10L49R31R45R1L18R30L15L48L21R8R22L35L49L7L6R23L4R31R42L7L20R41L24L40L46R2L45L40L26R41R10R34L25L20R10L34R44R2L16L8R30L2R47R31R47L32L41R33R3R39L30L24L47R12R23L40L9L22L28R30R24L25L22R47L18L21R41L40L9R23R32L16R6R36L17R45L38L10L30L11L31R28R6R8R43L8L45L45L10R21R26R32L9R6L13R29L25R16R24L5R34R18L28L16L21R8R9L33L13L47R29L17L45L12R38R46L43R42R26L41R5R34R1R48R38L29L2R48L32R16R48R14L8L13L32R4L49R46L45L40L30R23R44L24L6L3L29R29R7R19L14R10L44L22L4R27R27R46L8R46R46R18L32L30L14R50R42L38L3R32R20L50R44R40R39R18R18R12L8L31R17L10R31L45R14L15R49L31R37L20R17L43L43R18R10R38L30R13L35L22L30R3L46R7R14L23L1R6L27R25R17L7L23L39L45R45L40R7L21L7R36R32R4R49L20R38R35R44R35R26R50R46L24R2L6L46L9L43L27L34L38R36L23L6R12L28L50L8L50R20R31R24L14R13R21R43R17L17L42L43L29R1L26R43L46L47R20L36R34R49R11R21L33L42L35R37L32R8L17L43L10L27R41L29R12R28L44L9R47R12L25L43L18L7R4L5L9L13L25L37R14R11L3R6L17L1L41R10L33L44R50R43R6R38R48R2L15L31R40L40L42L14R23L14R9R47L44R12R26L21L17L20R46L30L29R3L14L6L47L27L18L16L9L23R4L1R34R35R10R23R37L2L8L25L26L34R17L5L3R25R20L50L4L46L10R5L17R23R30R15L39R44L8L19R43R19L15R14L25R19R50R33R15R9L46L47R34L5R38R42L22R43L46R47R24R11L40R14R47R5L28L1R1L45L20L25R40L44L21L49L17R45L34L3L2R13L30L37R35L36L33R18R34R14L25R14L25L3R13R12R50R16L20R8R49L23L4L3R29L16L19R34L8R15L5L38R38L8R7L18R44L29R19R21R25R23L42R49R6R19R48R37R32L2L14R22L24R28R50R5R10L45L24L12L48R16R47L26R1L38L48L12R6L35L31L3R13L26R7L1R19L47R15R29R2L16L24L7L49R26L44R12L30L25L32R43R48R12R9R4L43L32L22R22L6L18R44R42R39R11L26R37R42R12L11R10R14R44R4L47L3R25R4R50L36R3L4R36R5R38L35R4R37L35R23R43L47L33L1L2R19R14L33R26L1R27R45L32L29R5L28R10R50L1R14L4L31R47R2R27R39R18R50R50L45L15L17R21R40L19L15R14L9R44L45R28L17L19L41R35R27L6R43R16L34R4R28R12R45L33L44R40R36R36L23L25R35R24R1R30R1R50L23L18R36L33R15R2L10L5R41R10R39L15L33R19L37R12R33L6L20R48R24R38R13L29L32L41L27R27R15L18L22L1L7L18L33L33L4R22R12L35R38R40L43L40R45R7R50R4L29R26R7R42L34R2R39L28L41R33L35L40L31L4L40L25L30R44L45L40R22R13R50R4R5R36L21L29R24R10L6L45R15L40L26L10L10R18L22L29L46L6R33R31L44L42L28R49R29R39R45L18L20L34L38L16L1R50L21R25L15R16R22R33R43R34L32L23R33L26R6R16R31R1R30L35L28R4R1R19R25R40R8L46R1R45L28L16R25R44L44R37R26R11R7L7L33L2L8L31R46L31R33L45R31L19L4L30R8L16R20R24L43R41L6L20L43R15L30R35R45L18L35R23R5R25L35R21R48L13R3L18R34L27L13R47R18R10L4R28R37R8R28L16R43L4L8R19L34R9R40L47L32L10L38L34L25R34L27L26L34L32L45R29L12L36R14L42L39L25R15L23R45L36R32L7L22L42L46R40L17R30L33L33R12L48R19R24R36L38R41R22L24R4R15R7L30R2R5L11R22L25R25R9R45R4R10L22L15L6L41L33R5R21R16R21R21L23R40R21L29R43R35L9L50R1L25L40L41L12R22L33L47L15R21R3R47R2R16L8L20R43L48L13L46L38L45R20R37L21R7L5L8R4L35L17R23R34R19L22R25L9L37R39R21R22L30L38R48R17L18L21L31R9L3R20L14R25L4L33L10R16L26L10R31R37R17R36L18R27R31R24L36L38R46R23R24L5R39R11L19L39L25R10R32R2R43L7L5L12R50L25R13R27R19R26L12L40R3R13R30L48R7L37L1R41L14L13L14L13R14R48R16L41R48L24R6R50R29R24L44R19L12R50R5L40R7R22R27L24L18R14R37L9R36R12L36R20L41R14R43R12L41L34R45R23L5L27L9L14L43L29L8R23R13L50L2R36R1L31L48L12R9R45L26R28L1L29L29L8R29L7L39L24R23L46L1L9L6L22R46L10L32L50L16R38R46L9R15R40R12R41R25L47R29L34L37L49L35R12L25L12L22R9L46L27R43L11L3R15L33L49R24L33L34R21R20R11L16L22L50L26L15L6L39R12R30R30L7R29L45R23R34R7L2R50R33L21L39R15R8R24R50R34R7R50R44L17L16R24R47L26L17R35R32R15L13L13R25R12L42R33L42R6R47L50R1L8R8R48L41R33L27R29R8R3R35L3L14L15L19L13L46R42L5L11R25R25R41L30L1R14R40R47R41L48R13R4L21R16L50R37L20R15R6R33L27L13R11L27R50R7R46R3R35R38L19R41L5R6L22L18L8R2L33R1R20R5R27L23L23R14R1R50L3L41R22L14R35R43R46R30R32L34R14R43R39R39L26R16L42R50L12L36R50R28L35L1L40L35R41L6L26L34L21R49R42R35R40L4L15R46R13L30R35R22L48R17L43R13R21L49L8R42R38L23R44R38R12R31L28R50R25R2R12L32R7R17R8R36L31L28L22R12L25R14R27L44R7R11L11L17L48R6L8L40L22L1R39L39L5R8L29L22L44R41R5L38L21R2R34L44L1R6R9L3L11L1R16L30L14L44R10L48L35L2R45L23L19L31R1L41R19R10R7R12R6L15R2R22L34L14L33R19R43R16R12R36R18R22L17R3R7R9R7R15L48L8L35R46R20L30L2L48L29L8L23L2L7R33L27L15L31R39R19L44L34R28L9R43L13L12L33L18L49R29R18R20R46L20R37R15R9R13R37L20L41L14R17R46L4R26L34L1L29L17R46R4R11R35R26L31L10L14R39R17R46L29R30R50R9R43R48R14R46L33R34R44L21R42R3L28L40R29L36R11R5L26R4R21R3L14

diff --git a/2022/22/solution.rs b/2022/22/solution.rs

@@ -0,0 +1,127 @@
   -1     1 use std::collections::HashSet;
   -1     2 
   -1     3 #[path = "../lib.rs"] mod lib;
   -1     4 
   -1     5 fn get_input() -> (HashSet<(usize, usize)>, Vec<(usize, usize)>, Vec<(usize, bool)>) {
   -1     6     let mut walls = HashSet::new();
   -1     7     let mut offsets = vec![];
   -1     8     let mut path = vec![];
   -1     9     let mut map = true;
   -1    10 
   -1    11     for (y, line) in lib::iter_input().enumerate() {
   -1    12         let mut offset = 0;
   -1    13         if line == "" {
   -1    14             map = false;
   -1    15         } else if map {
   -1    16             for (x, c) in line.chars().enumerate() {
   -1    17                 match c {
   -1    18                     ' ' => {
   -1    19                         offset = x;
   -1    20                     },
   -1    21                     '#' => {
   -1    22                         walls.insert((x, y));
   -1    23                     }
   -1    24                     '.' => {},
   -1    25                     _ => unreachable!(),
   -1    26                 };
   -1    27             }
   -1    28             offsets.push((offset, line.len()));
   -1    29         } else {
   -1    30             let mut s = String::new();
   -1    31             for c in line.chars() {
   -1    32                 if c == 'R' || c == 'L' {
   -1    33                     path.push((s.parse::<usize>().unwrap(), c == 'R'));
   -1    34                     s = String::new();
   -1    35                 } else {
   -1    36                     s += &c.to_string();
   -1    37                 }
   -1    38             }
   -1    39             path.push((s.parse::<usize>().unwrap(), true));
   -1    40             path.push((0, false));
   -1    41         }
   -1    42     }
   -1    43 
   -1    44     return (walls, offsets, path);
   -1    45 }
   -1    46 
   -1    47 fn main() {
   -1    48     let (walls, offsets, path) = get_input();
   -1    49     println!("walls: {:?}", walls);
   -1    50     println!("offsets: {:?}", offsets);
   -1    51     println!("path: {:?}", path);
   -1    52 
   -1    53     let mut y = 0;
   -1    54     let mut x = offsets[y].0;
   -1    55     let mut dir = 0;
   -1    56 
   -1    57     while walls.contains(&(x, y)) {
   -1    58         x += 1;
   -1    59     }
   -1    60 
   -1    61     for (steps, turn) in path.iter() {
   -1    62         for _ in 0..*steps {
   -1    63             let mut x2 = x;
   -1    64             let mut y2 = y;
   -1    65 
   -1    66             match dir {
   -1    67                 0 => {
   -1    68                     let (offset, len) = offsets[y];
   -1    69                     if x2 + 1 < len {
   -1    70                         x2 += 1;
   -1    71                     } else {
   -1    72                         x2 = offset;
   -1    73                     }
   -1    74                 },
   -1    75                 1 => {
   -1    76                     let offset = offsets.iter().enumerate().find(|(_, (offset, len))| x >= *offset && x < *len).map(|(i, _)| i).unwrap();
   -1    77                     let len = offsets.iter().enumerate().rfind(|(_, (offset, len))| x >= *offset && x < *len).map(|(i, _)| i).unwrap() + 1;
   -1    78                     println!("  {} {}", offset, len);
   -1    79 
   -1    80                     if y2 + 1 < len {
   -1    81                         y2 += 1;
   -1    82                     } else {
   -1    83                         y2 = offset;
   -1    84                     }
   -1    85                 },
   -1    86                 2 => {
   -1    87                     let (offset, len) = offsets[y];
   -1    88                     if x2 > offset {
   -1    89                         x2 -= 1;
   -1    90                     } else {
   -1    91                         x2 = len - 1;
   -1    92                     }
   -1    93                 },
   -1    94                 3 => {
   -1    95                     let offset = offsets.iter().enumerate().find(|(_, (offset, len))| x >= *offset && x < *len).map(|(i, _)| i).unwrap();
   -1    96                     let len = offsets.iter().enumerate().rfind(|(_, (offset, len))| x >= *offset && x < *len).map(|(i, _)| i).unwrap() + 1;
   -1    97                     println!("  {} {}", offset, len);
   -1    98 
   -1    99                     if y2 > offset {
   -1   100                         y2 -= 1;
   -1   101                     } else {
   -1   102                         y2 = len - 1;
   -1   103                     }
   -1   104                 },
   -1   105                 _ => unreachable!(),
   -1   106             }
   -1   107 
   -1   108             if walls.contains(&(x2, y2)) {
   -1   109                 break;
   -1   110             } else {
   -1   111                 x = x2;
   -1   112                 y = y2;
   -1   113             }
   -1   114         }
   -1   115 
   -1   116         if *turn {
   -1   117             dir = (dir + 1) % 4;
   -1   118         } else {
   -1   119             dir = (dir + 3) % 4;
   -1   120         }
   -1   121 
   -1   122         println!("{},{}", x, y);
   -1   123     }
   -1   124 
   -1   125     println!("{},{} {}", x, y, dir);
   -1   126     println!("part1: {}", 1000 * y + 4 * x + dir);
   -1   127 }

diff --git a/2022/22/test.txt b/2022/22/test.txt

@@ -0,0 +1,14 @@
   -1     1         ...#
   -1     2         .#..
   -1     3         #...
   -1     4         ....
   -1     5 ...#.......#
   -1     6 ........#...
   -1     7 ..#....#....
   -1     8 ..........#.
   -1     9         ...#....
   -1    10         .....#..
   -1    11         .#......
   -1    12         ......#.
   -1    13 
   -1    14 10R5L5R10L4R5L5