Comment detail

アルファベットの繰り上がり (Nested Flatten)
1から100まで数えつつそれをその都度文字列に直す方法と、文字列表現を直接インクリメントしてく方法があると思うけど、後者をやってみた。インクリメントは右から左への走査になるんで、reverseしてmap-accumしてreverse、っていうのがちょっとまどろっこしいかなあ。
 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
(use gauche.sequence)

(define (succ s)
  (receive (s c)
      (map-accum (lambda (d c)
                   (if (> (+ d c) 25) (values 0 1) (values (+ d c) 0)))
                 1 (reverse (map (lambda (c) (- (char->integer c) 65)) s)))
    (map-to <string> (lambda (d) (integer->char (+ d 65)))
            (reverse (if (zero? c) s (append s '(0)))))))

(let loop ((i 0) (s "A") (r '()))
  (if (= i 100)
    (print (string-join (reverse r) ", "))
    (loop (+ i 1) (succ s) (cons s r))))
あ、succの中のd2cはいらないな。消し忘れ。
修正しておきました

Index

Feed

Other

Link

Pathtraq

loading...