2007-02-17 [長年日記]

_ [ruby] ジャンケンの勝ち負け判定

Ruby勉強会の初級者レッスンのお題のジャンケンプログラムについて。 グーは0、チョキは1、パーは2とします。で、勝ちなら1、引き分けなら0、負けなら-1を返すメソッドを定義します。

man\com012
001-1
1-101
21-10

グループレッスンでいろんな人の書き方を眺めていたのを、いくつかのパターンで紹介します。

組み合わせを全部書くよバージョン。 でも、さすがに引き分けだけは == で判定している人が多かったかな。

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\com012012
001-101-1
1-101-101
21-101-10

もしくは、こう書きかえる方がわかりやすいかな?

man\com120
01-10
101-1
2-101

お、引き算するとよさそうですね。何人かはこのアプローチだったみたい。

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] Ruby 勉強会@関西-14

「Ruby 実行環境を取り巻く世界」西本さん

ruby-1.8.xまでの「ふつうのruby」の他に、ruby-1.9にめでたくマージされたYARV、さらにはJavaや.NETで使えるrubyの実行環境までいろいろご紹介。 実行環境の役割とか仮想機械とは何かとかについてもさらっと紹介がありました。 すごく短くまとめると、YARV(を作ったささださん)ってば素敵〜♪ というお話でした。

「Plagger meets Ruby」 by yhara さん

Plaggerの簡単な紹介と、PlaggerのカスタマイズにRuby利用する方法のお話でした。 デモは、Plaggerの出力をRuby/SDLで表示させて、しかもそれThinkPadの傾き検知センサを使ってパソコンを傾けることでスクロールさせる、というものでした。 いやぁ、やっぱりKMC(京大マイコンクラブ)の人って面白いなぁ。

質問タイムで、Praggerについて尋ねてみたところ、ちゃっかりスライドが用意してあって、今はまだPlaggerに比べると機能が少ないが、PraggerからPlaggerを呼び出せるようになったので、もはや何でもあり、というお話でした。

ライトニング・トーク「Rubyリファレンスマニュアル刷新計画の進捗報告」by okkezさん

第二段階が1/8に終わって、まさに冬休みの宿題気分だったというお話から、「るりま男を次のステージへ」というお話でした。 途中で紹介された、監督の青木さんからのメッセージがすげー長かったのは、それだけあなたが熱く求められているということでしょう。 リファレンスマニュアル書きを手伝うことを通じて、いろんな知識が増えてお得だと思いますので、興味のある方はぜひ!

ライトニング・トーク「letmesee + royal-fpwで超快適フランス語辞書生活」by かずひこ

か「letmeseeを知ってる人〜?」

しーん...

あゆさんでなくても「まじで?」と叫びたくなる中、自分なりに快適なフランス語学習環境を整えるにあたって、何もかも自分で作ったわけじゃなく、あるものをうまく組み合わせたり改造したりしながらやりました、という紹介をしました。

やりたいこと実現のために、あらゆる手段を駆使しようと頑張ると、その過程でいろんな知識も身についていいですね、というお話でした。 Happy Hacking!

「Ruby 初級者向けレッスン 第11回」okkezさん&酒井さん

Ruby学習の心強いパートナーであるirbについて、いろんな使いかたの紹介でした。 説明を聞いたり配布資料を見たりしながら、さっそく、ヒストリの保存をするように~/.irbrcを書き換えてみました。

後半のグループレッスンでは、一つ前のエントリに書いたように、ジャンケンをするプログラムを書こうというお題でした。 あまりrubyを書きなれていない人でもまわりの人と話しながら書けるいいボリュームの課題だと思いました。

番外編:ご卒業スペシャル

小波ゼミの4回生の人たちにとって、今日は卒業前最後のRuby勉強会でした。 私が初級者レッスンをやりだした頃からずっと参加して、いつも勉強会を素敵な雰囲気にしてくださったことに感謝をこめて、私たちスタッフからお花のアレンジメントを贈りました。 卒業後、彼女たちが新しい世界で素敵な活躍をすることを心から祈っています。

みんな驚いていたので、「サプライズ成功、やったね!」と思っていたら、あゆさんが「実はあなたにも〜」と、大きな花束をくださいました。 とても驚きましたが、本当に嬉しかったのでした。

もう、帰りの電車で目立つこと。 いや〜、快感。:)

このエントリーを含むはてなブックマーク 
本日のツッコミ(全6件) [ツッコミを入れる]
_ okkez (2007-02-18 16:16)

昨日はお疲れさまでした。<br><br>おおー。まとまってますね。<br>個々人のじゃんけんプログラムを詳しく見られなかったので参考になります。解答例にも載せたいのですがいいでしょうか?<br><br>最後のは本質を突き詰めた結果ですね〜。目から鱗が落ちました。

_ かずひこ (2007-02-18 16:48)

> okkezさん<br>転載などご自由にどうぞ。ちなみにcaseじゃなくてifを使っている人が多かったと思います。

_ Yuya (2007-02-18 18:57)

あれ?コンピュータの手と自分の手を表示しないといけない仕様だったような・・・。

_ かずひこ (2007-02-19 00:43)

> Yuyaくん<br>イイ男はそんな無粋なこと言っちゃダメです。:)

_ こなみ (2007-02-19 02:23)

ハッシュを使ったこんなのどうです?<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

_ こなみ (2007-02-19 02:25)

大事な行が抜けてました。これが先頭にあります。<br><br>handarray = ["gu","choki","pa"]

[]