A gapless spiral centered on a 2x2 block, as opposed to a gapped spiral >>13 centered on a single cell.
scheme@(guile-user)> (display ((lambda (rec xjoin extract index pad chars n) ((lambda (xjoin lines columns cycle) ((lambda (symbol) (xjoin lines (lambda (k) (string-append (xjoin columns (lambda (j) (symbol k j)) pad) "\n")) "")) (lambda (k j) (extract chars (modulo (index n k j) cycle) 1)))) (lambda (n fun sep) (rec xjoin n fun sep "")) (* 2 n) (* 2 n) (string-length chars))) (lambda (f . args) (apply f (cons f args))) (lambda (self n fun sep acc) (if (<= n 0) "" (if (= n 1) (string-append (fun 0) acc) (self self (- n 1) fun sep (string-append sep (fun (- n 1)) acc))))) (lambda (str pos len) (substring str pos (+ pos len))) ((lambda (ring inside inring) (lambda (n k j) ((lambda (k j) ((lambda (ring) (+ (inside ring) (inring ring k j))) (ring k j))) (- n 1 k) (- j n)))) (lambda (k j) (quotient (+ (max (abs (+ (* 2 k) 1)) (abs (+ (* 2 j) 1))) 1) 2)) (lambda (ring) (if (< ring 2) 0 (* 4 (- ring 1) (- ring 1)))) (lambda (ring k j) (if (= k (- ring)) (+ (* 7 ring) -4 j) (if (= j (- ring)) (- (* 5 ring) 4 k) (if (= k (- ring 1)) (- (* 3 ring) 3 j) (+ ring -1 k)))))) " " "①②③④⑤⑥⑦⑧⑨" 5))
① ⑨ ⑧ ⑦ ⑥ ⑤ ④ ③ ② ①
② ⑤ ④ ③ ② ① ⑨ ⑧ ⑦ ⑨
③ ⑥ ⑧ ⑦ ⑥ ⑤ ④ ③ ⑥ ⑧
④ ⑦ ⑨ ① ⑨ ⑧ ⑦ ② ⑤ ⑦
⑤ ⑧ ① ② ② ① ⑥ ① ④ ⑥
⑥ ⑨ ② ③ ③ ④ ⑤ ⑨ ③ ⑤
⑦ ① ③ ④ ⑤ ⑥ ⑦ ⑧ ② ④
⑧ ② ④ ⑤ ⑥ ⑦ ⑧ ⑨ ① ③
⑨ ③ ④ ⑤ ⑥ ⑦ ⑧ ⑨ ① ②
① ② ③ ④ ⑤ ⑥ ⑦ ⑧ ⑨ ①
scheme@(guile-user)>
The flower garden >>122 is centered on a single cactus when the unit is a character, but when a flower patch is the unit it is centered on a 2x2 block.