(defn rot90
"Rotate rows 90 degrees clockwise."
[rows]
(mapv reverse (apply map list rows)))
(defn add-row
"Adds new row, values starting at bottom left value + 1."
[rows]
(let [n (-> rows last first dec)
width (-> rows first count)
row (take width (iterate dec n))]
(defn solve
[n]
(let [seed [[(* n n)]]
idx (* 2 (dec n))
step (comp add-row rot90)]
(-> (iterate step seed) (nth idx) rot90 rot90)))
(println (solve 5))
KGRlZm4gcm90OTAKICAiUm90YXRlIHJvd3MgOTAgZGVncmVlcyBjbG9ja3dpc2UuIgogIFtyb3dzXQogIChtYXB2IHJldmVyc2UgKGFwcGx5IG1hcCBsaXN0IHJvd3MpKSkKCihkZWZuIGFkZC1yb3cKICAiQWRkcyBuZXcgcm93LCB2YWx1ZXMgc3RhcnRpbmcgYXQgYm90dG9tIGxlZnQgdmFsdWUgKyAxLiIKICBbcm93c10KICAobGV0IFtuICgtPiByb3dzIGxhc3QgZmlyc3QgZGVjKQogICAgICAgIHdpZHRoICgtPiByb3dzIGZpcnN0IGNvdW50KQogICAgICAgIHJvdyAodGFrZSB3aWR0aCAoaXRlcmF0ZSBkZWMgbikpXQogICAgKGNvbmogcm93cyByb3cpKSkKCihkZWZuIHNvbHZlCiAgW25dCiAgKGxldCBbc2VlZCBbWygqIG4gbildXQogICAgICAgIGlkeCAoKiAyIChkZWMgbikpCiAgICAgICAgc3RlcCAoY29tcCBhZGQtcm93IHJvdDkwKV0KICAgICgtPiAoaXRlcmF0ZSBzdGVwIHNlZWQpIChudGggaWR4KSByb3Q5MCByb3Q5MCkpKQoKKHByaW50bG4gKHNvbHZlIDUpKQ==