Hacker News new | ask | show | jobs
by rak1507 1412 days ago
Challenge Accepted!

Here is the core: using UDLR unlike the article

    snake←{d←9 11○0J1\*'DRUL'⍳⍺ ⋄ n←(⍴⍵)|(⊣/c)+-⍣(d≡p)⊢d⊣p←-⍨/c←(⍴⍵)⊤2↑⍒,⍵ ⋄ b←(1+⌈/,⍵)@(⊂n)⊢⍵ ⋄ ¯1=n⌷⍵:1-⍨@(⊂(?∘≢⊃⊣)⍸0=⍵)⊢b ⋄ 1-⍨@(0∘<)⊢b}
Here's a rudimentary display function that displays a list of moves:

    ∇display moves
    colours←↑(0 255 0)(0 0 0)(0 0 255)(255 0 0)                               ⍝ green black blue red
    'b'⎕WC'Bitmap'('Bits'(0 0⍴0))('CMap'colours)                              ⍝ create bitmap
    'f'⎕WC'Form' 'Snake demo'('Size' 500 500)('Coord' 'pixel')('Picture'b)    ⍝ create form with b as the background
    s←1 ¯1@(⍉↓10 10⊤2?100)⊢10 10⍴0                                            ⍝ start position
    b.Bits←50/50⌿(¯1 0 1,⌈/,s)⍸s                                              ⍝ display snake
    :For move :In moves                                                       ⍝ loop over moves
        s←move snake s                                                        ⍝ update using 'snake' function
        b.Bits←50/50⌿(¯1 0 1,⌈/,s)⍸s                                          ⍝ update bitmap
        ⎕DL÷50                                                                ⍝ delay by 1/50 s
    :EndFor
    ∇

Here's a video of the result: https://twitter.com/rak_1507/status/1557869849631670274?s=20