From bbf76b12d7707ed1a049a033c1211612e5453d61 Mon Sep 17 00:00:00 2001 From: Clement Date: Fri, 6 Dec 2024 19:36:11 +0800 Subject: [PATCH] Solution 1 day 5 --- 2024/day-6/input | 130 +++++++++++++++++++++++++++++++++++++++ 2024/day-6/solution-1.sh | 56 +++++++++++++++++ 2024/day-6/test-input | 10 +++ 3 files changed, 196 insertions(+) create mode 100644 2024/day-6/input create mode 100644 2024/day-6/solution-1.sh create mode 100644 2024/day-6/test-input diff --git a/2024/day-6/input b/2024/day-6/input new file mode 100644 index 0000000..f4dd47a --- /dev/null +++ b/2024/day-6/input @@ -0,0 +1,130 @@ +.....#..#................#...#.....#.......................................................#.............................##....... +......................#..............................................................#..............#..........................#.. +.........#........................#.....................................................#..............#...........#........##.... +..........#......................#.....#...#............#..........................#.....#........................................ +#....................................................................................................................#............ +.#....#......................#.......................#...............................#...#.....#...................#........#..... +..#..#.......................##........#...............................................................#........#.........#....... +..............................................................#...#.........#..#.................................................. +.............####..................................#................#..#.....................................#.....#.............. +..........#................#................................................#........................#.....#...................... +..............................................#.........#.....................#..................#.......................#........ +.........................................##..#.................................#.....#............................................ +............#..#...#...............................#.#.....#...............#...............................#..............#.#.#..# +.................#..........#..#....#.....................#......................................##............#.................. +.......#....#.....................#......##...................#..............#.................#........#..#......#............... +...............................................#.............#.................................................................... +..............#..............................................##..................#..........................#............#........ +................#.......................#..#............................................................#..........#..#.........#. +.#.......................###............#.........#.................................................#............................. +........#......................................................................................#.....#.......#...#................ +#.#.........................#..#.............................................#....#........................#...................... +.......#.....#...............................#.....#......................#.................................#.....#...#........... +................................................................................................#............#.................... +.......#......#...............#...#............................#................................#................................# +.#.....................................................................................................................#......#... +...........#..........................................#........#...................#.............................................. +....#......................................................................................#.....##.#...................#......... +...#..........................................................................##.......................................#.....#.... +#........#................#...............#.........#..#.#..............##..............#........#............#....#.....#........ +......#......................................#...............#....#..#...........................#................................ +#..............................................................................#............#...#..#....................#......#.. +.......#.........................................#.........#.......#....................................#......................... +......#......#.............................................#.....................#...........#.............#..#................... +#.......................#........#............................................##..............................#................... +..........................................................................#........................................#....#......#.. +..........#..#...............................................#............................#.#..............................#...... +....#...........#..#...................................#................................................................#......... +..............#..........#...............#....#.....................................#.......................#..................... +.............#........#....#.........#...............#.........#.................................................................. +.#......#...................#.......#...........................................................................#.............#... +.............##...........#.........................................#......................#.......................#.............. +.....#................#.....#...................##.......#......#...........#.......#............................................# +.#..#.............................................................#..............................................#................ +...#......#............................#.......................................................................................... +...................................................................................#.............................................. +#...................................#...................##..................#...............................................#..... +................#.....#...........................#............................................................................... +.................................#............#........................................................#.............#............ +..................#......#........................................................#..^.....#...................................... +..#.....#.................................................#........#.........................................................#..#. +................#..............................#....................................................#............................. +................#....#..........................................#............................#.................................... +...............#.......................................#.....................................#..............................#..... +..................................................#............#..............#........##.#.....................................#. +.#..................................#......#..#............#.................#.............#......#..#.......................#.... +..................#..............................#..........................#..........................##............#.......#.... +.........#..................................................................#...................#..........................#...... +................#....................................#............#............................................................#.. +..##..........#.#..#........................#....#.................................#.............................................# +............................................#.........................................................#..#...................#...# +.......................................#......................................................................#................... +....#.......................#...#.........................................................................#................#...... +...........#...........#............#.....#...#...................#........................................#.................##... +....#...........................................................................................#................................. +..............................................................................#.#.............................................#... +.........#..#..............................................#...................................................................... +#...................#........#............#.......#.....................#................#.#.#............#..................#.... +.......................#................#.....#...........#.....................#...........................#..........#.........# +........................................................................#.#.....................#................................. +...#.................................................#..........................#........#.......................#................ +............................#...........#.......#.................................#.##...........#............................#... +...##.....................................#.........................#...........#...................................#............. +#.#..#................................#.........#..#.#..........#......................#............#......................#...... +....#.............................................................#............................................................... +...............#.#......#........................................................................#.........................#...... +................#.....#...#...............#.........................................#....#...........................#.......#.... +...............#.........................................................................#........................................ +..........................#..##................................................................................................... +.##....................#..#.....................#..............................................#........................#......... +............................................................................................#............#........................ +#...................#...#......................#...............#............#....................................#................ +...........................#........#......................................................................#...................... +................................#...#...#.#.......#.................#.......#................##................................... +........................#.......................#................................................................................. +#...#...............#.........................................................................#.......................#........... +.........#...................#...............................................#...................##..............................# +.....#............................................................................................................................ +.#.......#...............................................................#.......................#................#..........#.... +....................................#..........#......#...........................................................#.#.#..#...#.... +......................#..............................................##..................#........................................ +....#......#...................#................#..............................................................................#.. +...........#.................##.#...................................................#..#................#......................... +......#.....#......#...#........#.....................................#....#...........#................#..........#.............. +#.......##.....#........#...........................................#...#..........#.............#........#.......#............... +......................#......#...................#.........................#........................#..................#...#...... +.....#...........#...#.........................##.......#.....................................#................................... +....................................................................#............................................................. +........#...............#......................................................................................................... +.......................#.........................#..........................................#.#....#..#....#...................... +........................##............................................................#.....#.........#....#......#..#............ +........................#........#..................#................#.#.##............#.......................................... +.......................................................#.........................#...............##...................##....#...#. +........#...#.............#...........#........#......................#...#.........#..#..................#.#............#........ +#.#....................#..........................................#...................................................#........#.. +...............................................#............#.....#.#...........#........#.#....................................#. +......#..........................................#............................................................#..........#...#...# +....................#......................................#....#..............................#....................#............. +......................#.#.....#......#....#..#.................................................................................... +.....#..........................................#.........#...................................#................#.......#.......... +........##....................................................................#...................................#.............#. +#.........................................#..#....#................#.#.....#....................#............................#.... +#....#..#..........#..................#......................#.................................................................... +...................#..#....#...................#...........................#.#..#............#......#................#.......#.#.. +...............#......................................................#......#..#..............#.....................#............ +............#.....................#.........#....#...............#.......#...#...............#.......................##.#......... +....#............#..................#....#.......................#..............................................#...#............. +..........................................#....#..........#..#....................#......#......................#...#............. +............#..........#...........#......#..#......................................................................#............. +...#.................#.............................................................#.............................................. +.....#.#.........#....................................................#..................#...............#........................ +..#......................##.....#.........#..............#..#............#..#............................................#........ +...................#.....#.........#........#....................#..................................#................#............ +....#.............................#.............................#.......................#.......................#.....#........... +...#......#....#...........#............................#.....#........#......#................................................... +........#..........#............................#..#..#.......................................#....#.##........................... +.......#......##........#.................#.............................................................#....#........#........... +.....................#............................................#.#......#.....##....#........#................................. +...........#.....................##.#....#..#..................................................................................... +....................#......#................................#.....................................................#.......#..#.... +.....................................................#.........#.......................................#.....##..#................ diff --git a/2024/day-6/solution-1.sh b/2024/day-6/solution-1.sh new file mode 100644 index 0000000..b5feffc --- /dev/null +++ b/2024/day-6/solution-1.sh @@ -0,0 +1,56 @@ +#!/usr/bin/env bash + +ARRAY_SHAPE=10 # It's a square +FILENAME=test-input +read -r -a MAP_ARRAY <<< "$( paste -s -d '' "$FILENAME" | sed -E 's/(.)/\1\ /g' )" + +# Get initial position +POSITION=$(( ( $( grep -n '\^' "$FILENAME" | cut -f1 -d: ) -1 ) * ARRAY_SHAPE -1 + $( grep -o '.*\^' "$FILENAME" | wc -c ) -1 )) +MAP_ARRAY[POSITION]=X # Remove position after save + +# up = 0, right = 1, down = 2, left = 3, following 90 degree turn +TURNS=0 +while true +do + EXIT=1 + + # Get direction and travel + DIRECTION=$(( TURNS % 4 )) + if [[ $DIRECTION -eq 0 ]] # up + then + TRAVEL=-$ARRAY_SHAPE + LIMIT=$(( POSITION % ARRAY_SHAPE )) + elif [[ $DIRECTION -eq 1 ]] # right + then + TRAVEL=1 + LIMIT=$(( (POSITION / ARRAY_SHAPE + 1) * ARRAY_SHAPE )) # Never verified + elif [[ $DIRECTION -eq 2 ]] # down + then + TRAVEL=$ARRAY_SHAPE + LIMIT=$(( (POSITION % ARRAY_SHAPE) + (ARRAY_SHAPE * ARRAY_SHAPE) )) + elif [[ $DIRECTION -eq 3 ]] # left + then + TRAVEL=-1 + LIMIT=$(( (POSITION / ARRAY_SHAPE) * ARRAY_SHAPE )) # Never verified + fi + + while [[ ${MAP_ARRAY[$POSITION+$TRAVEL]} != '#' ]] + do + if [[ $POSITION -eq $LIMIT ]] # Walked out + then + EXIT=0 + break + fi + + MAP_ARRAY[POSITION]=X # Mark walking path + (( POSITION+=TRAVEL )) + done + + if [[ $EXIT -eq 0 ]] ; then break ; fi # Walked out + + (( TURNS++ )) +done + +# Count all coordinates +printf "%s" "${MAP_ARRAY[@]}" | tee travel-path | sed 's/[^X]//g' | wc -c +< travel-path fold -w $ARRAY_SHAPE diff --git a/2024/day-6/test-input b/2024/day-6/test-input new file mode 100644 index 0000000..a4eb402 --- /dev/null +++ b/2024/day-6/test-input @@ -0,0 +1,10 @@ +....#..... +.........# +.......... +..#....... +.......#.. +.......... +.#..^..... +........#. +#......... +......#...