1 名前:RUBY [05/01/24 22:17:37 ] 私は、ある大学の1年生です。今、情報処理の講義でRUBYを習っています。 その講義で、期末テストとして課題が出たのですが、プログラミング初心者の私には 全然歯が立ちません。締め切りは1/31です。プロも皆さんには簡単な 問題かもしれませんがどうか教えてください。 課題は以下の通りです。
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 で、いけますね。
408 名前:デフォルトの名無しさん mailto:sage [2006/10/22(日) 12:12:44 ] puts ARGF.map.uniq 意味もなく最短を狙ってみる。
409 名前:デフォルトの名無しさん mailto:sage [2006/10/22(日) 12:40:15 ] CodeGolfかよw
410 名前:デフォルトの名無しさん mailto:sage [2006/10/22(日) 16:53:55 ] >>408 ARGFは$<で代用可能。ついでにそのおかげで空白も除去できる。 puts$<.map.uniq
411 名前:デフォルトの名無しさん mailto:sage [2006/10/22(日) 22:46:08 ] >>410 > ついでにそのおかげで空白も除去できる。 将来もずっとそうかわからんぞ。 namespaceの話もあるからな。
412 名前:デフォルトの名無しさん mailto:sage [2006/10/23(月) 20:20:24 ] >411 それを言ったら Ruby なんて教祖の暴走がある限り ほぼ全ての仕様が将来もずっとそうか分からんぞ。
413 名前:デフォルトの名無しさん mailto:sage [2006/10/24(火) 14:38:13 ] 俺はいつもこんな感じ。適宜digest使ったり。 h = [] ARGF.each_line do |line| puts line if h[$_.sum] =|| 0 end
414 名前:デフォルトの名無しさん mailto:sage [2006/10/25(水) 02:02:20 ] そりゃsyntax errorだと思うが。 if h[line.sum] ||= 0 だとしても常に真だし。
415 名前:デフォルトの名無しさん mailto:sage [2006/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 名前:デフォルトの名無しさん mailto:sage [2006/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 名前:デフォルトの名無しさん mailto:sage [2006/10/25(水) 16:03:33 ] >>416 ありがとうございます。 論理和というか、両方1のときは1、それ以外は0になる形です。
418 名前:デフォルトの名無しさん mailto:sage [2006/10/25(水) 16:25:42 ] それは、論理積じゃねーの。
419 名前:デフォルトの名無しさん mailto:sage [2006/10/25(水) 16:37:23 ] うむ
420 名前:デフォルトの名無しさん mailto:sage [2006/10/25(水) 18:22:22 ] すいません。その通りです。 論理積でお願いします。
421 名前:416 mailto:sage [2006/10/25(水) 18:54:17 ] あとは自分で考えろよ
422 名前:デフォルトの名無しさん mailto:sage [2006/10/25(水) 19:59:41 ] いっぱいある縦棒のどれかをアンパサンドに変えればいいんでないの?
423 名前:デフォルトの名無しさん mailto:sage [2006/10/25(水) 20:14:23 ] puts a.map{|x| x.map{|y| i+=1; y | b.fアンパサンドatten[i]; }}.inspect こうですか? わかりません!
424 名前:415 mailto:sage [2006/10/25(水) 21:20:16 ] おかげさまでできました。 >>416 さんをはじめ、このスレのみなさん本当にありがとうございました。
425 名前:デフォルトの名無しさん [2006/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 名前:デフォルトの名無しさん [2006/12/16(土) 19:10:59 ] a = []; 9.times{|i| a << i + 1}; p a
427 名前:デフォルトの名無しさん [2006/12/16(土) 19:12:56 ] あ、これでいいのか・・・ p Array.new(9){|i| i + 1}
428 名前:デフォルトの名無しさん mailto:sage [2006/12/16(土) 20:08:27 ] (1..9).to_a
429 名前:デフォルトの名無しさん mailto:sage [2006/12/16(土) 20:10:02 ] (1..9).map このほうが短いな
430 名前:デフォルトの名無しさん mailto:sage [2006/12/17(日) 00:55:11 ] Range#to_aが真っ先に思いつくのが普通だよな。
431 名前:デフォルトの名無しさん mailto:sage [2006/12/17(日) 01:19:25 ] [*1..9]
432 名前:デフォルトの名無しさん [2006/12/17(日) 07:24:23 ] >>428-429 マジスカ((((*´ー`) >>431 これ、知らんかった! !説明plz マニュアルに書いてある?
433 名前:デフォルトの名無しさん mailto:sage [2006/12/17(日) 10:04:55 ] >>432 「2.8 *がついた引数は何ですか」
434 名前:デフォルトの名無しさん [2006/12/17(日) 11:43:34 ] >>433 www.ruby-lang.org/ja/man/index.cgi?cmd=view;name=FAQ::%CA%D1%BF%F4%A1%A2%C4%EA%BF%F4%A1%A2%B0%FA%BF%F4#a2.2e8.20.2a.a4.ac.a4.c4.a4.a4.a4.bf.b0.fa.bf.f4.a4.cf.b2.bf.a4.c7.a4.b9.a4.ab これか・・・。 引数以外にもつけられるんだ
435 名前:デフォルトの名無しさん mailto:sage [2006/12/19(火) 23:18:17 ] >>429 1.9ではEnumerable::Enumeratorが返る。
436 名前:デフォルトの名無しさん mailto:sage [2006/12/20(水) 18:32:40 ] >>435 将来もずっとそうかわからんぞ。
437 名前:デフォルトの名無しさん mailto:sage [2006/12/20(水) 22:37:07 ] >>436 いままでで切り捨てられたものの例を挙げてみてくれないか?
438 名前:デフォルトの名無しさん mailto:sage [2006/12/20(水) 22:51:18 ] なんでなんで
439 名前:デフォルトの名無しさん mailto:sage [2006/12/21(木) 09:51:30 ] 警告出るのはあったな
440 名前:デフォルトの名無しさん [2006/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 名前:デフォルトの名無しさん mailto:sage [2006/12/25(月) 19:59:15 ] <kuma>panda</kuma> ↓ <kuma>p<a>nd<a></kuma> こう?
442 名前:デフォルトの名無しさん mailto:sage [2006/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 名前:デフォルトの名無しさん mailto:sage [2006/12/26(火) 08:38:57 ] |s,*| これ↑をすると、配列がはずれて文字列だけになるんだ。 何故?
444 名前:デフォルトの名無しさん mailto:sage [2006/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 名前:デフォルトの名無しさん mailto:sage [2006/12/26(火) 12:27:10 ] >>444 丁寧な説明、サンクス。 なるほど、配列の第1要素のみ利用するってこってですね。
446 名前:デフォルトの名無しさん mailto:sage [2006/12/26(火) 21:05:25 ] car?
447 名前:デフォルトの名無しさん mailto:sage [2007/01/05(金) 13:35:21 ] >446 lispのcar関数とはまた別モノだろ
448 名前:デフォルトの名無しさん [2007/01/11(木) 20:52:38 ] C言語で、値の入れ替えは、以下のように書くことができるようですが、 rubyでもっと短くかけないですか? a=(a^=b,b^=a,a^b);
449 名前:デフォルトの名無しさん mailto:sage [2007/01/11(木) 20:59:26 ] >>448 a, b = b, a Cでもいまどきそんなの使うやついねーよ
450 名前:デフォルトの名無しさん [2007/01/11(木) 22:47:27 ] >>449 多値使うのかー。 > Cでもいまどきそんなの使うやついねーよ そうなのかw
451 名前:デフォルトの名無しさん [2007/01/12(金) 14:47:00 ] 自分もできない課題があって困ってるんだが・・・。 りんご本からいくつか課題出されて、その中の テキスト65ページ 「耳の遠いおばあちゃん」に取り組みなさい。 耳の遠いおばあちゃんのプログラムを書いてみましょう。 おばあちゃんに何を言っても(何をタイプしても)、叫ばない限り(つまり、すべて大文字でタイプしない限り)、 は?! もっと大きな声で話しておくれ、坊や! と返事をします。もし叫んだときは、彼女はあなたの言葉を聞いて(少なくとも聞いた気がして)、 いやー、1938年以来ないねー! と大声で返事します。 プログラムに真実味を持たせるため、1930から1950のランダムな数字で毎回違う年を叫ぶようにしましょう。 あなたは、BYEと叫ぶまでおばあちゃんとの会話から逃れられません。 う年を叫ぶようにしましょう。 あなたは、BYEと叫ぶまでおばあちゃんとの会話から逃れられません。 とかいうの。
452 名前:デフォルトの名無しさん mailto:sage [2007/01/12(金) 20:30:26 ] >>451 ぐぐれば解答例あるよ。
453 名前:デフォルトの名無しさん [2007/01/12(金) 22:54:56 ] 初心者の過去スレ人多すぎで見れない… どこをググれば??
454 名前:デフォルトの名無しさん mailto:sage [2007/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 名前:デフォルトの名無しさん [2007/01/14(日) 00:45:45 ] ぐぐっても解答例が探せなかったorz そのプログラムも動いてくれなかったです。 乱数のとこで引っかかったりwhileで引っかかったりで前に進みません。
456 名前:デフォルトの名無しさん mailto:sage [2007/01/14(日) 01:35:46 ] 454は答えそのものじゃなくて基本的なアプローチ部分のコード例だよ。残りを埋めなきゃ答えにはならん。 それすら見てもわからんのか……。 ところでmixiで質問してるのと同じ人?
457 名前:デフォルトの名無しさん mailto:sage [2007/01/14(日) 02:23:57 ] >>455 何がどうダメなのか説明しないと誰もアドバイスできませんよ。 プログラムを動かそうとしたらエラーが出るなら、 そのエラーメッセージとソースコードをコピペする。 「エスパー募集中ですか?」って言われちゃいますよ?
458 名前:デフォルトの名無しさん mailto:sage [2007/01/14(日) 03:11:56 ] つーか自分で作って詰まれ どうせ他人の見ても何がどうなってるのかわからんのだろ 確かにこのスレは宿題丸投げも可だが、あまり身勝手におイタしてると 「完全に動作するがコードが面妖で提出不可」なプログラムだけ回答に出されて放置されたりするぞ
459 名前:デフォルトの名無しさん mailto:sage [2007/01/14(日) 03:27:05 ] 「ここまでは書けたけどあとはさっぱりです」とか素直に見せられたほうが答返ってくるよな。
460 名前:デフォルトの名無しさん mailto:sage [2007/01/14(日) 09:55:57 ] そして誰かが3行程度で作ってしまう。
461 名前:デフォルトの名無しさん [2007/01/14(日) 11:25:50 ] CodeGolf形式で聞けば答えてくれるぞ
462 名前:デフォルトの名無しさん mailto:sage [2007/01/14(日) 22:24:50 ] 俺なら70byteで解く
463 名前:デフォルトの名無しさん mailto:sage [2007/01/15(月) 14:23:44 ] 人工無能を作るスレがあるからそっちで聞け
464 名前:デフォルトの名無しさん mailto:sage [2007/01/15(月) 22:27:13 ] 関係ない他のスレに迷惑かけちゃいかんよ
465 名前:939 [2007/01/19(金) 23:12:14 ] ヒープを配列で実装しろという問題とヒープソートの作り方を教えてください
466 名前:デフォルトの名無しさん mailto:sage [2007/01/20(土) 04:09:57 ] www.geocities.jp/ky_webid/algorithm/022.html
467 名前:デフォルトの名無しさん [2007/01/24(水) 16:36:01 ] 0点の紙が1枚、1点の紙が2枚、4点の紙が1枚入っている箱がある。 この箱から1枚引いて箱に戻すのを6回繰り返したとき、合計点数のとりうる値を求めるプログラムを書け。 この問題の解法を教えてください。よろしくお願いします。
468 名前:デフォルトの名無しさん mailto:sage [2007/01/24(水) 19:05:18 ] >>467 算数の問題が解けないのか、解けるけどRubyに書き直せないのかどっちだ? # 前者のような気はするけど。
469 名前:デフォルトの名無しさん [2007/01/24(水) 20:53:01 ] >>468 後者です。 場合わけなどを効率よくプログラミングにおとすにはどうしたよいかわかりません。
470 名前:デフォルトの名無しさん mailto:sage [2007/01/24(水) 21:42:44 ] なるほど。アルゴリズムは考え付いたわけね。 じゃ、日本語で良いのでそのアルゴリズムを書いてみて。 それをコード化してあげる。
471 名前:デフォルトの名無しさん mailto:sage [2007/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 名前:デフォルトの名無しさん [2007/01/24(水) 22:00:33 ] >>470 計算問題として解くなら手計算でゴリ押しできるのですがうまいアルゴリズムが思いつかなくて。 とりあえず0,1,4からなる6個の数字をすべての場合を網羅するように作成して現れる合計値をすべて記録すれば答えはでるんですが、それだと面倒なので質問しました。
473 名前:デフォルトの名無しさん mailto:sage [2007/01/24(水) 22:07:57 ] トリッキーなコード ↓
474 名前:デフォルトの名無しさん [2007/01/24(水) 22:12:02 ] >>471 ありがとうございます。 こんなに短くできるんですね。
475 名前:デフォルトの名無しさん mailto:sage [2007/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 名前:デフォルトの名無しさん mailto:sage [2007/01/24(水) 22:24:06 ] inject([])の間違いだた。まぁ今回はたまたまうまく動くけど。
477 名前:デフォルトの名無しさん mailto:sage [2007/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 名前:デフォルトの名無しさん [2007/01/24(水) 23:08:30 ] ありがとうございます。この問題の回答としては>>475->>477 さんのほうが良いですね。
479 名前:デフォルトの名無しさん [2007/01/28(日) 11:47:43 ] codegolf的に、配列を圧縮する方法ってないでしょうか。 a = [123, 567, 23, 456, 34, 12] を 文字列か何かであらわせないかと。 base64でも使うのかな?
480 名前:デフォルトの名無しさん [2007/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 名前:デフォルトの名無しさん [2007/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 名前:デフォルトの名無しさん [2007/01/28(日) 12:30:00 ] >>481 でいけますね。解決です。
483 名前:デフォルトの名無しさん mailto:sage [2007/01/28(日) 21:35:53 ] 本スレのほうから誘導されましたので、こちらで質問させていただきます。 pc10.2ch.net/test/read.cgi/tech/1164885714/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 名前:デフォルトの名無しさん mailto:sage [2007/01/28(日) 22:31:59 ] ttp://blade.nagaokaut.ac.jp/cgi-bin/vframe.rb/ruby/ruby-list/42665?42609-42821
485 名前:デフォルトの名無しさん mailto:sage [2007/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 名前:デフォルトの名無しさん mailto:sage [2007/02/04(日) 22:30:46 ] 10個の任意の数字を昇順(小さい数から大きい数)に並び替えるプログラムを作成しなさい 注意事項及びヒント: sortメソッドは使用しないこと 配列を使用した方が並び替え易いと思います
487 名前:デフォルトの名無しさん mailto:sage [2007/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 名前:デフォルトの名無しさん mailto:sage [2007/02/05(月) 21:21:52 ] >>487 >>486 が初心者スレで返された答えとかぶってるw
489 名前:デフォルトの名無しさん mailto:sage [2007/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 名前:デフォルトの名無しさん mailto:sage [2007/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 名前:デフォルトの名無しさん mailto:sage [2007/02/05(月) 23:36:50 ] >489-490 おまえらさあ、こういうのをそのままコピペして提出するアホがいたらどうすんだよ。 これを受け取ってどう評価するか悩む教師の身にもなってみてくれ、まじで。
492 名前:デフォルトの名無しさん mailto:sage [2007/02/06(火) 00:03:32 ] 教授、乙
493 名前:486 [2007/02/06(火) 01:32:00 ] レスどうも、コピペしてませんからご安心を。確認しただけです。 全く違うソートになりましたが。
494 名前:デフォルトの名無しさん [2007/02/14(水) 16:21:00 ] 端末に現在時刻を 1 秒おきに表示しスクロールするプログラム. 実行中にキーボードの 1 が押されるとそれ以降は文字色を赤で, また,2 が押されるとそれ以降は文字色を青で表示する. 0 が押されると数字を入力するようプロンプトを表示し, 時刻の表示間隔を入力された数字の秒数に変更する. Ctrl+C で終了する. お願いします.
495 名前:デフォルトの名無しさん mailto:sage [2007/02/14(水) 19:12:53 ] じゃあ半分だけ。 loop do puts Time.now sleep 1 end
496 名前:デフォルトの名無しさん mailto:sage [2007/02/15(木) 01:28:32 ] それで半分は言いすぎw
497 名前:デフォルトの名無しさん [2007/02/15(木) 03:17:40 ] どうでもいいけど、宿題で聞くヤツって何でこう、突っ放しなんだろうな。 お前本当に、答えてほしのかとww もっとこう、答えたくて答えたくてたまらないように、仕向けないといけないと思うんだけど。 ・・・まあ、だから、2ch聞いてるんだろうけど。 ちなみん、おれが、2ch聞いたのはほとんど答えてもらってる。
498 名前:デフォルトの名無しさん mailto:sage [2007/02/15(木) 04:41:13 ] このスレももう500になるのか とりあえずフォーマットくらいは用意すべきだろうね
499 名前:デフォルトの名無しさん mailto:sage [2007/02/15(木) 10:09:25 ] >>494 >>495 ありがとうございます. 核の部分はそうなると思いますが, そこは問題を説明するために設定した部分で, 本当に聞きたいのはユーザとの対話部分なんです. 引き続きお願いします. 自分なりには curses を使って書いてみたんですが, getstr がどうもうまく動かないので, こちらで質問してみました.
500 名前:デフォルトの名無しさん mailto:sage [2007/02/15(木) 16:39:31 ] >>499 試行中なんだが、getstrだとエンターまでを入力として期待するのでよくないはず。 getchを使おう。 今のリファレンスには書いてないがncursesの現行のAPIはほとんどwrapされてるようす。 あとは拡張ライブラリのソース見れって感じだ。 正直言って宿題としてはあんまりよくないな。 ncursesそのまま使うのはめんどう。 まあ、むしろCursesに皮を被せる設計の勉強なのかもしれんが。
501 名前:デフォルトの名無しさん [2007/02/20(火) 17:54:13 ] >>500 とのことなので,getstr 相当のものを getch で書いてみたのですが, どっちにしても getch で入力待ち状態のときに Ctrl-C が効きませんでした. ruby のソースを開いてみると ext/curses にサンプルがあったので, ruby mouse.rb をしてみたのですが, これでもクリック待ちのときに Ctrl-C で終了できませんでした. これが,ruby の curses の仕様なんでしょうか? Ctrl-C を押したらいつでも終了するのがマナー だと思っていたのですが…
502 名前:デフォルトの名無しさん mailto:sage [2007/02/20(火) 21:01:01 ] >501 ちなみに、環境何?
503 名前:デフォルトの名無しさん mailto:sage [2007/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 とを使っています.