Advent of Code 2025 - Day 1

Solutions

input =: 0 : 0
L68
L30
R48
L5
R60
L55
L1
L99
R14
L82
)


NB. part 1
+/0=100|+/\*/"_1(1 50),(1&-@('R-L'&i.@{.),".@}.)@>"_1<;._2 input
NB. 3

NB. part 2
+/+/(0=100&|@([+*@-~*>:@i.@-~)/)"_1(2 1$1 2),;._3+/\*/"_1(1 50),(1&-@('R-L'&i.@{.),".@}.)@>"_1<;._2 input
NB. 6

Part 1

+/0=100|+/\*/"_1(1 50),(1&-@('R-L'&i.@{.),".@}.)@>"_1<;._2 input
NB. 3

How It Works

The basic premise is:

Step-by-Step Breakdown

Split input into lines using ;._2 (cut on trailing delimiter):

   <;._2 input
┌───┬───┬───┬──┬───┬───┬──┬───┬───┬───┐
│L68│L30│R48│L5│R60│L55│L1│L99│R14│L82│
└───┴───┴───┴──┴───┴───┴──┴───┴───┴───┘

Extract the numeric values from each entry (take the tail }. and parse as number ".):

   (".@}.)@>"_1<;._2 input
68 30 48 5 60 55 1 99 14 82

Convert direction letters to signs (R1, L_1):

   (1&-@('R-L'&i.@{.))@>"_1<;._2 input
_1 _1 1 _1 1 _1 _1 _1 1 _1

This works by finding the letter’s position in 'R-L':

   'R-L' i. 'RLRRLL'
0 2 0 0 2 2

   1-'R-L' i. 'RLRRLL'
1 _1 1 1 _1 _1

Combine direction and value into pairs:

   (1&-@('R-L'&i.@{.),".@}.)@>"_1<;._2 input
_1 68
_1 30
 1 48
_1  5
 1 60
_1 55
_1  1
_1 99
 1 14
_1 82

Add the starting position (1 50):

   (1 50),(1&-@('R-L'&i.@{.),".@}.)@>"_1<;._2 input
 1 50
_1 68
_1 30
 1 48
_1  5
 1 60
_1 55
_1  1
_1 99
 1 14
_1 82

Multiply each row to get signed movements:

   */"_1(1 50),(1&-@('R-L'&i.@{.),".@}.)@>"_1<;._2 input
50 _68 _30 48 _5 60 _55 _1 _99 14 _82

Running sum +/\ gives position after each turn:

   +/\*/"_1(1 50),(1&-@('R-L'&i.@{.),".@}.)@>"_1<;._2 input
50 _18 _48 0 _5 55 0 _1 _100 _86 _168

Mod 100 to normalize positions (multiples of 100 become 0):

   100|+/\*/"_1(1 50),(1&-@('R-L'&i.@{.),".@}.)@>"_1<;._2 input
50 82 52 0 95 55 0 99 0 14 32

Find zeros and count them:

   0=100|+/\*/"_1(1 50),(1&-@('R-L'&i.@{.),".@}.)@>"_1<;._2 input
0 0 0 1 0 0 1 0 1 0 0

   +/0=100|+/\*/"_1(1 50),(1&-@('R-L'&i.@{.),".@}.)@>"_1<;._2 input
3

Part 2

+/+/(0=100&|@([+*@-~*>:@i.@-~)/)"_1(2 1$1 2),;._3+/\*/"_1(1 50),(1&-@('R-L'&i.@{.),".@}.)@>"_1<;._2 input
NB. 6

How It Works

For part 2, we need to:

Step-by-Step Breakdown

Start with the running positions (same as part 1):

   +/\*/"_1(1 50),(1&-@('R-L'&i.@{.),".@}.)@>"_1<;._2 input
50 _18 _48 0 _5 55 0 _1 _100 _86 _168

Pair consecutive positions using ;._3 (sliding window of size 2 1$1 2):

   (2 1$1 2),;._3+/\*/"_1(1 50),(1&-@('R-L'&i.@{.),".@}.)@>"_1<;._2 input
  50  _18
 _18  _48
 _48    0
   0   _5
  _5   55
  55    0
   0   _1
  _1 _100
_100  _86
 _86 _168

Generate ranges between each pair using a custom range verb:

