|
DC←{ ⍝ diamond kata with checks
z←⍺⍺ ⍵
n←≢⍵ ⍝ number of input letters
assert (⍴z)≡0 0⌈¯1+2×n : ⍝ square matrix, size 0⌈¯1+2×n
assert z≡⌽z : ⍝ symmetric in vertical axis
assert z≡⊖z : ⍝ symmetric in horizontal axis
assert ⍵≡0 0⍉q←(n,-n)↑z : ⍝ diagonal of upper right quadrant
assert (q='-')∨∘.=⍨⍳n : ⍝ off-diagonal elements are '-'
z
}
(dia 'ABCD') ≡ dia DC 'ABCD'
1
┌────────┬───────┬───────┬───────┬───────┐
│---AA---│---A---│---A---│---A---│---A---│
│--B--B--│--B-B--│--B-B--│--B-B--│--B-B--│
│-C----C-│-C---C-│-C---C-│-C---C-│-C---C-│
│D------D│D-----D│D-----D│A-----A│D--⍟--D│
│-C----C-│-C---C-│-C---C-│-C---C-│-C---C-│
│--B--B--│--A-B--│--A-A--│--B-B--│--B-B--│
│---AA---│---A---│---A---│---A---│---A---│
└────────┴───────┴───────┴───────┴───────┘
|