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+/0=100|+/\*/"_1(1 50),(1&-@('R-L'&i.@{.),".@}.)@>"_1<;._2 input
NB. 3The basic premise is:
L/R) from
the numeric valueL into _1 and R into
1Split 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 82Convert direction letters to signs (R →
1, L → _1):
(1&-@('R-L'&i.@{.))@>"_1<;._2 input
_1 _1 1 _1 1 _1 _1 _1 1 _1This 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 _1Combine 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 82Add 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 82Multiply 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 _82Running 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 _168Mod 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 32Find 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+/+/(0=100&|@([+*@-~*>:@i.@-~)/)"_1(2 1$1 2),;._3+/\*/"_1(1 50),(1&-@('R-L'&i.@{.),".@}.)@>"_1<;._2 input
NB. 6For part 2, we need to:
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 _168Pair 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 _168Generate 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 _4Breaking down the tacit form [ + *@-~ * >:@i.@-~:
-~ computes y - x (the
difference/count)*@-~ is the signum of the difference (1 or
_1) — the step directioni.@-~ generates i.(y-x) — the index
sequence>:@i.@-~ increments each: 1 + i.(y-x) —
shifts from 0-based to 1-based offset*@-~ * >:@i.@-~ multiplies step by the offset
sequence[ + ... adds x to get the final rangeApply 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 0Find 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 0Sum 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