とりとめのないことを書いております。
by tempurature
カテゴリ
全体
プログラミング
scheme
verilog
未分類
以前の記事
2016年 04月
2016年 03月
2016年 02月
2016年 01月
2015年 12月
2015年 11月
2015年 10月
2015年 09月
2015年 08月
2015年 07月
2015年 06月
2015年 03月
お気に入りブログ
PHPで競技プログラミング
メモ帳
最新のトラックバック
ライフログ
検索
タグ
その他のジャンル
ブログパーツ
最新の記事
情報処理技術者試験 お疲れ様..
at 2016-04-17 18:55
基本情報技術者試験 平成27..
at 2016-04-14 04:48
基本情報技術者試験 平成27..
at 2016-04-13 23:03
苦い薬(ハーブ、サプリメント..
at 2016-04-09 14:03
「おバカ度チェックリスト」を..
at 2016-03-24 09:54
外部リンク
ファン
記事ランキング
ブログジャンル
画像一覧
【racket】世界のナベアツのネタをプログラムで再現しました
「プログラミングGauche」という本を中古で購入しました。
今は絶版になっているようです。

その本の、68ページの練習問題に触発されて、世界のナベアツのネタをプログラムで再現してみました。

[ソースコード]

#lang racket

(define (hiragana-exp num)
  (cond ((<= num 10)
         (list-ref '("ぜろ" "いち" "に" "さん" "し" "ご"
                     "ろく" "なな" "はち" "きゅう" "じゅう") num))
        ((<= num 19) (string-append "じゅう" (hiragana-exp (- num 10))))
        ((and (<= num 99) (zero? (remainder num 10)))
         (string-append (hiragana-exp (quotient num 10)) "じゅう"))
        ((<= num 99) (string-append (hiragana-exp (* (quotient num 10) 10))
                                    (hiragana-exp (remainder num 10))))
        ((= num 100) "ひゃく")
        ((and (<= num 999) (zero? (remainder num 100)))
         (string-append (hiragana-exp (quotient num 100)) "ひゃく"))
        ((<= num 999) (string-append (hiragana-exp (* (quotient num 100) 100))
                                     (hiragana-exp (remainder num 100))))
        (#t "たくさん")))

(define hiragana-matrix
  '("あかさたなはまやらわん"
    "いきしちにひみ り  "
    "うくすつぬふむゆる  "
    "えけせてねへめ れ  "
    "おこそとのほもよろ  "))

(define (stressed-hiragana-exp num)
  (let* ((hexp (hiragana-exp num))
         (tail (~a (string-ref hexp (sub1 (string-length hexp))))))
    (string-append
      hexp
      (cond
        ((equal? tail "ん") "っ")
        ((regexp-match tail (list-ref hiragana-matrix 0)) "ぁ")
        ((regexp-match tail (list-ref hiragana-matrix 1)) "ぃ")
        ((regexp-match tail (list-ref hiragana-matrix 2)) "ぅ")
        ((regexp-match tail (list-ref hiragana-matrix 3)) "ぇ")
        ((regexp-match tail (list-ref hiragana-matrix 4)) "ぉ")
        (#t "っ")))))

(define (nabeatsu-function num)
  (or (= (remainder num 3) 0)
      (regexp-match "3" (~a num))))

(define (nabeatsu-print num)
  (if (nabeatsu-function num) (stressed-hiragana-exp num) (~a num)))

[出力例]

> (string-join (map nabeatsu-print (range 1 100)) " ")
"1 2 さんっ 4 5 ろくぅ 7 8 きゅうぅ 10 11 じゅうにぃ じゅうさんっ 14 じゅうごっ 16 17 じゅうはちぃ 19 20 にじゅういちぃ 22 にじゅうさんっ にじゅうしぃ 25 26 にじゅうななぁ 28 29 さんじゅうぅ さんじゅういちぃ さんじゅうにぃ さんじゅうさんっ さんじゅうしぃ さんじゅうごっ さんじゅうろくぅ さんじゅうななぁ さんじゅうはちぃ さんじゅうきゅうぅ 40 41 しじゅうにぃ しじゅうさんっ 44 しじゅうごっ 46 47 しじゅうはちぃ 49 50 ごじゅういちぃ 52 ごじゅうさんっ ごじゅうしぃ 55 56 ごじゅうななぁ 58 59 ろくじゅうぅ 61 62 ろくじゅうさんっ 64 65 ろくじゅうろくぅ 67 68 ろくじゅうきゅうぅ 70 71 ななじゅうにぃ ななじゅうさんっ 74 ななじゅうごっ 76 77 ななじゅうはちぃ 79 80 はちじゅういちぃ 82 はちじゅうさんっ はちじゅうしぃ 85 86 はちじゅうななぁ 88 89 きゅうじゅうぅ 91 92 きゅうじゅうさんっ 94 95 きゅうじゅうろくぅ 97 98 きゅうじゅうきゅうぅ"


[PR]
by tempurature | 2015-11-01 20:40 | scheme
<< GaucheをWindowsで使う 【racket】ソーシャルゲー... >>