こんにちわ、みけです。
なんか、ツイッターの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でなんか書くのも面倒だったしで、たんなるじゃんけんの結果判定部分だけ。
参考
何も作ったことない若者がじゃんけん作ったはなし - よこなのへたのよこずき
まじめにじゃんけん書いてみた https://t.co/oStz9coQLc
— Yuichi Sakuraba (@skrb) 2014, 12月 26
ソースが汚くてイヤなので、じゃんけんプロジェクト作った https://t.co/OgtCgAdpyl
— Yuichi Sakuraba (@skrb) 2014, 12月 26
じゃんけんロジック短く書くとこうなる https://t.co/O3Oc90I5BK
— Toshiaki Maki (@making) 2014, 12月 26
僕が考えた最強でもない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すごい