🎩

ピーターの問題を解く

2020/09/27に公開

Gauche で解きます。

  • 順列は permutations で得る
  • Gauche の割り算 / は割り切れないときは分数になってくれる
(use util.combinations)
(use util.match)

(define (peter)
  (define (frac a b c)
    (/ a (+ (* 10 b) c)))

  (dolist (p (permutations (iota 9 1)))
    (match p
      ((a b c d e f g h i)
       (let ((x (frac a b c))
             (y (frac d e f))
             (z (frac g h i)))
         (when (and (= (+ x y z) 1)
                    (<= x y z))
           (apply format #t "~a/~a~a + ~a/~a~a + ~a/~a~a = 1~%" p)))))))

実行結果です。

gosh> (peter)
7/68 + 5/34 + 9/12 = 1
#<undef>

Discussion