scheme(gauche)で世界のナベアツ問題
3がつく数と3の倍数の時だけアホになる(片仮名になる)それ以外は普通に数字を表示
peercastの大会で課題だったので、っていうか就活の課題やれ俺www
(use srfi-1) (use srfi-13) (define (unpack x y) (if (= x 0) y (unpack (quotient x 10) (append (list (modulo x 10)) y)))) (define (3baisu? x) (= (modulo x 3) 0)) (define (3gatuku? x) (any (lambda (i) (= i 3)) (unpack x '()))) (define (senkurai x) "セン") (define (hyakukurai x) (ref '( "" "ヒャク" "ニヒャク" "サンビャク" "ヨンヒャク" "ゴヒャク" "ロッピャク" "ナナヒャク" "ハッピャク" "キュウヒャク") x)) (define (jukurai x) (ref '( "" "ジュウ" "ニジュウ" "サンジュウ" "ヨンジュウ" "ゴジュウ" "ロクジュウ" "ナナジュウ" "ハチジュウ" "キュウジュウ") x)) (define (ichikurai x) (ref '( "" "イチ" "ニ" "サン" "ヨン" "ゴ" "ロク" "ナナ" "ハチ" "キュウ") x)) (define func `(() ,ichikurai ,jukurai ,hyakukurai ,senkurai)) (define (tokatakana x) (let loop ((lis (unpack x '())) (kana "")) (if (= (length lis) 0) kana (loop (cdr lis) (string-append kana ((ref func (length lis)) (car lis))))))) (for-each print (map (lambda (x) (if (or (3baisu? x) (3gatuku? x)) (string-append (tokatakana x) "!") x)) (iota 1000 1 1)))
出力の最後のほう
950 キュウヒャクゴジュウイチ! 952 キュウヒャクゴジュウサン! キュウヒャクゴジュウヨン! 955 956 キュウヒャクゴジュウナナ! 958 959 キュウヒャクロクジュウ! 961 962 キュウヒャクロクジュウサン! 964 965 キュウヒャクロクジュウロク! 967 968 キュウヒャクロクジュウキュウ! 970 971 キュウヒャクナナジュウニ! キュウヒャクナナジュウサン! 974 キュウヒャクナナジュウゴ! 976 977 キュウヒャクナナジュウハチ! 979 980 キュウヒャクハチジュウイチ! 982 キュウヒャクハチジュウサン! キュウヒャクハチジュウヨン! 985 986 キュウヒャクハチジュウナナ! 988 989 キュウヒャクキュウジュウ! 991 992 キュウヒャクキュウジュウサン! 994 995 キュウヒャクキュウジュウロク! 997 998 キュウヒャクキュウジュウキュウ! 1000