[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}
- exercise 2019/04, Otto Diesenbacher-Reinmüller, 2020/04/18
- Re: exercise 2019/04,
Kacper Gutowski <=