1 名前:RUBY [05/01/24 22:17:37 ] 私は、ある大学の1年生です。今、情報処理の講義でRUBYを習っています。 その講義で、期末テストとして課題が出たのですが、プログラミング初心者の私には 全然歯が立ちません。締め切りは1/31です。プロも皆さんには簡単な 問題かもしれませんがどうか教えてください。 課題は以下の通りです。
175 名前:デフォルトの名無しさん mailto:sage [2006/02/02(木) 21:00:23 ] そのできた部分まで見せてくれるとやりやすいかもしれない
176 名前:デフォルトの名無しさん mailto:sage [2006/02/02(木) 21:02:36 ] 互いに素がわかるならこれでどう? def axb(a,b) if tagainiso?(a,b) p = 1 x = 0 until a*x%b == 1 x = (p + 1)*b/a p += 1 end return x end return 0 end # テストコード def test_axb assert_equal(1, axb(3,2)) assert_equal(7, axb(13,10)) assert_equal(0, axb(2,4)) end
177 名前:デフォルトの名無しさん mailto:sage [2006/02/02(木) 21:15:42 ] てかホントに初心者スレから移動したんだな
178 名前:174 [2006/02/02(木) 21:41:41 ] a = gets.to_i b = gets.to_i def gcd(a,b) if b == 0 return a else return gcd(b,a%b) end end これでgcd(a,b) =1のときでif文作るところまでいきました。 ここから先がわかりません。 >>176 どこが何をしているのかがちょっとよくわかりません。 ホント素人ですいません。
179 名前:デフォルトの名無しさん mailto:sage [2006/02/02(木) 22:03:14 ] >>178 算数は苦手ですか? tagainiso?(a,b)はa,bが互いに素かどうか調べる。 自分でわかるって言ってたので、その説明は略。 until a*x%b == 1 x = (p + 1)*b/a p += 1 end は単なるループ。a*x%b == 1はわかるよね? 以下算数の話。 a*x%b = 1をpを整数として変形すると、 a*x/b = p + 1となるのでこれをxについて解く。 x = (p+1)*b/a となる。 pが整数なので、上記のループではpを1ずつ変化させて、条件に合うxを探してるだけ。 で、結局axb(a,b)で求めるxが返る。 これでどう?
180 名前:デフォルトの名無しさん mailto:sage [2006/02/02(木) 22:03:34 ] if tagainiso?(a,b) # IF互いに素なら until a*x%b == 1 # a*x%bが1になるまで続ける p += 1 # p=p+1 これだけわかればトレースはできるだろうから、計算の意味は自分で考えてみよう
181 名前:147 [2006/02/02(木) 22:13:03 ] できました!みなさんありがとうございました!!!!
182 名前:デフォルトの名無しさん mailto:sage [2006/02/02(木) 22:19:57 ] (1...b).each do |x| break if a*x%b == 1 end return x の方が計算量少ないのでは。
183 名前:デフォルトの名無しさん mailto:sage [2006/02/02(木) 22:26:52 ] b != 1 のチェックも必要だね。
184 名前:デフォルトの名無しさん mailto:sage [2006/02/03(金) 16:48:13 ] で、それどこの宿題? 大学? 高校? 中学校? 小学校?
185 名前:デフォルトの名無しさん mailto:sage [2006/02/03(金) 22:41:09 ] >>183 b=1の時点で互いに素の可能性が消えるので不要。
186 名前:デフォルトの名無しさん mailto:sage [2006/02/04(土) 02:49:49 ] 互いに素の定義って最大公約数が1じゃなかたっけ?
187 名前:デフォルトの名無しさん [2006/02/06(月) 23:59:56 ] www.pluto.ai.kyutech.ac.jp/plt/matumoto/pi_small/node8.html rubyで上記のURLのいずれかの公式を用いて円周率もとめたいんですけど、、、どなたかソースコード例示してもらえないでしょうか
188 名前:デフォルトの名無しさん mailto:sage [2006/02/07(火) 00:18:42 ] puts (Math.atan(1.0/5)*4 - Math.atan(1.0/239))*4 俺ならこんなの書いてきたら落第させるがな
189 名前:デフォルトの名無しさん mailto:sage [2006/02/07(火) 03:29:45 ] >188 それだとputsの戻り値*4にならないか?
190 名前:デフォルトの名無しさん mailto:sage [2006/02/07(火) 08:34:49 ] puts は 必ず nil を返すように作られてるんだがそれでもよろしいか
191 名前:デフォルトの名無しさん mailto:sage [2006/02/07(火) 09:31:26 ] hoge (1+2) * 3 は hoge(1+2) * 3 と同じ動作をするべき? まあ、そうかもね。
192 名前:デフォルトの名無しさん mailto:sage [2006/02/07(火) 13:37:36 ] どっちにしても、そういう仕様だからなぁ。
193 名前:デフォルトの名無しさん mailto:sage [2006/02/07(火) 14:00:18 ] 「カッコが省略されてる引数は最初の空白で区切れるようにしろ」というのは 主張としてはある程度真理だな 引数に空白を含めたい人が自力でカッコで括ってれと 「文末が出るまで全部引数にしまっちゃうよ」というのもそれはそれで便利だが
194 名前:デフォルトの名無しさん mailto:sage [2006/02/08(水) 11:40:32 ] で、宿題としては要は自前でテーラー展開しろってことなんだろうな。 そろそろ気づいて自力でできた頃か?
195 名前:デフォルトの名無しさん mailto:sage [2006/02/08(水) 18:40:30 ] おいおい、自力でテーラー展開してどうするんだ? ニュートン法でも発明しろってことか?w
196 名前:デフォルトの名無しさん mailto:sage [2006/02/23(木) 01:33:21 ] ここ北大の人が質問してそう
197 名前:デフォルトの名無しさん mailto:sage [2006/02/23(木) 02:29:37 ] ちょっとドキッとしたが卒業生だからもう関係ねーや 1年の情報処理ででもやってるのかな 俺のやったときはFortran77/90とCとDelphiの選択だったような気がする
198 名前:デフォルトの名無しさん mailto:sage [2006/02/23(木) 04:38:20 ] また来年も質問が来るのかな
199 名前:デフォルトの名無しさん mailto:sage [2006/02/23(木) 14:51:52 ] ttp://crab.hucc.hokudai.ac.jp:8080/keng/sfinddata.cgi?USERID=476465055e62784e1&SEQ=7 これか? いや、これはD言語みたいだな。。。(汗
200 名前:ハーピィ mailto:sage [2006/02/24(金) 11:53:49 ] E・∇・ヨノシ <200ゲット♫
201 名前:デフォルトの名無しさん mailto:sage [2006/03/28(火) 17:22:35 ] net/http使っていて、 HTTP/1.1 501 Method Not Implemented Date: Tue, 28 Mar 2006 08:09:41 GMT Server: Apache/2.0.54 (Debian GNU/Linux) mod_fastcgi/2.4.2 mod_ruby/1.2.4 Ruby/1.8.2(2005-04-11) mod_ssl/2.0.54 OpenSSL/0.9.7e Allow: GET,HEAD,POST,OPTIONS,TRACE Content-Length: 206 Connection: close Content-Type: text/html; charset=iso-8859-1 なのが欲しいのはどうすればいい?
202 名前:デフォルトの名無しさん mailto:sage [2006/03/28(火) 17:36:43 ] どうしたいの?
203 名前:デフォルトの名無しさん mailto:sage [2006/03/28(火) 18:03:52 ] pc8.2ch.net/test/read.cgi/tech/1143403165/10 なお話?
204 名前:デフォルトの名無しさん mailto:sage [2006/03/28(火) 18:10:18 ] .headerじゃ、HTMLの<HEAD>と</HEAD>の間しか採れないと思う。 漏れが欲しいのはHTTPの中で鯖から送られて来る情報。
205 名前:デフォルトの名無しさん mailto:sage [2006/03/28(火) 18:35:27 ] (⊃д`)
206 名前:デフォルトの名無しさん mailto:sage [2006/03/28(火) 18:44:02 ] Response から each を使えばいいような気がするのだが。
207 名前:デフォルトの名無しさん mailto:sage [2006/03/28(火) 21:01:45 ] こんなんでどう? % cat http_header_test1.rb #!/usr/bin/ruby require 'net/http' Net::HTTP.version_1_2 Net::HTTP.start('www.ruby-lang.org', 80) {|http| response = http.get('/ja/') printf("HTTP/%s %s %s\n", response.http_version, response.code, response.message) response.each{|x, y| printf("%s: %s\n", x.capitalize, y)} } % ./http_header_test1.rb HTTP/1.1 200 OK Cache-control: no-cache Last-modified: Sat, 24 Dec 2005 13:44:39 GMT Vary: User-Agent Content-type: text/html; charset=euc-jp Date: Tue, 28 Mar 2006 11:59:22 GMT Server: Apache/2.0.54 (Debian GNU/Linux) mod_fastcgi/2.4.2 mod_ruby/1.2.4 Ruby/1.8.2(2005-04-11) mod_ssl/2.0.54 OpenSSL/0.9.7e Content-length: 15762 Pragma: no-cache
208 名前:デフォルトの名無しさん mailto:sage [2006/03/28(火) 21:31:34 ] ありがとうございました。
209 名前:デフォルトの名無しさん [2006/04/07(金) 10:36:49 ] 保守
210 名前:デフォルトの名無しさん mailto:sage [2006/04/07(金) 20:37:40 ] 質問者を堕落させ、回答者のレベルをアップさせるスレってここのことですか? 質問者はruby-man-ja-html-20051029ぐらい読んでいるんだよな? と、てきとうなことを言ってみた。
211 名前:デフォルトの名無しさん mailto:sage [2006/04/07(金) 20:52:34 ] スレの性質上、学期末じゃないとあんまり釣れないと思うよ
212 名前:デフォルトの名無しさん mailto:sage [2006/05/03(水) 23:44:59 ] 学期末とかじゃなくても良いから 問題出してくれねーかなー。 面白そうなら、コード書くからさー。
213 名前:デフォルトの名無しさん [2006/05/04(木) 22:38:17 ] じゃあ、問題出し合うスレにしちゃうか!
214 名前:デフォルトの名無しさん mailto:sage [2006/05/05(金) 14:20:15 ] じゃ、お題。っ【ソリティア】
215 名前:デフォルトの名無しさん mailto:sage [2006/05/05(金) 19:22:45 ] >>214 ソリティアを"作る"のか"解く"のかどっちだ?
216 名前:214 mailto:sage [2006/05/06(土) 04:17:59 ] じゃとりあえず ソリティア「クロンダイク」を作る で。俺も作ってみるかなー。 【仕様案(あくまで俺用。参考にでも】 ・配置はランダム Winのフリーセルのような問題番号はなし。 ・CUIで入出力 CUIの方が環境依存少なめかなぁと。 ・サブコマンド 列名をアルファベットで現し 基本は3文字で[列名][枚数][列名]。 例: A3C (A列の3枚をC列へ移す) 山札をめくる時は半角スペース1個入れてエンター。 列名はプレイ時に一目で判るようにしておく。 って言うか文字順に置くかキー配置なぞって置くか2案で悩み中。
217 名前:デフォルトの名無しさん mailto:sage [2006/05/11(木) 02:05:01 ] UNOがいいよ。 仕様例: CUIベース。 手札の表示は、赤の1ならR1、青の2ならB2、黄の3ならY3、緑の4ならG4って感じ。 赤のReverseならRR、青のSkipならBS、黄のDrowTwoならYD、 WildはW、WildDrowFourはWD ってところでいいかと。 ["R1", "B2", "Y3", "G4", "R", "BS", "YD"] って感じででも手札を表示。 use card?[1,2,3,4,5,6,7,G,U] とでも表示して、1文字読んで選択させる。 Gは1枚カードを山から取る、Uはunoのつもり。 ウノ自体のルールはぐぐってくれ。
218 名前:デフォルトの名無しさん mailto:sage [2006/05/17(水) 19:53:34 ] >>217 で、どうしろと?
219 名前:デフォルトの名無しさん mailto:sage [2006/05/17(水) 20:12:02 ] >218 作りたい人は作る。基本スルー。
220 名前:デフォルトの名無しさん mailto:sage [2006/05/19(金) 01:57:28 ] つまりrubyでカードゲームは無理ということですよ。
221 名前:デフォルトの名無しさん mailto:sage [2006/05/19(金) 03:29:39 ] Rubyで無理じゃなくて、ここの住人じゃ無理なだけでそ
222 名前:デフォルトの名無しさん mailto:sage [2006/05/19(金) 06:46:32 ] Win32API使ってもいい?
223 名前:デフォルトの名無しさん mailto:sage [2006/05/19(金) 08:27:37 ] 良いんじゃね?
224 名前:デフォルトの名無しさん mailto:sage [2006/05/19(金) 08:56:46 ] じゃあUNO作るわ まっとれ
225 名前:デフォルトの名無しさん mailto:sage [2006/05/19(金) 13:21:12 ] ひとりでUNOやってて楽しいか? 昔MacでUNOのゲームがあったが、かなりつまらんかったな。
226 名前:デフォルトの名無しさん mailto:sage [2006/05/19(金) 13:30:04 ] >>225 >>1
227 名前:デフォルトの名無しさん [2006/05/21(日) 13:38:41 ] UNOはつまらん 囲碁にしようぜ、てか囲碁のプログラムってむずくね?
228 名前:デフォルトの名無しさん mailto:sage [2006/05/21(日) 16:29:22 ] そんな面倒なのじゃなくまず3人じゃんけんのプログラムから始めろよ
229 名前:デフォルトの名無しさん mailto:sage [2006/05/21(日) 16:37:47 ] 囲碁は終了判定があいまいでプレイヤーの感覚に任せる部分が大きい ぶっちゃけどちらかが投了しない限り続行は可能だよ つーかUNOも囲碁も相手が必須だろ そこをどうするかがポイントになるハズ
230 名前:デフォルトの名無しさん mailto:sage [2006/05/21(日) 17:15:27 ] >>228 グー・グー・チョキの場合は決勝? あいこ?
231 名前:デフォルトの名無しさん mailto:sage [2006/05/21(日) 19:21:32 ] >>230 あいこしたら、あいこした方が負け。 つまり、チョキの勝ちというルールで。
232 名前:デフォルトの名無しさん mailto:sage [2006/05/21(日) 20:04:07 ] >>230 あいこにしたほうが簡単ぽいのでひとまずあいこでよし
233 名前:デフォルトの名無しさん mailto:sage [2006/05/22(月) 02:34:21 ] >>230 あいこのグーふたりを勝ちにして、チョキを落として再試合。 つまり、次回から勝負が決まるまでチョキの結果をムシすれ。
234 名前:デフォルトの名無しさん mailto:sage [2006/05/22(月) 08:49:28 ] おまいら馬鹿なのか? CPU1だけと7並べやってもつまらんって当たり前じゃん。 CPU1, CPU2, CPU3とプレーヤの4人で7ねらべとか出来る様にすればいいじゃん。 マクのUNOって糞だっただけじゃね? PCのUNOはそこそこおもしろかったよ。
235 名前:デフォルトの名無しさん mailto:sage [2006/05/22(月) 08:51:55 ] www.amazon.co.jp/gp/product/4789724964/
236 名前:デフォルトの名無しさん mailto:sage [2006/05/22(月) 15:44:15 ] >>232 一人勝ちバージョンできたよー どこまで凝っていいのかわからなかったから 判定メソッド1個と$stdin.getsの入力ループで簡単ぽく作ったよー def hantei(hands) sum=0 hands.values.each do |hand| sum = hand + sum end case sum when 0,1,3,4,6 kekka='あいこ。もう一度' when 2 if hands.has_value?(2) then kekka="パーで#{hands.index(2)}の勝ち" else kekka="グーで#{hands.index(0)}の勝ち" end when 5 kekka="チョキで#{hands.index(1)}の勝ち" end yobina=['グー','チョキ','パー'] hands.each do |name,hand| puts "#{name}:#{yobina[hand]}" end puts kekka end
237 名前:236続き mailto:sage [2006/05/22(月) 15:46:02 ] # 遊び方:実行してこれ↓ setumeibun='1:グー 2:チョキ 3:パー 0:やめる (数字とEnter押してね)' puts '3人じゃんけん開始(決勝戦なし)' puts setumeibun while line=$stdin.gets.chomp do case line when '0' puts 'さようなら' exit when '1' myhand=0 when '2' myhand=1 when '3' myhand=2 else puts setumeibun next end hantei({'YOU'=>myhand, 'COM1'=>rand(3).to_i, 'COM2'=>rand(3).to_i}) end
238 名前:デフォルトの名無しさん mailto:sage [2006/05/22(月) 15:51:13 ] 遊び方: >>236-237 のスクリプト本文っぽい部分をコピペしてまとめて1ファイルにして実行。 1を入力してEnterを押すとグーを出したことに、2を入力だとチョキに、3だとパーになる。 0を入力すると終了する。テンキーで遊ぶと便利。 説明: プレーヤーはコンピュータCOM1、COM2とユーザーYOUを含む3人。 各々の名前と出した手は、名前 => 手 の対応でハッシュhandsに入る。 出した手は整数の数値で格納され、グーは0で表す。チョキは1。パーは2。 利便性のためにユーザー入力とはズレてることに注意。 COMの出す手はグーチョキパー等しくランダムであり、 0.00…1から2.99…9までの乱数を発生させ小数点切り捨てで対応。 で、「誰か1人が勝利した」か「全員あいこ」かどうかは、3人分の手の数字の和ですべて判別できる。 勝った人の名前を知るには、「その場合に勝利である手」を値に持つキーをhandsからindexで探せばいい。 誰かがグーで勝つパターン [和は2] [勝者は0] 0・1・1 誰かがチョキで勝つパターン [和は5] [勝者は1] 1・2・2 誰かがパーで勝つパターン [和は2] [勝者は2] 2・0・0 本来決勝に進むパターン(今回あいこ)[和は1か4] 0・0・1、 1・1・2、 2・2・0 全員あいこのパターン[和は0か3か6] 0・0・0、 1・1・1、 2・2・2、 0・1・2 言い訳: きれいとわかりやすいって両立しないよね ---- おしまい
239 名前:デフォルトの名無しさん mailto:sage [2006/05/22(月) 16:18:18 ] ある程度短ければ自分の全力で作っていいんじゃね? 初心者勉強スレみたいな雰囲気もあるから迷うが
240 名前:デフォルトの名無しさん mailto:sage [2006/05/22(月) 19:43:42 ] 三人じゃんけんかー。 昔、JAVAで作ったのがあるから移植してみようかな。
241 名前:デフォルトの名無しさん mailto:sage [2006/05/22(月) 21:15:31 ] 何かプロトコル決めて、戦わせたいね(w Simple Janken Transfer Protcol(SJTP)とか。
242 名前:デフォルトの名無しさん mailto:sage [2006/05/22(月) 22:50:53 ] Transfer ワロタ
243 名前:デフォルトの名無しさん mailto:sage [2006/05/22(月) 23:16:19 ] でも作って公開してもメリットなくね
244 名前:デフォルトの名無しさん mailto:sage [2006/05/22(月) 23:54:46 ] ひとつのゲームだけじゃなくて 汎用的なカードゲーム用exchangeサイトみたいなの Rubyで作れんかね
245 名前:デフォルトの名無しさん mailto:sage [2006/05/22(月) 23:58:30 ] あんまRuby向きの概念ではないな 個々のシステムを個々に作るほうが得意だと思う
246 名前:デフォルトの名無しさん mailto:sage [2006/05/23(火) 00:33:22 ] >>243 作るだけでも非常に勉強になるぞ というのはどうだろう 素人のプログラムなんて読みたくねえよな実際
247 名前:デフォルトの名無しさん mailto:sage [2006/05/23(火) 01:20:01 ] >>246 ここに書いとくとMinero Aokiがリファクタリングしてくれるという特典付き。
248 名前:デフォルトの名無しさん mailto:sage [2006/05/23(火) 07:08:10 ] そうか
249 名前:デフォルトの名無しさん mailto:sage [2006/05/23(火) 08:54:39 ] じゃんけんする人をn人にした場合はどうなるの?
250 名前:デフォルトの名無しさん mailto:sage [2006/05/23(火) 14:50:55 ] [グー、チョキ、パー、・・・、手_n] になる
251 名前:デフォルトの名無しさん mailto:sage [2006/05/23(火) 15:30:18 ] 作ってるうちにめんどーになった。 多人数対応してるつもりのあいこ勝ち抜きバージョン。 @players=['YOU','COM1','COM2','COM3'] に'YOU'という文字を含まない要素を追加するとその名前で人数が増える。 YOU無しでやると自動で対戦する。 @players=['COM1','COM2','COM3''COM4''COM5''COM6''COM7''COM8''COM9''COM10'] だと10人対戦。いつ終わるかは知らね。 @goal=100の場合は100回勝った人が出た時点で終了。 ただしあいこ感知の都合であいこ勝ち抜きも積み立て1勝とカウントするので注意。 あいこを勝ち残った人にあいこ勝ち抜き回数ぶんの勝利数を追加。 定数のグーチョキパーはなんか使い方違う気がするがお腹すいたので判断できん。 結局クラス作る必要もなかった気もするけど面倒なので放置。 ちなみに俺>>236 。反応なくてもがんばるよ!っていうか>>246 の読む気しないってのには同意 handsの中身は>>238 の@handsと同じ。 要は勝利者が1人になるまで前回の勝者たちを集めて同じ処理させてるだけ。
252 名前:251 mailto:sage [2006/05/23(火) 15:31:27 ] class Game GOO=0;TYOKI=1;PAA=2 def initialize @label=['グー','チョキ','パー'] @players=['YOU','COM1','COM2','COM3'] @carryover=0;@hands=Hash.new;@win=Hash.new; @players.each{|player| @win[player]=0} @goal=100 end def msg(str) print "#{str}\n" end def win_pattern return [ {'pat'=>[GOO,TYOKI], 'win'=> GOO}, {'pat'=>[TYOKI,PAA], 'win'=> TYOKI}, {'pat'=>[PAA,GOO].sort, 'win'=> GOO} ] end
253 名前:251 mailto:sage [2006/05/23(火) 15:32:31 ] def game winner=@players until winner.size == 1 do jyanken_call(winner) hands=ask(winner) show(hands) winner=judge(hands) end end_phase(winner.first) end def jyanken_call(winner) if @carryover == 0 then msg " じゃーんけん (参加者:#{winner.sort.join(',')})" else msg " あーいこで (参加者:#{winner.sort.join(',')})" end end def ask(winner) hands=Hash.new winner.each{|player| hands[player]=hand(player) } return hands end
254 名前:251 mailto:sage [2006/05/23(火) 15:33:17 ] def hand(player) if player =~ /YOU/ then return get_yourinput else return rand(3).to_i end end def get_yourinput while input=STDIN.gets.chomp do case input.to_i when 0 then gameover when 1 then return GOO when 2 then return TYOKI when 3 then return PAA else msg ' 1:グー 2:チョキ 3:パー 0:やめる (数字とEnter押してね)' end end end def show(hands) hands.each{|name,hand| msg "#{name}:#{@label[hand]}" } end
255 名前:251 mailto:sage [2006/05/23(火) 15:34:01 ] def judge(hands) now=hands.values.sort win_pattern.each do |hash| if (now & hash['pat'])==hash['pat'] && (now | hash['pat']) == hash['pat'] then return pick_winners(hands,hash['win']) # someone wins end end @carryover+=1 return hands.keys #noone wins end def pick_winners(hands,win) winner=Array.new hands.each{|name,hand| winner << name if hand == win } @carryover+=1 unless winner.size == 1 return winner end def end_phase(winner) @win[winner] = @win[winner] + 1 + @carryover @carryover=0 msg "#{winner} が勝ちました! (現在:#{@win[winner]}勝)" msg " "
256 名前:251 しまったメソッド途中で切っちゃった mailto:sage [2006/05/23(火) 15:36:15 ] if champ=@win.find{|key,val| val >= @goal} then msg "優勝者は#{@goal}勝を最初に達成した#{champ[0]}さんです!" gameover end end def gameover @win.each{|name,win| msg "#{name}:#{win}勝" } msg "さようなら";exit end end game=Game.new loop do game.game end
257 名前:デフォルトの名無しさん mailto:sage [2006/05/23(火) 15:37:33 ] はい終わり。
258 名前:デフォルトの名無しさん mailto:sage [2006/05/23(火) 17:09:52 ] >>252 たぶん書き間違ってる。PAAで勝つパターンが入ってない。 def win_pattern return [ {'pat'=>[GOO,TYOKI], 'win'=> GOO}, {'pat'=>[TYOKI,PAA], 'win'=> TYOKI}, {'pat'=>[PAA,GOO].sort, 'win'=> GOO} ] end ↓ def win_pattern return [ {'pat'=>[GOO,TYOKI], 'win'=> GOO}, {'pat'=>[TYOKI,PAA], 'win'=> TYOKI}, {'pat'=>[PAA,GOO].sort, 'win'=> PAA} ] end あと、コピペするものには 使わないほうがいいぞ 2chブラウザによっては空白が というのに置き換わるっていうかOpenjaneDoeがそうだ
259 名前:デフォルトの名無しさん mailto:sage [2006/05/30(火) 01:49:26 ] ちょっと昔作ったJAVAの三人じゃんけんをRubyに移植してみたら 約200行になった。ここには貼れない。 ちなみに、JAVAの時は約300行だった。 ロジックはJAVAで書いた時のをそのまま移植したので もっとエレガントに出来そうな気はしてる。
260 名前:デフォルトの名無しさん mailto:sage [2006/05/30(火) 12:43:55 ] >259 是非別所にうpしる Rubyに書き換えようぜ
261 名前:デフォルトの名無しさん mailto:sage [2006/05/30(火) 12:46:31 ] N人じゃんけんが既に出てるから、判定部分は何か面白いことしてないと目立たないぞ(w どこかのあぷろだ借りるのが手っ取り早いだろうな
262 名前:デフォルトの名無しさん mailto:sage [2006/05/30(火) 13:34:30 ] ここ? ソースポスト sourcepost.sytes.net/
263 名前:デフォルトの名無しさん mailto:sage [2006/05/30(火) 14:32:48 ] じゃんけんだと、手の種類が2個だと勝敗が決まってるんだよな。 3のときと1のときはあいこだよな。 いちいち判定しないで #仮想コード players.find(winner_hand(*hands.uniq)) if hands.uniq.size == 2 とかでいけるんじゃないの? Handクラスを作ってTyoki<-Paa<-Goo<-Tyokiとリンクリストみたいにして負けた方をincompatibleとして持つなら def stronger(other) @incompatible == other ? self : other end これだとwinner_handはいらなくて、 hands.uniq.inject{|a,b| a.stronger b}/*hands.uniq.size == 2*/で勝つ方の手が決まる。 まあ真偽値返すようにしてsortして[0]使うんでもいいけど。 Tyokiとかはインスタンスが違っちゃいかんのでHansの定数にするかシングルトンにするかクラスのまま使うかすること。 あとloopでgame呼ばないでgame側でloopしたほうがよさそうなのと win_patternは普通にクラス定数の方がいいんじゃねえかと思うのと gameでwinnerに@playersを代入してるけどインスタンス変数のまま使えばいいじゃんってのと コンストラクタでやってる色々は引数にした方がいいんじゃねえかとか。 あとオブジェクト指向っぽくするならCOMPlayerとHumanPlayerを作ってVisitorパターン使ってplayさせてみるとか。 といってもVisitorパターンが最適とは本見なきゃわからん人なので今ひとつ断言できない。
264 名前:デフォルトの名無しさん mailto:sage [2006/05/30(火) 16:24:06 ] じゃんけんが完成したら、いよいよ野球拳の実装だな。wktk
265 名前:デフォルトの名無しさん mailto:sage [2006/05/30(火) 18:39:19 ] オセロまでいくとむずすぎる?
266 名前:デフォルトの名無しさん mailto:sage [2006/05/30(火) 18:55:58 ] 頭の悪いオセロなら簡単だよ
267 名前:デフォルトの名無しさん mailto:sage [2006/05/31(水) 04:16:01 ] それオセーロ
268 名前:259 mailto:sage [2006/05/31(水) 07:17:44 ] 遅くなってすみません。 ttp://sourcepost.sytes.net/sourcepost/sourceview.aspx?source_id=27835 Rubyに移植済みのもの。 判定部分に剰余を使っているので三人でしかじゃんけんできません。 あと、ルール 一人勝ちなら+2ポイント残り二人は-1ポイントずつ 二人勝ちなら+1ポイントずつ残り一人は-2ポイント 終了条件は特に無し # EUC-JPなファイルをupしたら文字化けorz
269 名前:デフォルトの名無しさん mailto:sage [2006/05/31(水) 14:02:51 ] >>268 ttp://sourcepost.sytes.net/sourcepost/sourceview.aspx?source_id=27837 Rubyっぽくしてみた。 ルール(配点)の入れどころがよくわからんかったので消してしまったがJanken側にあるべきではないか。 $ ruby source.rb プレーヤ数 回数 で実行できるけど30人越えた辺りで反応がすげー鈍くなるよ。
270 名前:268 mailto:sage [2006/05/31(水) 19:56:37 ] >>269 うーん、Rubyだ。 ポイントの入れ方は、3人でじゃんけんして あいこなら変化なし 一人勝ちなら勝った人は+2point,負けた二人は-1pointずつ 二人勝ちなら勝った二人は+1pointずつ,負けた人は-1point # ダメな変数の使い方の見本になってしまったorz # flagに複数の意味を持たせてしまっていたようだ # いくら一年以上前のプログラムだからって気付けよ>一昨日の自分 確かに、配点を弄るメソッドがPlayerにあるのは変ですね。 Jankenクラスにjudgeメソッドを実装するなら、ポイントを弄るメソッドも Jankenクラスにあるべきですね。 >268の時点では、Jankenクラスは特に役目は無くて(ってまたダメな設計の見本orz) 単にゲームを開始するだけの係りでした。
271 名前:デフォルトの名無しさん mailto:sage [2006/05/31(水) 20:38:13 ] >>269 >>263 の人? 初心者だけど、Rubyの勉強になった。サンクス。 2時間ぐらいマニュアルと格闘しながら解読した。
272 名前:デフォルトの名無しさん mailto:sage [2006/06/01(木) 13:08:46 ] Jankenにポイント計算つけた。 sourcepost.sytes.net/sourcepost/sourceview.aspx?source_id=27841 (敗者数/勝者数).ceilのポイント(敗者数>勝者数、そうでなければポイント=1)を分ける。 敗者は常に-1にしてある。 3人でやったときは同じ結果で、それ以上でも同じルールをスケールした結果になるはず。
273 名前:デフォルトの名無しさん mailto:sage [2006/06/01(木) 19:51:06 ] >>272 本当に些細なことだが、 scissorsは単複同形だよ。
274 名前:デフォルトの名無しさん mailto:sage [2006/06/02(金) 01:38:55 ] N人であいこなし。複数人が勝てるパターンにしてみた。 ttp://sourcepost.sytes.net/sourcepost/sourceview.aspx?source_id=27843 使い方は>269と同じ(パクりました) * 変数名、メソッド名を自分の好みに変更 * 判定にビット演算を使いたかったので、手の定義を変更した。 * 対話的に動かせるようにしてみた。 * 回数が多いときは誰かが101勝したら終了 * 人数を増やしすぎると延々あいこが続くので決着が着かない 例えば、 $ ruby Janken.rb 3 10 なら、3人で10回勝負が着くまでじゃんけんしつづける。 # あいこでredoさせるのに手間取った # Fixnum#stepでredoすると最初からになってしまうorz # 人数が多い時は別の終了条件にした方が良さそう。 # おいらが書くと長くなってしまうorz
275 名前:デフォルトの名無しさん [2006/06/03(土) 15:28:38 ] age