bug-apl
[Top][All Lists]
Advanced

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

Re: exercise 2019/04


From: Kacper Gutowski
Subject: Re: exercise 2019/04
Date: Sun, 19 Apr 2020 10:26:32 +0200

On Sat, Apr 18, 2020 at 09:54:13PM +0200, Otto Diesenbacher-Reinmüller wrote:
4: Knight Moves
(...)
*. Given a 2-element vector representing thecurrent square for a knight, return a vector of 2-element vectors representing (in any order) all the squares that the knight can moveto. Hint: The outer product operator ∘. could be useful for generating the coordinates.

 PM ← (∼a∊⊂⍬)/a←(,b ∘.{((|⍺)≠|⍵)/⍺,⍵} b←(¯2 2 ¯1 1)) ⍝ calculate possible moves 
from a square

I would shorten it a bit into something more like:
PM← (≠/¨|PM)/ PM←, ∘.,⍨ ¯2 2 ¯1 1

 z ← (∼{⍵[1]∨⍵[2]}¨{((⍵<1)∨⍵>8)}z)/z       ⍝ remove off-board moves

Selection of those locations that lie within the board could be more naturally written as (z∊⍳8 8)/z, but I understand you tried to avoid generating the whole board here, unlike in the second attempt.

But more importantly, there is a simple relation between the current location and valid moves--a relation elsewhere known as the equation of a circle.

-k


My solution would be:
{(5=+/¨(H-⊂⍵)⋆2)/H←,⍳8 8 ;H}



reply via email to

[Prev in Thread] Current Thread [Next in Thread]