[表示 : 全て 最新50 1-99 101- 201- 301- 401- 501- 601- 2chのread.cgiへ]
Update time : 04/20 05:16 / Filesize : 173 KB / Number-of Response : 653
[このスレッドの書き込みを削除する]
[+板 最近立ったスレ&熱いスレ一覧 : +板 最近立ったスレ/記者別一覧] [類似スレッド一覧]


↑キャッシュ検索、類似スレ動作を修正しました、ご迷惑をお掛けしました

RUBYの宿題教えてください。



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

あと、コピペするものには&nbsp;使わないほうがいいぞ
2chブラウザによっては空白が&#160;というのに置き換わるっていうか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






[ 続きを読む ] / [ 携帯版 ]

前100 次100 最新50 [ このスレをブックマーク! 携帯に送る ] 2chのread.cgiへ
[+板 最近立ったスレ&熱いスレ一覧 : +板 最近立ったスレ/記者別一覧]( ´∀`)<173KB

read.cgi ver5.27 [feat.BBS2 +1.6] / e.0.2 (02/09/03) / eucaly.net products.
担当:undef