RUBYの宿題教えてください。at TECH
RUBYの宿題教えてください。 - 暇つぶし2ch136:デフォルトの名無しさん
05/12/22 01:57:20
>>128
に本当っぽいことが書いてある…と言ってみるw

137:デフォルトの名無しさん
05/12/22 20:53:07
北大ってどんなところなの?


138:デフォルトの名無しさん
05/12/22 21:36:03
北のほうにある

139:デフォルトの名無しさん
06/01/10 21:50:54
お願いします

問題
次の足し算を満足する0~9の相異なる数
A,E,G,L,M,N,O,P,R (但し、A,L,Oはゼロではない)
の組を求めよ(答えは三通り)

  APPLE
+) LEMON
----------
 ORANGE

1.O=1
2.N=0
3.L=2から8 また、G=L+1で桁上がりはない
4.P=2,3,4,6,7,8 でM=10-P
 PもMもL,Gに等しくない
5.Eは2から9でL,G,P,Mに等しくない
6.P+E+1が10以上のとき
  A=P+E+1-10
  A+L+1 が10未満ではダメ
  R=A+1-10
 P+E+1が10未満のとき
  A=P+E+1
  A+Lが10未満ではダメ
  R=A+L-10
7.AはO,N,L,G,P,M,Eに等しくない
8.RはO,N,L,G,P,M,E,Aに等しくない

140:デフォルトの名無しさん
06/01/10 21:55:55
アミノ酸配列と円周率が楽だからそんなのやめなさい

141:デフォルトの名無しさん
06/01/10 23:30:13
>>139
できた。結局、なにがわからんの?
楽して書きたいとかなら、地道にひとつずつ条件を書いていくしかないと思われ。


o = 1
n = 0

a_t = 1..9
e_t = 0..9
g_t = 0..9
l_t = 1..9
m_t = 0..9
p_t = 0..9
r_t = 0..9

def different_all?(key, array)
return array.all?{|v| v != key}
end




142:デフォルトの名無しさん
06/01/10 23:32:00
count = 0
a_t.each{|a|
e_t.each{|e|
next unless different_all?(e, [a, o, n])
g_t.each{|g|
next unless different_all?(g, [e, a, o, n])
l_t.each{|l|
next unless different_all?(l, [g, e, a, o, n])
next if l + 1 > 10
next unless g == l + 1
p_t.each{|p|
next unless different_all?(p, [l, g, e, a, o, n])
m_t.each{|m|
next unless different_all?(m, [p, l, g, e, a, o, n])
next unless m == 10 - p
r_t.each{|r|
next unless different_all?(r, [m, p, l, g, e, a, o, n])
apple = 10000 * a + 1000 * p + 100 * p + 10 * l + e
lemon = 10000 * l + 1000 * e + 100 * m + 10 * o + n
orange = 100000 * o + 10000 * r + 1000 * a + 100 * n + 10 * g + e


143:デフォルトの名無しさん
06/01/10 23:34:47
if orange == ( apple + lemon )
count += 1
puts 'A = ' + a.to_s
puts 'E = ' + e.to_s
puts 'G = ' + g.to_s
puts 'L = ' + l.to_s
puts 'M = ' + m.to_s
puts 'N = ' + n.to_s
puts 'O = ' + o.to_s
puts 'P = ' + p.to_s
puts 'R = ' + r.to_s
puts '-----'
end
}
}
}
}
}
}
}
puts count


144:デフォルトの名無しさん
06/01/10 23:36:52
いんでんとなんかはてきとうに直してくれ。


145:デフォルトの名無しさん
06/01/11 20:33:59
ありがとうございます
何がわからないというか、何もかもわからなくて

146:デフォルトの名無しさん
06/01/12 12:22:33
階乗を求めるプログラムを教えてください

147:デフォルトの名無しさん
06/01/12 20:39:37
>>146
死ねマルチ

result = 1;(1..5).each{|i| result *= i}; p result

148:デフォルトの名無しさん
06/01/13 09:01:44
自然数 N が与えられたとき、
1 から N までの数字を N 個並べる組み合わせをすべて
列挙するプログラムは Ruby で書くとどうなりますか?

例えば N = 3 のとき
1 2 3
1 3 2
2 1 3
2 3 1
3 1 2
3 2 1
となるようにです。
よろしくおながいします。


149:デフォルトの名無しさん
06/01/13 22:11:29
>>148
何がわからないのかちゃんと説明できたら教えてやる。
一応、プログラムは出来た。
N=4の出力 4! = 24 なので合ってるはず。
[1, 4, 3, 2][3, 4, 1, 2][2, 1, 3, 4][1, 4, 2, 3]
[1, 3, 4, 2][3, 2, 4, 1][4, 2, 3, 1][2, 4, 3, 1]
[2, 3, 1, 4][4, 1, 2, 3][3, 2, 1, 4][1, 3, 2, 4]
[1, 2, 3, 4][4, 2, 1, 3][1, 2, 4, 3][3, 1, 4, 2]
[4, 3, 2, 1][2, 4, 1, 3][2, 3, 4, 1][3, 4, 2, 1]
[4, 1, 3, 2][4, 3, 1, 2][2, 1, 4, 3][3, 1, 2, 4]












150:デフォルトの名無しさん
06/01/14 00:06:55
例えば、

1: methodA()
2: methodB()
3: methodC()

の3行からなるprogram.rbがあって、methodB()の処理が5秒たっても終わらなかったら、
methodB()の処理をタイムアウトして(飛ばして)、次行methodC()への処理へと
いくという風にするにはどうしたらよいでしょうか?
timeout()を使っても、program.rb全体が終了してしまいうまくいきません。
あくまでmethodB()だけをタイムアウトして、program.rbの処理自体は続行させたいのです。


151:デフォルトの名無しさん
06/01/14 00:21:50
timeout が TimeoutError を送出するんだから rescue で受ければいいんじゃないの?

152:デフォルトの名無しさん
06/01/20 00:44:27
宿題です。危機です。
ruby/tkで迷路を作成して脱出するプログラムを
どなたか作ってくださいorz

153:デフォルトの名無しさん
06/01/20 01:17:49
ここは「教えてください」というスレッドであって「代行してください」というスレッドではないと思うのだが。


154:デフォルトの名無しさん
06/01/20 02:09:17
勘違いしてましたorz
多分このスレを立てた人と同じ大学です、自分も締め切りが迫っててピンチです。
迷路を作成して、脱出するプログラムを作りたいのですが、
①座標(1,1)(左上隅)に最初の通路空け、
②上下左右で、2マス進んだところがまだ通路になっていない場所
(複数ある場合はランダムに選択)
③穴掘り可能な方向がなかったら、そこまでの道を2マスだけ逆戻り。
逆戻りできない場合完成。
という感じにするのは分るのですが、ruby/tkでどうやってそれを表現したら良いのかが
わからないのですが。。

155:デフォルトの名無しさん
06/01/20 07:26:48
テキストベースで組んでみてから、Ruby/Tkでやれば?

156:デフォルトの名無しさん
06/01/20 11:18:09
テキストベース?のは出来たんですが…orz

157:デフォルトの名無しさん
06/01/20 17:07:54
アルゴリズムを聞いてるのかな

158:デフォルトの名無しさん
06/01/20 21:55:50
ruby/tkでのやり方が知りたいです!

159:デフォルトの名無しさん
06/01/20 22:04:17
知りたいなら自分で勉強しような。
テキストべースのままでいいじゃん。

160:デフォルトの名無しさん
06/01/20 23:23:47
課題的に Ruby/tk が必須なら教科書に必要事項は絶対書いてあるからちゃんと読め。
必須じゃないなら自分である程度の勉強をしろ。
そういうことをしてもわからなかったら、必要な事項だけ質問するべし。漠然
と知りたいと言われても誰も答えられないよ。


161:デフォルトの名無しさん
06/01/21 00:40:36
スレタイに宿題って入ってたら丸投げだとオレも思ってた

162:デフォルトの名無しさん
06/01/21 00:42:27
問題についてもっと詳しい情報がなけりゃだれもやらんぞ。

連立方程式がわからないんですけどおしえてもらえませんか?

っていってるのと同じ。

163:デフォルトの名無しさん
06/01/21 00:48:45
自分ではココまで頑張ったってとこを教えれ

164:デフォルトの名無しさん
06/01/22 00:46:34
XMAX = 80
YMAX = 24
MAXSITE = (XMAX * YMAX / 4)
row = Array.new(YMAX+1).fill(0)
map = Array.new
(XMAX+1).times { map.push(row.dup) }

for j in 2..(YMAX-2)
for i in 2..(XMAX-2)
if (map[i][j] == 1)
putc(?@)
else
putc(?\s)
end
end
putc(?\n)
end
exit 0
全部入らなかったので最初と最後うpしましたが…

165:デフォルトの名無しさん
06/01/22 22:58:42
age

166:デフォルトの名無しさん
06/01/23 12:14:25
で、tkについてはどこまで頑張ったのか?

167:デフォルトの名無しさん
06/01/24 21:27:35
きっと月曜提出だったんだよ、ということで時間切れ。
つかアルゴリズム?の宿題で画面表示必須って意味あるの?

168:デフォルトの名無しさん
06/01/25 00:08:12
>>166
def draw(cw,cs,xs,ys)
for i in 1.. xs
for j in 1..ys
if @a[i][j]&0b0001!=0
TkcLine.new(cw,cs*i-1,cs*j,cs*i+cs,cs*j, "tags"=>"tag")
end
if @a[i][j]&0b0010!=0 && i !=xs
TkcLine.new(cw,cs*(i+1)-1,cs*j,cs*(i+1)-1,cs*(j+1), "tags"=>"tag")
end
end
end
TkcLine.new(cw,cs,cs,cs*(xs+1),cs,cs*(xs+1),cs*ys,"width"=>2, "tags"=>"tag")
TkcLine.new(cw,cs,2*cs+1,cs,cs,cs*(ys+1),cs*(xs+1),cs*(ys+1),"width"=>2, "tags"=>"tag")

こんな感じです(^_^;)

169:デフォルトの名無しさん
06/01/25 01:11:32
きたねーコードだな。
で、何がわからないんだっけ?

170:デフォルトの名無しさん
06/01/25 01:48:02
>>154
です、、
とゆーかもう完全に意味がわかりませんorz

171:デフォルトの名無しさん
06/01/25 11:13:10
少なくとも意味がわかってから質問するように。

172:デフォルトの名無しさん
06/01/31 00:57:40
迷路の線は描けたのですが、道順(脱出経路)の線をひくことができません。。

173:デフォルトの名無しさん
06/01/31 19:57:14
足を踏みいれた格子の色を変えていく。
ただし、それぞれの格子で、どの辺から格子に入ったかを記録しておき、
その辺から再び出る(=戻る)なら格子の色を元にもどす。

174:デフォルトの名無しさん
06/02/02 20:25:18
a,bが互いな素であるときaxをbで割ったあまりが1になるようなxを1つ出力するプログラムを書きなさい。
という課題が出ました。
互いに素というのは作れるのですが、後半部分ができません。
だれか教えてください。お願いします。


