NB. === Advent of Code [2016] ===
NB. --- Day 2: Bathroom Security ---
moves =. <@:+.@(0j1 ^ 'DRUL'&i.);._2 fread 'input'
Move =. {{
x&{{ p =: p + y * ((< p + y) { x ~: '.') }}"1 y
(< p) { x
}}
kb =. ];._2 {{)n
.....
.123.
.456.
.789.
.....
}}
p =: 2 2
echo kb&Move@> moves
kb =. ];._2 {{)n
.......
...1...
..234..
.56789.
..ABC..
...D...
.......
}}
p =: 3 1
echo kb&Move@> moves
Alternative solution that doesn't mutate a global var, but uses a for loop
NB. === Advent of Code [2016] ===
NB. --- Day 2: Bathroom Security ---
moves =. +.@(0j1 ^ 'DRUL'&i.);._2 fread 'input'
Move =. {{)a
ret =. EMPTY
for_elems. y do.
for_e. elems do.
x =. x+e * (u x+e)
end.
ret =. ret , x
end.
}}
Check =: ] {:: '.' ~: [
kb =. ];._2 {{)n
.....
.123.
.456.
.789.
.....
}}
echo kb {::~ (2 2) kb&Check Move moves
kb =. ];._2 {{)n
.......
...1...
..234..
.56789.
..ABC..
...D...
.......
}}
echo kb {::~ (3 1) kb&Check Move moves