mike-neckのブログ

Java or Groovy or Swift or Golang

なんかJavaの人たちでじゃんけんのプログラムが流行ってるので、便乗して書いてみた Groovy編

こんにちわ、みけです。

なんか、ツイッターJavaのある特定のクラスタの人たちがじゃんけんのコードを書いているので、僕も書いてみました。

enum 結果 {
    勝ち,負け,あいこ
}

enum 手 {
    グー,チョキ,パー

    def match(手 o) {
        this == o ? 結果.あいこ:this.next() == o ? 結果.勝ち:結果.負け
    }
}

手.values().collect {left ->
    手.values().collect {right ->
        [left:"手.${left}", right:"手.${right}", result:"結果.${left.match(right)}"]
    }
}.flatten().each {
    println "assert ${it.left}.match(${it.right}) == ${it.result}"
}

assert 手.グー.match(手.グー) == 結果.あいこ
assert 手.グー.match(手.チョキ) == 結果.勝ち
assert 手.グー.match(手.パー) == 結果.負け
assert 手.チョキ.match(手.グー) == 結果.負け
assert 手.チョキ.match(手.チョキ) == 結果.あいこ
assert 手.チョキ.match(手.パー) == 結果.勝ち
assert 手.パー.match(手.グー) == 結果.勝ち
assert 手.パー.match(手.チョキ) == 結果.負け
assert 手.パー.match(手.パー) == 結果.あいこ

とはいえ、僕はSystem.inとか使うの面倒だし、UI作るのにJavaFXでなんか書くのも面倒だったしで、たんなるじゃんけんの結果判定部分だけ。

参考

何も作ったことない若者がじゃんけん作ったはなし - よこなのへたのよこずき

僕が考えた最強でもないJavaじゃんけんプログラム(前編) - ひしだまの変更履歴

僕が考えた最強でもないJavaじゃんけんプログラム(後編) - ひしだまの変更履歴

結論

Groovyのenum便利です


【追記】

うえはらさんのGroovyじゃんけんのエントリー

Groovyじゃんけん作ってみた - uehaj's blog

を参考に、もう少し改良してみた

import static 手.*
import static 結果.*

enum 結果 {
    勝ち,負け,あいこ
}

enum 手 {
    グー,チョキ,パー

    def match(手 o) {
        this == o ? 結果.あいこ:this.next() == o ? 結果.勝ち:結果.負け
    }
}

def 自分(手 my){
    [相手: {手 other ->
        [で: {結果 result ->
            assert result == my.match(other)
        }]
    }]
}

自分 グー   相手 グー   で あいこ
自分 グー   相手 チョキ で 勝ち
自分 グー   相手 パー   で 負け
自分 チョキ 相手 グー   で 負け
自分 チョキ 相手 チョキ で あいこ
自分 チョキ 相手 パー   で 勝ち
自分 パー   相手 グー   で 勝ち
自分 パー   相手 チョキ で 負け
自分 パー   相手 パー   で あいこ

結論その2

やっぱりGroovyすごい