175:デフォルトの名無しさん
06/02/02 21:00:23
そのできた部分まで見せてくれるとやりやすいかもしれない

176:デフォルトの名無しさん
06/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:デフォルトの名無しさん
06/02/02 21:15:42
てかホントに初心者スレから移動したんだな

178:174
06/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:デフォルトの名無しさん
06/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:デフォルトの名無しさん
06/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
06/02/02 22:13:03
できました!みなさんありがとうございました!!!!

182:デフォルトの名無しさん
06/02/02 22:19:57
(1...b).each do |x|
 break if a*x%b == 1
end
return x

の方が計算量少ないのでは。

183:デフォルトの名無しさん
06/02/02 22:26:52
b != 1 のチェックも必要だね。

184:デフォルトの名無しさん
06/02/03 16:48:13
で、それどこの宿題? 大学? 高校? 中学校? 小学校?

185:デフォルトの名無しさん
06/02/03 22:41:09
>>183
b=1の時点で互いに素の可能性が消えるので不要。

186:デフォルトの名無しさん
06/02/04 02:49:49
互いに素の定義って最大公約数が1じゃなかたっけ?

187:デフォルトの名無しさん
06/02/06 23:59:56
URLリンク(www.pluto.ai.kyutech.ac.jp)

rubyで上記のURLのいずれかの公式を用いて円周率もとめたいんですけど、、、どなたかソースコード例示してもらえないでしょうか

188:デフォルトの名無しさん
06/02/07 00:18:42
puts (Math.atan(1.0/5)*4 - Math.atan(1.0/239))*4

俺ならこんなの書いてきたら落第させるがな

189:デフォルトの名無しさん
06/02/07 03:29:45
>188
それだとputsの戻り値*4にならないか?

190:デフォルトの名無しさん
06/02/07 08:34:49
puts は 必ず nil を返すように作られてるんだがそれでもよろしいか

191:デフォルトの名無しさん
06/02/07 09:31:26
 hoge (1+2) * 3

 hoge(1+2) * 3
と同じ動作をするべき?

まあ、そうかもね。

192:デフォルトの名無しさん
06/02/07 13:37:36
どっちにしても、そういう仕様だからなぁ。

193:デフォルトの名無しさん
06/02/07 14:00:18
「カッコが省略されてる引数は最初の空白で区切れるようにしろ」というのは
主張としてはある程度真理だな

引数に空白を含めたい人が自力でカッコで括ってれと

「文末が出るまで全部引数にしまっちゃうよ」というのもそれはそれで便利だが

194:デフォルトの名無しさん
06/02/08 11:40:32
で、宿題としては要は自前でテーラー展開しろってことなんだろうな。
そろそろ気づいて自力でできた頃か?

195:デフォルトの名無しさん
06/02/08 18:40:30
おいおい、自力でテーラー展開してどうするんだ?
ニュートン法でも発明しろってことか?w

196:デフォルトの名無しさん
06/02/23 01:33:21
ここ北大の人が質問してそう

197:デフォルトの名無しさん
06/02/23 02:29:37
ちょっとドキッとしたが卒業生だからもう関係ねーや

1年の情報処理ででもやってるのかな
俺のやったときはFortran77/90とCとDelphiの選択だったような気がする

198:デフォルトの名無しさん
06/02/23 04:38:20
また来年も質問が来るのかな

