koguro #7007(2008/08/06 12:50 GMT) [ Scheme ] Rating2/2=1.00
Lispといえば AI (Artificial Intelligence) ですが、今回はコンピュータの前にいる NI (Natural Intelligence) を使って解いてみました。ただ、信頼性がいまいち低いため、一部コンピュータにより補助を行い、精度を高めています。
実行例:
% gosh countup13fri.scm (... 略 ...) December 2013 Su Mo Tu We Th Fr Sa 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 この月に13日の金曜日は含まれますか? 含まれる場合は y, 疲れたときは g, それ以外のときはリターンキーを押してください: y 2009/2/13 2009/3/13 2009/11/13 2010/8/13 2011/5/13 2012/1/13 2012/4/13 2012/7/13 2013/9/13 2013/12/13 ==> 10
※実行には外部コマンドの cal が必要です。
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
#!/usr/bin/env gosh (use gauche.process) (let* ((now (sys-localtime (sys-time))) (lst '())) (do ((y #0=(+ 1900 (ref now 'year)) (+ y 1))) ((<= 2014 y) (dolist (elem (reverse lst)) (apply format #t "~d/~d/13~%" elem)) (format #t "==> ~d~%" (length lst))) (do ((m 0 (+ m 1))) ((<= 12 m)) (unless (and (= #0# y) (or (< m #1=(ref now 'mon)) (and (= #1# m) (< 13 (ref now 'mday))))) (let ((l (process-output->string-list `(cal ,(+ m 1) ,y)))) (let loop ((ans (find #/8 9 10 11 12 13 14/ l))) (for-each print l) (print "この月に13日の金曜日は含まれますか?\n含まれる場合は y, 疲れたときは g, それ以外のときはリターンキーを押してください: ") (case (string->symbol (read-line)) ((y Y) (if ans (push! lst (list y (+ m 1))) #2=(begin (print "\n*** 本当ですか? もう一度よく確認してみてください ***\n") (loop ans)))) ((g G) (error "out of patience, aborting ...")) (else (when ans #2#)))))))))
Rating2/2=1.00-0+
[ reply ]
koguro #7007() [ Scheme ] Rating2/2=1.00
Lispといえば AI (Artificial Intelligence) ですが、今回はコンピュータの前にいる NI (Natural Intelligence) を使って解いてみました。ただ、信頼性がいまいち低いため、一部コンピュータにより補助を行い、精度を高めています。
実行例:
※実行には外部コマンドの cal が必要です。
Rating2/2=1.00-0+
[ reply ]