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

2022-05-20Groovy

きっかけ

プログラムの勉強を始めた頃に作った勉強用の数あてゲームを Groovy で作ってみました。

通常版と、プログラムロジックで勝手に回答を求める版を作ってみました。

( 何度も思いますが、プログラムを簡単に書けるのはやっぱりすごい、Groovy。 )

【追記】

後日、Bashシェルスクリプトでも作ってみました。

通常版

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 回以内で必ず解ける仕組みになっているんですね。

2022-05-20Groovy