199:デフォルトの名無しさん
06/02/23 14:51:52
URLリンク(crab.hucc.hokudai.ac.jp:8080)
これか? いや、これはD言語みたいだな。。。(汗


200:ハーピィ
06/02/24 11:53:49
E・∇・ヨノシ <200ゲット♫

201:デフォルトの名無しさん
06/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:デフォルトの名無しさん
06/03/28 17:36:43
どうしたいの?

203:デフォルトの名無しさん
06/03/28 18:03:52
スレリンク(tech板:10番)
なお話?

204:デフォルトの名無しさん
06/03/28 18:10:18
.headerじゃ、HTMLの<HEAD>と</HEAD>の間しか採れないと思う。
漏れが欲しいのはHTTPの中で鯖から送られて来る情報。

205:デフォルトの名無しさん
06/03/28 18:35:27
(⊃д`)

206:デフォルトの名無しさん
06/03/28 18:44:02
Response から each を使えばいいような気がするのだが。


207:デフォルトの名無しさん
06/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:デフォルトの名無しさん
06/03/28 21:31:34
ありがとうございました。

209:デフォルトの名無しさん
06/04/07 10:36:49
保守

210:デフォルトの名無しさん
06/04/07 20:37:40
質問者を堕落させ、回答者のレベルをアップさせるスレってここのことですか?
質問者はruby-man-ja-html-20051029ぐらい読んでいるんだよな?
と、てきとうなことを言ってみた。


211:デフォルトの名無しさん
06/04/07 20:52:34
スレの性質上、学期末じゃないとあんまり釣れないと思うよ


212:デフォルトの名無しさん
06/05/03 23:44:59
学期末とかじゃなくても良いから
問題出してくれねーかなー。
面白そうなら、コード書くからさー。

213:デフォルトの名無しさん
06/05/04 22:38:17
じゃあ、問題出し合うスレにしちゃうか!

214:デフォルトの名無しさん
06/05/05 14:20:15
じゃ、お題。っ【ソリティア】

215:デフォルトの名無しさん
06/05/05 19:22:45
>>214
ソリティアを"作る"のか"解く"のかどっちだ?

216:214
06/05/06 04:17:59
じゃとりあえず

ソリティア「クロンダイク」を作る

で。俺も作ってみるかなー。


【仕様案(あくまで俺用。参考にでも】

・配置はランダム
Winのフリーセルのような問題番号はなし。

・CUIで入出力
CUIの方が環境依存少なめかなぁと。

・サブコマンド
列名をアルファベットで現し
基本は3文字で[列名][枚数][列名]。
例: A3C (A列の3枚をC列へ移す)
山札をめくる時は半角スペース1個入れてエンター。

列名はプレイ時に一目で判るようにしておく。
って言うか文字順に置くかキー配置なぞって置くか2案で悩み中。

217:デフォルトの名無しさん
06/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:デフォルトの名無しさん
06/05/17 19:53:34
>>217
で、どうしろと?

219:デフォルトの名無しさん
06/05/17 20:12:02
>218
作りたい人は作る。基本スルー。

220:デフォルトの名無しさん
06/05/19 01:57:28
つまりrubyでカードゲームは無理ということですよ。

221:デフォルトの名無しさん
06/05/19 03:29:39
Rubyで無理じゃなくて、ここの住人じゃ無理なだけでそ

222:デフォルトの名無しさん
06/05/19 06:46:32
Win32API使ってもいい?

223:デフォルトの名無しさん
06/05/19 08:27:37
良いんじゃね?

224:デフォルトの名無しさん
06/05/19 08:56:46
じゃあUNO作るわ
まっとれ

225:デフォルトの名無しさん
06/05/19 13:21:12
ひとりでUNOやってて楽しいか?

昔MacでUNOのゲームがあったが、かなりつまらんかったな。

226:デフォルトの名無しさん
06/05/19 13:30:04
>>225

>>1

227:デフォルトの名無しさん
06/05/21 13:38:41
UNOはつまらん
囲碁にしようぜ、てか囲碁のプログラムってむずくね?

228:デフォルトの名無しさん
06/05/21 16:29:22
そんな面倒なのじゃなくまず3人じゃんけんのプログラムから始めろよ

229:デフォルトの名無しさん
06/05/21 16:37:47
囲碁は終了判定があいまいでプレイヤーの感覚に任せる部分が大きい
ぶっちゃけどちらかが投了しない限り続行は可能だよ

つーかUNOも囲碁も相手が必須だろ
そこをどうするかがポイントになるハズ

230:デフォルトの名無しさん
06/05/21 17:15:27
>>228
グー・グー・チョキの場合は決勝? あいこ?

231:デフォルトの名無しさん
06/05/21 19:21:32
>>230
あいこしたら、あいこした方が負け。
つまり、チョキの勝ちというルールで。

232:デフォルトの名無しさん
06/05/21 20:04:07
>>230
あいこにしたほうが簡単ぽいのでひとまずあいこでよし

233:デフォルトの名無しさん
06/05/22 02:34:21
>>230
あいこのグーふたりを勝ちにして、チョキを落として再試合。
つまり、次回から勝負が決まるまでチョキの結果をムシすれ。

234:デフォルトの名無しさん
06/05/22 08:49:28
おまいら馬鹿なのか?
CPU1だけと7並べやってもつまらんって当たり前じゃん。
CPU1, CPU2, CPU3とプレーヤの4人で7ねらべとか出来る様にすればいいじゃん。

マクのUNOって糞だっただけじゃね?
PCのUNOはそこそこおもしろかったよ。

235:デフォルトの名無しさん
06/05/22 08:51:55
URLリンク(www.amazon.co.jp)

236:デフォルトの名無しさん
06/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続き
06/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:デフォルトの名無しさん
06/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:デフォルトの名無しさん
06/05/22 16:18:18
ある程度短ければ自分の全力で作っていいんじゃね?
初心者勉強スレみたいな雰囲気もあるから迷うが

240:デフォルトの名無しさん
06/05/22 19:43:42
三人じゃんけんかー。
昔、JAVAで作ったのがあるから移植してみようかな。


241:デフォルトの名無しさん
06/05/22 21:15:31
何かプロトコル決めて、戦わせたいね(w
Simple Janken Transfer Protcol(SJTP)とか。

242:デフォルトの名無しさん
06/05/22 22:50:53
Transfer ワロタ

243:デフォルトの名無しさん
06/05/22 23:16:19
でも作って公開してもメリットなくね

244:デフォルトの名無しさん
06/05/22 23:54:46
ひとつのゲームだけじゃなくて
汎用的なカードゲーム用exchangeサイトみたいなの
Rubyで作れんかね

245:デフォルトの名無しさん
06/05/22 23:58:30
あんまRuby向きの概念ではないな
個々のシステムを個々に作るほうが得意だと思う

246:デフォルトの名無しさん
06/05/23 00:33:22
>>243
作るだけでも非常に勉強になるぞ
というのはどうだろう

素人のプログラムなんて読みたくねえよな実際

247:デフォルトの名無しさん
06/05/23 01:20:01
>>246
ここに書いとくとMinero Aokiがリファクタリングしてくれるという特典付き。

248:デフォルトの名無しさん
06/05/23 07:08:10
そうか

249:デフォルトの名無しさん
06/05/23 08:54:39
じゃんけんする人をn人にした場合はどうなるの?

250:デフォルトの名無しさん
06/05/23 14:50:55
[グー、チョキ、パー、・・・、手_n] になる

251:デフォルトの名無しさん
06/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
06/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
06/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
06/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
06/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 しまったメソッド途中で切っちゃった
06/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:デフォルトの名無しさん
06/05/23 15:37:33
はい終わり。

258:デフォルトの名無しさん
06/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:デフォルトの名無しさん
06/05/30 01:49:26
ちょっと昔作ったJAVAの三人じゃんけんをRubyに移植してみたら
約200行になった。ここには貼れない。
ちなみに、JAVAの時は約300行だった。

ロジックはJAVAで書いた時のをそのまま移植したので
もっとエレガントに出来そうな気はしてる。

260:デフォルトの名無しさん
06/05/30 12:43:55
>259
是非別所にうpしる
Rubyに書き換えようぜ

261:デフォルトの名無しさん
06/05/30 12:46:31
N人じゃんけんが既に出てるから、判定部分は何か面白いことしてないと目立たないぞ(w

どこかのあぷろだ借りるのが手っ取り早いだろうな

262:デフォルトの名無しさん
06/05/30 13:34:30
ここ?

ソースポスト
URLリンク(sourcepost.sytes.net)

263:デフォルトの名無しさん
06/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:デフォルトの名無しさん
06/05/30 16:24:06
じゃんけんが完成したら、いよいよ野球拳の実装だな。wktk

265:デフォルトの名無しさん
06/05/30 18:39:19
オセロまでいくとむずすぎる?

266:デフォルトの名無しさん
06/05/30 18:55:58
頭の悪いオセロなら簡単だよ

267:デフォルトの名無しさん
06/05/31 04:16:01
それオセーロ

268:259
06/05/31 07:17:44
遅くなってすみません。
URLリンク(sourcepost.sytes.net)

Rubyに移植済みのもの。
判定部分に剰余を使っているので三人でしかじゃんけんできません。

あと、ルール
一人勝ちなら+2ポイント残り二人は-1ポイントずつ
二人勝ちなら+1ポイントずつ残り一人は-2ポイント
終了条件は特に無し

# EUC-JPなファイルをupしたら文字化けorz

269:デフォルトの名無しさん
06/05/31 14:02:51
>>268
URLリンク(sourcepost.sytes.net)
Rubyっぽくしてみた。
ルール(配点)の入れどころがよくわからんかったので消してしまったがJanken側にあるべきではないか。

$ ruby source.rb プレーヤ数 回数
で実行できるけど30人越えた辺りで反応がすげー鈍くなるよ。


270:268
06/05/31 19:56:37
>>269
うーん、Rubyだ。

ポイントの入れ方は、3人でじゃんけんして
あいこなら変化なし
一人勝ちなら勝った人は+2point,負けた二人は-1pointずつ
二人勝ちなら勝った二人は+1pointずつ,負けた人は-1point
# ダメな変数の使い方の見本になってしまったorz
# flagに複数の意味を持たせてしまっていたようだ
# いくら一年以上前のプログラムだからって気付けよ>一昨日の自分

確かに、配点を弄るメソッドがPlayerにあるのは変ですね。
Jankenクラスにjudgeメソッドを実装するなら、ポイントを弄るメソッドも
Jankenクラスにあるべきですね。

>268の時点では、Jankenクラスは特に役目は無くて(ってまたダメな設計の見本orz)
単にゲームを開始するだけの係りでした。


271:デフォルトの名無しさん
06/05/31 20:38:13
>>269
>>263の人?
初心者だけど、Rubyの勉強になった。サンクス。
2時間ぐらいマニュアルと格闘しながら解読した。

272:デフォルトの名無しさん
06/06/01 13:08:46
Jankenにポイント計算つけた。
URLリンク(sourcepost.sytes.net)
(敗者数/勝者数).ceilのポイント(敗者数>勝者数、そうでなければポイント=1)を分ける。
敗者は常に-1にしてある。
3人でやったときは同じ結果で、それ以上でも同じルールをスケールした結果になるはず。


273:デフォルトの名無しさん
06/06/01 19:51:06
>>272
本当に些細なことだが、
scissorsは単複同形だよ。

274:デフォルトの名無しさん
06/06/02 01:38:55
N人であいこなし。複数人が勝てるパターンにしてみた。
URLリンク(sourcepost.sytes.net)

使い方は>269と同じ(パクりました)
* 変数名、メソッド名を自分の好みに変更
* 判定にビット演算を使いたかったので、手の定義を変更した。
* 対話的に動かせるようにしてみた。
* 回数が多いときは誰かが101勝したら終了
* 人数を増やしすぎると延々あいこが続くので決着が着かない

例えば、
$ ruby Janken.rb 3 10
なら、3人で10回勝負が着くまでじゃんけんしつづける。

# あいこでredoさせるのに手間取った
# Fixnum#stepでredoすると最初からになってしまうorz
# 人数が多い時は別の終了条件にした方が良さそう。
# おいらが書くと長くなってしまうorz

275:デフォルトの名無しさん
06/06/03 15:28:38
age

276:デフォルトの名無しさん
06/07/16 14:47:02
すいません。
ある文字列があったときに、特定の範囲の文字色を変えるというプログラムをつくりたいのですが、
どなたかアドバイスお願いします。

いまはHTMLで出力しているのですが、それ以外にも、ruby/tkでつくったプログラム上に表示したいと思っています。


277:デフォルトの名無しさん
06/07/16 15:07:20
file=File.read('test.txt')

rules=[
  {'re' => /cat/ ,'from' => 'ねこだいすき', 'to' => '<font color=red>ねこだいすき</font>'},
  {'re' => /dog/, 'from' => 'いぬだいすき', 'to' => '<font color=blue>いぬだいすき</font>'}
]

rules.each do |rule|
  if file =~ rule['re'] then
    file.gsub(rule['from'],rule['to'])
  end
end


#アドバイスって何が欲しいんだろう…

278:デフォルトの名無しさん
06/07/17 04:44:43
宿題スレ向きだよな。
アドバイスじゃなくて正解が知りたいと思う悪寒。

こう試してみたけど出来ませんじゃないし。

279:デフォルトの名無しさん
06/07/17 10:32:52
ここ宿題スレだよね

280:デフォルトの名無しさん
06/07/17 11:33:00
宿題隔離スレだから自力でできた(できてない)とこから以下全部丸投げとかでも構わない
こんなとこで一言一句完全丸写ししてバレないと思ってるならそれでもいいし

ただし問題が何したいのかさっぱりわからん場合はそれこそ問題外

281:デフォルトの名無しさん
06/07/17 11:45:35
問題文さえここに正確に書き写せない香具師なんだからどうなっても知らん

282:デフォルトの名無しさん
06/07/24 21:22:49
さっぱりわかりません。どうかよろしくお願いします。

URLリンク(kansai2channeler.hp.infoseek.co.jp)

283:デフォルトの名無しさん
06/07/24 21:32:58
ar.push ar.shift


284:デフォルトの名無しさん
06/07/24 21:48:13
これもわかりません。どうか優しい人よろしくお願いします。

URLリンク(kansai2channeler.hp.infoseek.co.jp)

285:デフォルトの名無しさん
06/07/24 21:51:24
>>283
その日の授業内容にもよるが先生が頭抱えそうな回答だな(w

286:デフォルトの名無しさん
06/07/24 21:59:40
>282,284
っていうか教科書読めよ。

特に 284 なんて問題文に答えが書いてあるのにこれ以上優しく説明できるか。


287:デフォルトの名無しさん
06/07/24 23:23:54
x = ARGV[0].to_i
if /[05]$/ =~ x.to_s
print "#{x}は5の倍数です。\n"
end
if /^(([0369]|[258][0369]*[147])|([147]|[258][0369]*[258])([0369]|[147][0369]*[258])*([258]|[147][0369]*[147]))*$/ !~ x.to_s
print "#{x}は3の倍数ではありません。\n"
end

288:デフォルトの名無しさん
06/07/25 01:02:30
>>287
ありがとうございました!!!!!
本当に助かりました!

289:デフォルトの名無しさん
06/07/25 14:27:15
>>283>>287を提出したのだろうか

290:デフォルトの名無しさん
06/07/25 20:27:32
283はいいと思うけど、287はちょっとなぁ。

291:デフォルトの名無しさん
06/07/25 20:32:00
>>282も配列の添え字の勉強をした上での宿題なんじゃないかと思うぞ…

292:デフォルトの名無しさん
06/07/25 21:19:06
>>287の3の倍数でない方がよくわからん。
3で割り切れないじゃダメなの?

293:デフォルトの名無しさん
06/07/25 21:23:40
5の倍数のとこをよく読んで意図を掴め

294:デフォルトの名無しさん
06/07/26 02:42:09
ARGV[0].to_s.split(//)#!/usr/bin/ruby

def sm(s)
sm = 0
s.to_s.split(//).each {|e|
sm += e.to_i
}
sm = sm(sm) if(sm >= 10)
return sm
end

f = [true, false, false, true, false, false, true, false, false, true]
p f[sm(ARGV[0])]



295:デフォルトの名無しさん
06/07/26 02:42:50
ゴミがついたので貼りなおし

#!/usr/bin/ruby

def sm(s)
sm = 0
s.to_s.split(//).each {|e|
sm += e.to_i
}
sm = sm(sm) if(sm >= 10)
return sm
end

f = [true, false, false, true, false, false, true, false, false, true]
p f[sm(ARGV[0])]

296:デフォルトの名無しさん
06/07/26 02:45:06
文字が入力されてたらアウトだからこうかな


#!/usr/bin/ruby

def sm(s)
sm = 0
s.to_s.split(//).each {|e|
sm += e.to_i
}
sm = sm(sm) if(sm >= 10)
return sm
end

p [false, false, false, true, false, false, true, false, false, true][sm(ARGV[0]
)]


297:デフォルトの名無しさん
06/07/26 18:19:26
x = ARGV[0].to_i
if ("x" * x).gsub(/xxx/,'') !~ /x/
print "#{x}は3の倍数ではありません。\n"
end

298:デフォルトの名無しさん
06/07/28 00:58:09
どうか助けてください。

URLリンク(kansai2channeler.hp.infoseek.co.jp)

299:デフォルトの名無しさん
06/07/28 01:13:51
またお前あるいは同類か

どうでもいいがこれまで言われたアドバイス全然生かしてねえな

300:デフォルトの名無しさん
06/07/28 01:17:03
授業で習ってない書き方をしたら丸写しバレるだろって話ね(w

301:デフォルトの名無しさん
06/07/28 01:39:33
こんなに答えの書いてある問題はさすがにないと思うんだが、本当に宿題なのかなあ。


302:デフォルトの名無しさん
06/07/28 01:43:07
>>301
すまん、こういうパズル未満の難易度の言葉合わせな宿題は出る。
授業聞いてればそれなりに何使うかは思いつくだろ、みたいな。
情報でのプログラムの演習なんてその程度でいいんだよ。

303:デフォルトの名無しさん
06/07/28 01:47:16
>>298
てゆーかさ、これだとpflagはずっとtrueのままじゃね?

304:デフォルトの名無しさん
06/07/28 01:53:24
>>298
include Math
n = ARGV[0].to_i
ne = sqrt(n).to_i
pflag = true
for i in 2..ne
 break if pflag = n % i == 0
end
puts pflag ? 'xx は合成数です' : 'xx は素数です'

俺にはこれが限界
後は誰か頼む

305:デフォルトの名無しさん
06/07/28 01:57:00
プログラムが書けるより、問題を論理的に解析して解の生成アルゴリズムをひらめくのが重要。
アルゴリズムがひらめけばあとは言語仕様に従って記述すればプログラムに成るし。

306:ど素人
06/07/28 02:01:09
参考書にてわからない問題がありました。次のプログラムって日本語でどう説明できますか?
ぜひお願いします。
A=new Array(3, 8, 19, 20, 22, 24, 45);
i=0;
j=A.length-1;
a=19;
k=Math.floor((i+j)/2);
while(i<=j){
if(A[k] == a){
break;
}
else if(A[k] > a){
j = k - 1;
}
else{
i = k + 1;
}
k = Math.floor((i+j)/2);
}
if(i>j) k=-1;
document.write(a," ",k);



307:デフォルトの名無しさん
06/07/28 02:06:14
>>306
Rubyじゃないじゃん。

308:デフォルトの名無しさん
06/07/28 02:15:10
javascriptか
言語ですらないな
板違いだ

309:デフォルトの名無しさん
06/07/28 02:20:29
JavaScriptの言語性を馬鹿にしていると痛い目見るぞ

310:デフォルトの名無しさん
06/07/28 02:32:19
>>309
馬鹿にされたと思ったあなたは >>306 ですか?

311:デフォルトの名無しさん
06/07/28 09:16:50
どこをどう読めば人を馬鹿にしてると読めるんだろう

312:デフォルトの名無しさん
06/07/28 09:26:32
馬鹿な人がいるようには読める。

313:デフォルトの名無しさん
06/07/28 10:32:03
馬鹿な人には読めないマキコ。

314:デフォルトの名無しさん
06/07/28 13:19:12
どっちにしろ荒らしに反応すな

315:デフォルトの名無しさん
06/07/28 16:16:36
js=ajax=web2.0

316:デフォルトの名無しさん
06/08/26 13:24:41
もしかしたらスレ違いかも知れませんが…

コマンドラインから
テキストファイルを、各行の頭に行番号を付け表示したいのです。
今は Ruby で

ruby -e 'a=readlines;for i in 0...a.size;printf"%6d: %s",i+1,a[i];end' textfile

としています。
でももう少し短くなる気がするのですが、良いワンライナー無いでしょうか?

317:デフォルトの名無しさん
06/08/26 14:03:40
ruby -ple 'printf "%6d: ", $.'

318:デフォルトの名無しさん
06/08/26 14:07:40
ruby -e 'exec("/bin/cat", "-n", *ARGV)'

319:デフォルトの名無しさん
06/08/26 14:16:06
ruby -e 'ARGF.each{|s|printf "%6d: %s", ARGF.file.lineno, s}'

320:316
06/08/26 17:00:01
>>317
短ッ!rubyのオプションと特殊変数の事
すっかり忘れてました、感謝です

>>318
環境書き忘れてた…今度リナやユニ触る機会があったら
catのオプションの事思い出します

>>319
ARGF.eachはさっき気付いて
i=0;ARGF.each{|s|printf "%6d: %s",i+=1,s}
って書いたところでした

そういやARGFは独自のメソッド持ってるんでしたね…

321:デフォルトの名無しさん
06/08/30 11:56:52
>>320
> i=0;ARGF.each{|s|printf "%6d: %s",i+=1,s}

そういうときはwith_index使えって教わんなかったか?
ARGF.each_with_index{|s, i|printf "%6d: %s", i, s}


322:デフォルトの名無しさん
06/08/31 22:22:15
二進表示をprintf,sprintfを使わず、正の整数を入力して
その二進表示を出力するプログラムを作成しよ。
ただし整数から二進表示文字列を作るメソッドi2bを
作成してそれを呼び出すように書くこと。

できるだけ簡単なプログラムでお願いします。
Ruby初心者なのでわからなくて困ってます。



323:デフォルトの名無しさん
06/08/31 22:35:13
>>322
alias myprintf printf
myprintf("%b\n", 10) #=> 1010


324:デフォルトの名無しさん
06/08/31 22:38:35
>>323
ありがとうございます。
でも、せっかく作成していただいたのに申し訳ないのですが
printfは使って作成してはいけないんです。


325:デフォルトの名無しさん
06/08/31 23:05:24
ちっ、バレたかwww

326:デフォルトの名無しさん
06/08/31 23:05:42
>>322
こんなんじゃダメ?

def i2b i
return i.to_s(2)
end

327:デフォルトの名無しさん
06/08/31 23:16:24
Fixnum < Integer#to_s
--- to_s
--- to_s(base) ruby 1.7 feature

整数を 10 進文字列表現に変換します。

ruby 1.7 feature: 引数を指定すれば、それを基数とした文字列表
現に変換します。基数として 2 ~ 36 以外を指定した場合は例外
ArgumentError が発生します。

p 10.to_s(2) # => "1010"
p 10.to_s(8) # => "12"
p 10.to_s(16) # => "a"
p 35.to_s(36) # => "z"

これか。
これ提出されたら、宿題だした奴もがっくり来るだろうなw

328:デフォルトの名無しさん
06/08/31 23:28:58
>>326>>327
ありがとうございます。
家のパソコンだとプログラムが実行できないので
明日実行できるパソコンで試してみます。

329:デフォルトの名無しさん
06/08/31 23:29:00
超ナイーブに書いてみたが数字がでかいとスタックオーバーフローで死ぬ。
def to_bin(i); q, m = i.divmod(2); q == 0 ? m : to_bin(q).to_s + m.to_s;end

330:デフォルトの名無しさん
06/08/31 23:34:27
>>328
家のパソコンにもRubyインストールすればいいだろ?
よっぽど特殊なOSで無い限り入れられる。

331:デフォルトの名無しさん
06/08/31 23:42:20
329>>
何回もインストールしてみたのですが
何回挑戦しても失敗してしまいます。



332:デフォルトの名無しさん
06/08/31 23:55:11
>>331
URLリンク(rubyforge.org)
URLリンク(instantrails.rubyforge.org)

どっちでも好きな方を試せ。
使い方は聞くな。


333:デフォルトの名無しさん
06/09/01 00:00:08
最近は宿題もWeb2.0とか意識するべきだと思うんだ


def i2b(i)
require "open-uri"
open('URLリンク(google.co.jp)'+i+'+in+binary').read.scan(/0b([01]+?)</)
end

puts "正の整数を入れてください"
i=STDIN.gets.chomp
puts i2b(i)


334:デフォルトの名無しさん
06/09/01 00:03:39
332>>333>>
ありがとうございます。
助かりました。

335:デフォルトの名無しさん
06/09/01 00:13:12
web 2.0ってperl廚の妄言のような。
phpとの戦いで死にかけてるから生き残りに必死な様にしか見えない。

336:デフォルトの名無しさん
06/09/01 00:17:55
>>335
そうか?PHPってgoto導入して死ぬんだろ?

337:デフォルトの名無しさん
06/09/01 00:20:51
Web2.0は言語を規定しない(そもそも何も規定しないがw)

「なんかWeb通して新感覚にみんなで超便利」というサービスを提供する限り、
サーバー上の言語は本当に何でもよい

338:デフォルトの名無しさん
06/09/01 00:43:49
初心者の自分が作った方が参考になるんじゃないのかな?

def i2b i
b = "" # 2進法文字列の初期化

while i>0
if i%2 == 1 then # 2で割って余りをもとめる
b = "1" + b # 1なら文字列の先頭に1を追加
else
b = "0" + b # 0なら文字列の先頭に0を追加
end
i = i/2
end

return b
end

339:デフォルトの名無しさん
06/09/01 01:06:58
def i2b(i)
  cc = nil
  b = ""
  if i = callcc {|cc| i}
    b = "01"[i % 2] + b
    cc.call((i / 2).nonzero?)
  end
  b
end


340:デフォルトの名無しさん
06/09/01 09:53:17
>>338
わかりやすく教えていただいて
ありがとうございます。
>>339
ありがとうございました。

341:デフォルトの名無しさん
06/09/01 11:03:29
>>338
参考にはなるかもしれんが、ためにはならんぞ。

342:デフォルトの名無しさん
06/09/09 05:00:57
Rubyで書かれたうpろだのソースってありますか?

343:デフォルトの名無しさん
06/09/09 11:31:05
ハイレベルな宿題だな

344:デフォルトの名無しさん
06/09/09 19:34:15
>>342
cgi限定?
http以外のプロトコル使ってもいいのかな?


345:デフォルトの名無しさん
06/09/09 21:53:01
AppleTalkでお願いします。

346:デフォルトの名無しさん
06/09/10 18:06:15
>>342
ここにあるよ
URLリンク(wirepuller.org)

347:デフォルトの名無しさん
06/09/11 16:25:43
>>346
ありがとうございます。
CGI.rbの仕様で10kB以下だとStringIOで処理されて
それ以上のサイズだとTempfileオブジェクトになるようだと
書いてあるのですが
「Tempfileの場合、数MBのファイルをread,writeするのはあれなので」
という部分の意味が良く分かりません
何があれなんでしょうか

348:デフォルトの名無しさん
06/09/11 16:43:40
やっぱり、なにがあれなんだろう。

349:デフォルトの名無しさん
06/09/11 16:47:04
「数MBのファイルを、わざわざ Ruby の read/write を使ってアップローダ側
のディレクトリの特定のファイルにコピーするのは処理にオーバヘッドがかか
るので」

てとこじゃね。

350:デフォルトの名無しさん
06/09/11 16:51:16
ああでもあれか、 FileUtils.cp ってけっきょく ruby レベルで read/write
を繰り返しているわけだよな。まあ、当り前だが。

それに、ソースを見てみると file.size の大小で TempFile かどうか判定し
てるね。 is_a? とかを使った方がいいんじゃないかなあ。


351:デフォルトの名無しさん
06/09/11 22:39:34
multipart/form-dataってファイル毎のデータ長送ってこない上に、次にどのファイル(or フォームのクエリ)が来るか分からないんだっけ。
だから便利性を求めたライブラリは、テンポラリファイル作るとか回りくどい仕様になってるんだよね。

こういうインターフェイスにすれば、少し面倒になるけど
テンポラリも要らないし融通が利くのに。

cgi = CGI.new
cgi.find_file {|info, fp|
 # フォームから送られた名前で振り分け
 if info.name == "upload_file"
  # fpを使ってファイルに保存する処理
 else
  # 普通のクエリとして扱う
  cgi[info.name] = fp.read
 end
}

352:デフォルトの名無しさん
06/09/15 02:07:28
def seach(dir, key)

dir(ディレクトリ), key(検索キーワード)
で指定したディレクトリ下にある合致するファイルを検索して
合致するファイル名の配列を返す関数のコードお願いします。

353:デフォルトの名無しさん
06/09/15 02:52:35
自分で出来ました。お騒がせしました。

def seach(dir, key)
a = Array.new

Dir.foreach(dir){|f|
if f[key]
a.push(f)
end
}

a
end

seach(Dir.getwd, ".txt").each{|v|
print v + "\n"
}

354:デフォルトの名無しさん
06/09/15 04:44:56
Dir.glob(dir + "/**/" + key)
じゃ駄目?

355:デフォルトの名無しさん
06/09/15 09:46:53
合致するファイルって名前だけか。


356:デフォルトの名無しさん
06/09/15 12:35:15
353.gsub(/serch/, 'search')

357:デフォルトの名無しさん
06/09/15 12:36:53
353.gsub(/seach/, 'search')

358:デフォルトの名無しさん
06/09/15 13:35:36
353.gsub /(?=。)/, "お"

(^ω^ )

359:デフォルトの名無しさん
06/09/19 05:01:46
数字に変換できなくなるまで、入力を何回でも受け付けるプログラムを
作りました。入力された文字列が数字に正しいものかどうかをチェック
するようなフィルタを作ったんですが、あまりスマートに書けませんで
した。もう少し、きれいなコードを書く方法をご存知の方、ご意見を下
さい。
#!/usr/bin/ruby
def i2b (i) ;return i.to_s(2) ;end
#文字列が数値に変換可能かチェックする 0xffはOK 124ffはNG
def analyzer (str) #if str can be converted to number => true else => false
str.delete!("\n");str.downcase!
case str[0..1]
when '0x'
num = str.to_i(16)
if num.to_s(16) != str[2..-1] ;return false ;end
when '0b'
num = str.to_i(2)
if num.to_s(2) != str[2..-1] ;return false ;end

360:デフォルトの名無しさん
06/09/19 05:03:41
when '0d'
num = str[2..-1]
if num.to_s(10) != str[2..-1] ;return false ;end
when '0o'
num = str.to_i(8)
if num.to_s(8) != str[2..-1] ;return false ;end
else
if str[0] == '0'[0] and str.length > 1
num = str.to_i(8)
if num.to_s(8) != str[1..-1] ;return false ;end
elsif str[0] != '0'[0]
num = str.to_i(10)
if num.to_s(10) != str ;return false ;end
end
end
return true
end
puts "please input number."
loop{
print ">" ;str = gets()
if analyzer(str) == false ;puts "#{str} is not number" ;exit ;end
num = str.to_i(0) ;puts i2b(num)
}


361:デフォルトの名無しさん
06/09/19 13:54:30
age

362:デフォルトの名無しさん
06/09/20 00:09:54
def analyzer(str)
  Integer(str)
  true
rescue ArgumentError
  false
end


363:359
06/09/20 01:36:19
ありがとうございます。組込み関数のInteger(str)は見落としていました。
str.to_i()が例外を投げない仕様になっていたので困っていた所です。
あとリファレンスを読むのが不十分でした。すいません、今後は気を付けます。

364:359
06/09/20 01:37:01
ありがとうございます。組込み関数のInteger(str)は見落としていました。
str.to_i()が例外を投げない仕様になっていたので困っていた所です。
あとリファレンスを読むのが不十分でした。すいません、今後は気を付けます。

365:デフォルトの名無しさん
06/09/25 00:44:03
お礼は一回でおk。

366:デフォルトの名無しさん
06/09/25 05:45:12
ありが㌧㌧㌧㌧㌧㌧㌧㌧㌧㌧㌧㌧㌧㌧㌧㌧㌧㌧㌧㌧㌧㌧㌧㌧㌧㌧㌧㌧㌧㌧㌧㌧㌧㌧㌧㌧㌧㌧㌧㌧㌧㌧㌧㌧㌧㌧㌧㌧

367:デフォルトの名無しさん
06/10/04 13:58:21
勉強になるので、以前のじゃけんプログラムみたいな数百行程度のプログラムを
また作って欲しいのですが。

368:デフォルトの名無しさん
06/10/04 16:22:36
自分で作った方が勉強になるぞ。


369:デフォルトの名無しさん
06/10/04 19:45:42
>>367
ネタ寄越せ。

370:デフォルトの名無しさん
06/10/04 20:41:08
「ババ抜き」とかどうでしょうか?
表示は、例えばこんな感じで

A:H1 D3 SQ C9 HJ DK S0
B:D4 S0 CQ JK
C:C5 H0 S2 DQ SK
D:D4 H1 CK SJ H7 H9

Aさんが、Bさんから S0 を取りました。

A:H1 D3 SQ C9 HJ DK
B:D4 CQ JK
C:C5 H0 S2 DQ SK
D:D4 H1 CK SJ H7 H9

Bさんが、Cさんから H0 を取りました。

A:H1 D3 SQ C9 HJ DK
B:D4 CQ JK H0
C:C5 S2 DQ SK
D:D4 H1 CK SJ H7 H9

371:デフォルトの名無しさん
06/10/04 23:45:38
たびたびわからなくなるんだが、
引かれた奴が次に他の奴から引くんだっけ?
引いた奴が次に他の奴から引かれるんだっけ?


372:デフォルトの名無しさん
06/10/04 23:52:43
ローカルルールがあるかもしれないが、うちでは引いた奴が他の奴から引かれるというルール。
そうじゃないと、「おい、お前今混ぜてるのはババ引いたからだろ!」ということが起こらず面白くない。

373:デフォルトの名無しさん
06/10/05 23:53:37
最強のジャンケンAI。綿密な先読みで人間などには負けることが無い。


print "ジャンケンしーましょ、最初はグー!"
print "ジャンケン・・・[g=グー/c=チョキ/p=パー]:"
puts "AIの手:"+ ({?g => "パー", ?c => "グー", ?p => "チョキ"}[gets[0]] or raise "死ね。")
puts "お前の負けだ。"

374:デフォルトの名無しさん
06/10/06 00:18:51
>>373
それは後出しと言って反則なんだよ。

375:デフォルトの名無しさん
06/10/06 03:40:29
いや、出す瞬間に、相手の手を見て反応しているのでOK。
ハンターハンターでやってた

376:デフォルトの名無しさん
06/10/06 07:35:01
>>375
ハンターハンターのは「出す直前」だが、>373のは完全に後出し。

377:デフォルトの名無しさん
06/10/06 13:48:43
ババ抜きってさあ、記憶力と観察力があれば、自分のとこから取られたカードがどこにあるかわかるから有利になれるんだけど
そういう戦略を実装できるようにすべき?

378:デフォルトの名無しさん
06/10/06 14:12:53
したけりゃしろよ。
スレ違いだし。

379:デフォルトの名無しさん
06/10/06 15:33:39
スレ違いな理由は何?

380:デフォルトの名無しさん
06/10/06 16:11:05
>>377
した方が面白いと思う。

381:デフォルトの名無しさん
06/10/06 21:14:51
>>377
戦略とかあるの?
ランダムに引く人と戦略を持っている人とで、勝利確率どのぐらい違うが見てみたいね。

382:デフォルトの名無しさん
06/10/06 21:31:05
戦略:こっそりはなくそをつけとく

383:デフォルトの名無しさん
06/10/07 23:40:54
質問です。
次のようなテキストファイルがあったとします。

"ほげほげ","なんとか","むだむだ"
"ほげほ","なんとかか","むだむだだ"
(以下、何十行か続く)

それを

ほげほげ   なんとか   むだむだ
ほげほ   なんとかか   むだむだだ
(以下続く)

という感じの書式(空白はタブです)に変えてテキストファイルとして書き出すスクリプトを書きたいのですが、
正規表現とか難しいことを使わないと行けないのでしょうか。
どなたかやり方ご存じありませんでしょうか。

384:デフォルトの名無しさん
06/10/07 23:49:02
データに","が含まれないなら
while s = gets
puts s.gsub(/"/, "").gsub(/,/, "\t")
end

ちゃんとCSVを処理したいなら、RAAでcsv関連のライブラリを探すとか。

385:デフォルトの名無しさん
06/10/07 23:58:28
>>383 字句解析はrubyに丸投げ
puts eval("[#$_]").join("\t") while gets


386:デフォルトの名無しさん
06/10/08 00:02:31
黒魔術だ・・・

387:デフォルトの名無しさん
06/10/08 00:21:37
>>385
おおー、こんなに簡単にできてしまうんですね。
Rubyって凄い! ありがとうございました!

388:デフォルトの名無しさん
06/10/08 13:58:07
CGIとかで、外部のユーザが自由に入力出来るようなデータに使う場合は、注意しろよー。

389:デフォルトの名無しさん
06/10/08 17:39:10
>>385
ワロタ。
$KCODE忘れんなよー。


390:デフォルトの名無しさん
06/10/17 01:01:11
東京大学教養課程の第一プログラミング言語がRubyに
URLリンク(d.hatena.ne.jp)
URLリンク(b.hatena.ne.jp)

391:デフォルトの名無しさん
06/10/19 06:27:31
東大の宿題予想しようぜ


392:デフォルトの名無しさん
06/10/19 18:29:19
>>391
東大の講師ごくろうさまです。軽くRubyのコンパイラでも作らせてあげてください。


393:デフォルトの名無しさん
06/10/19 20:46:33
そもそも東大生でこんなところに質問しにくるアホはいねーだろ
# と思いたいなあ


394:デフォルトの名無しさん
06/10/19 20:58:36
東大生といえども所詮、学生だし。

395:デフォルトの名無しさん
06/10/19 21:13:49
むしろ東大生がやるレベルの宿題ってのをみてみたいので、
ここに投げてほしいと思う俺がいる。

396:デフォルトの名無しさん
06/10/19 21:40:50
俺も俺も

397:デフォルトの名無しさん
06/10/20 15:12:50
俺もw

398:デフォルトの名無しさん
06/10/20 16:13:56
ほれ
1 2 3 4 5 6 7 8 9
-----------------------------
1| 1 2 3 4 5 6 7 8 9
2| 2 4 6 8 10 12 14 16 18
3| 3 6 9 12 15 18 21 24 27
4| 4 8 12 16 20 24 28 32 36
5| 5 10 15 20 25 30 35 40 45
6| 6 12 18 24 30 36 42 48 54
7| 7 14 21 28 35 42 49 56 63
8| 8 16 24 32 40 48 56 64 72
9| 9 18 27 36 45 54 63 72 81


399:デフォルトの名無しさん
06/10/20 16:27:23
>>398
ずれててよくわかんない。><

400:デフォルトの名無しさん
06/10/20 19:06:04
等幅でおk

401:デフォルトの名無しさん
06/10/22 04:13:34
宿題じゃないけど、聞いていい?

問、重複行を削除せよ

402:デフォルトの名無しさん
06/10/22 04:27:37
ruby -e 'File.open("file.txt"){|f| f.readlines.sort!.uniq! }'

403:デフォルトの名無しさん
06/10/22 06:46:39
>>402
ソートしないでという条件をつけさしてください。


404:デフォルトの名無しさん
06/10/22 07:06:05
temp = ""
ARGF.each_line do |line|
puts line if not line == temp
temp = line
end

405:デフォルトの名無しさん
06/10/22 10:51:00
>>403
print readlines.uniq!

406:デフォルトの名無しさん
06/10/22 11:37:44
uniqって、重複なかったら、nilが帰ってくるんだけど orz

407:デフォルトの名無しさん
06/10/22 11:40:35
print readlines.uniq

で、いけますね。

408:デフォルトの名無しさん
06/10/22 12:12:44
puts ARGF.map.uniq
意味もなく最短を狙ってみる。

409:デフォルトの名無しさん
06/10/22 12:40:15
CodeGolfかよw

410:デフォルトの名無しさん
06/10/22 16:53:55
>>408
ARGFは$<で代用可能。ついでにそのおかげで空白も除去できる。
puts$<.map.uniq

411:デフォルトの名無しさん
06/10/22 22:46:08
>>410
> ついでにそのおかげで空白も除去できる。
将来もずっとそうかわからんぞ。
namespaceの話もあるからな。


412:デフォルトの名無しさん
06/10/23 20:20:24
>411
それを言ったら Ruby なんて教祖の暴走がある限り
ほぼ全ての仕様が将来もずっとそうか分からんぞ。

413:デフォルトの名無しさん
06/10/24 14:38:13
俺はいつもこんな感じ。適宜digest使ったり。

h = []
ARGF.each_line do |line|
puts line if h[$_.sum] =|| 0
end

414:デフォルトの名無しさん
06/10/25 02:02:20
そりゃsyntax errorだと思うが。

if h[line.sum] ||= 0
だとしても常に真だし。

415:デフォルトの名無しさん
06/10/25 14:52:15
質問です。

行列A Matrix[[1, 1, 0, 0], [0, 1, 0, 0], [0, 1, 0, 1], [0, 0, 0, 1], [0, 0, 1, 0], [1, 0, 0, 0]]と
行列B Matrix[[0, 0, 0, 1], [0, 1, 0, 0], [0, 1, 0, 0], [0, 0, 0, 1], [0, 0, 1, 0], [1, 0, 0, 0]]
について、同一座標の数値ごとに論理和をとって行列Cを返すプログラムを教えてください。

この場合行列Cは、Matrix[[0, 0, 0, 0], [0, 1, 0, 0], [0, 1, 0, 0], [0, 0, 0, 1], [0, 0, 1, 0], [1, 0, 0, 0]]
になります。

よろしくお願いします。


416:デフォルトの名無しさん
06/10/25 15:53:48
論理和とったら
[[1, 1, 0, 1], [0, 1, 0, 0], [0, 1, 0, 1], [0, 0, 0, 1], [0, 0, 1, 0], [1, 0, 0, 0]]
にならないか?

a = [[1, 1, 0, 0], [0, 1, 0, 0], [0, 1, 0, 1], [0, 0, 0, 1], [0, 0, 1, 0], [1, 0, 0, 0]]
b = [[0, 0, 0, 1], [0, 1, 0, 0], [0, 1, 0, 0], [0, 0, 0, 1], [0, 0, 1, 0], [1, 0, 0, 0]]
i = -1
puts a.map{|x| x.map{|y| i+=1; y | b.flatten[i]; }}.inspect


417:デフォルトの名無しさん
06/10/25 16:03:33
>>416
ありがとうございます。
論理和というか、両方1のときは1、それ以外は0になる形です。

418:デフォルトの名無しさん
06/10/25 16:25:42
それは、論理積じゃねーの。

419:デフォルトの名無しさん
06/10/25 16:37:23
うむ

420:デフォルトの名無しさん
06/10/25 18:22:22
すいません。その通りです。
論理積でお願いします。

421:416
06/10/25 18:54:17
あとは自分で考えろよ

422:デフォルトの名無しさん
06/10/25 19:59:41
いっぱいある縦棒のどれかをアンパサンドに変えればいいんでないの?

423:デフォルトの名無しさん
06/10/25 20:14:23
puts a.map{|x| x.map{|y| i+=1; y | b.fアンパサンドatten[i]; }}.inspect

こうですか? わかりません!

424:415
06/10/25 21:20:16
おかげさまでできました。
>>416さんをはじめ、このスレのみなさん本当にありがとうございました。

425:デフォルトの名無しさん
06/12/16 19:10:09
Code Golf はここでよいですよね?

数字を与えられて、それを1から配列数までを網羅した配列を短く書く方法はないですか?
例: 9 -> [1, 2, 3, 4, 5, 6, 7, 8, 9]


a = []; 9.times{|i| a += [(i + 1)]}; p a
かな?

426:デフォルトの名無しさん
06/12/16 19:10:59
a = []; 9.times{|i| a << i + 1}; p a

427:デフォルトの名無しさん
06/12/16 19:12:56
あ、これでいいのか・・・
p Array.new(9){|i| i + 1}

428:デフォルトの名無しさん
06/12/16 20:08:27
(1..9).to_a

429:デフォルトの名無しさん
06/12/16 20:10:02
(1..9).map
このほうが短いな

430:デフォルトの名無しさん
06/12/17 00:55:11
Range#to_aが真っ先に思いつくのが普通だよな。

431:デフォルトの名無しさん
06/12/17 01:19:25
[*1..9]

432:デフォルトの名無しさん
06/12/17 07:24:23
>>428-429
マジスカ((((*´ー`)

>>431
これ、知らんかった!
!説明plz
マニュアルに書いてある?

433:デフォルトの名無しさん
06/12/17 10:04:55
>>432
「2.8 *がついた引数は何ですか」

434:デフォルトの名無しさん
06/12/17 11:43:34
>>433
URLリンク(www.ruby-lang.org)
これか・・・。

引数以外にもつけられるんだ

435:デフォルトの名無しさん
06/12/19 23:18:17
>>429
1.9ではEnumerable::Enumeratorが返る。


436:デフォルトの名無しさん
06/12/20 18:32:40
>>435
将来もずっとそうかわからんぞ。

437:デフォルトの名無しさん
06/12/20 22:37:07
>>436
いままでで切り捨てられたものの例を挙げてみてくれないか?


438:デフォルトの名無しさん
06/12/20 22:51:18
なんでなんで

439:デフォルトの名無しさん
06/12/21 09:51:30
警告出るのはあったな

440:デフォルトの名無しさん
06/12/25 18:15:30
<panda>kuma</panda>という文字列を<panda>kum<a></panda>としたいのですが、
gsub('a','<a>')とすると当然ながら<p<a>nd<a>>kum<a></p<a>nd<a>>となってしまいます。

<>の中のaを回避して置換するよい方法ありませんか?

441:デフォルトの名無しさん
06/12/25 19:59:15
<kuma>panda</kuma>

<kuma>p<a>nd<a></kuma>

こう?


442:デフォルトの名無しさん
06/12/25 21:23:23
"<panda>kuma</panda>".scan(/(<.*?>|[^<]+)/).map{|s,*| if /^</ !~ s then s.gsub(/a/, "<a>") else s end }.join
=> "<panda>kum<a></panda>"
"<kuma>panda</kuma>".scan(/(<.*?>|[^<]+)/).map{|s,*| if /^</ !~ s then s.gsub(/a/, "<a>") else s end }.join
=> "<kuma>p<a>nd<a></kuma>"


443:デフォルトの名無しさん
06/12/26 08:38:57
  |s,*|
これ↑をすると、配列がはずれて文字列だけになるんだ。
何故?

444:デフォルトの名無しさん
06/12/26 09:50:48
Ruby では、ブロック引数に値を渡すときの操作は実質的には(多重)代入と同じ。
|s, a| と書くのは、 |s, a| = each_elementのように値が入るのと等価になっている。

また、
a, *b = [1, 2, 3]

とすればaに1、bに[2,3]が入るという規則を思い出すと、今回のケースでは、
「多重代入で最初のものだけを得たい」というケースであるから、
|s, *dummy| と書けば s に最初の要素が、 dummy に残りの配列が手に入る
ことになる。

でも今回は dummy は使わないから省きたい。で、こういう要求にこたえて最
近のRubyでは*パートの変数名を省略できるようになっている。つまり、
a, * = [1, 2, 3]
と書くと a に1が入るという操作になる。

というわけで、ブロック引数に |s, *| と書くと、 s に最初の要素が入ることになる。

ちなみに ,* が省かれるとふつうの代入と区別できないため、sには配列が入る。


……なんだけど実際には * はなくても良いのを思い出した。
カンマがあれば良いので |s,| で良かったです。すまん。


445:デフォルトの名無しさん
06/12/26 12:27:10
>>444
丁寧な説明、サンクス。
なるほど、配列の第1要素のみ利用するってこってですね。

446:デフォルトの名無しさん
06/12/26 21:05:25
car?

447:デフォルトの名無しさん
07/01/05 13:35:21
>446
lispのcar関数とはまた別モノだろ

448:デフォルトの名無しさん
07/01/11 20:52:38
C言語で、値の入れ替えは、以下のように書くことができるようですが、
rubyでもっと短くかけないですか?
a=(a^=b,b^=a,a^b);

449:デフォルトの名無しさん
07/01/11 20:59:26
>>448
a, b = b, a

Cでもいまどきそんなの使うやついねーよ

450:デフォルトの名無しさん
07/01/11 22:47:27
>>449
多値使うのかー。

> Cでもいまどきそんなの使うやついねーよ
そうなのかw

451:デフォルトの名無しさん
07/01/12 14:47:00
自分もできない課題があって困ってるんだが・・・。
りんご本からいくつか課題出されて、その中の

テキスト65ページ 「耳の遠いおばあちゃん」に取り組みなさい。
耳の遠いおばあちゃんのプログラムを書いてみましょう。
おばあちゃんに何を言っても(何をタイプしても)、叫ばない限り(つまり、すべて大文字でタイプしない限り)、
 は?! もっと大きな声で話しておくれ、坊や!
と返事をします。もし叫んだときは、彼女はあなたの言葉を聞いて(少なくとも聞いた気がして)、
 いやー、1938年以来ないねー!
と大声で返事します。
プログラムに真実味を持たせるため、1930から1950のランダムな数字で毎回違う年を叫ぶようにしましょう。
あなたは、BYEと叫ぶまでおばあちゃんとの会話から逃れられません。
う年を叫ぶようにしましょう。
あなたは、BYEと叫ぶまでおばあちゃんとの会話から逃れられません。

とかいうの。

452:デフォルトの名無しさん
07/01/12 20:30:26
>>451
ぐぐれば解答例あるよ。

453:デフォルトの名無しさん
07/01/12 22:54:56
初心者の過去スレ人多すぎで見れない…
どこをググれば??

454:デフォルトの名無しさん
07/01/13 11:11:22
Google以外どこをぐぐるんですか?

loop do
  str = STDIN.gets
  if str.upcase == str
    if 'BYE' == str
      break
    else
      # そうかい。1953年以来ないね~。
    end
  else
      # はぁあああああ!!!?なんだってぇえぇぇぇぇぇぇーーーーー!!!!
  end
end

動かしてないけど大体こんな感じでしょう。
ちゃんと手を動かしながら本読んでれば出来るハズなんだけどなぁ

455:デフォルトの名無しさん
07/01/14 00:45:45
ぐぐっても解答例が探せなかったorz
そのプログラムも動いてくれなかったです。

乱数のとこで引っかかったりwhileで引っかかったりで前に進みません。

456:デフォルトの名無しさん
07/01/14 01:35:46
454は答えそのものじゃなくて基本的なアプローチ部分のコード例だよ。残りを埋めなきゃ答えにはならん。
それすら見てもわからんのか……。

ところでmixiで質問してるのと同じ人?


457:デフォルトの名無しさん
07/01/14 02:23:57
>>455
何がどうダメなのか説明しないと誰もアドバイスできませんよ。
プログラムを動かそうとしたらエラーが出るなら、
そのエラーメッセージとソースコードをコピペする。

「エスパー募集中ですか?」って言われちゃいますよ?


458:デフォルトの名無しさん
07/01/14 03:11:56
つーか自分で作って詰まれ
どうせ他人の見ても何がどうなってるのかわからんのだろ

確かにこのスレは宿題丸投げも可だが、あまり身勝手におイタしてると
「完全に動作するがコードが面妖で提出不可」なプログラムだけ回答に出されて放置されたりするぞ

459:デフォルトの名無しさん
07/01/14 03:27:05
「ここまでは書けたけどあとはさっぱりです」とか素直に見せられたほうが答返ってくるよな。

460:デフォルトの名無しさん
07/01/14 09:55:57
そして誰かが3行程度で作ってしまう。

461:デフォルトの名無しさん
07/01/14 11:25:50
CodeGolf形式で聞けば答えてくれるぞ

462:デフォルトの名無しさん
07/01/14 22:24:50
俺なら70byteで解く

463:デフォルトの名無しさん
07/01/15 14:23:44
人工無能を作るスレがあるからそっちで聞け


464:デフォルトの名無しさん
07/01/15 22:27:13
関係ない他のスレに迷惑かけちゃいかんよ

465:939
07/01/19 23:12:14
ヒープを配列で実装しろという問題とヒープソートの作り方を教えてください

466:デフォルトの名無しさん
07/01/20 04:09:57
URLリンク(www.geocities.jp)

467:デフォルトの名無しさん
07/01/24 16:36:01
0点の紙が1枚、1点の紙が2枚、4点の紙が1枚入っている箱がある。
この箱から1枚引いて箱に戻すのを6回繰り返したとき、合計点数のとりうる値を求めるプログラムを書け。

この問題の解法を教えてください。よろしくお願いします。



468:デフォルトの名無しさん
07/01/24 19:05:18
>>467
算数の問題が解けないのか、解けるけどRubyに書き直せないのかどっちだ?
# 前者のような気はするけど。


469:デフォルトの名無しさん
07/01/24 20:53:01
>>468
後者です。
場合わけなどを効率よくプログラミングにおとすにはどうしたよいかわかりません。

470:デフォルトの名無しさん
07/01/24 21:42:44
なるほど。アルゴリズムは考え付いたわけね。
じゃ、日本語で良いのでそのアルゴリズムを書いてみて。
それをコード化してあげる。



471:デフォルトの名無しさん
07/01/24 22:00:26
>>467
少年よ、再帰を抱け!

def sum(n,s,k)
ls = [0,1,4]
if n == 0 then
print k,"\t","sum=",s,"\n"
else
for i in 0..2
sum(n-1,s+ls[i],k+[i])
end
end
end

sum(6,0,[])


472:デフォルトの名無しさん
07/01/24 22:00:33
>>470
計算問題として解くなら手計算でゴリ押しできるのですがうまいアルゴリズムが思いつかなくて。
とりあえず0,1,4からなる6個の数字をすべての場合を網羅するように作成して現れる合計値をすべて記録すれば答えはでるんですが、それだと面倒なので質問しました。


473:デフォルトの名無しさん
07/01/24 22:07:57
トリッキーなコード
   ↓

474:デフォルトの名無しさん
07/01/24 22:12:02
>>471
ありがとうございます。
こんなに短くできるんですね。

475:デフォルトの名無しさん
07/01/24 22:19:38
>>473
動的計画法を使う典型問題だね。
b = [0]
6.times{b=[0,1,4].inject(b){|c,y|c + b.map{|x|x+y}}.sort.uniq}
puts b

476:デフォルトの名無しさん
07/01/24 22:24:06
inject([])の間違いだた。まぁ今回はたまたまうまく動くけど。

477:デフォルトの名無しさん
07/01/24 22:33:39
おりゃ
puts (0...6).inject([0]){|b,_|[0,1,4].map{|y|b.map{|x|x+y}}.flatten.sort.uniq}


478:デフォルトの名無しさん
07/01/24 23:08:30
ありがとうございます。この問題の回答としては>>475->>477さんのほうが良いですね。


479:デフォルトの名無しさん
07/01/28 11:47:43
codegolf的に、配列を圧縮する方法ってないでしょうか。

a = [123, 567, 23, 456, 34, 12]


文字列か何かであらわせないかと。
base64でも使うのかな?

480:デフォルトの名無しさん
07/01/28 12:16:22
d=[777,666,555,444,333,222,111,0,123,456,789,12,45,67,89,10]
require 'base64'
require 'zlib'
p d
p pk = d.pack("S*")
p z = Zlib::Deflate.deflate(pk)
p b64 = Base64.encode64(z)

p unb64 = Base64.decode64(b64)
p Zlib::Inflate.inflate(unb64)
p ud = unb64.unpack("S*")

puts "d==ud = "+ (d==ud).to_s
puts "b64.length=" + b64.length.to_s

やってみたのですが、
元に戻らない・・・

481:デフォルトの名無しさん
07/01/28 12:29:24
ミスってた、

d=[777,666,555,444,333,222,111,0,123,456,789,12,45,67,89,10]
require 'base64'
require 'zlib'
p d
p pk = d.pack("S*")
p z = Zlib::Deflate.deflate(pk)
p b64 = Base64.encode64(z)

p unb64 = Base64.decode64(b64)
p unz = Zlib::Inflate.inflate(unb64)
p ud = unz.unpack("S*")

puts "d==ud = "+ (d==ud).to_s
puts b64.length.to_s + " -> " + ud.length.to_s



482:デフォルトの名無しさん
07/01/28 12:30:00
>>481
でいけますね。解決です。

483:デフォルトの名無しさん
07/01/28 21:35:53
本スレのほうから誘導されましたので、こちらで質問させていただきます。
スレリンク(tech板:548-557番)

(したいこと)
Arrayの要素の組合せを全て作った Arrayを返す。

(サンプル)
仮に combinations というメソッド名として
[].combinations => []
[1].combinations => [[[1]]]
[1,2].combinations => [
 [[1],[2]], # 1個ずつの組み合わせ
 [[1,2]],  # 2個ずつの組み合わせ
]
[1,2,3].combinations => [
 [[1],[2],[3]], # 1個ずつの組み合わせ
 [[1,2],[3]],  # 2個ずつの組み合わせ
 [[1],[2,3]],  # 2個ずつの組み合わせ
 [[1,2,3]],   # 3個ずつの組み合わせ
]
[1,2,3,4].combinations => [
 [[1],[2],[3],[4]], # 1個ずつの組み合わせ
 [[1,2],[3],[4]],  # 2個ずつの組み合わせ
 [[1],[2,3],[4]],  # 2個ずつの組み合わせ
 [[1],[2],[3,4]],  # 2個ずつの組み合わせ
 [[1,2],[3,4]],   # 2個ずつの組み合わせ
 [[1,2,3],[4]],   # 3個ずつの組み合わせ
 [[1],[2,3,4]],   # 3個ずつの組み合わせ
 [[1,2,3,4]],    # 4個ずつの組み合わせ
]
実装は、メソッドの再帰を行うんだろうとはなんとなく分かるんですが、それ以上は進まず。

484:デフォルトの名無しさん
07/01/28 22:31:59
URLリンク(blade.nagaokaut.ac.jp)

485:デフォルトの名無しさん
07/02/04 22:30:44
>>181
class Array
def srt
case size
when 0,1
self
else
f,*t = self
t.select{|v| v <= f}.srt + [f] + t.select{|v| v > f}.srt
end
end
end

nums = (0..9).map{rand(100)}
p nums
p nums.srt

486:デフォルトの名無しさん
07/02/04 22:30:46
10個の任意の数字を昇順(小さい数から大きい数)に並び替えるプログラムを作成しなさい

注意事項及びヒント:

sortメソッドは使用しないこと
配列を使用した方が並び替え易いと思います

487:デフォルトの名無しさん
07/02/04 22:38:08
>>486
OK、sortメソッドは使わないぜ。
a=[1,4,3,5,3,10,3,5,3,5]
$><<a.sort_by{|x|x}.join(" ")

488:デフォルトの名無しさん
07/02/05 21:21:52
>>487
>>486が初心者スレで返された答えとかぶってるw


489:デフォルトの名無しさん
07/02/05 21:52:49
>>486
適当にクイックソートを書いてみた

def qsort(array)
return array unless array.size > 1
left = []
right = []
mid_idx = array.size / 2
mid = array[mid_idx]
array.delete_at(mid_idx)

until array.empty?
n = array.shift
if n < mid
left.push(n)
else
right.push(n)
end
end

qsort(left).push(mid).concat(qsort(right))
end


で、書いておいてなんだが
いくら初心者だろーが力任せ、単純なソート法なら自力で思いつくだろ



490:デフォルトの名無しさん
07/02/05 22:15:48
俺も適当にクイックソート書いてみた。
def qsort(array)
  return array unless array.size > 1
  mid = array.delete_at array.size/2
  array = array.partition{|x|x<mid}
  qsort(array[0]).push(mid).concat(qsort(array[1]))
end
飽きたから超適当。もういいや、こんなんで

491:デフォルトの名無しさん
07/02/05 23:36:50
>489-490
おまえらさあ、こういうのをそのままコピペして提出するアホがいたらどうすんだよ。
これを受け取ってどう評価するか悩む教師の身にもなってみてくれ、まじで。


492:デフォルトの名無しさん
07/02/06 00:03:32
教授、乙

493:486
07/02/06 01:32:00
レスどうも、コピペしてませんからご安心を。確認しただけです。
全く違うソートになりましたが。

494:デフォルトの名無しさん
07/02/14 16:21:00
端末に現在時刻を 1 秒おきに表示しスクロールするプログラム.
実行中にキーボードの 1 が押されるとそれ以降は文字色を赤で,
また,2 が押されるとそれ以降は文字色を青で表示する.
0 が押されると数字を入力するようプロンプトを表示し,
時刻の表示間隔を入力された数字の秒数に変更する.
Ctrl+C で終了する.

お願いします.

495:デフォルトの名無しさん
07/02/14 19:12:53
じゃあ半分だけ。

loop do
puts Time.now
sleep 1
end

496:デフォルトの名無しさん
07/02/15 01:28:32
それで半分は言いすぎw

497:デフォルトの名無しさん
07/02/15 03:17:40
どうでもいいけど、宿題で聞くヤツって何でこう、突っ放しなんだろうな。
お前本当に、答えてほしのかとww

もっとこう、答えたくて答えたくてたまらないように、仕向けないといけないと思うんだけど。
・・・まあ、だから、2ch聞いてるんだろうけど。

ちなみん、おれが、2ch聞いたのはほとんど答えてもらってる。

498:デフォルトの名無しさん
07/02/15 04:41:13
このスレももう500になるのか
とりあえずフォーマットくらいは用意すべきだろうね

499:デフォルトの名無しさん
07/02/15 10:09:25
>>494>>495
ありがとうございます.
核の部分はそうなると思いますが,
そこは問題を説明するために設定した部分で,
本当に聞きたいのはユーザとの対話部分なんです.
引き続きお願いします.

自分なりには curses を使って書いてみたんですが,
getstr がどうもうまく動かないので,
こちらで質問してみました.

500:デフォルトの名無しさん
07/02/15 16:39:31
>>499
試行中なんだが、getstrだとエンターまでを入力として期待するのでよくないはず。
getchを使おう。
今のリファレンスには書いてないがncursesの現行のAPIはほとんどwrapされてるようす。
あとは拡張ライブラリのソース見れって感じだ。

正直言って宿題としてはあんまりよくないな。
ncursesそのまま使うのはめんどう。
まあ、むしろCursesに皮を被せる設計の勉強なのかもしれんが。

501:デフォルトの名無しさん
07/02/20 17:54:13
>>500
とのことなので,getstr 相当のものを getch で書いてみたのですが,
どっちにしても getch で入力待ち状態のときに Ctrl-C が効きませんでした.
ruby のソースを開いてみると ext/curses にサンプルがあったので,
ruby mouse.rb をしてみたのですが,
これでもクリック待ちのときに Ctrl-C で終了できませんでした.
これが,ruby の curses の仕様なんでしょうか?
Ctrl-C を押したらいつでも終了するのがマナー
だと思っていたのですが…

502:デフォルトの名無しさん
07/02/20 21:01:01
>501
ちなみに、環境何?

503:デフォルトの名無しさん
07/02/20 21:11:33
>>502
ruby 1.8.5/screen 4.00/zsh 4.3.2/ck 2.0.26
で coLinux 0.7.1 上の Gentoo と Cygwin とを使っています.

504:デフォルトの名無しさん
07/02/21 01:05:15
>>501
> これでもクリック待ちのときに Ctrl-C で終了できませんでした.
> これが,ruby の curses の仕様なんでしょうか?
rubyのつーか、cursesってそういうもんじゃなかったっけ?

505:デフォルトの名無しさん
07/02/21 11:11:41
>>501
手元のopenSUSE 10.2では止まるけど、Ctrl-Cで停止しなければならない仕様なの?
C-Cされてもどこぞでシグナルがトラップされてたら止まらない。
コンソールからインタラクティブに操作するアプリは操作が中断されるだけで止まらないのも多い。

ところでgetchで入力待ちになったら1秒おきに表示が更新されない気がするんだけど?

506:デフォルトの名無しさん
07/02/21 11:53:25
>>504
pythonでは入力待ち状態でCtrl-Cしたら
終了するのですがどうなんでしょう?

>>505
環境依存するのは何の違いがきいてるのでしょう?
設定で解消できるものなのか,OS依存でどうしようもないのか?

可能ならばCtrl-Cで終了するようにしたいです.
cursesがtrapを仕込んでいるとして,それを解除,
あるいは,更にtrapしてCtrl-Cを検出することは
無理でしょうか?

>>ところで…
はい.ですから timeout などを使って getch をくるまないといけないと思います.
更新間隔を入力するときは表示の更新が止まってもよいものとします.


507:デフォルトの名無しさん
07/02/21 14:12:48
>>506
Cursesのマニュアルをじっくり読みなよ。
URLリンク(www.kis-lab.com)
URLリンク(www.faqs.org)

508:デフォルトの名無しさん
07/02/22 17:54:46
>>507
pythonではできるって言ってんだから
pythonとrubyのcursesの実装の違いでしょ。
そこでcursesのマニュアル出すのはどうかと。


509:デフォルトの名無しさん
07/02/22 18:06:09
>>508
証拠は質問者の証言だけか?

510:デフォルトの名無しさん
07/02/22 23:02:45
つーか宿題としては性質が悪すぎだな

端末文字の色変えろって気楽に言った時点でイヤな予感はしたんだが

511:デフォルトの名無しさん
07/02/23 21:31:43
>>507
んぅ・・・
raw/norawあたりがあやしいかなと思って挿入してみても変化なし.
何かヒントいただけませんか?

>>510
すいません.色は問題の本質ではないです.
色を変える代わりに,1ならA,2ならBを表示するだけかまいません.

512:デフォルトの名無しさん
07/02/23 23:44:29
>>511
そこ変えてもダメなの?
Ctrl-Cの扱いを変えられるのはraw、cbreakぐらい。
pythonでもrubyでもcursesモジュールは単にCのAPIをラップしてるだけで変わりはない。
強制的にrawになってる(?)ならgetchした先でCtrl-Cのコードのときexitすりゃいいけど
なんでそんなことになってるのかなあ。

513:デフォルトの名無しさん
07/02/27 17:36:05
>>512
ちょっと言葉足らずだったので補足させて下さい.
例えば,以下のようなソースだと noraw モードになってるので
getch で Ctrl-C しても何も起きませんが,
getch より前に raw を挿入すると Ctrl-C で終了できました.
しかし,getch を getstr に置き換えると
raw/noraw/cbreak/nocbreak のどれを挿入しても変化なしでした.

require "curses"
begin
Curses::init_screen
Curses::stdscr.addstr("% ")
Curses::stdscr.refresh()
s = Curses::stdscr.getch()
Curses::stdscr.addstr("\n>>> %s \n" % s)
Curses::stdscr.refresh()
rescue
Curses::close_screen
end

514:デフォルトの名無しさん
07/02/27 17:37:08
>>512>>513
なので,getstr の代わりに,以下のように,
raw モードで getch のループを回す mygetstr
を使うと Ctrl-C で終了するようにできました.
しかし,Ctrl-H とかその他もろもろの処理を
全部書くのはなんか無駄なことしてるようで…

def mygetstr()
Curses::raw()
Curses::noecho()
s = ""
while true do
c = Curses::stdscr.getch()
if c == 3 then
exit 3
elsif c == 10 then
break
else
Curses::stdscr.addch(c)
s += [c].pack("c")
end
end
Curses::noraw()
Curses::echo()
return s
end

515:デフォルトの名無しさん
07/02/27 19:24:03
cbreak使えば余計なことしなくていいみたいだ。
cbreakモードは割り込み、フロー制御するが、rawモードはスルーして文字を返すそうな。

516:デフォルトの名無しさん
07/02/27 19:57:02
>>515
それだとCtrl-Cもとられて本末転倒だろ

517:デフォルトの名無しさん
07/03/01 10:27:09
端末制御ってめんどくさいな

518:デフォルトの名無しさん
07/03/07 17:20:46
あきらめてpython使えってことだな

519:デフォルトの名無しさん
07/03/07 18:16:53
宿題なのに?

520:デフォルトの名無しさん
07/03/09 00:53:49
最近rubyでプログラミング始めたんですが公式のチュートリアルに>451と
同じ問題があって躓いてます。454見る前にできたプログラム書いてみます。
見て参考になる部分もありましたが3回「連続」で'BYE'を繰り返さないと
抜けられないようにする応用がわかりません。

talk = ''
puts 'おばばに何か用かえ?'
while talk != 'BYE'
talk = gets.chomp
if talk == talk.upcase
puts 'いやー、' + 19.to_s + (30+(rand(30))).to_s + '年以来ないねー!'
else
puts 'もっと大きな声で話しておくれ、坊や!'
end
end

521:520
07/03/09 01:06:17
今実行して確かめたら基礎もできてなかった。うーん・・・
これだとBYE実行でもifに行っちゃいますね。

522:デフォルトの名無しさん
07/03/09 10:31:33
puts 'おばばに何か用かえ?'
count = 0
while count < 3
talk = gets.chomp
if talk == talk.upcase
puts "いやー、#{1930+rand(20)}年以来ないねー!"
# puts 'いやー、' + (1930+rand(20)).to_s + '年以来ないねー!' と同じ
else
puts 'もっと大きな声で話しておくれ、坊や!'
end

if talk == 'BYE'
count += 1
else
count = 0
end
end

523:520
07/03/09 21:07:16
>522
ありがとうございます!countメソッドははじめて見ました。
これまでのチュートリアルにでてないので使わないやり方もあるんですかね?

年号のやつもごちゃごちゃしてましたね。コメントどうもです。
さらに自分でBYE実行時の台詞変えたりしてみようと思います。

524:デフォルトの名無しさん
07/03/09 22:23:38
いや、ここでのcountはただのローカル変数だよ

525:520
07/03/09 22:50:52
ああ、そうですね。お恥ずかしいです。
それにしてもチュートリアルの問題やたら難しくないですか?
こんなもんなんでしょうか。
もう少し簡単な問題やヒントがのってるかと思ってチュートリアル書いた人の
本も買ってみたんですがネットにのってるのとほとんど同じ内容でした。

526:デフォルトの名無しさん
07/03/09 23:47:18
こんなもんです。

527:デフォルトの名無しさん
07/03/10 01:26:10
やたら難しいかどうかはともかく、小難しいのには同意する

初めてのPerl並に平易な問題から段階踏んで攻めるのがいいと思うんだが

528:デフォルトの名無しさん
07/03/12 17:35:43
>>514-519
間が空いてしましましたが,
この件 ruby を 1.8.5_p2 から 1.8.6_pre3 にアップデートすると
getstr の入力待ちで Ctrl-C したら終了するようになりました.
Gentoo だとまだ stable じゃなかったこともあって
バージョンのことをまったく気にしてなかったんですが
何が変わったんでしょ?
ともかくご助言して頂いた方々ありがとうございました.


529:デフォルトの名無しさん
07/04/16 10:53:59
value = ARGV[0] ? ARGV[0] : 100

ARGV[0]が定義されていない場合、デフォルト値100を代入。

ARGV[0]が2個が単調だ。
もっといい書き方はないだろうか?



530:デフォルトの名無しさん
07/04/16 11:23:17
>>529
value = ARGV[0] || 100

531:デフォルトの名無しさん
07/04/16 22:51:44
>>530
ああ!そうだった・・・
|| 忘れてたよ・・・

532:デフォルトの名無しさん
07/04/24 03:46:47
今月のカレンダを表示する関数を教えてくれ。
calコマンドは呼んじゃ駄目。
つーかprint_this_month関数ぐらい欲しい。

533:デフォルトの名無しさん
07/04/24 12:02:25
> print_this_month関数

irb> print Time.now.month
# => 4

irb> require 'date'
irb> puts Date.parse('2006-11-13').month
# => 11

irb> require 'parsedate'
irb> p ParseDate.parsedate('Sat Aug 28 21:45:09 1999')
# => [1999, 8, 28, 21, 45, 9, nil, 6]


こんなんじゃ不足?

ちなみにcalコマンドのようにカレンダーのデータを作り整形して表示するクラスは今のところない
…というかそれ要るか?
そのカレンダーは既にアプリケーションだと思うんだが…


次ページ
最新レス表示
レスジャンプ
類似スレ一覧
スレッドの検索
話題のニュース
おまかせリスト
オプション
しおりを挟む
スレッドに書込
スレッドの一覧
暇つぶし2ch