zacca blog

スポンサーサイト

上記の広告は1ヶ月以上更新のないブログに表示されています。
新しい記事を書く事で広告が消せます。

Scalaで「悪いなのび太、このゲームN人用なんだ。」

Scalaの勉強がてら、スネ夫の「悪いなのび太、このゲーム3人用なんだ」を実行するプログラムつくってみた。
ソース(ExceptNobita.scala)
勉強のポイントは
  • パターンマッチ
  • パターンガード
  • ケースクラス
  • 再帰関数
  • シングルトンオブジェクト
って感じかなぁ。

case class Kid(name:String)
class FunnyGame {
    var member = List[Kid]()
    def attend(kid:Kid) = {
        member = kid :: member
    }
}
object Suneo extends Kid("Suneo") {
    val game = new FunnyGame
    def attend(kids:List[Kid]) = {
        val list = tailingNobita(kids)
        list.foreach {
            kid => kid match {
                case Suneo =>
                    game.attend(Suneo)
                    println(Suneo.name+":僕はもちろん参加ね。")
                case kid if kid != Kid("Nobita") =>
                    game.attend(kid)
                    println(Suneo.name+":大歓迎だよ"+kid.name+"!")
                case kid =>
                    println(Suneo.name+":悪いな"+kid.name+"、このゲーム"
                    +game.member.length+"人用なんだ。")
            }
        }
    }
    def tailingNobita(kids:List[Kid]):List[Kid] = kids match {
        case kid :: kids if kid == Kid("Nobita")
            => tailingNobita(kids) ++ List(kid)
        case kid :: kids
            => kid :: tailingNobita(kids)
        case Nil => Nil
    }
}
object ExceptNobita {
    def main(args:Array[String]) {
        val kidNames = List[String]() ++ args
        val kids = Suneo :: getKids(kidNames)
        Suneo.attend(kids)
    }
    def getKids(names:List[String]):List[Kid] = names match {
        case kid :: kids => Kid(kid) :: getKids(kids)
        case Nil => Nil
    }
}

 動作はこんな感じ。

$ scala ExceptNobita Nobita Gian Shizuka
Suneo:僕はもちろん参加ね。
Suneo:大歓迎だよGian!
Suneo:大歓迎だよShizuka!
悪いなNobita、このゲーム3人用なんだ。

のび太をのけものにします。

$ scala ExceptNobita Shizuka Nobita Gian
Suneo:僕はもちろん参加ね。
Suneo:大歓迎だよShizuka!
Suneo:大歓迎だよGian!
悪いなNobita、このゲーム3人用なんだ。

引数の順番を変えても一緒。

$ scala ExceptNobita Shizuka Dekisugi Gian Sunetsugu Sunekichi
Suneo:僕はもちろん参加ね。
Suneo:大歓迎だよShizuka!
Suneo:大歓迎だよDekisugi!
Suneo:大歓迎だよGian!
Suneo:大歓迎だよSunetsugu!
Suneo:大歓迎だよSunekichi!

人数増えてもOK。

$ scala ExceptNobita Shizuka Dekisugi Nobita Gian Sunetsugu Sunekichi
Suneo:僕はもちろん参加ね。
Suneo:大歓迎だよShizuka!
Suneo:大歓迎だよDekisugi!
Suneo:大歓迎だよGian!
Suneo:大歓迎だよSunetsugu!
Suneo:大歓迎だよSunekichi!
悪いなNobita、このゲーム6人用なんだ。

それでものび太が入ればのけものにします。

コメント


管理者にだけ表示を許可する
 

すげぇなぁ
のび太かわいそすわろたwww

くま | URL | 2011年02月14日(Mon)09:52 [EDIT]


こんな変な例でもこのプログラミング言語の特徴的な部分の練習になるのですよ(・∀・)
オブジェクト指向も関数型も両方やっているよ一応!

トム | URL | 2011年02月25日(Fri)06:58 [EDIT]


 
上記広告は1ヶ月以上更新のないブログに表示されています。新しい記事を書くことで広告を消せます。