Ruby勉強会の初級者レッスンのお題のジャンケンプログラムについて。 グーは0、チョキは1、パーは2とします。で、勝ちなら1、引き分けなら0、負けなら-1を返すメソッドを定義します。
man\com | 0 | 1 | 2 |
0 | 0 | 1 | -1 |
1 | -1 | 0 | 1 |
2 | 1 | -1 | 0 |
グループレッスンでいろんな人の書き方を眺めていたのを、いくつかのパターンで紹介します。
組み合わせを全部書くよバージョン。 でも、さすがに引き分けだけは == で判定している人が多かったかな。
def judge(man) com = rand(3) case [com, man] when [0, 0], [1, 1], [2, 2] return 0 when [1, 0], [2, 1], [0, 2] return 1 when [2, 0], [0, 1], [1, 2] return -1 end end
さっきの表を、つぎのように書きかえると...
man\com | 0 | 1 | 2 | 0 | 1 | 2 |
0 | 0 | 1 | -1 | 0 | 1 | -1 |
1 | -1 | 0 | 1 | -1 | 0 | 1 |
2 | 1 | -1 | 0 | 1 | -1 | 0 |
もしくは、こう書きかえる方がわかりやすいかな?
man\com | 1 | 2 | 0 |
0 | 1 | -1 | 0 |
1 | 0 | 1 | -1 |
2 | -1 | 0 | 1 |
お、引き算するとよさそうですね。何人かはこのアプローチだったみたい。
def judge(man) com = rand(3) case com - man when 0 return 0 when 1, -2 return 1 when 2, -1 return -1 end end
もうちょっと短くするには...余りを使うバージョン。 このアプローチの人もいました。
def judge(man) com = rand(3) case (com - man) % 3 when 0 return 0 when 1 return 1 when 2 return -1 end end
わかりにくてよければこう書くともっと短いバージョン。
def judge(man) com = rand(3) return (com + 1 - man) % 3 - 1 end
ジャンケンの本質とは何か、それは「1/3で勝ったり負けたり引き分けたりするゲームだ!」と見抜いたバージョン。
def judge(man) return rand(3) - 1 end
↑こう書いた人は私だけ? ちなみにコウザイさんに「夢が無い」と言われました。。。
ruby-1.8.xまでの「ふつうのruby」の他に、ruby-1.9にめでたくマージされたYARV、さらにはJavaや.NETで使えるrubyの実行環境までいろいろご紹介。 実行環境の役割とか仮想機械とは何かとかについてもさらっと紹介がありました。 すごく短くまとめると、YARV(を作ったささださん)ってば素敵〜♪ というお話でした。
Plaggerの簡単な紹介と、PlaggerのカスタマイズにRuby利用する方法のお話でした。 デモは、Plaggerの出力をRuby/SDLで表示させて、しかもそれThinkPadの傾き検知センサを使ってパソコンを傾けることでスクロールさせる、というものでした。 いやぁ、やっぱりKMC(京大マイコンクラブ)の人って面白いなぁ。
質問タイムで、Praggerについて尋ねてみたところ、ちゃっかりスライドが用意してあって、今はまだPlaggerに比べると機能が少ないが、PraggerからPlaggerを呼び出せるようになったので、もはや何でもあり、というお話でした。
第二段階が1/8に終わって、まさに冬休みの宿題気分だったというお話から、「るりま男を次のステージへ」というお話でした。 途中で紹介された、監督の青木さんからのメッセージがすげー長かったのは、それだけあなたが熱く求められているということでしょう。 リファレンスマニュアル書きを手伝うことを通じて、いろんな知識が増えてお得だと思いますので、興味のある方はぜひ!
か「letmeseeを知ってる人〜?」
しーん...
あゆさんでなくても「まじで?」と叫びたくなる中、自分なりに快適なフランス語学習環境を整えるにあたって、何もかも自分で作ったわけじゃなく、あるものをうまく組み合わせたり改造したりしながらやりました、という紹介をしました。
やりたいこと実現のために、あらゆる手段を駆使しようと頑張ると、その過程でいろんな知識も身についていいですね、というお話でした。 Happy Hacking!
Ruby学習の心強いパートナーであるirbについて、いろんな使いかたの紹介でした。 説明を聞いたり配布資料を見たりしながら、さっそく、ヒストリの保存をするように~/.irbrcを書き換えてみました。
後半のグループレッスンでは、一つ前のエントリに書いたように、ジャンケンをするプログラムを書こうというお題でした。 あまりrubyを書きなれていない人でもまわりの人と話しながら書けるいいボリュームの課題だと思いました。
小波ゼミの4回生の人たちにとって、今日は卒業前最後のRuby勉強会でした。 私が初級者レッスンをやりだした頃からずっと参加して、いつも勉強会を素敵な雰囲気にしてくださったことに感謝をこめて、私たちスタッフからお花のアレンジメントを贈りました。 卒業後、彼女たちが新しい世界で素敵な活躍をすることを心から祈っています。
みんな驚いていたので、「サプライズ成功、やったね!」と思っていたら、あゆさんが「実はあなたにも〜」と、大きな花束をくださいました。 とても驚きましたが、本当に嬉しかったのでした。
もう、帰りの電車で目立つこと。 いや〜、快感。:)
昨日はお疲れさまでした。<br><br>おおー。まとまってますね。<br>個々人のじゃんけんプログラムを詳しく見られなかったので参考になります。解答例にも載せたいのですがいいでしょうか?<br><br>最後のは本質を突き詰めた結果ですね〜。目から鱗が落ちました。
> okkezさん<br>転載などご自由にどうぞ。ちなみにcaseじゃなくてifを使っている人が多かったと思います。
あれ?コンピュータの手と自分の手を表示しないといけない仕様だったような・・・。
> Yuyaくん<br>イイ男はそんな無粋なこと言っちゃダメです。:)
ハッシュを使ったこんなのどうです?<br><br> win = {"gu" =>"choki", "choki" =>"pa", "pa"=>"gu"}<br> myhand = handarray[rand(3)]<br> if yourhand == myhand then<br> print "<h3>あいこでした!</h3>"<br> elsif win[myhand] == yourhand then<br> print "<h3>わたしの勝ち!</h3>"<br> else<br> print "<h3>あなたの勝ち!</h3>"<br> end
大事な行が抜けてました。これが先頭にあります。<br><br>handarray = ["gu","choki","pa"]