Skip to content

Instantly share code, notes, and snippets.

@0racle
Last active November 25, 2022 05:44
Show Gist options
  • Save 0racle/42708c4d9c872105b619273aff1130dd to your computer and use it in GitHub Desktop.
Save 0racle/42708c4d9c872105b619273aff1130dd to your computer and use it in GitHub Desktop.
AoC 2016 Day 2 in J
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
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment