1 名前:RUBY [05/01/24 22:17:37 ] 私は、ある大学の1年生です。今、情報処理の講義でRUBYを習っています。 その講義で、期末テストとして課題が出たのですが、プログラミング初心者の私には 全然歯が立ちません。締め切りは1/31です。プロも皆さんには簡単な 問題かもしれませんがどうか教えてください。 課題は以下の通りです。
307 名前:デフォルトの名無しさん mailto:sage [2006/07/28(金) 02:06:14 ] >>306 Rubyじゃないじゃん。
308 名前:デフォルトの名無しさん mailto:sage [2006/07/28(金) 02:15:10 ] javascriptか 言語ですらないな 板違いだ
309 名前:デフォルトの名無しさん mailto:sage [2006/07/28(金) 02:20:29 ] JavaScriptの言語性を馬鹿にしていると痛い目見るぞ
310 名前:デフォルトの名無しさん mailto:sage [2006/07/28(金) 02:32:19 ] >>309 馬鹿にされたと思ったあなたは >>306 ですか?
311 名前:デフォルトの名無しさん mailto:sage [2006/07/28(金) 09:16:50 ] どこをどう読めば人を馬鹿にしてると読めるんだろう
312 名前:デフォルトの名無しさん mailto:sage [2006/07/28(金) 09:26:32 ] 馬鹿な人がいるようには読める。
313 名前:デフォルトの名無しさん mailto:sage [2006/07/28(金) 10:32:03 ] 馬鹿な人には読めないマキコ。
314 名前:デフォルトの名無しさん mailto:sage [2006/07/28(金) 13:19:12 ] どっちにしろ荒らしに反応すな
315 名前:デフォルトの名無しさん mailto:sage [2006/07/28(金) 16:16:36 ] js=ajax=web2.0
316 名前:デフォルトの名無しさん mailto:sage [2006/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 名前:デフォルトの名無しさん mailto:sage [2006/08/26(土) 14:03:40 ] ruby -ple 'printf "%6d: ", $.'
318 名前:デフォルトの名無しさん mailto:sage [2006/08/26(土) 14:07:40 ] ruby -e 'exec("/bin/cat", "-n", *ARGV)'
319 名前:デフォルトの名無しさん mailto:sage [2006/08/26(土) 14:16:06 ] ruby -e 'ARGF.each{|s|printf "%6d: %s", ARGF.file.lineno, s}'
320 名前:316 mailto:sage [2006/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 名前:デフォルトの名無しさん mailto:sage [2006/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 名前:デフォルトの名無しさん [2006/08/31(木) 22:22:15 ] 二進表示をprintf,sprintfを使わず、正の整数を入力して その二進表示を出力するプログラムを作成しよ。 ただし整数から二進表示文字列を作るメソッドi2bを 作成してそれを呼び出すように書くこと。 できるだけ簡単なプログラムでお願いします。 Ruby初心者なのでわからなくて困ってます。
323 名前:デフォルトの名無しさん mailto:sage [2006/08/31(木) 22:35:13 ] >>322 alias myprintf printf myprintf("%b\n", 10) #=> 1010
324 名前:デフォルトの名無しさん [2006/08/31(木) 22:38:35 ] >>323 ありがとうございます。 でも、せっかく作成していただいたのに申し訳ないのですが printfは使って作成してはいけないんです。
325 名前:デフォルトの名無しさん mailto:sage [2006/08/31(木) 23:05:24 ] ちっ、バレたかwww
326 名前:デフォルトの名無しさん mailto:sage [2006/08/31(木) 23:05:42 ] >>322 こんなんじゃダメ? def i2b i return i.to_s(2) end
327 名前:デフォルトの名無しさん mailto:sage [2006/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 名前:デフォルトの名無しさん [2006/08/31(木) 23:28:58 ] >>326 >>327 ありがとうございます。 家のパソコンだとプログラムが実行できないので 明日実行できるパソコンで試してみます。
329 名前:デフォルトの名無しさん mailto:sage [2006/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 名前:デフォルトの名無しさん mailto:sage [2006/08/31(木) 23:34:27 ] >>328 家のパソコンにもRubyインストールすればいいだろ? よっぽど特殊なOSで無い限り入れられる。
331 名前:デフォルトの名無しさん [2006/08/31(木) 23:42:20 ] 329>> 何回もインストールしてみたのですが 何回挑戦しても失敗してしまいます。
332 名前:デフォルトの名無しさん mailto:sage [2006/08/31(木) 23:55:11 ] >>331 ttp://rubyforge.org/frs/?group_id=167 ttp://instantrails.rubyforge.org/wiki/wiki.pl どっちでも好きな方を試せ。 使い方は聞くな。
333 名前:デフォルトの名無しさん mailto:sage [2006/09/01(金) 00:00:08 ] 最近は宿題もWeb2.0とか意識するべきだと思うんだ def i2b(i) require "open-uri" open('google.co.jp/search?q= '+i+'+in+binary').read.scan(/0b([01]+?)</) end puts "正の整数を入れてください" i=STDIN.gets.chomp puts i2b(i)
334 名前:デフォルトの名無しさん [2006/09/01(金) 00:03:39 ] 332>>333 >> ありがとうございます。 助かりました。
335 名前:デフォルトの名無しさん mailto:sage [2006/09/01(金) 00:13:12 ] web 2.0ってperl廚の妄言のような。 phpとの戦いで死にかけてるから生き残りに必死な様にしか見えない。
336 名前:デフォルトの名無しさん mailto:sage [2006/09/01(金) 00:17:55 ] >>335 そうか?PHPってgoto導入して死ぬんだろ?
337 名前:デフォルトの名無しさん mailto:sage [2006/09/01(金) 00:20:51 ] Web2.0は言語を規定しない(そもそも何も規定しないがw) 「なんかWeb通して新感覚にみんなで超便利」というサービスを提供する限り、 サーバー上の言語は本当に何でもよい
338 名前:デフォルトの名無しさん mailto:sage [2006/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 名前:デフォルトの名無しさん mailto:sage [2006/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 名前:デフォルトの名無しさん [2006/09/01(金) 09:53:17 ] >>338 わかりやすく教えていただいて ありがとうございます。 >>339 ありがとうございました。
341 名前:デフォルトの名無しさん mailto:sage [2006/09/01(金) 11:03:29 ] >>338 参考にはなるかもしれんが、ためにはならんぞ。
342 名前:デフォルトの名無しさん [2006/09/09(土) 05:00:57 ] Rubyで書かれたうpろだのソースってありますか?
343 名前:デフォルトの名無しさん mailto:sage [2006/09/09(土) 11:31:05 ] ハイレベルな宿題だな
344 名前:デフォルトの名無しさん mailto:sage [2006/09/09(土) 19:34:15 ] >>342 cgi限定? http以外のプロトコル使ってもいいのかな?
345 名前:デフォルトの名無しさん mailto:sage [2006/09/09(土) 21:53:01 ] AppleTalkでお願いします。
346 名前:デフォルトの名無しさん mailto:sage [2006/09/10(日) 18:06:15 ] >>342 ここにあるよ ttp://wirepuller.org/text/ruby/
347 名前:デフォルトの名無しさん [2006/09/11(月) 16:25:43 ] >>346 ありがとうございます。 CGI.rbの仕様で10kB以下だとStringIOで処理されて それ以上のサイズだとTempfileオブジェクトになるようだと 書いてあるのですが 「Tempfileの場合、数MBのファイルをread,writeするのはあれなので」 という部分の意味が良く分かりません 何があれなんでしょうか
348 名前:デフォルトの名無しさん mailto:sage [2006/09/11(月) 16:43:40 ] やっぱり、なにがあれなんだろう。
349 名前:デフォルトの名無しさん mailto:sage [2006/09/11(月) 16:47:04 ] 「数MBのファイルを、わざわざ Ruby の read/write を使ってアップローダ側 のディレクトリの特定のファイルにコピーするのは処理にオーバヘッドがかか るので」 てとこじゃね。
350 名前:デフォルトの名無しさん mailto:sage [2006/09/11(月) 16:51:16 ] ああでもあれか、 FileUtils.cp ってけっきょく ruby レベルで read/write を繰り返しているわけだよな。まあ、当り前だが。 それに、ソースを見てみると file.size の大小で TempFile かどうか判定し てるね。 is_a? とかを使った方がいいんじゃないかなあ。
351 名前:デフォルトの名無しさん mailto:sage [2006/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 名前:デフォルトの名無しさん [2006/09/15(金) 02:07:28 ] def seach(dir, key) ↑ dir(ディレクトリ), key(検索キーワード) で指定したディレクトリ下にある合致するファイルを検索して 合致するファイル名の配列を返す関数のコードお願いします。
353 名前:デフォルトの名無しさん mailto:sage [2006/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 名前:デフォルトの名無しさん mailto:sage [2006/09/15(金) 04:44:56 ] Dir.glob(dir + "/**/" + key) じゃ駄目?
355 名前:デフォルトの名無しさん mailto:sage [2006/09/15(金) 09:46:53 ] 合致するファイルって名前だけか。
356 名前:デフォルトの名無しさん mailto:sage [2006/09/15(金) 12:35:15 ] 353.gsub(/serch/, 'search')
357 名前:デフォルトの名無しさん mailto:sage [2006/09/15(金) 12:36:53 ] 353.gsub(/seach/, 'search')
358 名前:デフォルトの名無しさん mailto:sage [2006/09/15(金) 13:35:36 ] 353.gsub /(?=。)/, "お" (^ω^ )
359 名前:デフォルトの名無しさん mailto:sage [2006/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 名前:デフォルトの名無しさん mailto:sage [2006/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 名前:デフォルトの名無しさん mailto:age [2006/09/19(火) 13:54:30 ] age
362 名前:デフォルトの名無しさん mailto:sage [2006/09/20(水) 00:09:54 ] def analyzer(str) Integer(str) true rescue ArgumentError false end
363 名前:359 mailto:sage [2006/09/20(水) 01:36:19 ] ありがとうございます。組込み関数のInteger(str)は見落としていました。 str.to_i()が例外を投げない仕様になっていたので困っていた所です。 あとリファレンスを読むのが不十分でした。すいません、今後は気を付けます。
364 名前:359 mailto:sage [2006/09/20(水) 01:37:01 ] ありがとうございます。組込み関数のInteger(str)は見落としていました。 str.to_i()が例外を投げない仕様になっていたので困っていた所です。 あとリファレンスを読むのが不十分でした。すいません、今後は気を付けます。
365 名前:デフォルトの名無しさん mailto:sage [2006/09/25(月) 00:44:03 ] お礼は一回でおk。
366 名前:デフォルトの名無しさん mailto:sage [2006/09/25(月) 05:45:12 ] ありがdddddddddddddddddddddddddddddddddddddddddddddddd
367 名前:デフォルトの名無しさん mailto:sage [2006/10/04(水) 13:58:21 ] 勉強になるので、以前のじゃけんプログラムみたいな数百行程度のプログラムを また作って欲しいのですが。
368 名前:デフォルトの名無しさん mailto:sage [2006/10/04(水) 16:22:36 ] 自分で作った方が勉強になるぞ。
369 名前:デフォルトの名無しさん mailto:sage [2006/10/04(水) 19:45:42 ] >>367 ネタ寄越せ。
370 名前:デフォルトの名無しさん mailto:sage [2006/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 名前:デフォルトの名無しさん mailto:sage [2006/10/04(水) 23:45:38 ] たびたびわからなくなるんだが、 引かれた奴が次に他の奴から引くんだっけ? 引いた奴が次に他の奴から引かれるんだっけ?
372 名前:デフォルトの名無しさん mailto:sage [2006/10/04(水) 23:52:43 ] ローカルルールがあるかもしれないが、うちでは引いた奴が他の奴から引かれるというルール。 そうじゃないと、「おい、お前今混ぜてるのはババ引いたからだろ!」ということが起こらず面白くない。
373 名前:デフォルトの名無しさん mailto:sage [2006/10/05(木) 23:53:37 ] 最強のジャンケンAI。綿密な先読みで人間などには負けることが無い。 ↓ print "ジャンケンしーましょ、最初はグー!" print "ジャンケン・・・[g=グー/c=チョキ/p=パー]:" puts "AIの手:"+ ({?g => "パー", ?c => "グー", ?p => "チョキ"}[gets[0]] or raise "死ね。") puts "お前の負けだ。"
374 名前:デフォルトの名無しさん mailto:sage [2006/10/06(金) 00:18:51 ] >>373 それは後出しと言って反則なんだよ。
375 名前:デフォルトの名無しさん mailto:sage [2006/10/06(金) 03:40:29 ] いや、出す瞬間に、相手の手を見て反応しているのでOK。 ハンターハンターでやってた
376 名前:デフォルトの名無しさん mailto:sage [2006/10/06(金) 07:35:01 ] >>375 ハンターハンターのは「出す直前」だが、>373のは完全に後出し。
377 名前:デフォルトの名無しさん mailto:sage [2006/10/06(金) 13:48:43 ] ババ抜きってさあ、記憶力と観察力があれば、自分のとこから取られたカードがどこにあるかわかるから有利になれるんだけど そういう戦略を実装できるようにすべき?
378 名前:デフォルトの名無しさん mailto:sage [2006/10/06(金) 14:12:53 ] したけりゃしろよ。 スレ違いだし。
379 名前:デフォルトの名無しさん mailto:sage [2006/10/06(金) 15:33:39 ] スレ違いな理由は何?
380 名前:デフォルトの名無しさん mailto:sage [2006/10/06(金) 16:11:05 ] >>377 した方が面白いと思う。
381 名前:デフォルトの名無しさん mailto:sage [2006/10/06(金) 21:14:51 ] >>377 戦略とかあるの? ランダムに引く人と戦略を持っている人とで、勝利確率どのぐらい違うが見てみたいね。
382 名前:デフォルトの名無しさん mailto:sage [2006/10/06(金) 21:31:05 ] 戦略:こっそりはなくそをつけとく
383 名前:デフォルトの名無しさん mailto:sage [2006/10/07(土) 23:40:54 ] 質問です。 次のようなテキストファイルがあったとします。 "ほげほげ","なんとか","むだむだ" "ほげほ","なんとかか","むだむだだ" (以下、何十行か続く) それを ほげほげ なんとか むだむだ ほげほ なんとかか むだむだだ (以下続く) という感じの書式(空白はタブです)に変えてテキストファイルとして書き出すスクリプトを書きたいのですが、 正規表現とか難しいことを使わないと行けないのでしょうか。 どなたかやり方ご存じありませんでしょうか。
384 名前:デフォルトの名無しさん mailto:sage [2006/10/07(土) 23:49:02 ] データに","が含まれないなら while s = gets puts s.gsub(/"/, "").gsub(/,/, "\t") end ちゃんとCSVを処理したいなら、RAAでcsv関連のライブラリを探すとか。
385 名前:デフォルトの名無しさん mailto:sage [2006/10/07(土) 23:58:28 ] >>383 字句解析はrubyに丸投げ puts eval("[#$_]").join("\t") while gets
386 名前:デフォルトの名無しさん mailto:sage [2006/10/08(日) 00:02:31 ] 黒魔術だ・・・
387 名前:デフォルトの名無しさん mailto:sage [2006/10/08(日) 00:21:37 ] >>385 おおー、こんなに簡単にできてしまうんですね。 Rubyって凄い! ありがとうございました!
388 名前:デフォルトの名無しさん mailto:sage [2006/10/08(日) 13:58:07 ] CGIとかで、外部のユーザが自由に入力出来るようなデータに使う場合は、注意しろよー。
389 名前:デフォルトの名無しさん mailto:sage [2006/10/08(日) 17:39:10 ] >>385 ワロタ。 $KCODE忘れんなよー。
390 名前:デフォルトの名無しさん [2006/10/17(火) 01:01:11 ] 東京大学教養課程の第一プログラミング言語がRubyに d.hatena.ne.jp/sumii/20060928/1159394568 b.hatena.ne.jp/entry/http://d.hatena.ne.jp/sumii/20060928/1159394568
391 名前:デフォルトの名無しさん mailto:sage [2006/10/19(木) 06:27:31 ] 東大の宿題予想しようぜ
392 名前:デフォルトの名無しさん mailto:sage [2006/10/19(木) 18:29:19 ] >>391 東大の講師ごくろうさまです。軽くRubyのコンパイラでも作らせてあげてください。
393 名前:デフォルトの名無しさん mailto:sage [2006/10/19(木) 20:46:33 ] そもそも東大生でこんなところに質問しにくるアホはいねーだろ # と思いたいなあ
394 名前:デフォルトの名無しさん mailto:sage [2006/10/19(木) 20:58:36 ] 東大生といえども所詮、学生だし。
395 名前:デフォルトの名無しさん mailto:sage [2006/10/19(木) 21:13:49 ] むしろ東大生がやるレベルの宿題ってのをみてみたいので、 ここに投げてほしいと思う俺がいる。
396 名前:デフォルトの名無しさん mailto:sage [2006/10/19(木) 21:40:50 ] 俺も俺も
397 名前:デフォルトの名無しさん mailto:sage [2006/10/20(金) 15:12:50 ] 俺もw
398 名前:デフォルトの名無しさん mailto:sage [2006/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 名前:デフォルトの名無しさん mailto:sage [2006/10/20(金) 16:27:23 ] >>398 ずれててよくわかんない。><
400 名前:デフォルトの名無しさん mailto:sage [2006/10/20(金) 19:06:04 ] 等幅でおk
401 名前:デフォルトの名無しさん mailto:sage [2006/10/22(日) 04:13:34 ] 宿題じゃないけど、聞いていい? 問、重複行を削除せよ
402 名前:デフォルトの名無しさん mailto:sage [2006/10/22(日) 04:27:37 ] ruby -e 'File.open("file.txt"){|f| f.readlines.sort!.uniq! }'
403 名前:デフォルトの名無しさん mailto:sage [2006/10/22(日) 06:46:39 ] >>402 ソートしないでという条件をつけさしてください。
404 名前:デフォルトの名無しさん mailto:sage [2006/10/22(日) 07:06:05 ] temp = "" ARGF.each_line do |line| puts line if not line == temp temp = line end
405 名前:デフォルトの名無しさん mailto:sage [2006/10/22(日) 10:51:00 ] >>403 print readlines.uniq!
406 名前:デフォルトの名無しさん mailto:sage [2006/10/22(日) 11:37:44 ] uniqって、重複なかったら、nilが帰ってくるんだけど orz
407 名前:デフォルトの名無しさん mailto:sage [2006/10/22(日) 11:40:35 ] print readlines.uniq で、いけますね。