🎩
ピーターの問題を解く
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