なつかしい数あてゲームを勉強で作ってみた

2019-01-23Groovy

きっかけ

プログラムの勉強を始めた頃に作った勉強用の数あてゲームをGroovyで作ってみた。
何度プログラムを組んでも、簡単に書けるのはやっぱりすごいなぁ、Groovy。
通常版と、プログラムロジックで勝手に回答を求める版を作ってみた。

※海外では 「Large or Small」 っていうんでしたっけ?

■通常版

kazuate.groovy

def ans = (int)(Math.random() * 1000)

def resCount = 10

println "※※※数あてゲーム※※"
for (i in 1..resCount) {
    println "===あと ${11-i} 回解答できます=="
    print "0~999の数値を入力してください:"

    def inputNum = System.in.newReader().readLine().toInteger()

    if (ans == inputNum) {
        println "正解です"
        System.exit(0)
    } else {
        if (ans > inputNum) {
            println "    ${inputNum} より大きな数値です"
        } else {
            println "    ${inputNum} より小さな数値です"
        }
    }
    println ""
}

println "正解は ${ans} です"

コマンドラインから実行

$ groovy kazuate.groovy

■勝手に回答を求める版 kazuateSimulator.groovy

def ans = (int)(Math.random() * 1000)

def resCount = 10
def range = 1..999

println "※※※数あてゲーム※※"
for (i in 1..resCount) {
    println "===あと ${i} 回解答できます=="
    print "0~999の数値を入力してください:"

    def inputNum = range[(int)(range.size()/2)]
    println inputNum

    if (ans == inputNum) {
        println "正解です"
        System.exit(0)
    } else {
        if (ans > inputNum) {
            println "    ${inputNum} より大きな数値です"
            range = range.findAll { it > inputNum }
        } else {
            println "    ${inputNum} より小さな数値です"
            range = range.findAll { it < inputNum }
        }
    }
    println ""
}

println "正解は ${ans} です"

コマンドラインから実行

$ groovy kazuateSimulator.groovy

ひとこと

作ってみてわかったけど、これって10回以内で必ず解ける仕組みになっているんだね。

2019-01-23Groovy