range =: [+*@-~*>:@i.@-~

This verb generates all integers between its arguments:

   3 range 6
4 5 6

   10 range 4
4 5 6 7 8 9

   _3 range 4
_2 _1 0 1 2 3 4

   _3 range _10
_10 _9 _8 _7 _6 _5 _4

Breaking down the tacit form [ + *@-~ * >:@i.@-~:

Apply the range function to each pair (boxed for display):

   ,. (<@([+*@-~*>:@i.@-~)/)"_1(2 1$1 2),;._3+/\*/"_1(1 50),(1&-@('R-L'&i.@{.),".@}.)@>"_1<;._2 input
┌─────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────┐
_18 _17 _16 _15 _14 _13 _12 _11 _10 _9 _8 _7 _6 _5 _4 _3 _2 _1 0 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
├─────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────┤
_48 _47 _46 _45 _44 _43 _42 _41 _40 _39 _38 _37 _36 _35 _34 _33 _32 _31 _30 _29 _28 _27 _26 _25 _24 _23 _22 _21 _20 _19
├─────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────┤
_47 _46 _45 _44 _43 _42 _41 _40 _39 _38 _37 _36 _35 _34 _33 _32 _31 _30 _29 _28 _27 _26 _25 _24 _23 _22 _21 _20 _19 _18 _17 _16 _15 _14 _13 _12 _11 _10 _9 _8 _7 _6 _5 _4 _3 _2 _1 0
├─────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────┤
_5 _4 _3 _2 _1
├─────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────┤
_4 _3 _2 _1 0 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
├─────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────┤
0 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
├─────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────┤
_1
├─────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────┤
_100 _99 _98 _97 _96 _95 _94 _93 _92 _91 _90 _89 _88 _87 _86 _85 _84 _83 _82 _81 _80 _79 _78 _77 _76 _75 _74 _73 _72 _71 _70 _69 _68 _67 _66 _65 _64 _63 _62 _61 _60 _59 _58 _57 _56 _55 _54 _53 _52 _51 _50 _49 _48 _47 _46 _45 _44 _43 _42 _41 _40 _39 _38 _37 _36 ...
├─────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────┤
_99 _98 _97 _96 _95 _94 _93 _92 _91 _90 _89 _88 _87 _86
├─────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────┤
_168 _167 _166 _165 _164 _163 _162 _161 _160 _159 _158 _157 _156 _155 _154 _153 _152 _151 _150 _149 _148 _147 _146 _145 _144 _143 _142 _141 _140 _139 _138 _137 _136 _135 _134 _133 _132 _131 _130 _129 _128 _127 _126 _125 _124 _123 _122 _121 _120 _119 _118 _117 ...
└─────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────┘

Apply mod 100 to all range values (padded 0’s at end are from array alignment):

   ,.( 100&|@([+*@-~*>:@i.@-~)/)"_1(2 1$1 2),;._3+/\*/"_1(1 50),(1&-@('R-L'&i.@{.),".@}.)@>"_1<;._2 input
82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99  0  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  0  0  0  0  0  0  0  0  0  0  0  0  0  0  0  0  0  0  0  0  0  0  0  0  0  0  0  0  0  0  0
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  0  0  0  0  0  0  0  0  0  0  0  0  0  0  0  0  0  0  0  0  0  0  0  0  0  0  0  0  0  0  0  0  0  0  0  0  0  0  0  0  0  0  0  0  0  0  0  0  0  0  0  0  0  0  0  0  0  0  0  0  0  0  0  0  0  0  0  0  0
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  0  0  0  0  0  0  0  0  0  0  0  0  0  0  0  0  0  0  0  0  0  0  0  0  0  0  0  0  0  0  0  0  0  0  0  0  0  0  0  0  0  0  0  0  0  0  0  0  0  0  0  0
95 96 97 98 99  0  0  0  0  0  0  0  0  0  0  0  0  0  0  0  0  0  0  0  0  0  0  0  0  0  0  0  0  0  0  0  0  0  0  0  0  0  0  0  0  0  0  0  0  0  0  0  0  0  0  0  0  0  0  0  0  0  0  0  0  0  0  0  0  0  0  0  0  0  0  0  0  0  0  0  0  0  0  0  0  0  0  0  0  0  0  0  0  0  0  0  0  0  0
96 97 98 99  0  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  0  0  0  0  0  0  0  0  0  0  0  0  0  0  0  0  0  0  0  0  0  0  0  0  0  0  0  0  0  0  0  0  0  0  0  0  0  0  0
 0  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  0  0  0  0  0  0  0  0  0  0  0  0  0  0  0  0  0  0  0  0  0  0  0  0  0  0  0  0  0  0  0  0  0  0  0  0  0  0  0  0  0  0  0  0
99  0  0  0  0  0  0  0  0  0  0  0  0  0  0  0  0  0  0  0  0  0  0  0  0  0  0  0  0  0  0  0  0  0  0  0  0  0  0  0  0  0  0  0  0  0  0  0  0  0  0  0  0  0  0  0  0  0  0  0  0  0  0  0  0  0  0  0  0  0  0  0  0  0  0  0  0  0  0  0  0  0  0  0  0  0  0  0  0  0  0  0  0  0  0  0  0  0  0
 0  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
 1  2  3  4  5  6  7  8  9 10 11 12 13 14  0  0  0  0  0  0  0  0  0  0  0  0  0  0  0  0  0  0  0  0  0  0  0  0  0  0  0  0  0  0  0  0  0  0  0  0  0  0  0  0  0  0  0  0  0  0  0  0  0  0  0  0  0  0  0  0  0  0  0  0  0  0  0  0  0  0  0  0  0  0  0  0  0  0  0  0  0  0  0  0  0  0  0  0  0
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  0  1  2  3  4  5  6  7  8  9 10 11 12 13  0  0  0  0  0  0  0  0  0  0  0  0  0  0  0  0  0

Find zeros in the ranges:

   (0=100&|@([+*@-~*>:@i.@-~)/)"_1(2 1$1 2),;._3+/\*/"_1(1 50),(1&-@('R-L'&i.@{.),".@}.)@>"_1<;._2 input
0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
0 0 0 0 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0

Sum each row, then sum all rows:

   +/(0=100&|@([+*@-~*>:@i.@-~)/)"_1(2 1$1 2),;._3+/\*/"_1(1 50),(1&-@('R-L'&i.@{.),".@}.)@>"_1<;._2 input
2 0 0 0 1 0 0 0 0 0 0 0 0 0 0 0 0 0 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0

   +/+/(0=100&|@([+*@-~*>:@i.@-~)/)"_1(2 1$1 2),;._3+/\*/"_1(1 50),(1&-@('R-L'&i.@{.),".@}.)@>"_1<;._2 input
6