1 名前:RUBY [05/01/24 22:17:37 ] 私は、ある大学の1年生です。今、情報処理の講義でRUBYを習っています。 その講義で、期末テストとして課題が出たのですが、プログラミング初心者の私には 全然歯が立ちません。締め切りは1/31です。プロも皆さんには簡単な 問題かもしれませんがどうか教えてください。 課題は以下の通りです。
8 名前:デフォルトの名無しさん mailto:sage [05/01/25 00:19:46 ] Rubyが宿題になる学校も出てきたのか
9 名前:デフォルトの名無しさん [05/01/25 00:21:43 ] >>8 > Rubyが宿題になる学校も出てきたのか 宿題には、アカデミズムの世界以外ではまったく見ない言語を使ったりしますが。
10 名前:デフォルトの名無しさん mailto:sage [05/01/25 00:25:12 ] >>1 と言うか、期末テストなら自分で考えた方が後々にも役立って良いよ、1/31までは十分長いからね。
11 名前:デフォルトの名無しさん mailto:sage [05/01/25 00:25:45 ] Rubyはアカデミズムの世界以外ではまったく見ない言語な訳でつね。
12 名前:デフォルトの名無しさん mailto:sage [05/01/25 00:29:44 ] >>8 HSPを教える学校があるこんな世の中じゃ
13 名前:デフォルトの名無しさん [05/01/25 00:35:12 ] >>11 > Rubyはアカデミズムの世界以外ではまったく見ない言語な訳でつね。 違うだろ。
14 名前:デフォルトの名無しさん mailto:sage [05/01/25 00:36:31 ] >>13 こんなに露骨なネタにマジレスって(ry
15 名前:デフォルトの名無しさん [05/01/25 00:39:54 ] >>12 > HSPを教える学校があるこんな世の中じゃ 教えるだけまし。 わたしが学生の時には、 「次回からC言語を使うので、来週までにマスターしておいてください」 だった。
16 名前:デフォルトの名無しさん mailto:sage [05/01/25 00:41:17 ] >>15 何と言うか、教える気NULLだな。
17 名前:デフォルトの名無しさん mailto:sage [05/01/25 07:49:10 ] >>8 うちの大学では1〜2年前期はCで2年後期にRubyだな
18 名前:デフォルトの名無しさん mailto:sage [05/01/25 08:39:00 ] 日数配列を用意しないで書く方法がわかんないあ・・・
19 名前:デフォルトの名無しさん mailto:sage [05/01/25 10:16:13 ] ifやcase使えって事かもw
20 名前:デフォルトの名無しさん mailto:sage [05/01/25 10:29:18 ] 配列なんてなにに使うんだ?
21 名前:デフォルトの名無しさん mailto:sage [05/01/25 10:38:35 ] >18 だから>2を読めって。分からないなら質問しろ。丸投げはダメだ。こんなアホな宿題を他人にやらせてたら、ダメ人間になっちゃうゾ!
22 名前:デフォルトの名無しさん mailto:sage [05/01/25 11:07:15 ] >>21 と言うか、>>2 を与えられてもまだダメだというのは、よほど無能だと 言うことだから、こいつにはプログラミングはさっさとあきらめて、 コンピュータ関係の業界に来ないで欲しいと言いたいな。
23 名前:デフォルトの名無しさん mailto:sage [05/01/25 11:09:25 ] p 18.id != 1.id#=>true です; とりあえず配列使って書けたけど >19さんの言う通りifとかcaseを使うのかな・・・(;´Д`)ウーン
24 名前:18 mailto:sage [05/01/25 11:10:10 ] Σ(´Д`;)ガーン・・・叩かれてる;
25 名前:デフォルトの名無しさん [05/01/25 20:29:39 ] class Ichi attr_reader(:nisuuu) def initialize @nisuuu = Hash.new @nisuuu[1] = 31 @nisuuu[3] = 31 @nisuuu[5] = 31 @nisuuu[7] = 31 @nisuuu[8] = 31 @nisuuu[10] = 31 @nisuuu[12] = 31 @nisuuu[4]= 30 @nisuuu[6]= 30 @nisuuu[9]= 30 @nisuuu[11]= 30 end end class Ni attr_reader(:n, :m) def initialize print "年と月を入力しろ\n" print "年>>>" @n = gets.chomp.to_i print "月>>>" @m = gets.chomp.to_i end end
26 名前:デフォルトの名無しさん [05/01/25 20:31:35 ] class San attr_reader(:ni) def initialize(n) @ni = 28 + (n / 4 * 4 / n) - (n / 100 * 100 / n) + (n / 400 * 400 / n) end end class Yon attr_reader(:ichiyoubi) def initialize(n) @ichiyoubi = (n + (n - 1) / 4 - (n - 1) / 100 + (n - 1) / 400) % 7 end end class Go attr_reader(:myoubi) def initialize(ichi, ichiyoubi, nigatsu, m) @myoubi = ichiyoubi for i in 1..(m-1) nisu = 0 if i == 2 nisu = nigatsu else nisu = ichi.nisuuu[i] end @myoubi += nisu end @myoubi %= 7 end end
27 名前:デフォルトの名無しさん mailto:sage [05/01/25 20:34:16 ] 配列使うな。 Rubyマニュアルで文法読め! >19の助言を読め! 大馬鹿者!
28 名前:デフォルトの名無しさん mailto:sage [05/01/25 21:08:12 ] >27 Rubyマニュアルって何ですか?
29 名前:デフォルトの名無しさん [05/01/25 21:56:55 ] def qsort(s, first, last) if first < last then pivot = s[last] i = first j = last - 1 while true do while i < last && s[i] < pivot do i += 1 end while j >= first && s[i] >pivot do j -= 1 end if i >= j then break end つづきます。
30 名前:デフォルトの名無しさん [05/01/25 21:57:26 ] temp = s[i] s[i] = s[j] s[j] = temp i += 1 j -= 1 end temp = s[i] s[i] = s[last] s[last] = temp qsort(s, first, i-1) qsort(s, i+1, last) end end def quick_sort(s) qsort(s, 0, s.size-1) return s end s = [4,5,8,7,10,8,9,3,12,0] p quick_sort(s) クイックソートのソースなんですけど、何故か上手くならんでくれません…。
31 名前:デフォルトの名無しさん [05/01/25 22:12:44 ] めちゃくちゃ!!
32 名前:デフォルトの名無しさん mailto:sage [05/01/25 22:15:43 ] >>1 とにかくがんばれ
33 名前:デフォルトの名無しさん mailto:sage [05/01/26 04:31:56 ] days = case month when 1,3,5,7,8,10,12 31 when 4,6,9,11 30 when 2 28 end
34 名前:デフォルトの名無しさん [05/01/26 06:42:54 ] ついにRubyにも宿題スレかw
35 名前:デフォルトの名無しさん [05/01/26 13:30:25 ] みんな、暖かく見守ってあげようよ
36 名前:デフォルトの名無しさん [05/01/26 13:36:04 ] やりたくもない宿題を出されて困っている人がいるのだから、 詳しい人が変わりにやってあげるのが当然だと思います。 人間らしい思いやりの心を見せましょう。
37 名前:デフォルトの名無しさん mailto:sage [05/01/26 13:50:23 ] >>29-30 誤 while j >= first && s[i] >pivot do 正 while j >= first && s[j] >pivot do よく見んと判らんなw
38 名前:sage [05/01/27 00:58:54 ] 29です。 あああ、ありがとうございます!!! 動きましたーー!!たすかりました〜〜ホロリ
39 名前:デフォルトの名無しさん [05/01/27 01:00:12 ] あ!あがってしまったw
40 名前:デフォルトの名無しさん mailto:sage [05/01/27 08:54:33 ] ダメ人間決定
41 名前:デフォルトの名無しさん mailto:sage放置 [05/01/28 10:44:29 ] sage放置
42 名前:デフォルトの名無しさん [05/01/28 19:11:54 ] あ!あがってしまったw
43 名前:デフォルトの名無しさん [05/01/29 02:40:38 ] Rubyの授業の課題として出されたのですが、学生中にRubyを使うことはおそ らくないので勉強していなかったのでまったくわかりません。誰か助けてい ただけませんか? ・web上の適当な英文をもちいて、大文字、小文字を無視して、各アル ファベッドについて、次に来る文字の頻度をカウントする。単語の終 わりでは次に来る文字は、空白、カンマピリオドなどである。数字も 含め、これらはアルファベッド以外の記号は、まとめてカウントする。 結果をHTMLの表として出力する。縦に最初の文字、横に次の文字とし て分布を見る。 という問題ですが誰かお願いします!
44 名前:デフォルトの名無しさん [05/01/29 02:43:59 ] わたしはもう寝ますが、明日までなので、朝までにやっておいてください。 コピペしてすぐ提出できるように、ちゃんと書いておいてください。
45 名前:デフォルトの名無しさん [05/01/29 02:51:57 ] >わたしはもう寝ますが、明日までなので、朝までにやっておいてください。 コピペしてすぐ提出できるように、ちゃんと書いておいてください。 上の文は誰か他の人が書いたものなので。 ぜひお願いします!
46 名前:デフォルトの名無しさん mailto:sage [05/01/29 02:55:49 ] 「アルファベッド」
47 名前:デフォルトの名無しさん [05/01/29 03:07:57 ] >>43 「アルファベット」でした。すいません。
48 名前:デフォルトの名無しさん mailto:sage [05/01/29 03:30:15 ] >>43 タグはどうすんの? web上の英文て対象はHTMLを含むんだよね。 <p>baka</p> なんてHTMLが送られてきたら、pは2回、bakaは1回てカウントするの? それともpは無視?
49 名前:デフォルトの名無しさん mailto:sage [05/01/29 03:32:16 ] あ、ごめん、文字ね。
50 名前:デフォルトの名無しさん mailto:sage [05/01/29 04:16:34 ] >>43 作ってみたよー require 'open-uri' TARGET_URI = 'www.gnu.org/ ' class CharCounter NON_WORD_CHAR = 'OTHER' def initialize @buf = Hash.new{|h, k| h[k] = Hash.new(0)} @before_char = NON_WORD_CHAR end # def def push(s) s.gsub(/[\r\n]+/, '').split(//).each do |c| c.downcase! c = NON_WORD_CHAR if c !~ /[a-zA-Z]/ @buf[@before_char][c] += 1 @before_char = c end end # def def sorted_each @buf.keys.sort.each do |k| yield k, @buf[k] end end # def end # class # 続く
51 名前:デフォルトの名無しさん mailto:sage [05/01/29 04:17:19 ] # 続き ALPHABETS = %w(a b c d e f g h i j k l m n o p q r s t u v w x y z) ALPHABETS.push(CharCounter::NON_WORD_CHAR) def print_html(counter, uri) puts "<html><head><title>#{uri}</title></head><body><table border=1><tr><td> </td>" ALPHABETS.each do |c| puts "<th>#{c}</th>" end puts '</tr>' counter.sorted_each do |prechar, freq| puts "<tr><th>#{prechar}</th>" ALPHABETS.each do |c| puts "<td>#{freq[c]}</td>" end puts "</tr>" end puts "</table></body></html>" end # def def main(uri) counter = CharCounter.new open(uri) do |f| f.each_line {|line| counter.push(line) } end print_html(counter, uri) end # def main(TARGET_URI)
52 名前:デフォルトの名無しさん [05/01/29 04:41:19 ] こんなに長いプログラムを本当にありがとうございました。あと一つ質問が あるんですけれども、このプログラムで作ったHTMLの表はどこで見られるの ですか?
53 名前:デフォルトの名無しさん mailto:sage [05/01/29 04:58:48 ] >>52 標準出力に出してる。だからなんかファイルにリダイレクトしてwebブラウザで開け。 例えば、vaka.rbとかいうファイルにスクリプトを書いてコマンドラインから、 ruby vaka.rb > baka.html とかやればbaka.htmlができるからそれをブラウザで開くといい。 あ、あとRubyは1.8系が前提っすから、その辺よろしく。
54 名前:デフォルトの名無しさん [05/01/29 05:13:42 ] 確認できました!夜遅くまでいろいろとすいませんでした。これで何とか単 位ももらえそうです。本当にありがとうございました!!
55 名前:デフォルトの名無しさん mailto:sage [05/01/29 12:48:19 ] お前北大だろ
56 名前:デフォルトの名無しさん mailto:sage [05/01/29 12:49:26 ] これで済むと思うよな。
57 名前:デフォルトの名無しさん [05/01/29 12:55:09 ] >>56 ?? う、うん。思うよ。
58 名前:RUBY [05/01/31 23:19:34 ] こんばんは、RUBYです。 今日、期末課題を提出しました。あれから、図書などを調べてプログラミングしてみました。 プログラムを完成させることはできなかったので、あまり良い成績はとれそうもありませんが、 一応、形にはなっていると思うので、それなりの評価はあるでしょう。 今日まで、掲示板を見ることができませんでしたが、課題の解答を沢山の人が作ってくれて 本当にありがとうございました。 今回の課題を作成しているうちにプログラミングに興味を持ったので、 休み中に何かに挑戦してみたいと思っているのですが、どんな言語から始めたらよいか、 どんな言語が将来役に立つか、プログラミング初心者が初めに読んだ方がよい図書は何か などアドバイスがあったら教えてください。
59 名前:デフォルトの名無しさん mailto:sage [05/01/31 23:22:59 ] 最低
60 名前:デフォルトの名無しさん mailto:sage [05/02/01 04:19:28 ] >>58 Rubyでいいじゃん そんなにRuby使うの嫌か?
61 名前:デフォルトの名無しさん mailto:sage [05/02/01 06:16:31 ] ま、Schemeでもやっとけ。
62 名前:デフォルトの名無しさん mailto:sage [05/02/01 13:43:25 ] お前のやったことはカンニングだぞ 白血病で氏ね
63 名前:デフォルトの名無しさん mailto:sage [05/02/01 15:18:51 ] >>58 > 一応、形にはなっていると思うので、それなりの評価はあるでしょう。 なんで? カンニングは評価くれんでしょ。
64 名前:デフォルトの名無しさん mailto:sage [05/02/02 04:53:06 ] [1] 授業単元: RUBY [2] 問題文はwww.edu.ics.saitama-u.ac.jp/~hira/ex04p/prog04ef.b.html にあります。 [3] 環境 OS:UNIX 言語:RUBY [4] 期限:2005年2月29日14:00まで よろしくお願いします。
65 名前:デフォルトの名無しさん mailto:sage [05/02/02 06:40:10 ] >>64 向こうで解こうとしてた者なんだが、これCじゃなかったの? いや質問者が同一人物とは限らんのだが…
66 名前:デフォルトの名無しさん mailto:sage [05/02/02 07:44:36 ] >>65 Cの課題だと思う コンテスト ttp://www.edu.ics.saitama-u.ac.jp/~hira/ex04p/prog04en.b.html == ■ 乱入者部門 * 履修者以外でも, もし乱入者がいれば (私も含めて) * 「〆切後に改良したから試したい」「C 以外の言語で参加したい」も, こちらで * 言語は, 端末室の UNIX 環境で使えることが条件 * 履修者・乱入者それぞれのチャンピオンで, 最終戦
67 名前:デフォルトの名無しさん mailto:sage [05/02/03 06:37:06 ] >>66 ふむ。あと1ヶ月ほどあるのね。しかも乱入も可か。 乱入してみるかなw
68 名前:RUBY [05/02/04 03:22:20 ] >>62 は?見てねーつってんだろ?あ? パソコンばっかり見てるヒッキー&ブサイク男ちゃん ドライアイで氏ね
69 名前:デフォルトの名無しさん mailto:sage [05/02/04 10:18:49 ] >>1 ?
70 名前:デフォルトの名無しさん mailto:sage [05/02/06 14:55:20 ] >>62 不謹慎すぎて笑えない
71 名前:デフォルトの名無しさん mailto:sage [05/02/07 22:19:33 ] ここは初心者に優しくないインターネットですね >>58 > 休み中に何かに挑戦してみたい 好みにもよるが、BASIC・C言語・Rubyのいずれかから入るのが良いと思われる。 入門図書は、図書館があるなら自分で探せ。図書館がなければ おすすめはC言語なら「C言語プログラミングレッスン」、Rubyなら「たのしいRuby」。 www.hyuki.com/lc/ www.amazon.co.jp/exec/obidos/ASIN/4797314087/249-5597810-1058710 ちなみに、将来役に立つ言語は何か?という問いには「将来次第」としか答えようがない。 とりあえず何にでも手を出しとけ。
72 名前:デフォルトの名無しさん mailto:sage [05/02/08 00:03:45 ] www.amazon.co.jp/exec/obidos/ASIN/4797314087/
73 名前:デフォルトの名無しさん mailto:sage [05/02/08 02:23:02 ] >>71 ユーザビリティ的にはC#(+IDE)かJava(+Eclipse)かPythonかRubyでFAだろう。 入門用と考えると以下は満たして欲しい。 1.参考書 2.ライブラリが豊富 3.IDE(特にコンパイラなら必須) 4.GC Cは悪くないけど、もはやGCが無い言語は入門用としては遺物ではなかろうか。 ゴージャスなIDE付きでタダで使える実装は無いし。 Basicは発展性がなさ過ぎるというかVBA弄ってて泣きそうになったのでやめとけ。 参考書さえあるならAirみたいなオブジェクト指向でない手続き型のスクリプト言語が 習得がもっとも容易であると思われる。しかしそのような言語はあまり聞かない。
74 名前:デフォルトの名無しさん mailto:sage [05/02/08 02:32:45 ] >2.ライブラリが豊富 Rubyは失格だな。なにやるにしてもネットのどこかから拾ってくればできなくもないって奴ばっかだし。
75 名前:デフォルトの名無しさん mailto:sage [05/02/08 02:33:09 ] 入門用ならIDE無い方が良いと思うよ
76 名前:デフォルトの名無しさん mailto:sage [05/02/08 02:35:45 ] >>73 HSP
77 名前:デフォルトの名無しさん mailto:sage [05/02/09 01:37:25 ] >>76 HSPもいいのかも知れないなあ、と一瞬思ったけどgotoを使うのが基本の言語はダメだろ。 関数定義はないし構造体も無いのは無理。
78 名前:デフォルトの名無しさん mailto:sage [05/02/09 12:36:48 ] 関数定義はあるんじゃなかったっけ
79 名前:デフォルトの名無しさん mailto:sage [05/02/09 13:01:07 ] 目的しかないやっつけHSPと目的のないオナニー言語Ruby
80 名前:デフォルトの名無しさん mailto:sage [05/02/09 13:15:10 ] Rubyに目的が無いんだったらJavaにもCにも無いと思われ
81 名前:デフォルトの名無しさん mailto:sage [05/02/09 13:51:44 ] >>79 目的がないのではなく、多目的なのでは?
82 名前:デフォルトの名無しさん mailto:age [05/02/09 18:14:33 ] もなさんRubyをどのような目的で使ってますかー?
83 名前:デフォルトの名無しさん mailto:sage [05/02/09 20:05:17 ] CGIスクリプトとテキスト処理 あとはApolloを使ってGUIアプリケーションとか
84 名前:デフォルトの名無しさん [05/02/09 21:37:05 ] 無知蒙昧な2ちゃんねらにRubyのよさを知らしめるために日夜勉強しています。
85 名前:デフォルトの名無しさん mailto:sage [05/02/09 22:24:35 ] >>84 Rubyを使うことが目的なのか?あふぉか?
86 名前:デフォルトの名無しさん [05/02/22 21:23:13 ] [1]授業単元:Ruby [2]問題文:オセロを作れ [3]環境 [3.1]OS: [3.2]コンパイラ: [3.3]言語:Ruby [4]期限:23日昼 [5]その他の制限:CPU対戦は不要
87 名前:デフォルトの名無しさん [05/03/02 12:45:21 ] age
88 名前:デフォルトの名無しさん mailto:sage [2005/06/20(月) 02:25:44 ] [1] byte code化 [2] M17N [3] native thread対応
89 名前:デフォルトの名無しさん [2005/07/17(日) 16:31:23 ] 問題文自動生成システムを作りたいんだけど。。 熟語辞書の中から熟語をランダムに選択して、その語彙を含む問題文をコーパスから拾ってきて生成するシステム。 ちょっと手がつかないです(*_*)
90 名前:デフォルトの名無しさん mailto:sage [2005/07/17(日) 16:48:40 ] 大学の講座にRubyがあるのですか。
91 名前:デフォルトの名無しさん mailto:sage [2005/07/17(日) 22:33:49 ] 幸せな大学だなぁ。うちはPrologだったぞ。
92 名前:デフォルトの名無しさん mailto:sage [2005/07/21(木) 12:12:27 ] Rubyももう十年ですから、大学講座に取り上げられて不思議は ありませんね。
93 名前:デフォルトの名無しさん mailto:sage [2005/08/14(日) 08:22:48 ] (1) test/ruby/test_lambda.rbのsyntax errorを直せ。 (20点)
94 名前:デフォルトの名無しさん mailto:sage [2005/08/17(水) 08:01:08 ] まだなんかヘンな気がするな…
95 名前:デフォルトの名無しさん [2005/09/18(日) 19:13:13 ] age
96 名前:デフォルトの名無しさん [2005/10/12(水) 00:31:12 ] 学籍番号 名前 点数 の順に書かれているファイルを読み込んで、平均点と学籍番号順に並べ替えて表示するプログラムを作れといわれました。
97 名前:デフォルトの名無しさん mailto:sage [2005/10/13(木) 01:07:08 ] data = File.read(ファイル名).split(/\n/) puts data.inject(0){|a,b| a+b.split[2].to_i} puts data.sort_by{|a|a.split[0].to_i}
98 名前:デフォルトの名無しさん [2005/10/19(水) 09:08:52 ] これだと平均じゃなくて合計じゃないですか?
99 名前:デフォルトの名無しさん mailto:sage [2005/10/20(木) 01:00:36 ] そうか。なら2行目は、 puts data.inject(0){|a,b| a+b.split[2].to_i} / data.length.to_f といったところか。
100 名前:ハーピィ mailto:sage [2005/10/20(木) 01:06:07 ] E・∇・ヨノシ <100ゲット♫
101 名前:デフォルトの名無しさん [2005/10/22(土) 21:44:51 ] クラスNumericに引数なしのメソッドinteger?を再定義して 例えばp 5.0.integer?ならtrue、p 5.01.integer? はfalse と整数を判別して出力するのを作れといわれました。 ほんの数行で出来るらしいのですがよろしくお願いします。
102 名前:デフォルトの名無しさん mailto:sage [2005/10/23(日) 20:07:47 ] Integer と Float で定義すりゃいいんじゃない?
103 名前:デフォルトの名無しさん mailto:sage [2005/10/23(日) 20:47:56 ] こんな感じ?"ほんの数行"かどうかは分かりませんが。 "判別する"というのを条件文で実装する必要はないんですよね? > class Integer > def integer? > return true > end > end > > class Float > def integer? > return false > end > end
104 名前:デフォルトの名無しさん mailto:sage [2005/10/28(金) 11:17:45 ] >102-103 それって 5.0.integer? が false になるし。 class Numeric; def my_int?; self.ceil == self; end; end てところだろう。本質的には一行。 ちなみに Ruby にもとからある integer? は、 Numeric が常に偽を返し、 Integer でオーバーロードして常に真を返すようにしている。つまり103と同 じようなものになっている。
105 名前:デフォルトの名無しさん mailto:sage [2005/11/12(土) 20:10:44 ] 誰か簡単な宿題を出してくれよ
106 名前:デフォルトの名無しさん [2005/11/21(月) 21:15:42 ] こんばんは、今日Rubyを学んでいる授業で課題を出されたのですが 完成しなくて困っています。 自分はプログラムではRubyが始めて学ぶ言語であり、 プログラミングに関しては全くの初心者です。 ↓の詰まっているところに答えて頂けるとありがたいです。 魔方陣をHTMLの表形式で出力 各行、各列の和もその表の中に納める←ここが出来ません… 原文が長いので先に結果 21 39 8 33 2 27 45 175 30 6 24 49 18 36 12 175 46 15 40 9 34 3 28 175 13 31 7 25 43 19 37 175 22 47 16 41 10 35 4 175 38 14 32 1 26 44 20 175 5 23 48 17 42 11 29 175 175 175 175 175 175 175 175 Completed(0) そして… f.print "<table border=1>\n"とf.print "</table>"の間で四苦八苦です。 175の和の列を表に納めたいのですが、やり方が分かりません・・・。 教えていただければ幸いですm(_ _)m
107 名前:原文 [2005/11/21(月) 21:16:55 ] n=7 a=Array.new for i in 1..n a[i]=Array.new end for m in 0..n-1 for k in 0..n-1 i=(k+m)*2+(n+1)/2+2 j=k-m+(3*n+1)/2 a[(i-1)%n+1][(j-1)%n+1]=n*m+k+1 end end f=open('g:\kadai.html',"w")
108 名前:原文続き [2005/11/21(月) 21:17:48 ] f.print "<table border=1>\n" for i in 1..n f.print "<tr>\n" x=0 for j in 1..n printf "%4d",a[i][j] f.print "<td>",a[i][j],"</td>\n" x+=a[i][j] end printf "%4d\n",x end for j in 1..n x=0 for i in 1..n x+=a[i][j] end printf "%4d",x f.print "</tr>\n" end print "\n" f.print "</table>" f.close
109 名前:デフォルトの名無しさん mailto:sage [2005/11/21(月) 23:24:14 ] # 足し算の結果もresultに入ってるなら以下のようにやるのが楽かなー puts '<table>' result.each{|row| puts '<tr>' row.each{|cell| puts "<td>#{cell}</td>" } puts '</tr>' } puts '</table>'
110 名前:デフォルトの名無しさん mailto:sage [2005/11/21(月) 23:34:17 ] # >>107-108 のを活かすならこんな感じ。 # 動作確認はしてないので悪しからず御了承を。 File.open("result.html"){|f| f.puts '<table border="1">' a.each{|row| f.puts '<tr>' sum = 0 row.each{|cell| sum += cell f.puts "<td>#{cell}</td>" } f.puts "<td>#{sum}</td>" f.puts "</tr>" } f.puts "</table>" } # 変数名はとりあえず意味のわかるように単語で付けた方がいいよ。 # アルファベット一文字の変数名はかなり読みにくいので。
111 名前:106 [2005/11/22(火) 00:42:43 ] >>109-110 ご親切にありがとうございましたm(_ _)m とっても参考になりました。 最初、手続きオブジェクトというものを知らなかったために 書いてあることが分かりませんでしたが、授業の教科書の先読んで 理解出来たように思います。 変数名を単語でというのは、 お二方のrowやcellと書いてある部分の事ですよね? 伝える時はそう書くのですね。 勉強になりました(^^;A
112 名前:デフォルトの名無しさん [2005/11/28(月) 22:02:26 ] >>106 と同じ…(略) 自分もrubyが良く分かっていなくて参考書を買って1からやり直している途中です。 ですが課題の締め切りに間に合わなそうなのでどなたかお願いしますm(__)m 下のプログラムでa-zすべてのアルファベットの頻度を調べなければならないのですが、 for c in "a" .. "z" do end を最初、最後に入れ、bをcに変えても正しくされないのですがどこがおかしいのでしょうか。 t = File.read( "test.txt" ) u = t.split(//) # tを文字に分解 w = t.split # tを単語に分解 # 文全体にに文字B又はbが含まれる頻度 countc = 0 for x in u do countc += 1 if x =~ /b/i end # 単語の先頭に文字B又はbが含まれる頻度 countw = 0 for x in w do countw += 1 if x[0,1] =~ /b/i end
113 名前:デフォルトの名無しさん mailto:sage [2005/11/28(月) 22:45:12 ] 何はともあれおまえの言っていることがそもそもわけわからん。なにをどう試したんだ。
114 名前:デフォルトの名無しさん mailto:sage [2005/11/28(月) 22:49:27 ] アフォには聞いてませんから
115 名前:デフォルトの名無しさん [2005/11/28(月) 23:14:55 ] >>112 です。 t = File.read( "test.txt" ) u = t.split(//) # tを文字に分解 w = t.split # tを単語に分解 for c in "a" .."z" do # 文全体にに文字B又はbが含まれる頻度 countc = 0 for x in u do countc += 1 if x =~ /b/i end # 単語の先頭に文字B又はbが含まれる頻度 countw = 0 for x in w do countw += 1 if x[0,1] =~ /b/i end # 出力する printf "B又はbが本文に含まれる頻度は%4d回、単語の先頭に含まれる頻度は、%4d回でした。\n" ,c.upcase, countc , countw end …としたんですがエラーが出てしまいます。。
116 名前:113 mailto:sage [2005/11/28(月) 23:25:24 ] んじゃ説明すると、 全てのアルファベットの頻度を調べなければならないのだから、結果を保持す るのに52個の配列を用意する必要がある。ふつうは26要素の配列かハッシュを 2つ使うだろう(112の例で、文字用と単語用の2つの変数を用いたように)。 マッチするのに必要な正規表現は、112ではベタ書きしているが、これもa-zの それぞれで書換えなければならないだろう。 当然、a-zで「カウントアップする変数」と「マッチさせるための正規表現」 をそれぞれ切り替えるように適切に繰り返しをしなければならないだろう。 このどれもやっていないようだから「何をやってるかわからん」と思ったんだが、まあいいや。
117 名前:113 mailto:sage [2005/11/28(月) 23:31:51 ] おっと入れ違った。 115はそもそも、 for c in "a" .. "z" do に対応する end がないので実行で きない。 115の方針を貫く場合、結果を保持する変数は2つで良いままの可能性が高い。 しかし相変わらず b の数しか数えてないのだから、このままでは結果が正し く表示されない。正規表現をそれぞれで(cに依存するかたちで)書き換える必 要がある。 それから結果の出力では「Bまたはb」がべた書きだから printf がヘン。%表 記の箇所と引数の数が一致してないよ。 ……というところかな。
118 名前:デフォルトの名無しさん mailto:sage [2005/11/29(火) 09:29:36 ] 答えてやりたいが今から大学だ
119 名前:504 [2005/11/29(火) 21:37:25 ] printfが良く分かっていないのですが、 t = File.read( "test.txt" ) u = t.split(//) # tを文字に分解 w = t.split # tを単語に分解 for c in "a" .."z" do # 文全体 countc = 0 for x in u do countc += 1 if x =~ /c/i end # 単語の先頭 countw = 0 for x in w do countw += 1 if x[0,1] =~ /c/i end # 出力する printf "%4d又は%4dが本文に含まれる頻度は%4d回、単語の先頭に含まれる頻度は、%4d回でした。\n" , c , c.upcase, countc , countw end でもおかしいですよね(^_^;)
120 名前:デフォルトの名無しさん mailto:sage [2005/11/29(火) 22:45:43 ] cとかc.upcaseは文字列なんだから%sを使え まぁしかし Ruby では埋め込み式を使う方が一般的な気はするけど
121 名前:504 [2005/11/29(火) 22:59:05 ] エラー出ませんでした! しかし全部0回でした(笑) 勉強しなおしてきますm(__)m
122 名前:デフォルトの名無しさん mailto:sage [2005/11/29(火) 23:11:04 ] あーだからさ、/c/i が「cという一文字に(大文字小文字は気にせず)一致する」 正規表現なわけだよな? /b/i なら「bという〜」。そこのところはいいか。 今の君のコードは26回、毎回「c」だけカウントしているわけだ。それじゃ意味がない。 1回目は「a」、2回目は「b」、3回目は「c」……26回目は「z」になるように、しないといけない。 どうやってそれを実現するかはさすがに自分で考えてくれい。やり方はいろい ろあるけど、何が授業内容に則した方法なのかまではオレは知らん。
123 名前:デフォルトの名無しさん mailto:sage [2005/11/30(水) 02:17:24 ] プログラミングの入り口でループで躓いて諦めるひとを何人も見てきた
124 名前:504 [2005/11/30(水) 22:10:36 ] cは変数で、その変数cに"a"から"z"までを代入してることにはならないんですか?orz
125 名前:デフォルトの名無しさん mailto:sage [2005/11/30(水) 22:54:11 ] だってたとえば112の元々のコードだったら /b/i は「bという変数の中身」じゃ なくて「bという文字にマッチする正規表現」じゃん。その判断をどうやって するわけ? たとえばだ、「bという変数が存在したらその中身、存在しなかったらbという その文字」と動くとしようか。すると、ちょっと変更するだけでプログラムの 挙動がえらい変わって大変なことになるし、たとえばbという変数が存在する ときに「bという文字にマッチする正規表現」をどう書いたらいいかわからな いじゃん。 そういう不都合があるから、ただそのまま変数名を書いてもそれを変数名とは 認識しないわけ。 で、正規表現に変数の値を埋め込むにはそれなりの書き方をしないといけない。 もしくは正規表現をやめるかだな。 教科書か何かを読み直してよく考えろ。 たとえば for x in u の x はどういうデータで何を調べればいい?とかな。
126 名前:デフォルトの名無しさん mailto:sage [2005/11/30(水) 22:54:21 ] 同時に並列動作を望むなら ベクトルコンピュータ使ひ給へ
127 名前:504 [2005/12/01(木) 01:28:05 ] 正規表現を使わない方法で出来ましたm(__)m ホントすみませんでした(^^;)
128 名前:デフォルトの名無しさん mailto:sage [2005/12/05(月) 20:21:40 ] 北大の課題ばかりのスレだなぁ
129 名前:デフォルトの名無しさん [2005/12/19(月) 16:44:49 ] 誰かこのプログラムに注釈付けていただけませんか。何が起きてるか全くわかんないです。 def boyer_moore_search(text, pattern) printf("text.length = %d, pattern.length = %d\n", \ text.length, pattern.length) skip = Array.new for k in 0 ... 256 do skip[k] = pattern.length end for k in 0 ... pattern.length do skip[pattern[k]] = pattern.length - k - 1 end #続く
130 名前:129 [2005/12/19(月) 16:45:19 ] i = pattern.length - 1 while i < text.length do j = pattern.length - 1 while text[i] == pattern[j] do printf("a: i = %d, j = %d\n", i, j) if j == 0 then return i else i = i - 1 j = j - 1 end end if skip[text[i]] > pattern.length - j then i = i + skip[text[i]] printf("b: i = %d, j = %d\n", i, j) else i = i + pattern.length - j printf("c: i = %d, j = %d\n", i, j) end end return -1 end printf("Match position = %d\n", \ boyer_moore_search("irohanihoheto","ohe"))
131 名前:デフォルトの名無しさん mailto:sage [2005/12/20(火) 03:42:30 ] >boyer_moore_search この名前から何か連想できないならアルゴリズムの教科書でも一から読み直した方が・・・
132 名前:デフォルトの名無しさん [2005/12/20(火) 11:37:17 ] Rubyじゃないけど、こことか参考になるかも ttp://www2.starcat.ne.jp/~fussy/algo/algo7-4.htm Ruby で説明しているところは自分でググって。
133 名前:デフォルトの名無しさん mailto:sage [2005/12/20(火) 19:02:32 ] つーヵこのスレって存在自体おかしくね? RUBYで宿題?ナニソレ。 >私は、ある大学の1年生です。今、情報処理の講義でRUBYを習っています。 こんな学校ほんとに存在するのか? いきなりRUBY教えるって、その講師は真性のアホじゃないのか?
134 名前:デフォルトの名無しさん mailto:sage [2005/12/20(火) 20:11:38 ] はいはいわろすわろす
135 名前:デフォルトの名無しさん mailto:sage [2005/12/20(火) 21:21:51 ] Rubyだと何でアホなの? 自分はFORTRANだったけど。
136 名前:デフォルトの名無しさん mailto:sage [2005/12/22(木) 01:57:20 ] >>128 に本当っぽいことが書いてある…と言ってみるw
137 名前:デフォルトの名無しさん mailto:sage [2005/12/22(木) 20:53:07 ] 北大ってどんなところなの?
138 名前:デフォルトの名無しさん mailto:sage [2005/12/22(木) 21:36:03 ] 北のほうにある
139 名前:デフォルトの名無しさん [2006/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 名前:デフォルトの名無しさん mailto:sage [2006/01/10(火) 21:55:55 ] アミノ酸配列と円周率が楽だからそんなのやめなさい
141 名前:デフォルトの名無しさん mailto:sage [2006/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 名前:デフォルトの名無しさん mailto:sage [2006/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 名前:デフォルトの名無しさん mailto:sage [2006/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 名前:デフォルトの名無しさん mailto:sage [2006/01/10(火) 23:36:52 ] いんでんとなんかはてきとうに直してくれ。
145 名前:デフォルトの名無しさん mailto:sage [2006/01/11(水) 20:33:59 ] ありがとうございます 何がわからないというか、何もかもわからなくて
146 名前:デフォルトの名無しさん [2006/01/12(木) 12:22:33 ] 階乗を求めるプログラムを教えてください
147 名前:デフォルトの名無しさん mailto:sage [2006/01/12(木) 20:39:37 ] >>146 死ねマルチ result = 1;(1..5).each{|i| result *= i}; p result
148 名前:デフォルトの名無しさん mailto:sage [2006/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 名前:デフォルトの名無しさん mailto:sage [2006/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 名前:デフォルトの名無しさん mailto:sage [2006/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 名前:デフォルトの名無しさん mailto:sage [2006/01/14(土) 00:21:50 ] timeout が TimeoutError を送出するんだから rescue で受ければいいんじゃないの?
152 名前:デフォルトの名無しさん mailto:sage [2006/01/20(金) 00:44:27 ] 宿題です。危機です。 ruby/tkで迷路を作成して脱出するプログラムを どなたか作ってくださいorz
153 名前:デフォルトの名無しさん mailto:sage [2006/01/20(金) 01:17:49 ] ここは「教えてください」というスレッドであって「代行してください」というスレッドではないと思うのだが。
154 名前:デフォルトの名無しさん mailto:sage [2006/01/20(金) 02:09:17 ] 勘違いしてましたorz 多分このスレを立てた人と同じ大学です、自分も締め切りが迫っててピンチです。 迷路を作成して、脱出するプログラムを作りたいのですが、 @座標(1,1)(左上隅)に最初の通路空け、 A上下左右で、2マス進んだところがまだ通路になっていない場所 (複数ある場合はランダムに選択) B穴掘り可能な方向がなかったら、そこまでの道を2マスだけ逆戻り。 逆戻りできない場合完成。 という感じにするのは分るのですが、ruby/tkでどうやってそれを表現したら良いのかが わからないのですが。。
155 名前:デフォルトの名無しさん mailto:sage [2006/01/20(金) 07:26:48 ] テキストベースで組んでみてから、Ruby/Tkでやれば?
156 名前:デフォルトの名無しさん mailto:sage [2006/01/20(金) 11:18:09 ] テキストベース?のは出来たんですが…orz
157 名前:デフォルトの名無しさん mailto:sage [2006/01/20(金) 17:07:54 ] アルゴリズムを聞いてるのかな
158 名前:デフォルトの名無しさん mailto:sage [2006/01/20(金) 21:55:50 ] ruby/tkでのやり方が知りたいです!
159 名前:デフォルトの名無しさん mailto:sage [2006/01/20(金) 22:04:17 ] 知りたいなら自分で勉強しような。 テキストべースのままでいいじゃん。
160 名前:デフォルトの名無しさん mailto:sage [2006/01/20(金) 23:23:47 ] 課題的に Ruby/tk が必須なら教科書に必要事項は絶対書いてあるからちゃんと読め。 必須じゃないなら自分である程度の勉強をしろ。 そういうことをしてもわからなかったら、必要な事項だけ質問するべし。漠然 と知りたいと言われても誰も答えられないよ。
161 名前:デフォルトの名無しさん mailto:sage [2006/01/21(土) 00:40:36 ] スレタイに宿題って入ってたら丸投げだとオレも思ってた
162 名前:デフォルトの名無しさん mailto:sage [2006/01/21(土) 00:42:27 ] 問題についてもっと詳しい情報がなけりゃだれもやらんぞ。 連立方程式がわからないんですけどおしえてもらえませんか? っていってるのと同じ。
163 名前:デフォルトの名無しさん mailto:sage [2006/01/21(土) 00:48:45 ] 自分ではココまで頑張ったってとこを教えれ
164 名前:デフォルトの名無しさん mailto:sage [2006/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 名前:デフォルトの名無しさん [2006/01/22(日) 22:58:42 ] age
166 名前:デフォルトの名無しさん mailto:sage [2006/01/23(月) 12:14:25 ] で、tkについてはどこまで頑張ったのか?
167 名前:デフォルトの名無しさん mailto:sage [2006/01/24(火) 21:27:35 ] きっと月曜提出だったんだよ、ということで時間切れ。 つかアルゴリズム?の宿題で画面表示必須って意味あるの?
168 名前:デフォルトの名無しさん mailto:sage [2006/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 名前:デフォルトの名無しさん mailto:sage [2006/01/25(水) 01:11:32 ] きたねーコードだな。 で、何がわからないんだっけ?
170 名前:デフォルトの名無しさん mailto:sage [2006/01/25(水) 01:48:02 ] >>154 です、、 とゆーかもう完全に意味がわかりませんorz
171 名前:デフォルトの名無しさん mailto:sage [2006/01/25(水) 11:13:10 ] 少なくとも意味がわかってから質問するように。
172 名前:デフォルトの名無しさん mailto:sage [2006/01/31(火) 00:57:40 ] 迷路の線は描けたのですが、道順(脱出経路)の線をひくことができません。。
173 名前:デフォルトの名無しさん mailto:sage [2006/01/31(火) 19:57:14 ] 足を踏みいれた格子の色を変えていく。 ただし、それぞれの格子で、どの辺から格子に入ったかを記録しておき、 その辺から再び出る(=戻る)なら格子の色を元にもどす。
174 名前:デフォルトの名無しさん [2006/02/02(木) 20:25:18 ] a,bが互いな素であるときaxをbで割ったあまりが1になるようなxを1つ出力するプログラムを書きなさい。 という課題が出ました。 互いに素というのは作れるのですが、後半部分ができません。 だれか教えてください。お願いします。
175 名前:デフォルトの名無しさん mailto:sage [2006/02/02(木) 21:00:23 ] そのできた部分まで見せてくれるとやりやすいかもしれない
176 名前:デフォルトの名無しさん mailto:sage [2006/02/02(木) 21:02:36 ] 互いに素がわかるならこれでどう? def axb(a,b) if tagainiso?(a,b) p = 1 x = 0 until a*x%b == 1 x = (p + 1)*b/a p += 1 end return x end return 0 end # テストコード def test_axb assert_equal(1, axb(3,2)) assert_equal(7, axb(13,10)) assert_equal(0, axb(2,4)) end
177 名前:デフォルトの名無しさん mailto:sage [2006/02/02(木) 21:15:42 ] てかホントに初心者スレから移動したんだな
178 名前:174 [2006/02/02(木) 21:41:41 ] a = gets.to_i b = gets.to_i def gcd(a,b) if b == 0 return a else return gcd(b,a%b) end end これでgcd(a,b) =1のときでif文作るところまでいきました。 ここから先がわかりません。 >>176 どこが何をしているのかがちょっとよくわかりません。 ホント素人ですいません。
179 名前:デフォルトの名無しさん mailto:sage [2006/02/02(木) 22:03:14 ] >>178 算数は苦手ですか? tagainiso?(a,b)はa,bが互いに素かどうか調べる。 自分でわかるって言ってたので、その説明は略。 until a*x%b == 1 x = (p + 1)*b/a p += 1 end は単なるループ。a*x%b == 1はわかるよね? 以下算数の話。 a*x%b = 1をpを整数として変形すると、 a*x/b = p + 1となるのでこれをxについて解く。 x = (p+1)*b/a となる。 pが整数なので、上記のループではpを1ずつ変化させて、条件に合うxを探してるだけ。 で、結局axb(a,b)で求めるxが返る。 これでどう?
180 名前:デフォルトの名無しさん mailto:sage [2006/02/02(木) 22:03:34 ] if tagainiso?(a,b) # IF互いに素なら until a*x%b == 1 # a*x%bが1になるまで続ける p += 1 # p=p+1 これだけわかればトレースはできるだろうから、計算の意味は自分で考えてみよう
181 名前:147 [2006/02/02(木) 22:13:03 ] できました!みなさんありがとうございました!!!!
182 名前:デフォルトの名無しさん mailto:sage [2006/02/02(木) 22:19:57 ] (1...b).each do |x| break if a*x%b == 1 end return x の方が計算量少ないのでは。
183 名前:デフォルトの名無しさん mailto:sage [2006/02/02(木) 22:26:52 ] b != 1 のチェックも必要だね。
184 名前:デフォルトの名無しさん mailto:sage [2006/02/03(金) 16:48:13 ] で、それどこの宿題? 大学? 高校? 中学校? 小学校?
185 名前:デフォルトの名無しさん mailto:sage [2006/02/03(金) 22:41:09 ] >>183 b=1の時点で互いに素の可能性が消えるので不要。
186 名前:デフォルトの名無しさん mailto:sage [2006/02/04(土) 02:49:49 ] 互いに素の定義って最大公約数が1じゃなかたっけ?
187 名前:デフォルトの名無しさん [2006/02/06(月) 23:59:56 ] www.pluto.ai.kyutech.ac.jp/plt/matumoto/pi_small/node8.html rubyで上記のURLのいずれかの公式を用いて円周率もとめたいんですけど、、、どなたかソースコード例示してもらえないでしょうか
188 名前:デフォルトの名無しさん mailto:sage [2006/02/07(火) 00:18:42 ] puts (Math.atan(1.0/5)*4 - Math.atan(1.0/239))*4 俺ならこんなの書いてきたら落第させるがな
189 名前:デフォルトの名無しさん mailto:sage [2006/02/07(火) 03:29:45 ] >188 それだとputsの戻り値*4にならないか?
190 名前:デフォルトの名無しさん mailto:sage [2006/02/07(火) 08:34:49 ] puts は 必ず nil を返すように作られてるんだがそれでもよろしいか
191 名前:デフォルトの名無しさん mailto:sage [2006/02/07(火) 09:31:26 ] hoge (1+2) * 3 は hoge(1+2) * 3 と同じ動作をするべき? まあ、そうかもね。
192 名前:デフォルトの名無しさん mailto:sage [2006/02/07(火) 13:37:36 ] どっちにしても、そういう仕様だからなぁ。
193 名前:デフォルトの名無しさん mailto:sage [2006/02/07(火) 14:00:18 ] 「カッコが省略されてる引数は最初の空白で区切れるようにしろ」というのは 主張としてはある程度真理だな 引数に空白を含めたい人が自力でカッコで括ってれと 「文末が出るまで全部引数にしまっちゃうよ」というのもそれはそれで便利だが
194 名前:デフォルトの名無しさん mailto:sage [2006/02/08(水) 11:40:32 ] で、宿題としては要は自前でテーラー展開しろってことなんだろうな。 そろそろ気づいて自力でできた頃か?
195 名前:デフォルトの名無しさん mailto:sage [2006/02/08(水) 18:40:30 ] おいおい、自力でテーラー展開してどうするんだ? ニュートン法でも発明しろってことか?w
196 名前:デフォルトの名無しさん mailto:sage [2006/02/23(木) 01:33:21 ] ここ北大の人が質問してそう
197 名前:デフォルトの名無しさん mailto:sage [2006/02/23(木) 02:29:37 ] ちょっとドキッとしたが卒業生だからもう関係ねーや 1年の情報処理ででもやってるのかな 俺のやったときはFortran77/90とCとDelphiの選択だったような気がする
198 名前:デフォルトの名無しさん mailto:sage [2006/02/23(木) 04:38:20 ] また来年も質問が来るのかな
199 名前:デフォルトの名無しさん mailto:sage [2006/02/23(木) 14:51:52 ] ttp://crab.hucc.hokudai.ac.jp:8080/keng/sfinddata.cgi?USERID=476465055e62784e1&SEQ=7 これか? いや、これはD言語みたいだな。。。(汗
200 名前:ハーピィ mailto:sage [2006/02/24(金) 11:53:49 ] E・∇・ヨノシ <200ゲット♫
201 名前:デフォルトの名無しさん mailto:sage [2006/03/28(火) 17:22:35 ] net/http使っていて、 HTTP/1.1 501 Method Not Implemented Date: Tue, 28 Mar 2006 08:09:41 GMT Server: Apache/2.0.54 (Debian GNU/Linux) mod_fastcgi/2.4.2 mod_ruby/1.2.4 Ruby/1.8.2(2005-04-11) mod_ssl/2.0.54 OpenSSL/0.9.7e Allow: GET,HEAD,POST,OPTIONS,TRACE Content-Length: 206 Connection: close Content-Type: text/html; charset=iso-8859-1 なのが欲しいのはどうすればいい?
202 名前:デフォルトの名無しさん mailto:sage [2006/03/28(火) 17:36:43 ] どうしたいの?
203 名前:デフォルトの名無しさん mailto:sage [2006/03/28(火) 18:03:52 ] pc8.2ch.net/test/read.cgi/tech/1143403165/10 なお話?
204 名前:デフォルトの名無しさん mailto:sage [2006/03/28(火) 18:10:18 ] .headerじゃ、HTMLの<HEAD>と</HEAD>の間しか採れないと思う。 漏れが欲しいのはHTTPの中で鯖から送られて来る情報。
205 名前:デフォルトの名無しさん mailto:sage [2006/03/28(火) 18:35:27 ] (⊃д`)
206 名前:デフォルトの名無しさん mailto:sage [2006/03/28(火) 18:44:02 ] Response から each を使えばいいような気がするのだが。
207 名前:デフォルトの名無しさん mailto:sage [2006/03/28(火) 21:01:45 ] こんなんでどう? % cat http_header_test1.rb #!/usr/bin/ruby require 'net/http' Net::HTTP.version_1_2 Net::HTTP.start('www.ruby-lang.org', 80) {|http| response = http.get('/ja/') printf("HTTP/%s %s %s\n", response.http_version, response.code, response.message) response.each{|x, y| printf("%s: %s\n", x.capitalize, y)} } % ./http_header_test1.rb HTTP/1.1 200 OK Cache-control: no-cache Last-modified: Sat, 24 Dec 2005 13:44:39 GMT Vary: User-Agent Content-type: text/html; charset=euc-jp Date: Tue, 28 Mar 2006 11:59:22 GMT Server: Apache/2.0.54 (Debian GNU/Linux) mod_fastcgi/2.4.2 mod_ruby/1.2.4 Ruby/1.8.2(2005-04-11) mod_ssl/2.0.54 OpenSSL/0.9.7e Content-length: 15762 Pragma: no-cache
208 名前:デフォルトの名無しさん mailto:sage [2006/03/28(火) 21:31:34 ] ありがとうございました。
209 名前:デフォルトの名無しさん [2006/04/07(金) 10:36:49 ] 保守
210 名前:デフォルトの名無しさん mailto:sage [2006/04/07(金) 20:37:40 ] 質問者を堕落させ、回答者のレベルをアップさせるスレってここのことですか? 質問者はruby-man-ja-html-20051029ぐらい読んでいるんだよな? と、てきとうなことを言ってみた。
211 名前:デフォルトの名無しさん mailto:sage [2006/04/07(金) 20:52:34 ] スレの性質上、学期末じゃないとあんまり釣れないと思うよ
212 名前:デフォルトの名無しさん mailto:sage [2006/05/03(水) 23:44:59 ] 学期末とかじゃなくても良いから 問題出してくれねーかなー。 面白そうなら、コード書くからさー。
213 名前:デフォルトの名無しさん [2006/05/04(木) 22:38:17 ] じゃあ、問題出し合うスレにしちゃうか!
214 名前:デフォルトの名無しさん mailto:sage [2006/05/05(金) 14:20:15 ] じゃ、お題。っ【ソリティア】
215 名前:デフォルトの名無しさん mailto:sage [2006/05/05(金) 19:22:45 ] >>214 ソリティアを"作る"のか"解く"のかどっちだ?
216 名前:214 mailto:sage [2006/05/06(土) 04:17:59 ] じゃとりあえず ソリティア「クロンダイク」を作る で。俺も作ってみるかなー。 【仕様案(あくまで俺用。参考にでも】 ・配置はランダム Winのフリーセルのような問題番号はなし。 ・CUIで入出力 CUIの方が環境依存少なめかなぁと。 ・サブコマンド 列名をアルファベットで現し 基本は3文字で[列名][枚数][列名]。 例: A3C (A列の3枚をC列へ移す) 山札をめくる時は半角スペース1個入れてエンター。 列名はプレイ時に一目で判るようにしておく。 って言うか文字順に置くかキー配置なぞって置くか2案で悩み中。
217 名前:デフォルトの名無しさん mailto:sage [2006/05/11(木) 02:05:01 ] UNOがいいよ。 仕様例: CUIベース。 手札の表示は、赤の1ならR1、青の2ならB2、黄の3ならY3、緑の4ならG4って感じ。 赤のReverseならRR、青のSkipならBS、黄のDrowTwoならYD、 WildはW、WildDrowFourはWD ってところでいいかと。 ["R1", "B2", "Y3", "G4", "R", "BS", "YD"] って感じででも手札を表示。 use card?[1,2,3,4,5,6,7,G,U] とでも表示して、1文字読んで選択させる。 Gは1枚カードを山から取る、Uはunoのつもり。 ウノ自体のルールはぐぐってくれ。
218 名前:デフォルトの名無しさん mailto:sage [2006/05/17(水) 19:53:34 ] >>217 で、どうしろと?
219 名前:デフォルトの名無しさん mailto:sage [2006/05/17(水) 20:12:02 ] >218 作りたい人は作る。基本スルー。
220 名前:デフォルトの名無しさん mailto:sage [2006/05/19(金) 01:57:28 ] つまりrubyでカードゲームは無理ということですよ。
221 名前:デフォルトの名無しさん mailto:sage [2006/05/19(金) 03:29:39 ] Rubyで無理じゃなくて、ここの住人じゃ無理なだけでそ
222 名前:デフォルトの名無しさん mailto:sage [2006/05/19(金) 06:46:32 ] Win32API使ってもいい?
223 名前:デフォルトの名無しさん mailto:sage [2006/05/19(金) 08:27:37 ] 良いんじゃね?
224 名前:デフォルトの名無しさん mailto:sage [2006/05/19(金) 08:56:46 ] じゃあUNO作るわ まっとれ
225 名前:デフォルトの名無しさん mailto:sage [2006/05/19(金) 13:21:12 ] ひとりでUNOやってて楽しいか? 昔MacでUNOのゲームがあったが、かなりつまらんかったな。
226 名前:デフォルトの名無しさん mailto:sage [2006/05/19(金) 13:30:04 ] >>225 >>1
227 名前:デフォルトの名無しさん [2006/05/21(日) 13:38:41 ] UNOはつまらん 囲碁にしようぜ、てか囲碁のプログラムってむずくね?
228 名前:デフォルトの名無しさん mailto:sage [2006/05/21(日) 16:29:22 ] そんな面倒なのじゃなくまず3人じゃんけんのプログラムから始めろよ
229 名前:デフォルトの名無しさん mailto:sage [2006/05/21(日) 16:37:47 ] 囲碁は終了判定があいまいでプレイヤーの感覚に任せる部分が大きい ぶっちゃけどちらかが投了しない限り続行は可能だよ つーかUNOも囲碁も相手が必須だろ そこをどうするかがポイントになるハズ
230 名前:デフォルトの名無しさん mailto:sage [2006/05/21(日) 17:15:27 ] >>228 グー・グー・チョキの場合は決勝? あいこ?
231 名前:デフォルトの名無しさん mailto:sage [2006/05/21(日) 19:21:32 ] >>230 あいこしたら、あいこした方が負け。 つまり、チョキの勝ちというルールで。
232 名前:デフォルトの名無しさん mailto:sage [2006/05/21(日) 20:04:07 ] >>230 あいこにしたほうが簡単ぽいのでひとまずあいこでよし
233 名前:デフォルトの名無しさん mailto:sage [2006/05/22(月) 02:34:21 ] >>230 あいこのグーふたりを勝ちにして、チョキを落として再試合。 つまり、次回から勝負が決まるまでチョキの結果をムシすれ。
234 名前:デフォルトの名無しさん mailto:sage [2006/05/22(月) 08:49:28 ] おまいら馬鹿なのか? CPU1だけと7並べやってもつまらんって当たり前じゃん。 CPU1, CPU2, CPU3とプレーヤの4人で7ねらべとか出来る様にすればいいじゃん。 マクのUNOって糞だっただけじゃね? PCのUNOはそこそこおもしろかったよ。
235 名前:デフォルトの名無しさん mailto:sage [2006/05/22(月) 08:51:55 ] www.amazon.co.jp/gp/product/4789724964/
236 名前:デフォルトの名無しさん mailto:sage [2006/05/22(月) 15:44:15 ] >>232 一人勝ちバージョンできたよー どこまで凝っていいのかわからなかったから 判定メソッド1個と$stdin.getsの入力ループで簡単ぽく作ったよー def hantei(hands) sum=0 hands.values.each do |hand| sum = hand + sum end case sum when 0,1,3,4,6 kekka='あいこ。もう一度' when 2 if hands.has_value?(2) then kekka="パーで#{hands.index(2)}の勝ち" else kekka="グーで#{hands.index(0)}の勝ち" end when 5 kekka="チョキで#{hands.index(1)}の勝ち" end yobina=['グー','チョキ','パー'] hands.each do |name,hand| puts "#{name}:#{yobina[hand]}" end puts kekka end
237 名前:236続き mailto:sage [2006/05/22(月) 15:46:02 ] # 遊び方:実行してこれ↓ setumeibun='1:グー 2:チョキ 3:パー 0:やめる (数字とEnter押してね)' puts '3人じゃんけん開始(決勝戦なし)' puts setumeibun while line=$stdin.gets.chomp do case line when '0' puts 'さようなら' exit when '1' myhand=0 when '2' myhand=1 when '3' myhand=2 else puts setumeibun next end hantei({'YOU'=>myhand, 'COM1'=>rand(3).to_i, 'COM2'=>rand(3).to_i}) end
238 名前:デフォルトの名無しさん mailto:sage [2006/05/22(月) 15:51:13 ] 遊び方: >>236-237 のスクリプト本文っぽい部分をコピペしてまとめて1ファイルにして実行。 1を入力してEnterを押すとグーを出したことに、2を入力だとチョキに、3だとパーになる。 0を入力すると終了する。テンキーで遊ぶと便利。 説明: プレーヤーはコンピュータCOM1、COM2とユーザーYOUを含む3人。 各々の名前と出した手は、名前 => 手 の対応でハッシュhandsに入る。 出した手は整数の数値で格納され、グーは0で表す。チョキは1。パーは2。 利便性のためにユーザー入力とはズレてることに注意。 COMの出す手はグーチョキパー等しくランダムであり、 0.00…1から2.99…9までの乱数を発生させ小数点切り捨てで対応。 で、「誰か1人が勝利した」か「全員あいこ」かどうかは、3人分の手の数字の和ですべて判別できる。 勝った人の名前を知るには、「その場合に勝利である手」を値に持つキーをhandsからindexで探せばいい。 誰かがグーで勝つパターン [和は2] [勝者は0] 0・1・1 誰かがチョキで勝つパターン [和は5] [勝者は1] 1・2・2 誰かがパーで勝つパターン [和は2] [勝者は2] 2・0・0 本来決勝に進むパターン(今回あいこ)[和は1か4] 0・0・1、 1・1・2、 2・2・0 全員あいこのパターン[和は0か3か6] 0・0・0、 1・1・1、 2・2・2、 0・1・2 言い訳: きれいとわかりやすいって両立しないよね ---- おしまい
239 名前:デフォルトの名無しさん mailto:sage [2006/05/22(月) 16:18:18 ] ある程度短ければ自分の全力で作っていいんじゃね? 初心者勉強スレみたいな雰囲気もあるから迷うが
240 名前:デフォルトの名無しさん mailto:sage [2006/05/22(月) 19:43:42 ] 三人じゃんけんかー。 昔、JAVAで作ったのがあるから移植してみようかな。
241 名前:デフォルトの名無しさん mailto:sage [2006/05/22(月) 21:15:31 ] 何かプロトコル決めて、戦わせたいね(w Simple Janken Transfer Protcol(SJTP)とか。
242 名前:デフォルトの名無しさん mailto:sage [2006/05/22(月) 22:50:53 ] Transfer ワロタ
243 名前:デフォルトの名無しさん mailto:sage [2006/05/22(月) 23:16:19 ] でも作って公開してもメリットなくね
244 名前:デフォルトの名無しさん mailto:sage [2006/05/22(月) 23:54:46 ] ひとつのゲームだけじゃなくて 汎用的なカードゲーム用exchangeサイトみたいなの Rubyで作れんかね
245 名前:デフォルトの名無しさん mailto:sage [2006/05/22(月) 23:58:30 ] あんまRuby向きの概念ではないな 個々のシステムを個々に作るほうが得意だと思う
246 名前:デフォルトの名無しさん mailto:sage [2006/05/23(火) 00:33:22 ] >>243 作るだけでも非常に勉強になるぞ というのはどうだろう 素人のプログラムなんて読みたくねえよな実際
247 名前:デフォルトの名無しさん mailto:sage [2006/05/23(火) 01:20:01 ] >>246 ここに書いとくとMinero Aokiがリファクタリングしてくれるという特典付き。
248 名前:デフォルトの名無しさん mailto:sage [2006/05/23(火) 07:08:10 ] そうか
249 名前:デフォルトの名無しさん mailto:sage [2006/05/23(火) 08:54:39 ] じゃんけんする人をn人にした場合はどうなるの?
250 名前:デフォルトの名無しさん mailto:sage [2006/05/23(火) 14:50:55 ] [グー、チョキ、パー、・・・、手_n] になる
251 名前:デフォルトの名無しさん mailto:sage [2006/05/23(火) 15:30:18 ] 作ってるうちにめんどーになった。 多人数対応してるつもりのあいこ勝ち抜きバージョン。 @players=['YOU','COM1','COM2','COM3'] に'YOU'という文字を含まない要素を追加するとその名前で人数が増える。 YOU無しでやると自動で対戦する。 @players=['COM1','COM2','COM3''COM4''COM5''COM6''COM7''COM8''COM9''COM10'] だと10人対戦。いつ終わるかは知らね。 @goal=100の場合は100回勝った人が出た時点で終了。 ただしあいこ感知の都合であいこ勝ち抜きも積み立て1勝とカウントするので注意。 あいこを勝ち残った人にあいこ勝ち抜き回数ぶんの勝利数を追加。 定数のグーチョキパーはなんか使い方違う気がするがお腹すいたので判断できん。 結局クラス作る必要もなかった気もするけど面倒なので放置。 ちなみに俺>>236 。反応なくてもがんばるよ!っていうか>>246 の読む気しないってのには同意 handsの中身は>>238 の@handsと同じ。 要は勝利者が1人になるまで前回の勝者たちを集めて同じ処理させてるだけ。
252 名前:251 mailto:sage [2006/05/23(火) 15:31:27 ] class Game GOO=0;TYOKI=1;PAA=2 def initialize @label=['グー','チョキ','パー'] @players=['YOU','COM1','COM2','COM3'] @carryover=0;@hands=Hash.new;@win=Hash.new; @players.each{|player| @win[player]=0} @goal=100 end def msg(str) print "#{str}\n" end def win_pattern return [ {'pat'=>[GOO,TYOKI], 'win'=> GOO}, {'pat'=>[TYOKI,PAA], 'win'=> TYOKI}, {'pat'=>[PAA,GOO].sort, 'win'=> GOO} ] end
253 名前:251 mailto:sage [2006/05/23(火) 15:32:31 ] def game winner=@players until winner.size == 1 do jyanken_call(winner) hands=ask(winner) show(hands) winner=judge(hands) end end_phase(winner.first) end def jyanken_call(winner) if @carryover == 0 then msg " じゃーんけん (参加者:#{winner.sort.join(',')})" else msg " あーいこで (参加者:#{winner.sort.join(',')})" end end def ask(winner) hands=Hash.new winner.each{|player| hands[player]=hand(player) } return hands end
254 名前:251 mailto:sage [2006/05/23(火) 15:33:17 ] def hand(player) if player =~ /YOU/ then return get_yourinput else return rand(3).to_i end end def get_yourinput while input=STDIN.gets.chomp do case input.to_i when 0 then gameover when 1 then return GOO when 2 then return TYOKI when 3 then return PAA else msg ' 1:グー 2:チョキ 3:パー 0:やめる (数字とEnter押してね)' end end end def show(hands) hands.each{|name,hand| msg "#{name}:#{@label[hand]}" } end
255 名前:251 mailto:sage [2006/05/23(火) 15:34:01 ] def judge(hands) now=hands.values.sort win_pattern.each do |hash| if (now & hash['pat'])==hash['pat'] && (now | hash['pat']) == hash['pat'] then return pick_winners(hands,hash['win']) # someone wins end end @carryover+=1 return hands.keys #noone wins end def pick_winners(hands,win) winner=Array.new hands.each{|name,hand| winner << name if hand == win } @carryover+=1 unless winner.size == 1 return winner end def end_phase(winner) @win[winner] = @win[winner] + 1 + @carryover @carryover=0 msg "#{winner} が勝ちました! (現在:#{@win[winner]}勝)" msg " "
256 名前:251 しまったメソッド途中で切っちゃった mailto:sage [2006/05/23(火) 15:36:15 ] if champ=@win.find{|key,val| val >= @goal} then msg "優勝者は#{@goal}勝を最初に達成した#{champ[0]}さんです!" gameover end end def gameover @win.each{|name,win| msg "#{name}:#{win}勝" } msg "さようなら";exit end end game=Game.new loop do game.game end
257 名前:デフォルトの名無しさん mailto:sage [2006/05/23(火) 15:37:33 ] はい終わり。
258 名前:デフォルトの名無しさん mailto:sage [2006/05/23(火) 17:09:52 ] >>252 たぶん書き間違ってる。PAAで勝つパターンが入ってない。 def win_pattern return [ {'pat'=>[GOO,TYOKI], 'win'=> GOO}, {'pat'=>[TYOKI,PAA], 'win'=> TYOKI}, {'pat'=>[PAA,GOO].sort, 'win'=> GOO} ] end ↓ def win_pattern return [ {'pat'=>[GOO,TYOKI], 'win'=> GOO}, {'pat'=>[TYOKI,PAA], 'win'=> TYOKI}, {'pat'=>[PAA,GOO].sort, 'win'=> PAA} ] end あと、コピペするものには 使わないほうがいいぞ 2chブラウザによっては空白が というのに置き換わるっていうかOpenjaneDoeがそうだ
259 名前:デフォルトの名無しさん mailto:sage [2006/05/30(火) 01:49:26 ] ちょっと昔作ったJAVAの三人じゃんけんをRubyに移植してみたら 約200行になった。ここには貼れない。 ちなみに、JAVAの時は約300行だった。 ロジックはJAVAで書いた時のをそのまま移植したので もっとエレガントに出来そうな気はしてる。
260 名前:デフォルトの名無しさん mailto:sage [2006/05/30(火) 12:43:55 ] >259 是非別所にうpしる Rubyに書き換えようぜ
261 名前:デフォルトの名無しさん mailto:sage [2006/05/30(火) 12:46:31 ] N人じゃんけんが既に出てるから、判定部分は何か面白いことしてないと目立たないぞ(w どこかのあぷろだ借りるのが手っ取り早いだろうな
262 名前:デフォルトの名無しさん mailto:sage [2006/05/30(火) 13:34:30 ] ここ? ソースポスト sourcepost.sytes.net/
263 名前:デフォルトの名無しさん mailto:sage [2006/05/30(火) 14:32:48 ] じゃんけんだと、手の種類が2個だと勝敗が決まってるんだよな。 3のときと1のときはあいこだよな。 いちいち判定しないで #仮想コード players.find(winner_hand(*hands.uniq)) if hands.uniq.size == 2 とかでいけるんじゃないの? Handクラスを作ってTyoki<-Paa<-Goo<-Tyokiとリンクリストみたいにして負けた方をincompatibleとして持つなら def stronger(other) @incompatible == other ? self : other end これだとwinner_handはいらなくて、 hands.uniq.inject{|a,b| a.stronger b}/*hands.uniq.size == 2*/で勝つ方の手が決まる。 まあ真偽値返すようにしてsortして[0]使うんでもいいけど。 Tyokiとかはインスタンスが違っちゃいかんのでHansの定数にするかシングルトンにするかクラスのまま使うかすること。 あとloopでgame呼ばないでgame側でloopしたほうがよさそうなのと win_patternは普通にクラス定数の方がいいんじゃねえかと思うのと gameでwinnerに@playersを代入してるけどインスタンス変数のまま使えばいいじゃんってのと コンストラクタでやってる色々は引数にした方がいいんじゃねえかとか。 あとオブジェクト指向っぽくするならCOMPlayerとHumanPlayerを作ってVisitorパターン使ってplayさせてみるとか。 といってもVisitorパターンが最適とは本見なきゃわからん人なので今ひとつ断言できない。
264 名前:デフォルトの名無しさん mailto:sage [2006/05/30(火) 16:24:06 ] じゃんけんが完成したら、いよいよ野球拳の実装だな。wktk
265 名前:デフォルトの名無しさん mailto:sage [2006/05/30(火) 18:39:19 ] オセロまでいくとむずすぎる?
266 名前:デフォルトの名無しさん mailto:sage [2006/05/30(火) 18:55:58 ] 頭の悪いオセロなら簡単だよ
267 名前:デフォルトの名無しさん mailto:sage [2006/05/31(水) 04:16:01 ] それオセーロ
268 名前:259 mailto:sage [2006/05/31(水) 07:17:44 ] 遅くなってすみません。 ttp://sourcepost.sytes.net/sourcepost/sourceview.aspx?source_id=27835 Rubyに移植済みのもの。 判定部分に剰余を使っているので三人でしかじゃんけんできません。 あと、ルール 一人勝ちなら+2ポイント残り二人は-1ポイントずつ 二人勝ちなら+1ポイントずつ残り一人は-2ポイント 終了条件は特に無し # EUC-JPなファイルをupしたら文字化けorz
269 名前:デフォルトの名無しさん mailto:sage [2006/05/31(水) 14:02:51 ] >>268 ttp://sourcepost.sytes.net/sourcepost/sourceview.aspx?source_id=27837 Rubyっぽくしてみた。 ルール(配点)の入れどころがよくわからんかったので消してしまったがJanken側にあるべきではないか。 $ ruby source.rb プレーヤ数 回数 で実行できるけど30人越えた辺りで反応がすげー鈍くなるよ。
270 名前:268 mailto:sage [2006/05/31(水) 19:56:37 ] >>269 うーん、Rubyだ。 ポイントの入れ方は、3人でじゃんけんして あいこなら変化なし 一人勝ちなら勝った人は+2point,負けた二人は-1pointずつ 二人勝ちなら勝った二人は+1pointずつ,負けた人は-1point # ダメな変数の使い方の見本になってしまったorz # flagに複数の意味を持たせてしまっていたようだ # いくら一年以上前のプログラムだからって気付けよ>一昨日の自分 確かに、配点を弄るメソッドがPlayerにあるのは変ですね。 Jankenクラスにjudgeメソッドを実装するなら、ポイントを弄るメソッドも Jankenクラスにあるべきですね。 >268の時点では、Jankenクラスは特に役目は無くて(ってまたダメな設計の見本orz) 単にゲームを開始するだけの係りでした。
271 名前:デフォルトの名無しさん mailto:sage [2006/05/31(水) 20:38:13 ] >>269 >>263 の人? 初心者だけど、Rubyの勉強になった。サンクス。 2時間ぐらいマニュアルと格闘しながら解読した。
272 名前:デフォルトの名無しさん mailto:sage [2006/06/01(木) 13:08:46 ] Jankenにポイント計算つけた。 sourcepost.sytes.net/sourcepost/sourceview.aspx?source_id=27841 (敗者数/勝者数).ceilのポイント(敗者数>勝者数、そうでなければポイント=1)を分ける。 敗者は常に-1にしてある。 3人でやったときは同じ結果で、それ以上でも同じルールをスケールした結果になるはず。
273 名前:デフォルトの名無しさん mailto:sage [2006/06/01(木) 19:51:06 ] >>272 本当に些細なことだが、 scissorsは単複同形だよ。
274 名前:デフォルトの名無しさん mailto:sage [2006/06/02(金) 01:38:55 ] N人であいこなし。複数人が勝てるパターンにしてみた。 ttp://sourcepost.sytes.net/sourcepost/sourceview.aspx?source_id=27843 使い方は>269と同じ(パクりました) * 変数名、メソッド名を自分の好みに変更 * 判定にビット演算を使いたかったので、手の定義を変更した。 * 対話的に動かせるようにしてみた。 * 回数が多いときは誰かが101勝したら終了 * 人数を増やしすぎると延々あいこが続くので決着が着かない 例えば、 $ ruby Janken.rb 3 10 なら、3人で10回勝負が着くまでじゃんけんしつづける。 # あいこでredoさせるのに手間取った # Fixnum#stepでredoすると最初からになってしまうorz # 人数が多い時は別の終了条件にした方が良さそう。 # おいらが書くと長くなってしまうorz
275 名前:デフォルトの名無しさん [2006/06/03(土) 15:28:38 ] age
276 名前:デフォルトの名無しさん [2006/07/16(日) 14:47:02 ] すいません。 ある文字列があったときに、特定の範囲の文字色を変えるというプログラムをつくりたいのですが、 どなたかアドバイスお願いします。 いまはHTMLで出力しているのですが、それ以外にも、ruby/tkでつくったプログラム上に表示したいと思っています。
277 名前:デフォルトの名無しさん mailto:sage [2006/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 名前:デフォルトの名無しさん mailto:sage [2006/07/17(月) 04:44:43 ] 宿題スレ向きだよな。 アドバイスじゃなくて正解が知りたいと思う悪寒。 こう試してみたけど出来ませんじゃないし。
279 名前:デフォルトの名無しさん mailto:sage [2006/07/17(月) 10:32:52 ] ここ宿題スレだよね
280 名前:デフォルトの名無しさん mailto:sage [2006/07/17(月) 11:33:00 ] 宿題隔離スレだから自力でできた(できてない)とこから以下全部丸投げとかでも構わない こんなとこで一言一句完全丸写ししてバレないと思ってるならそれでもいいし ただし問題が何したいのかさっぱりわからん場合はそれこそ問題外
281 名前:デフォルトの名無しさん mailto:sage [2006/07/17(月) 11:45:35 ] 問題文さえここに正確に書き写せない香具師なんだからどうなっても知らん
282 名前:デフォルトの名無しさん [2006/07/24(月) 21:22:49 ] さっぱりわかりません。どうかよろしくお願いします。 kansai2channeler.hp.infoseek.co.jp/cgi-bin/joyful/img/2457.txt
283 名前:デフォルトの名無しさん mailto:sage [2006/07/24(月) 21:32:58 ] ar.push ar.shift
284 名前:デフォルトの名無しさん [2006/07/24(月) 21:48:13 ] これもわかりません。どうか優しい人よろしくお願いします。 kansai2channeler.hp.infoseek.co.jp/cgi-bin/joyful/img/2458.txt
285 名前:デフォルトの名無しさん mailto:sage [2006/07/24(月) 21:51:24 ] >>283 その日の授業内容にもよるが先生が頭抱えそうな回答だな(w
286 名前:デフォルトの名無しさん mailto:sage [2006/07/24(月) 21:59:40 ] >282,284 っていうか教科書読めよ。 特に 284 なんて問題文に答えが書いてあるのにこれ以上優しく説明できるか。
287 名前:デフォルトの名無しさん mailto:sage [2006/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 名前:デフォルトの名無しさん mailto:sage [2006/07/25(火) 01:02:30 ] >>287 ありがとうございました!!!!! 本当に助かりました!
289 名前:デフォルトの名無しさん mailto:sage [2006/07/25(火) 14:27:15 ] >>283 や>>287 を提出したのだろうか
290 名前:デフォルトの名無しさん [2006/07/25(火) 20:27:32 ] 283はいいと思うけど、287はちょっとなぁ。
291 名前:デフォルトの名無しさん mailto:sage [2006/07/25(火) 20:32:00 ] >>282 も配列の添え字の勉強をした上での宿題なんじゃないかと思うぞ…
292 名前:デフォルトの名無しさん mailto:sage [2006/07/25(火) 21:19:06 ] >>287 の3の倍数でない方がよくわからん。 3で割り切れないじゃダメなの?
293 名前:デフォルトの名無しさん mailto:sage [2006/07/25(火) 21:23:40 ] 5の倍数のとこをよく読んで意図を掴め
294 名前:デフォルトの名無しさん mailto:sage [2006/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 名前:デフォルトの名無しさん mailto:sage [2006/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 名前:デフォルトの名無しさん mailto:sage [2006/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 名前:デフォルトの名無しさん mailto:sage [2006/07/26(水) 18:19:26 ] x = ARGV[0].to_i if ("x" * x).gsub(/xxx/,'') !~ /x/ print "#{x}は3の倍数ではありません。\n" end
298 名前:デフォルトの名無しさん [2006/07/28(金) 00:58:09 ] どうか助けてください。 kansai2channeler.hp.infoseek.co.jp/cgi-bin/joyful/img/2473.txt
299 名前:デフォルトの名無しさん mailto:sage [2006/07/28(金) 01:13:51 ] またお前あるいは同類か どうでもいいがこれまで言われたアドバイス全然生かしてねえな
300 名前:デフォルトの名無しさん mailto:sage [2006/07/28(金) 01:17:03 ] 授業で習ってない書き方をしたら丸写しバレるだろって話ね(w
301 名前:デフォルトの名無しさん mailto:sage [2006/07/28(金) 01:39:33 ] こんなに答えの書いてある問題はさすがにないと思うんだが、本当に宿題なのかなあ。
302 名前:デフォルトの名無しさん mailto:sage [2006/07/28(金) 01:43:07 ] >>301 すまん、こういうパズル未満の難易度の言葉合わせな宿題は出る。 授業聞いてればそれなりに何使うかは思いつくだろ、みたいな。 情報でのプログラムの演習なんてその程度でいいんだよ。
303 名前:デフォルトの名無しさん mailto:sage [2006/07/28(金) 01:47:16 ] >>298 てゆーかさ、これだとpflagはずっとtrueのままじゃね?
304 名前:デフォルトの名無しさん [2006/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 名前:デフォルトの名無しさん mailto:sage [2006/07/28(金) 01:57:00 ] プログラムが書けるより、問題を論理的に解析して解の生成アルゴリズムをひらめくのが重要。 アルゴリズムがひらめけばあとは言語仕様に従って記述すればプログラムに成るし。
306 名前:ど素人 [2006/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 名前:デフォルトの名無しさん 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 で、いけますね。
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 とを使っています.
504 名前:デフォルトの名無しさん mailto:sage [2007/02/21(水) 01:05:15 ] >>501 > これでもクリック待ちのときに Ctrl-C で終了できませんでした. > これが,ruby の curses の仕様なんでしょうか? rubyのつーか、cursesってそういうもんじゃなかったっけ?
505 名前:デフォルトの名無しさん mailto:sage [2007/02/21(水) 11:11:41 ] >>501 手元のopenSUSE 10.2では止まるけど、Ctrl-Cで停止しなければならない仕様なの? C-Cされてもどこぞでシグナルがトラップされてたら止まらない。 コンソールからインタラクティブに操作するアプリは操作が中断されるだけで止まらないのも多い。 ところでgetchで入力待ちになったら1秒おきに表示が更新されない気がするんだけど?
506 名前:デフォルトの名無しさん mailto:sage [2007/02/21(水) 11:53:25 ] >>504 pythonでは入力待ち状態でCtrl-Cしたら 終了するのですがどうなんでしょう? >>505 環境依存するのは何の違いがきいてるのでしょう? 設定で解消できるものなのか,OS依存でどうしようもないのか? 可能ならばCtrl-Cで終了するようにしたいです. cursesがtrapを仕込んでいるとして,それを解除, あるいは,更にtrapしてCtrl-Cを検出することは 無理でしょうか? >>ところで… はい.ですから timeout などを使って getch をくるまないといけないと思います. 更新間隔を入力するときは表示の更新が止まってもよいものとします.
507 名前:デフォルトの名無しさん mailto:sage [2007/02/21(水) 14:12:48 ] >>506 Cursesのマニュアルをじっくり読みなよ。 ttp://www.kis-lab.com/serikashiki/man/ncurses.html ttp://www.faqs.org/docs/Linux-HOWTO/NCURSES-Programming-HOWTO.html
508 名前:デフォルトの名無しさん mailto:sage [2007/02/22(木) 17:54:46 ] >>507 pythonではできるって言ってんだから pythonとrubyのcursesの実装の違いでしょ。 そこでcursesのマニュアル出すのはどうかと。
509 名前:デフォルトの名無しさん mailto:sage [2007/02/22(木) 18:06:09 ] >>508 証拠は質問者の証言だけか?
510 名前:デフォルトの名無しさん mailto:sage [2007/02/22(木) 23:02:45 ] つーか宿題としては性質が悪すぎだな 端末文字の色変えろって気楽に言った時点でイヤな予感はしたんだが
511 名前:デフォルトの名無しさん mailto:sage [2007/02/23(金) 21:31:43 ] >>507 んぅ・・・ raw/norawあたりがあやしいかなと思って挿入してみても変化なし. 何かヒントいただけませんか? >>510 すいません.色は問題の本質ではないです. 色を変える代わりに,1ならA,2ならBを表示するだけかまいません.
512 名前:デフォルトの名無しさん mailto:sage [2007/02/23(金) 23:44:29 ] >>511 そこ変えてもダメなの? Ctrl-Cの扱いを変えられるのはraw、cbreakぐらい。 pythonでもrubyでもcursesモジュールは単にCのAPIをラップしてるだけで変わりはない。 強制的にrawになってる(?)ならgetchした先でCtrl-Cのコードのときexitすりゃいいけど なんでそんなことになってるのかなあ。
513 名前:デフォルトの名無しさん mailto:sage [2007/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 名前:デフォルトの名無しさん mailto:sage [2007/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 名前:デフォルトの名無しさん mailto:sage [2007/02/27(火) 19:24:03 ] cbreak使えば余計なことしなくていいみたいだ。 cbreakモードは割り込み、フロー制御するが、rawモードはスルーして文字を返すそうな。
516 名前:デフォルトの名無しさん mailto:sage [2007/02/27(火) 19:57:02 ] >>515 それだとCtrl-Cもとられて本末転倒だろ
517 名前:デフォルトの名無しさん mailto:sage [2007/03/01(木) 10:27:09 ] 端末制御ってめんどくさいな
518 名前:デフォルトの名無しさん mailto:sage [2007/03/07(水) 17:20:46 ] あきらめてpython使えってことだな
519 名前:デフォルトの名無しさん mailto:sage [2007/03/07(水) 18:16:53 ] 宿題なのに?
520 名前:デフォルトの名無しさん mailto:sage [2007/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 mailto:sage [2007/03/09(金) 01:06:17 ] 今実行して確かめたら基礎もできてなかった。うーん・・・ これだとBYE実行でもifに行っちゃいますね。
522 名前:デフォルトの名無しさん mailto:sage [2007/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 mailto:sage [2007/03/09(金) 21:07:16 ] >522 ありがとうございます!countメソッドははじめて見ました。 これまでのチュートリアルにでてないので使わないやり方もあるんですかね? 年号のやつもごちゃごちゃしてましたね。コメントどうもです。 さらに自分でBYE実行時の台詞変えたりしてみようと思います。
524 名前:デフォルトの名無しさん mailto:sage [2007/03/09(金) 22:23:38 ] いや、ここでのcountはただのローカル変数だよ
525 名前:520 mailto:sage [2007/03/09(金) 22:50:52 ] ああ、そうですね。お恥ずかしいです。 それにしてもチュートリアルの問題やたら難しくないですか? こんなもんなんでしょうか。 もう少し簡単な問題やヒントがのってるかと思ってチュートリアル書いた人の 本も買ってみたんですがネットにのってるのとほとんど同じ内容でした。
526 名前:デフォルトの名無しさん mailto:sage [2007/03/09(金) 23:47:18 ] こんなもんです。
527 名前:デフォルトの名無しさん mailto:sage [2007/03/10(土) 01:26:10 ] やたら難しいかどうかはともかく、小難しいのには同意する 初めてのPerl並に平易な問題から段階踏んで攻めるのがいいと思うんだが
528 名前:デフォルトの名無しさん mailto:sage [2007/03/12(月) 17:35:43 ] >>514-519 間が空いてしましましたが, この件 ruby を 1.8.5_p2 から 1.8.6_pre3 にアップデートすると getstr の入力待ちで Ctrl-C したら終了するようになりました. Gentoo だとまだ stable じゃなかったこともあって バージョンのことをまったく気にしてなかったんですが 何が変わったんでしょ? ともかくご助言して頂いた方々ありがとうございました.
529 名前:デフォルトの名無しさん [2007/04/16(月) 10:53:59 ] value = ARGV[0] ? ARGV[0] : 100 ARGV[0]が定義されていない場合、デフォルト値100を代入。 ARGV[0]が2個が単調だ。 もっといい書き方はないだろうか?
530 名前:デフォルトの名無しさん [2007/04/16(月) 11:23:17 ] >>529 value = ARGV[0] || 100
531 名前:デフォルトの名無しさん [2007/04/16(月) 22:51:44 ] >>530 ああ!そうだった・・・ || 忘れてたよ・・・
532 名前:デフォルトの名無しさん mailto:sage [2007/04/24(火) 03:46:47 ] 今月のカレンダを表示する関数を教えてくれ。 calコマンドは呼んじゃ駄目。 つーかprint_this_month関数ぐらい欲しい。
533 名前:デフォルトの名無しさん mailto:sage [2007/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コマンドのようにカレンダーのデータを作り整形して表示するクラスは今のところない …というかそれ要るか? そのカレンダーは既にアプリケーションだと思うんだが…
534 名前:デフォルトの名無しさん [2007/04/24(火) 13:15:03 ] だから宿題なんだろ?
535 名前:デフォルトの名無しさん mailto:sage [2007/04/24(火) 14:09:01 ] どのくらいの出来のカレンダーを求められてるかによって難易度は大幅に変わるな
536 名前:デフォルトの名無しさん mailto:sage [2007/04/24(火) 17:24:25 ] そもそも出力形式はなんなのよ。 cal と同じでいいの?
537 名前:デフォルトの名無しさん mailto:sage [2007/04/24(火) 22:16:37 ] require 'date.rb' days=['日','月','火','水','木','金','土'] # カレンダーの上の曜日 width=3 # 数字を含めた幅 endday=6 # 週の終わりの曜日(日曜:0、月曜:1、…、土曜:6) t=Date.today day_1st=Date.new(t.year,t.month,1) # 今月の第1日 day_last=Date.new(t.year,t.month,-1) # 今月の最終日 puts "#{t.month}月 #{t.year}".center(width*7) # cal風に中心に月と年 days.each{|w| print w.ljust(width)} # 曜日を表示 puts print ' '*day_1st.wday*width # 1日までを空白で埋める day_1st.upto(day_last) do |d| print d.day.to_s.ljust(width) print "\n" if d.wday == endday # 週の終わりなら改行 end puts -------------- ここまでならできた 変数変えただけで月曜始まりにも対応するようにしようと思ったが面倒なのでパス
538 名前:デフォルトの名無しさん mailto:sage [2007/04/25(水) 08:01:15 ] …これもあんま宿題として提出はできそうにないな
539 名前:デフォルトの名無しさん mailto:sage [2007/04/25(水) 09:41:37 ] #!/usr/bin/ruby require 'date' class RubyCalendar def calendar(y, m) ostr = sprintf("%04d / %s\n", y, Date::MONTHNAMES[m]); dt = Date.new(y, m, 1) wd = dt.wday (0..6).each {|dc| ostr += sprintf("%4s", Date::ABBR_DAYNAMES[dc]); } (0..34).each {|dc| d = dc - wd + 1 y2, m2, d2 = y, m, d if(dc < wd || !Date::valid_date?(y, m, d)) dt2 = dt + d - 1 y2, m2, d2 = dt2.year, dt2.month, dt2.day ds = d2.to_s else ds = d2; end ostr += (dc % 7 == 0 ? "\n" : '') + sprintf("%4s", ds); } return ostr end end rc = RubyCalendar.new print rc.calendar(2007, 5)
540 名前:腹減った mailto:sage [2007/04/25(水) 13:02:37 ] #!/usr/bin/ruby require 'date' ### 改行制限で書ききれなかったのできちんと cal.rb MM YYYY の形式で指定すること(無指定は今月) class Calender def initialize(args) (args.empty?) ? (t = Date.today) : (t = Date.new(args[1].to_i, args[0].to_i, 1)) case ENV['LANG'] #+ENV['LANGUAGE'] when /ja/i (@monthnames,@abbr_daynames)=[nil,'1月','2月','3月','4月','5月','6月','7月','8月','9月','10月','11月','12月'], ['日','\ 月','火','水','木','金','土'] else (@monthnames,@abbr_daynames)=Date::MONTHNAMES, Date::ABBR_DAYNAMES.map{|day| day.chop!} end (@d_one,@d_last) = Date.new(t.year,t.month,1), Date.new(t.year,t.month,-1) @width=1 end attr_writer :width, :monthnames, :abbr_daynames def to_a a=Array.new; (@d_one-@d_one.wday).upto(@d_last+6-@d_last.wday){|d| a.push(d)}; return a end def to_s spacer=' '*@width cal = "#{@monthnames[@d_one.month]} #{@d_one.year}".center(3*7) << "\n" cal << @abbr_daynames.inject(''){|days,name| days << name.rjust(2) << spacer} << "\n" to_a.each do |d| (cal << ' ' << spacer; next) unless d.month == @d_one.month cal << d.day.to_s.rjust(2) << spacer << "\n"*(d.wday / 6) end return cal << "\n" end end Calender.new(ARGV).display
541 名前:デフォルトの名無しさん mailto:sage [2007/04/25(水) 13:31:13 ] あ、しまった、to_a の構想を作ってる途中で変えたの忘れてた この配列を配列として取り出すメリット何もないな Calender.new(4,2007).to_a で2007年4月の1日から末日までの Dateオブジェクトの配列が返ってきたら便利だなと思ったんだけど っていうか、どんな授業で出たカレンダーの宿題なのか早く言ってくれないと 提出に絶対適さないプログラム構造のカレンダーをめいめい趣味で作っちゃうよこのスレ
542 名前:デフォルトの名無しさん mailto:sage [2007/04/25(水) 13:39:24 ] cal 4 2007 だけじゃなく cal 2007 にも対応汁
543 名前:デフォルトの名無しさん mailto:sage [2007/04/25(水) 15:24:31 ] #!/usr/bin/ruby require 'date' class Date def to_a a=Array.new; Date.new(self.year,self.month,1).upto(Date.new(self.year,self.month,-1)){|d| a.push(d)}; return a end def calender arr = self.to_a cal = "#{MONTHNAMES[self.month]} #{self.year}".center(4*7) << "\n" cal << ABBR_DAYNAMES.inject(''){|days,name| days << name.rjust(3) << ' '} << "\n" cal << ' '*arr[0].wday arr.each do |d| cal << d.day.to_s.rjust(3) << ' ' cal << "\n" if d.wday == 6 end return cal end end if ARGV.size == 0 then d=Date.today else d=Date.new(ARGV[1].to_i,ARGV[0].to_i,1) end puts d.calender ------------- Dateのメソッドにすると楽しそうなのでくっつけてみた(書き方はこんなんでいいの?) to_aがきちんとselfの月の配列になるよ calenderはDateのプリティな表示ということでcalコマンド互換性を廃して独自に
544 名前:デフォルトの名無しさん mailto:sage [2007/04/25(水) 16:48:03 ] お題に沿ってめいめい趣味で作って楽しむスレじゃないの? 他人のソース見るのって勉強に成るし、いろんな解釈から面白いものが出てくれば良いと思う。
545 名前:デフォルトの名無しさん mailto:sage [2007/04/25(水) 16:57:24 ] ### >>542 動くこた動くがもうわけわからんので煮詰めるのギブアップ ### Date#calenderのwideはtrueだと>>543 のように表示、falseだとcalコマンドのように表示 #!/usr/bin/ruby require 'date' class Date def to_a a=Array.new; Date.new(self.year,self.month,1).upto(Date.new(self.year,self.month,-1)){|d| a.push(d)}; return a end def calender(wide=true) wide ? width=3 : width=2 arr = self.to_a cal = "#{MONTHNAMES[self.month]} #{self.year if wide}".center((width+1)*7) << "\n" cal << ABBR_DAYNAMES.inject(''){|days,name| days << (wide ? name.rjust(width) : name.chop.rjust(width)) << ' '} << "\n" cal << ' '*(width+1)*arr[0].wday arr.each do |d| cal << d.day.to_s.rjust(width) << ' ' cal << "\n" if d.wday == 6 end return cal end ### 続く
546 名前:デフォルトの名無しさん mailto:sage [2007/04/25(水) 16:58:51 ] ### 続き def calender_yearly cals=Array.new (1..12).each do |month| d=Date.new(self.year,month,1) cals.push(d.calender(false).to_a) end calender = "#{self.year.to_s.center(63)}\n\n" (0..3).each do |i| calender << seasonal(cals[i*3],cals[i*3+1],cals[i*3+2]) end return calender end def seasonal(m1,m2,m3) str = " #{m1[0].chomp}#{m2[0].chomp}#{m3[0]}" (1..7).each do |i| str << "#{putline(m1[i])}#{putline(m2[i])}#{putline(m3[i])}\n" end return str end def putline(week) return "#{week.nil? ? ' '*22 : week.chomp.ljust(22)}" end end if ARGV.size == 0 then d=Date.today else d=Date.new(ARGV[1].to_i,ARGV[0].to_i,1) end puts d.calender_yearly
547 名前:デフォルトの名無しさん mailto:sage [2007/04/25(水) 17:14:29 ] >>544 ソースが勉強になるかどうかって話になると書く人減りそうだ スレは改行制限があるからヘンな書き方になるし 三項演算子なんて今年初めて使ったぞ えー解説、calender_yearlyでは12か月分のカレンダー作って配列calsに入れてます (コンセプト段階では意味があったんだが今考えると意図不明) seasonal では 1月1行目+2月1行目+3月1行目\n 1月2行目+2月2行目+3月2行目\n 1月3行目+2月3行目+3月3行目\n 要はこんなことしてます 22文字で固定するためにputlineを作ったんだと思います なんかもうちょっと繰り返しとかのとこを全体的にどうにかすると 思いっきり綺麗に書けそうですが思いつかないので放置します次の方どうぞ
548 名前:デフォルトの名無しさん mailto:sage [2007/04/25(水) 18:39:50 ] >(コンセプト段階では意味があったんだが今考えると意図不明 このセリフどっかで聞いたことあるなぁ Matzが良く使うよなぁ
549 名前:デフォルトの名無しさん mailto:sage [2007/04/25(水) 18:54:46 ] >>548 その台詞、仕事で使わせてもらう ( ・`ω・´)ノ
550 名前:デフォルトの名無しさん mailto:sage [2007/04/25(水) 19:09:23 ] #!/usr/bin/ruby require 'date' # >>545-546 のを改悪 require 'enumerator' class Date def to_a (Date.new(self.year,self.month,1)..Date.new(self.year,self.month,-1)).to_a end def calender(wide = true) width = wide ? 3 : 2 cal = "#{MONTHNAMES[self.month]} #{self.year if wide}".center((width+1)*7) << "\n" cal << ABBR_DAYNAMES.map{|n| n[0..width-1]}.join(' ') << "\n" cal << ' ' * (width+1) * Date.new(self.year, self.month, 1).wday self.to_a.each do |d| cal << d.day.to_s.rjust(width) << ' ' << (d.wday == 6 ? "\n" : "") end; cal end def calender_yearly cals = (1..12).map do |month| a = Date.new(self.year, month, 1).calender(false).split(/\n/) a[7] ||= ''; a end ret = "#{self.year.to_s.center(63)}\n\n" cals.each_slice(3) do |a| ret << a.transpose.map{|b|b.map{|c|c.ljust(22)}.to_s}.join("\n") << "\n" end; ret end end case ARGV.size when 0; puts Date.today.calender when 1; puts Date.new(ARGV[0].to_i, 1, 1).calender_yearly when 2; puts Date.new(ARGV[1].to_i, ARGV[0].to_i, 1).calender end
551 名前:デフォルトの名無しさん mailto:sage [2007/04/25(水) 19:37:37 ] >>550 きゃー短い …やっぱこれ行列か やっぱこれ行列だよな… 行列操作でMatrixしか思いつかなくてA4の紙にでっかい図書いて茹で上がって諦めたよ Rangeオブジェクトは昇順の数字限定のいけ好かない奴だと思ってたのでこれからはなにやら便利に使うよ enumeratorはなんて読むかもわかんないくらいなのでこれからがんばってべんきょうするよ case文は書き慣れた感じがしてやらしいよ
552 名前:デフォルトの名無しさん mailto:sage [2007/04/25(水) 20:07:10 ] あらら2009年のを表示させると死ぬな。 a[6] ||= ''; a[7] ||= ''; a にすりゃいいけど、ここ汚くて嫌い。
553 名前:デフォルトの名無しさん mailto:sage [2007/04/25(水) 21:00:02 ] どうやったらこういうの書けるようになるの?
554 名前:デフォルトの名無しさん mailto:sage [2007/04/26(木) 19:17:28 ] >>553 どうやって日本語覚えた?
555 名前:デフォルトの名無しさん mailto:sage [2007/04/27(金) 03:33:05 ] 555
556 名前:デフォルトの名無しさん mailto:sage [2007/04/27(金) 11:27:17 ] 日本語書けるからといって小説が書けるようになるわけでもなく
557 名前:デフォルトの名無しさん mailto:sage [2007/04/27(金) 12:09:35 ] でも小説を書くために日本語の勉強って大事。 つ 国語
558 名前:デフォルトの名無しさん mailto:sage [2007/05/01(火) 16:56:17 ] お題カモン
559 名前:デフォルトの名無しさん mailto:sage [2007/05/02(水) 06:52:06 ] きょうは八十八夜ですが任意の年月日を入力してそれが年初から何日目かを求めるプログラムを作りなさい ただしDateは使わないこと
560 名前:デフォルトの名無しさん mailto:sage [2007/05/02(水) 09:31:02 ] def dates(y,m,d) ((Time.local(y,m,d) - Time.local(y)) / (3600*24) + 1).to_i end どうでもいいけど八十八夜ってのは年初からの日数じゃないぞ。 dates(2007,5,2) # => 122
561 名前:デフォルトの名無しさん mailto:sage [2007/05/02(水) 09:39:58 ] 旧暦の年初だろ そんなことも知らないのか
562 名前:デフォルトの名無しさん mailto:sage [2007/05/02(水) 11:24:20 ] つーか「5」月な時点で30*4=120日くらいは最低過ぎてるんじゃないかと思えて欲しい
563 名前:デフォルトの名無しさん mailto:sage [2007/05/02(水) 11:32:54 ] ここで旧暦ライブラリの出番
564 名前:デフォルトの名無しさん mailto:sage [2007/05/02(水) 12:00:56 ] 122 - 88 = 34 = 2/3 = 節分 うまく出来てるな
565 名前:デフォルトの名無しさん mailto:sage [2007/05/02(水) 20:44:10 ] >561 旧正月でもないぞ。 立春から数えて八十八日目。節分もまぁ似たようなものだが。
566 名前:デフォルトの名無しさん mailto:sage [2007/05/02(水) 21:28:28 ] ついでに 二百十日 = 9/1 も確認してみました dates(2007,9,1) # => 244
567 名前:デフォルトの名無しさん mailto:sage [2007/05/02(水) 21:43:41 ] 立春の予測の厳密な計算ってスタンドアロンではできないんじゃなかったっけ できたとしても、なんていうかRubyの練習にはならないと思う
568 名前:デフォルトの名無しさん mailto:sage [2007/05/03(木) 23:07:14 ] >>567 >できたとしても、なんていうかRubyの練習にはならないと思う 適当なサイトにアクセスして日付を取ってくるとかはどうだ?
569 名前:デフォルトの名無しさん mailto:sage [2007/05/04(金) 02:07:21 ] まあお代考えた香具師が馬鹿だったということで、次のお代ドーゾ。
570 名前:デフォルトの名無しさん mailto:sage [2007/05/04(金) 12:34:35 ] マウスの位置はどうしたら分かりますか?
571 名前:デフォルトの名無しさん mailto:sage [2007/05/04(金) 12:45:20 ] 基本的にはそんなもんわからん 何かウィンドウシステムのようなもん使ってるならそれ併記しろ あとなにかRuby/Tkとかのアプリケーション上での話ならそれもきちんと書け
572 名前:デフォルトの名無しさん mailto:sage [2007/05/04(金) 13:06:16 ] FreeBSDでコンソールしか使ってないのですが なんか文字と同じサイズで四角いマウスカーソル らしきものが出て来て動くんです
573 名前:デフォルトの名無しさん mailto:sage [2007/05/04(金) 13:09:27 ] それ宿題じゃないだろ
574 名前:デフォルトの名無しさん mailto:sage [2007/05/04(金) 13:11:53 ] っていうか>>570 の続きが>>572 なんじゃないよな…
575 名前:デフォルトの名無しさん mailto:sage [2007/05/04(金) 13:24:01 ] ttp://freebsd4-jman.kandk.co.jp/8/moused.8.html ttp://freebsd4-jman.kandk.co.jp/1/vidcontrol.1.html
576 名前:デフォルトの名無しさん mailto:sage [2007/05/04(金) 22:20:22 ] >>570 机の横に落ちてるだろ。ちゃんと探せよ。
577 名前:デフォルトの名無しさん mailto:sage [2007/05/05(土) 11:55:34 ] マウスパッドの上にありました
578 名前:デフォルトの名無しさん mailto:sage [2007/05/08(火) 16:32:25 ] 1から100までの数をプリントするプログラムを書け。 ただし3の倍数のときは数の代わりに「Fizz」と、5の倍数のときは「Buzz」とプリントし、 3と5両方の倍数の場合には「FizzBuzz」とプリントすること。
579 名前:デフォルトの名無しさん mailto:sage [2007/05/08(火) 16:39:04 ] ※ただし55byte以内でなければならない と付け加えないとつまらんな
580 名前:デフォルトの名無しさん mailto:sage [2007/05/08(火) 17:17:03 ] Rubyで書いたら怒られると思う
581 名前:デフォルトの名無しさん mailto:sage [2007/05/08(火) 20:58:45 ] これか? www.aoky.net/articles/jeff_atwood/why_cant_programmers_program.htm
582 名前:デフォルトの名無しさん mailto:sage [2007/05/08(火) 22:10:41 ] やべえ、 おれ再帰つかったことねぇや
583 名前:デフォルトの名無しさん mailto:sage [2007/05/09(水) 00:35:12 ] 使えるということと使わなければならないということは全く別物 必要なければ使わなくていい 使えないのは問題
584 名前:デフォルトの名無しさん mailto:sage [2007/05/09(水) 01:06:50 ] 再帰は使わない人は一生自前で使わないからなあ きちんと概念学んで理解すると時々使うようになると思う
585 名前:デフォルトの名無しさん mailto:sage [2007/05/09(水) 02:14:09 ] 「累乗のプログラムを作るときに出てきた累乗専用の何か」以上の理解がない俺に 誰か再帰の便利なとこ教えてくれ
586 名前:デフォルトの名無しさん mailto:sage [2007/05/09(水) 02:18:41 ] Haskellとか使うと嫌でも分かるよ。 というか再帰こそ自然で直観的なものだと思えるようになる。
587 名前:デフォルトの名無しさん mailto:sage [2007/05/09(水) 02:28:01 ] 今から再帰で目覚めるためだけにlisp始めれ、というよりは若干やさしいか? そうでもないか
588 名前:デフォルトの名無しさん mailto:sage [2007/05/09(水) 02:59:41 ] 教科書の再帰関数は見かけ無駄な動作しかしないからな フツーの言語で説明されても「こんなんループで書いたほうが早いってはい終了」と思って 即忘れてしまうのは無理もないと思う
589 名前:デフォルトの名無しさん mailto:sage [2007/05/09(水) 05:48:31 ] ヒルベルトとか
590 名前:デフォルトの名無しさん mailto:sage [2007/05/09(水) 08:59:39 ] クイックソートとかマージソートは再帰で書くと思うが。
591 名前:デフォルトの名無しさん mailto:sage [2007/05/09(水) 09:03:17 ] >>588 Rubyスクリプトだとfact(n)を書くのに (1..n).each do |i| 以下略 とか 1.upto(n) do |i| 以下略 とか そういう便利な繰り返しが真っ先に出てきちゃうからな いや、Rubyに限ったことじゃないけど
592 名前:デフォルトの名無しさん mailto:sage [2007/05/09(水) 12:42:17 ] >>578 のそもそもは「面接官の前で紙に該当のコード書け」という問題だからなあ 2分もあれば書けるだろうとか言われてるし モニタの前でコーヒーとか飲みながらキーボードをパチパチやって答える問題ではない
593 名前:デフォルトの名無しさん mailto:sage [2007/05/09(水) 13:11:19 ] 実務でクイックソートとかマージソート使う場面あるか? まずほとんどの場面で、 単純なソートで大丈夫だぜ
594 名前:デフォルトの名無しさん mailto:sage [2007/05/09(水) 13:43:51 ] というか、普通はライブラリを使うだろ。
595 名前:デフォルトの名無しさん mailto:sage [2007/05/09(水) 13:54:24 ] 「クイックソート自力で実装しました」とか言ったら普通はグーで殴られるよな ソートの実装はそれこそ勉強用だ 絶対に自力で経験しないといけないが、絶対に実地で使ってはイカン(趣味でもな)
596 名前:デフォルトの名無しさん mailto:sage [2007/05/09(水) 14:31:45 ] Rubyみたいな言語での再帰の日常利用はある日天啓のごとくひらめくもんだと思う ただし、たいがいはコードが美しくなるだけであって動作速度は普通に書くよりも遅い ただでさえワンテンポ遅いRubyが再帰でさらに遅くなるのでトレードオフの見極めに注意 込み入ったプログラムでは使うと便利なこともあるけれど、初心者には無理かも
597 名前:デフォルトの名無しさん mailto:sage [2007/05/10(木) 11:26:26 ] 再帰的処理は練習しないと肝心の「再帰処理で考えれば万事うまくいく」とこで再帰の使用をひらめかないから、 自作の速度クリティカルじゃないスクリプトでどんどん使って慣れておいたほうがいいぞ。
598 名前:デフォルトの名無しさん [2007/05/12(土) 12:44:58 ] (1..100).each{|i|if i%3==0&&i%5==0 then s="FizzBuzz" elsif i%3==0 then s="Fizz" elsif i%5==0 then s="Buzz" else s = i end; puts s} 130bytes orz
599 名前:デフォルトの名無しさん mailto:sage [2007/05/12(土) 13:55:39 ] ラーメンタイマー作ってー ramen.rb 180 ってやると残り時間を秒単位でカウントしていって 時間過ぎたら今度は経過時間を表示していくようなやつ
600 名前:デフォルトの名無しさん mailto:sage [2007/05/12(土) 15:22:30 ] # Windowsではベルは鳴らない(なんで?)。マイナス引数秒までカウントする # バックスペース文字の連打で描画領域を確保するのは横着なので真似しないこと time = Integer(ARGV[0]) $stdout.sync = true time.downto(time*-1) do |t| print "\a\a" if t < 1 print t.to_s.rjust(4) sleep 1 print "\b\b\b\b \b\b\b\b" end
601 名前:デフォルトの名無しさん mailto:sage [2007/05/12(土) 16:08:51 ] # 遠くから見て残り時間がわからなくて寂しかったので修正 # 5秒につき * が1個減ります time = Integer(ARGV[0]) $stdout.sync=true 0.upto(time) do |i| (print i / 60; next) if i % 60 == 0 (print '*') if i % 5 == 0 end time.downto(time*-1) do |t| print "\a" if t < 0 print "\b \b" if t % 5 == 0 && t >= 0 sleep 1 end
602 名前:デフォルトの名無しさん [2007/05/12(土) 16:25:52 ] >>598 更新履歴兼雑記 - FizzBuzz アゲイン 15:51 d.hatena.ne.jp/shinichiro_h/20070509#1178693484 1.upto(?d){|n|puts ["Fizz#{s=[:Buzz][n%5]}"][n%3]||s||n} 1.upto(?d){|n|s=[:Buzz][n%5];puts n%3<1?"Fizz#{s}":s||n} 1.upto(?d){|n|n%3<1&&s=:Fizz;puts n%5<1?"#{s}Buzz":s||n} 1.upto(?d){|n|puts ["Fizz%s"%s=[:Buzz][n%5]][n%3]||s||n}
603 名前:デフォルトの名無しさん [2007/05/17(木) 20:58:14 ] FizzBuzzの問題で不思議に思うこと。 いろんな言語で書いてあるのをみてみると ふりわけするのにこういうパターン(ケース型?)がすごく多い。 if n % 15 == 0 then puts "FizzBuzz" elsif n % 3 == 0 then puts "Fizz" elsif n % 5 == 0 then puts "Buzz" else puts n end 15を先に調べるとなにかいいことある? 式の評価回数がふえるだけのような気がするんだけど。 ふつうにifの入れ子では駄目なのかなあ。 あ、短くする競争のものは、なんでもやってください。 そうじゃないものの話ね。
604 名前:デフォルトの名無しさん mailto:sage [2007/05/17(木) 21:01:06 ] 改行の出力
605 名前:デフォルトの名無しさん mailto:sage [2007/05/17(木) 21:26:13 ] >>603 「3の倍数の場合」「5の倍数の場合」「3の倍数でもあり、5の倍数でもある場合」 のみっつのケースを特別視しないといけないから、素直にコードに落とすと そうなるんじゃないか?
606 名前:sage [2007/05/17(木) 21:43:12 ] 私はこっちの方が素直だと思う。 if n % 3 == 0 then if n % 5 == 0 then puts "FizzBuzz" else puts "Fizz" end else if n % 5 == 0 then puts "Buzz" else puts n end end
607 名前:デフォルトの名無しさん mailto:sage [2007/05/17(木) 22:13:42 ] めんどいな >>603 コードによってthen以下の処理内容は違うから一概には言えない ただ、たとえば3や5を先にすると、15で割り切れるはずの30が先に3や5の処理に入ることがある 短くしたいとか奇を衒おうとかいうコードの場合、そういうのに対する余分な迂回処理は避けたいんだろう だから分岐の時点で15を先に持ってくると
608 名前:デフォルトの名無しさん mailto:sage [2007/05/17(木) 23:17:02 ] >>606 n % 5 == 0 という条件式が繰り返されているので、仕様変更に弱い。 TABLE = [nil, "Fizz", "Buzz", "FizzBuzz"] index = 0 index += 1 if n % 3 == 0 index += 2 if n % 5 == 0 word = TABLE[index] puts word ? word : n
609 名前:デフォルトの名無しさん mailto:sage [2007/05/18(金) 00:44:30 ] 仕様変更なんて起こらないだろ そんなこと言ったら再利用に便利なようにメソッド化しモジュール化すべきだと言うぞ俺は
610 名前:デフォルトの名無しさん [2007/05/18(金) 01:19:00 ] では、関数型っぽく(lisperっぽく?) p (1..100).to_a.map {|i| if i % 15 == 0 then "FizzBuzz" elsif i % 3 == 0 then "Fizz" elsif i % 5 == 0 then "Buzz" else i end }
611 名前:デフォルトの名無しさん mailto:sage [2007/05/18(金) 02:21:25 ] うーん。仕様変更に弱いですか。 実際、どれぐらい式の評価回数が違うか数えてみると 1から100の数字の場合、3でも5でも割り切れる場合が7個 3で割り切れる場合が27個、5で割り切れる場合が13個 それ以外が53個、ケース型の式の評価回数は、 7*1+27*2+(13+53)*3=259回 入れ子型の場合、2*100=200回 ケース型はデータによって変動するわけですが、 最良の場合は100回、最悪で300回。
612 名前:デフォルトの名無しさん mailto:sage [2007/05/18(金) 10:10:49 ] pc11.2ch.net/test/read.cgi/prog/1178626960/90
613 名前:デフォルトの名無しさん mailto:sage [2007/05/19(土) 17:39:56 ] これはどうでしょう・・・ 1.upto(100) {|i| s = "" s << 'Fizz' if i % 3 == 0 s << 'Buzz' if i % 5 == 0 s << i.to_s if s == "" puts s }
614 名前:デフォルトの名無しさん mailto:sage [2007/05/20(日) 00:25:39 ] 拡張すると、1-100の各数に対して素因数を全て書き出せ、という問題に
615 名前:デフォルトの名無しさん [2007/05/20(日) 08:31:31 ] Fizz-Buzz問題 pc11.2ch.net/test/read.cgi/prog/1178626960/
616 名前:デフォルトの名無しさん [2007/05/21(月) 11:40:06 ] 無職さんの答え (1..100).each{ |n| s = n.to_s s='Fizz' if n % 3 == 0 s='Buzz' if n % 5 == 0 s='FizzBuzz' if n % 15 == 0 puts s }
617 名前:デフォルトの名無しさん mailto:sage [2007/05/21(月) 12:33:07 ] そういうときはせめて elsif 使おうぜ 別に何かトリッキーな短くしようという書き方してるわけでもないだろ 今のままだと n が 15のとき s #=> "15" s #=> "Fizz" s #=> "Buzz" s #=> "FizzBuzz" と 4回切り替わってるぞ (1..100).each do |n| if n % 15 == 0 then s = 'FizzBuzz' elsif n % 3 == 0 then s = 'Fizz' elsif n % 5 == 0 then s = 'Buzz' else s = n.to_s end puts s end んで「 nが何回も評価されててうぜえ」と感じるなら case 文とか そして、もしも「こんなん1から100まで入った配列をFizzやBuzz入りの配列に変換すりゃいいんだろ」と思えるのなら
618 名前:デフォルトの名無しさん mailto:sage [2007/05/21(月) 12:58:33 ] こんなん考えた class Fixnum def fizzbuzz (ret = "#{["Fizz"][self % 3]}#{["Buzz"][self % 5]}").empty? and ret = to_s ret end end 1.upto(100){|n| puts n.fizzbuzz }
619 名前:デフォルトの名無しさん mailto:sage [2007/05/21(月) 13:05:48 ] >>617 >>618 を使うなら puts (1..100).to_a.map{|i| i.fizzbuzz} ってとこか? どこぞで不評だったputsの特別機能(配列は改行つきで表示)がこんなとこでなにやら便利に
620 名前:デフォルトの名無しさん [2007/05/21(月) 13:07:42 ] >>617 切り替わるとやばいかな。のちのち値を追いかけるときやばくなるとかですか。 理由をもうちっと教えてください。
621 名前:デフォルトの名無しさん mailto:sage [2007/05/21(月) 13:41:35 ] 単にムダでイヤとかそういうスタイル上の理由じゃね str = String.new str = "hoge" と同じような無駄(1行目で作られたStringオブジェクトは2行目で破棄される) 何か「まずい」ことがおきることはないはずだよ
622 名前:デフォルトの名無しさん mailto:sage [2007/05/21(月) 16:10:10 ] >>619 map使うならto_aは不要。
623 名前:デフォルトの名無しさん mailto:sage [2007/05/21(月) 16:39:59 ] なにげにEnumerableインクルードしてるからな
624 名前:デフォルトの名無しさん mailto:sage [2007/05/21(月) 16:52:02 ] まだやってんの蚊 お前ら人生の効率をもう少し重視したほうがいい
625 名前:デフォルトの名無しさん mailto:sage [2007/05/22(火) 04:48:05 ] 3の倍数でFizz、5の倍数でBuzz、7の倍数でFuzz、11の倍数で……
626 名前:デフォルトの名無しさん mailto:sage [2007/05/24(木) 16:35:08 ] puts "1" puts "2" puts "Fizz" ・ ・ ・ じゃダメなのか? と基本的なボケをしてみる。
627 名前:デフォルトの名無しさん mailto:sage [2007/05/24(木) 19:04:31 ] 赤点ぎりぎりで合格!
628 名前:デフォルトの名無しさん mailto:sage [2007/05/28(月) 01:00:12 ] こんなのはやっぱり反則? FizzBuzz.rb 1.upto(?d){|i|puts""==(a=$0[i*i%3*4-11..-4--i**4%5])?i:a}
629 名前:デフォルトの名無しさん mailto:sage [2007/05/28(月) 18:03:52 ] ruby初心者の俺が15の倍数をチェックしないバージョンを書いてみた def FizzBuzz(x) r = "Fizz" if x % 3 == 0 r = (r||"") + "Buzz" if x % 5 ==0 return r || x end 1.upto(100) {|x| puts FizzBuzz(x)}
630 名前:デフォルトの名無しさん [2007/05/28(月) 18:41:31 ] >>628 うちだと、nil nil nil nil ...にしかならなかった
631 名前:デフォルトの名無しさん mailto:sage [2007/05/28(月) 21:42:07 ] ファイル名をFizzBuzz.rbにしてください。
632 名前:デフォルトの名無しさん mailto:sage [2007/05/28(月) 21:50:44 ] ファイル作るの面倒だったのでirbで無理矢理動かした。 >> $0 = 'FizzBuzz.rb' >> 1.upto(?d){|i|puts""==(a=$0[i*i%3*4-11..-4--i**4%5])?i:a} 動作確認には十分。
633 名前:デフォルトの名無しさん mailto:sage [2007/05/28(月) 22:09:33 ] 普通に、"FizzBuzz"[i*i%3*4-8..-1--i**4%5] でよさそうなもんだが。
634 名前:デフォルトの名無しさん mailto:sage [2007/05/29(火) 20:36:53 ] 書き換えるのが面倒だったの
635 名前:デフォルトの名無しさん [2007/05/30(水) 17:02:25 ] >>629-634 そういうことかww やっときづいた
636 名前:デフォルトの名無しさん [2007/06/06(水) 15:42:44 ] a = [1, 2, 0, 3, 4, 5] 配列の一番後ろを得たいときは、 a.last だよな? 後ろから2番目、3番目を得たいときは、どうするんだ? a[a.size - 2] しかない? a.last(2) は違うし・・・
637 名前:デフォルトの名無しさん mailto:sage [2007/06/06(水) 15:49:18 ] irb> a = [1, 2, 3, 4, 5] => [1, 2, 3, 4, 5] irb> a[-2] => 4
638 名前:デフォルトの名無しさん mailto:sage [2007/06/06(水) 15:59:27 ] -1がlast last一つ前は-2
639 名前:デフォルトの名無しさん [2007/06/06(水) 16:03:16 ] >>637-638 インデックス、マイナスにできたのか。しらなかた reverseしてから、アクセスとかやってた。 サンクスでう。
640 名前:デフォルトの名無しさん [2007/06/11(月) 02:35:33 ] stringをarrayにする簡単な方法はないですか? やりたいことは、arrayにして、sortしたいのですが・・・ s.to_aは行ごとだし・・・
641 名前:デフォルトの名無しさん [2007/06/11(月) 02:38:56 ] srand s = "hogemoge" a = []; s.each_byte {|l| a << l.chr} pp a.sort_by{ rand }.to_s 実際書いてみると、以外に短かかったw
642 名前:デフォルトの名無しさん mailto:sage [2007/06/11(月) 03:43:29 ] s.split(//).each
643 名前:デフォルトの名無しさん mailto:sage [2007/06/11(月) 07:53:28 ] 確かに str.split(//e) が妥当だ(e は str の文字コード) 1文字ずつぶった切って配列にしてるんだなと読み下してもくれるし
644 名前:デフォルトの名無しさん mailto:sage [2007/06/11(月) 16:10:21 ] s.scan(/./) s.split(//) 同じ長さだったか。
645 名前:デフォルトの名無しさん mailto:sage [2007/07/08(日) 19:59:06 ] パスカルの3角形を印字するプログラムを 作りたいのだが以下のプログラムで作るにはどうしたらいいのでしょうか? 教えてください。 print("Enter n: "); n = gets.chomp.to_i if( n>30 || n<0 ) then n = 10 end a = Array.new( n ) a[0] = [1] # 要素が1 の長さ1の配列 # ここでパスカルの3角形を作る # このとき、a[i]ごとに配列を作る # そして、印字 for i in (0..a.length-1) do for j in (0..a[i].length-1) do print( " ", a[i][j] ) end print( "\n" ) end
646 名前:デフォルトの名無しさん [2007/07/09(月) 06:58:16 ] マルチ乙
647 名前:デフォルトの名無しさん mailto:sage [2007/07/09(月) 08:18:09 ] そんな事よりカレーの話しようぜ
648 名前:デフォルトの名無しさん mailto:sage [2007/07/09(月) 14:54:25 ] 宿題スレ行け→マルチ乙 これはひどい
649 名前:デフォルトの名無しさん mailto:sage [2007/07/09(月) 16:07:04 ] 回答してはいけないという空気?
650 名前:デフォルトの名無しさん mailto:sage [2007/07/09(月) 16:25:33 ] いや、いいんじゃない? マルチと誤解されないためには、前スレに移動する由を書いとけばいい
651 名前:デフォルトの名無しさん mailto:sage [2007/07/09(月) 16:39:33 ] それこそ「宿題スレのほうがいい」というアドバイスを受けたからこっち来たんだろ 移動した旨は移動時に既にあっちに書いてあるし、イジられる以上の非難を受ける謂れは無いと思われ
652 名前:デフォルトの名無しさん mailto:sage [2007/07/09(月) 18:09:50 ] じゃ、とりあえず。いろいろ宿題の中身無視してるけ、どこんな感じで。 class Array def next_pascal next_pascal = Array.new next_pascal << self[0] self[0..-2].each_index do |i| next_pascal << self[i] + self[i + 1] end next_pascal << self[-1] end end p = [1] 10.times do puts p.join(' ') p = p.next_pascal end