Diamond Kata Index   <<   >>
 

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---│
└────────┴───────┴───────┴───────┴───────┘