Comment detail

逆順になるあみだくじ (Nested Flatten)
自分なりに頑張ってみました。
 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
(use srfi-1)
(use util.list)

(define (bblsort ls)
  (define (bbl e ls)
    (cond ((null? ls) (list e))
          ((> (car ls) e) (cons (car ls) (bbl e (cdr ls))))
          (else (cons e (bbl (car ls) (cdr ls))))))
  (let loop ((ls ls) (acc '()))
    (cond ((null? ls) (reverse! acc))
          (else (loop (cdr ls) (bbl (car ls) acc))))))

(define (amida n)
  (define (row n i)
    (let ((s (list->string (intersperse #\space (make-list n #\|)))))
      (when i (string-set! s (+ (* i 2) 1) #\_))
      s))
  (define sorted-list
    (let loop ((ls (iota n)) (sorted '()))
      (cond ((null? ls) (reverse! sorted))
            (else (loop (cdr ls) (cons (bblsort ls) sorted))))))

  (dolist (x (car sorted-list)) (display x) (display #\space))
  (display #\newline)
  (do ((ls (cdr sorted-list) (cdr ls))
       (i 1 (+ i 1)))
      ((null? ls))
    (do ((ls (car ls) (cdr ls))
         (len (length ls) (- len 1)))
        ((zero? len))
      (print (row (length sorted-list) (- (car ls) i)))))
  (print (row (length sorted-list) #f))
  (dolist (x (reverse (car sorted-list))) (display x) (display #\space))
  )

(amida 7)

Index

Feed

Other

Link

Pathtraq

loading...