1 名前:デフォルトの名無しさん mailto:sage [2008/01/13(日) 07:00:47 ] あなたが解けないRuby言語の宿題を片付けもらうスレッドです。気に入らない質問やその他や発言はスルーの方向で。 【質問者へ】 回答者の便宜のため、質問の際は以下を行うことを推奨します。 ・質問は【質問テンプレ】を利用してください。 ・問題文は、出題されたまま全文を書いてください。 ・問題文やコードをリンクするときは、一言内容にについて説明をつけましょう. ・計算問題は数式をあげ、どのような計算をするのか詳しく説明してください。 ・エラーは、その詳細と発生した行を書きましょう。エラーメッセージはコピペしてください。 ・後から問題に付け足しするのはやめましょう。付け足しは作業を無駄にしがちです。 ・なりすましを防ぐため、トリップを使ってください。名前欄に、「#」に続けて任意の文字列を入力して投稿すると、その文字列を知らない他人に騙られることを防ぐことができます。 【質問テンプレ】 [1] 授業単元: [2] 問題文(含コード&リンク):() [3] 環境 [3.1] OS: (Windows/Linux/等々) [3.2] バージョン: (Ruby 1.8.6 等) [3.3] 言語: (Ruby/JRuby/IronRubyどちらでも可 等) [4] 期限: ([yyyy年mm月dd日hh:mmまで] または [無期限] のいずれか) [5] その他の制限: (どこまで習っているか、標準ライブラリは使ってはいけない等々) 【アップローダー==ラウンジ】(質問が長い時はココ使うと便利 回答者もコードが長ければここに) kansai2channeler.hp.infoseek.co.jp/cgi-bin/joyful/joyful.htm 前スレ pc11.2ch.net/test/read.cgi/tech/1106572657/ Ruby Home Page www.ruby-lang.org/ja/ Ruby 初心者スレッド Part 16 pc11.2ch.net/test/read.cgi/tech/1197120980/ Rubyについて Part 30 pc11.2ch.net/test/read.cgi/tech/1200106073/ Ruby on Rails pc11.2ch.net/test/read.cgi/tech/1191381506/ その他 過去スレ・関連スレは >>2-
2 名前:デフォルトの名無しさん mailto:sage [2008/01/13(日) 07:05:00 ] 詰め込みすぎた 今は反省している
3 名前:デフォルトの名無しさん mailto:sage [2008/01/13(日) 18:01:26 ] 乙
4 名前:デフォルトの名無しさん [2008/01/13(日) 23:17:57 ] >>1 乙
5 名前:デフォルトの名無しさん mailto:sage [2008/01/14(月) 21:01:58 ] pc11.2ch.net/test/read.cgi/tech/1200106073/8 pc11.2ch.net/test/read.cgi/tech/1200106073/9 pc11.2ch.net/test/read.cgi/tech/1200106073/12 pc11.2ch.net/test/read.cgi/tech/1200106073/22
6 名前:デフォルトの名無しさん mailto:sage [2008/01/22(火) 23:07:44 ] 宿題まだぁ?
7 名前:デフォルトの名無しさん mailto:sage [2008/01/23(水) 10:39:24 ] ちんちん
8 名前:デフォルトの名無しさん mailto:sage [2008/01/23(水) 23:19:14 ] [1] 授業単元: ネットワークコンピューティング概論 [2] 問題文(含コード&リンク):Google Pagesのようなコンテンツ管理システムを作成しなさい。 [3] 環境 [3.1] OS:GNU/Linux [3.2] バージョン: Ruby 1.8.6、Rails 1.2.5 [3.3] 言語: Ruby [4] 期限: 2008年3月20日 [5] その他の制限: Railsの基礎(ActiveRecord、ActionController、ActionView)は習いました。
9 名前:デフォルトの名無しさん mailto:sage [2008/01/23(水) 23:28:11 ] ええええええええええええええええええええええええええ それ宿題っていうか試験のレベルなのでは… GooglePagesでできることはやたら多岐にわたるぞ ユーザーからファイルアップロードとHTML入力を許して 「ユーザー名.サービス.com」なサイトを作らせるシステムを作れってことなのかな
10 名前:デフォルトの名無しさん mailto:sage [2008/01/24(木) 00:11:38 ] 金くれるならやるレベル
11 名前:デフォルトの名無しさん mailto:sage [2008/01/24(木) 00:23:12 ] CMSのごく単純なのを作れってことでは。 例としてGooglePagesが挙げられているだけで。
12 名前:デフォルトの名無しさん mailto:sage [2008/01/24(木) 00:52:06 ] >>10 そこをなんとかお願いいたします。m(__)m >>11 その通りです。Google Pagesはあくまで例とのことです。 言葉足らずで申し訳ありません。 まったく手も足もでない状況です・・・ 丸投げで申し訳ありませんが、よろしくお願いいたします。m(__)m
13 名前:デフォルトの名無しさん mailto:sage [2008/01/24(木) 01:35:42 ] ちなみにワンライナーでお願いします
14 名前:デフォルトの名無しさん mailto:sage [2008/01/24(木) 02:07:08 ] デンライナーで勘弁してください
15 名前:デフォルトの名無しさん mailto:sage [2008/01/24(木) 20:19:10 ] とっとりライナーでお願いします
16 名前:デフォルトの名無しさん mailto:sage [2008/01/24(木) 21:07:57 ] ワンライナーで勘弁してください
17 名前:デフォルトの名無しさん mailto:sage [2008/01/25(金) 19:12:34 ] ワカランナイナー
18 名前:デフォルトの名無しさん mailto:sage [2008/01/25(金) 21:49:54 ] やってもいいけど、君はどこ大学? 話はそれからだ。
19 名前:デフォルトの名無しさん mailto:sage [2008/01/25(金) 22:14:32 ] レイルズ使ったこと無いから答えられない
20 名前:8 [2008/01/26(土) 11:35:03 ] >>19 じゃあ答えなくて良いです。 他の方よろしくお願いいたします。m(__)m
21 名前:デフォルトの名無しさん mailto:sage [2008/01/26(土) 12:18:50 ] 了解
22 名前:デフォルトの名無しさん [2008/01/27(日) 14:06:48 ] rubricks.org/ こいつでいいんじゃね?
23 名前:デフォルトの名無しさん mailto:sage [2008/01/27(日) 17:18:38 ] 解決ね。 はい、次の宿題どぞー
24 名前:デフォルトの名無しさん mailto:sage [2008/01/28(月) 03:03:18 ] >>1 乙 前スレいつの間に落ちたんだ >>9 ワロタ
25 名前:デフォルトの名無しさん mailto:sage [2008/01/28(月) 03:11:37 ] Rails tutorial CMSで検索しても以外にない 参考になりそうなところ Ruby on Rails based CMS in Ruby on Rails wiki.rubyonrails.org/rails/pages/Ruby+on+Rails+based+CMS
26 名前:デフォルトの名無しさん mailto:sage [2008/01/28(月) 03:15:33 ] wikiのtutorialならあるから、それを参考にするのhどう? wikiもCMSの一種だし pylori*style: RailsでWikiクローンを作る tam.qmix.org/archives/2005/08/railswiki.html Japan.internet.com デベロッパー - RailsでWikiシステムを作成する japan.internet.com/developer/20070731/26.html その他参考サイト RoRのサンプルまとめ - plus ultra blog ultra.boy.jp/?p=926
27 名前:デフォルトの名無しさん mailto:sage [2008/01/28(月) 20:03:06 ] >>8 「金くれたらやるよ」でOK 教授にもう少し勉強しなさいって言っておけ
28 名前:28 ◆B/rqf88wwo [2008/01/28(月) 23:57:40 ] 【質問テンプレ】 [1] 授業単元:リダイレクト、正規表現など [2] 問題文(含コード&リンク):(kansai2channeler.hp.infoseek.co.jp/cgi-bin/joyful/img/5932.zip ) [3] 環境 [3.1] OS: (Windows) [3.2] バージョン: (詳しくは分かりませんが最新のものだと思われます) [3.3] 言語: (Ruby) [4] 期限: ([2008年1月30日17:00まで]) [5] その他の制限: (とりあえず正規表現あたりまで) レポートの期限が明後日に迫って神にもすがる思いです・・・ どなたかお願いします_ _
29 名前:デフォルトの名無しさん mailto:sage [2008/01/29(火) 00:07:21 ] ISBN関連は作ったことあるから回答の半分以上はコピペで済むけど で、自力ではどこまでできたんだよ レポートに説明書かないといけないんだから方向くらいは示してくれ
30 名前:デフォルトの名無しさん mailto:sage [2008/01/29(火) 00:15:27 ] とりあえずバージョンの見方ぐらいは覚えておこうな。 ruby -v
31 名前:28 ◆B/rqf88wwo [2008/01/29(火) 00:20:38 ] >>29 「入力が終わりに達するまで1行ずつ読み込む」→while line = gets 「1行分のデータをタイトルと旧ISBN規格のコードを代入する」→split(/,/) 「タイトルをキーとするハッシュをソートする」→.sort! おそらくこの辺りを使うと思うんですが、全体的な構成が全然見えなくて… あと「while line = gets」を実行すると「Bad file descriptor」というエラーが出てきてどうも上手くいかないみたいなんです。
32 名前:28 ◆B/rqf88wwo [2008/01/29(火) 00:23:29 ] >>30 これは初めて知りました! 実行してみたら「ruby 1.8.5」と出ました。
33 名前:28 ◆B/rqf88wwo [2008/01/29(火) 00:26:08 ] >>31 正しくは 「1行分のデータをタイトルと旧ISBN規格のコードに分割」→split(/,/) です
34 名前:デフォルトの名無しさん mailto:sage [2008/01/29(火) 00:27:46 ] ぐぐったら色々出てきた コーディング規約とか書いてあったけど自分で修正するの?
35 名前:28 ◆B/rqf88wwo [2008/01/29(火) 00:52:02 ] >あと「while line = gets」を実行すると「Bad file descriptor」というエラーが出てきてどうも上手くいかないみたいなんです。 これは自己解決しました! リダイレクト実行の場合、先頭に「ruby」を付けないとこんなエラーが出るみたいです
36 名前:デフォルトの名無しさん mailto:sage [2008/01/29(火) 00:56:13 ] #! ruby -Ks # filename : script.rb # Usage : ruby script.rb < rep1-data.txt book = Hash.new while ARGF.gets title, isbn = $_.strip.chomp.split(",") isbn = isbn.split(/[\s-]/) book[title] = isbn end p book ほれハッシュに放り込むとこまで作ったぞ
37 名前:デフォルトの名無しさん mailto:sage [2008/01/29(火) 01:01:25 ] def get_checkdigit13(body) i = ('978' + body).split(//).map{|v| v.to_i} checksum = (i[0]+i[2]+i[4]+i[6]+i[8]+i[10])*1 # ISBNの1,3,5,7...桁 checksum = checksum+(i[1]+i[3]+i[5]+i[7]+i[9]+i[11])*3 # ISBNの2,4,6,8...桁 return (10 - checksum.to_s[-1,1].to_i).to_s end def get_grouptag(code) case code when 0,1 ; return '英語圏' when 2 ; return 'フランス語圏' when 3 ; return 'ドイツ語圏' when 4 ; return '日本' when 5 ; return 'ロシア' else return 'その他' end end
38 名前:37 mailto:sage [2008/01/29(火) 01:01:54 ] list = {} while line = gets do # run as: ruby report1.rb rep1-data.txt pair = line.split(/,/) list[pair[0]] = pair[1] end list.keys.sort!.each do |title| isbn = list[title].split(/\s|-/) isbn10 = isbn.join('-') checkdigit13 = get_checkdigit13(isbn[0]+isbn[1]+isbn[2]) isbn13 = "978-#{isbn[1]}-#{isbn[2]}-#{checkdigit13}" grouptag = get_grouptag(isbn[0].to_i) puts "#{title.downcase.capitalize},#{isbn10},#{grouptag},#{isbn[1]},#{isbn[2]\ },#{isbn[3]},#{checkdigit13},#{isbn13}" end
39 名前:デフォルトの名無しさん mailto:sage [2008/01/29(火) 01:02:59 ] >>37-38 の実行結果 $ ruby syukudai.rb rep1-data.txt Idea factory,4-89583-115-9,日本,89583,115,9,4,978-89583-115-4 In the blink of an eye,0-7432-5733-2,英語圏,7432,5733,2,6,978-7432-5733-6 Neko to saru,4-19-850077-0,日本,19,850077,0,1,978-19-850077-1 Probabilidade,2-5216-0294-9,フランス語圏,5216,0294,9,9,978-5216-0294-9 Random variables,98-486-0107-4,その他,486,0107,4,5,978-486-0107-5 Reaction kinetics,4-8079-0532-5,日本,8079,0532,5,4,978-8079-0532-4 Second nature,0-300-12039-7,英語圏,300,12039,7,4,978-300-12039-4
40 名前:37 mailto:sage [2008/01/29(火) 01:06:21 ] あ、Emacsからコピペしたときに変なことに putsのとこは1行で書いてね そういえばチェックディジットの計算にはmod使えって書いてあったんだっけ 「下1桁を文字列として取る」とか数学的な計算を思いっきり無視してるなスマン
41 名前:デフォルトの名無しさん mailto:sage [2008/01/29(火) 01:12:20 ] ちょwwwww 同じ学類wwwww そんくらい自分でやれよ! 単位取れても使えなきゃ意味無いぞ!
42 名前:デフォルトの名無しさん mailto:sage [2008/01/29(火) 01:18:19 ] ちなみにワンライナーでお願いします
43 名前:デフォルトの名無しさん mailto:sage [2008/01/29(火) 01:21:04 ] >>41 使わなけりゃ問題はなかんべ
44 名前:デフォルトの名無しさん mailto:sage [2008/01/29(火) 01:23:40 ] 学類ってうちの大学かな・・・
45 名前:デフォルトの名無しさん mailto:sage [2008/01/29(火) 01:32:56 ] 他に学群学類なんて分け方をしてる大学があったら教えてくれよ。 …まあ、Rubyの産みの親だしな…
46 名前:デフォルトの名無しさん mailto:sage [2008/01/29(火) 01:34:12 ] 担当の教官の人がruby-listに投稿したような形跡はあるから、案外ここも見てるかもね >>44 Tくば大学のハルヒキャンパスだそうな いや意表ついて本当にハルヒって読むんだったらぼかしにも何にもなってなくてスマンが
47 名前:デフォルトの名無しさん mailto:sage [2008/01/29(火) 01:38:26 ] 自力で解説つけろという指定はコピペ可能な提出物の扱いに慣れてる感じがしてさすがに安定感があるな 他の大学でしょぼいとこは真似っこしてみるといいと思う
48 名前:デフォルトの名無しさん mailto:sage [2008/01/29(火) 01:44:30 ] >>46 安心しろ、読み方違うから。 でもしょっちゅうネタになってる…orz しかし俺の書いたのの半分くらいで作られると、自分の技量の無さがいやと言うほど判って悲しくなってくるぜ
49 名前:デフォルトの名無しさん mailto:sage [2008/01/29(火) 01:48:27 ] def cd(c);(10-[0,2,4,6,8,10].inject{|v,i|v+c.split(//).map{|e|e.to_i}[i]}+3*[1,3,5,7,9,11].inject{|v,i|v+c.split(//).map{|e|e.to_i}[i]}%10)%10;end p cd('897'<<'0743257332') #=>6 よっしゃー^^; どんなもんじゃー!
50 名前:デフォルトの名無しさん mailto:sage [2008/01/29(火) 01:54:59 ] >>48 調べながら書いたので技量はたいしたことない whileとgetsの使い方なんてエラー出たからマニュアル見て書き換えたくらいで全く覚えてないぞ
51 名前:デフォルトの名無しさん mailto:sage [2008/01/29(火) 01:55:43 ] 課題曰く、「可読性も採点対象」だそうな
52 名前:デフォルトの名無しさん mailto:sage [2008/01/29(火) 03:22:11 ] 日日な俺も暇だから作ってみたぜ def check_digit(dig) dig = dig.to_s.scan(/\d/).map{|c| c.to_i} n = (0 .. 5).inject(0){|x, y| x += dig[y*2] + 3 * dig[y*2+1] } return (10 - n % 10) % 10 end def group_name(group) Hash[0, '英語圏', 1, '英語圏', 2, 'フランス語圏', 3, 'ドイツ語圏', 4, '日本', 5, 'ロシア'][group[0, 1].to_i] or 'その他' end ARGF.each do |line| title, isbn = line.strip.split(',') title = title.split(' ').map{|w| w.capitalize}.join(' ') isbn = isbn.gsub(' ', '-') group, pub, book, cd = isbn.split(/[-]/) cd2 = check_digit('978' + group + pub + book) isbn2 = ['978', group, pub, book, cd2].join('-') puts [title, isbn, group_name(group), pub, book, cd, cd2, isbn2].join(',') end
53 名前:デフォルトの名無しさん mailto:sage [2008/01/29(火) 03:25:27 ] アルファベット順にソートすんのわすれたけど面倒くさいからもういいぜ
54 名前:デフォルトの名無しさん mailto:sage [2008/01/29(火) 03:27:55 ] 最後らへんのputsを削除して ARGF.each do ... end を puts ARGF.map do ... end.sort にするだけな気がするけど面倒くさいから試さないぜ
55 名前:デフォルトの名無しさん mailto:sage [2008/01/29(火) 11:47:07 ] >>47 >>37-38 をコピペしたら「本当はわかってない」のが丸わかりだろうな コメントや解説の強制はなかなか効果的だ
56 名前:28 ◆B/rqf88wwo mailto:sage [2008/01/29(火) 11:48:04 ] >>36-39 >>52 みなさんありがとうございます! 大変助かりました。 大いに参考にさせていただきます!
57 名前:デフォルトの名無しさん mailto:sage [2008/01/29(火) 12:10:05 ] >>55 でもまあ動作するスクリプトが目の前にあれば自力ででも作りやすいだろ コピペで済ますのも自由だしな
58 名前:デフォルトの名無しさん [2008/01/29(火) 14:42:24 ] 教えて欲しい問題があります! データベースに登録した同じ次元のベクトルをコサイン尺度によって類似度を求めたいのですが, コサイン尺度のプログラムが書けなくて困ってます! 以下がコサイン尺度の数式です. cos(dj,q) =(Σ_[i=1, m] dij*qi)/(√(Σ_[i=1, m] dij^2)^(1/2)) * (√(Σ_[i=1, m] qi^2)^(1/2)) ※q=検索質問ベクトル,dj=各文書ベクトル となっています. また,dj*q はベクトル間の内積を表していて, dj*q = Σ_[i=1, m] dij*qi となってます. 少し複雑な計算式ですが,とりあえず書いてみました. Railsのスレで質問したのですがこのスレの方が良いと言われたので書き込みました. どなたかRubyになおしてもらえるならお願いします(×_×)
59 名前:デフォルトの名無しさん mailto:sage [2008/01/29(火) 18:00:30 ] おらすうがくっちゅーもんがかいもくわからんですたい。
60 名前:デフォルトの名無しさん mailto:sage [2008/01/30(水) 03:13:17 ] どこが分らんのか分らん。単なるベクトルの計算を地道にやればいいんじゃないの? require'matrix'してVectorクラス使ってみれば。あとはmathnとか必要に応じて dj*qは(dj.covector*q)[0]くらいでいけるんじゃね
61 名前:デフォルトの名無しさん mailto:sage [2008/01/30(水) 03:27:39 ] ああ内積のメソッドあったわ・・・ dj*q=dj.inner_product(q) 絶対値もあったわ・・・ (Σ_[i=1, m] dij^2)^(1/2)=dj.r
62 名前:デフォルトの名無しさん [2008/02/01(金) 22:52:41 ] 質問テンプレ】 [1] 授業単元:クラス、正規表現、ファイル入出力 [2] 問題文(含コード&リンク): 現在の年月日を取得し「2008年02月02日」のように 表示しテキストファイルAに出力しなさい。 コマンドラインから日時を入力し、 テキストファイルAをスキャンして マッチした一行をテキストファイルBに出力。 また自分の生年月日をコマンドラインに出力し、 現在の日時から生年月日を引いたものも表示しなさい。 [3] 環境 [3.1] OS: (unix) [3.2] バージョン: (Ruby 1.8.6 ) [3.3] 言語: (Ruby) [4] 期限: [2008年02月02日07:00まで] [5] その他の制限:クラスを利用。 :出来るだけ簡単なクラス、メソッドの利用 コマンドライン表示 例 ーーーーーーーーーーーーーーーー 現在時刻 2008年02月02日 生年月日 2000年01月01日 生きてる年数 8年01月01日間 ーーーーーーーーーーーーーーーー 時間の取得とファイル入出力はできるのですが, クラスでメソッドを定義しファイル入出力をしようとすると 上手く行きません.見本をどなたかお願いします, 初心者の質問でもうしわけないのです,よろしくお願いします,
63 名前:デフォルトの名無しさん mailto:sage [2008/02/02(土) 00:05:56 ] 問題がよくわからない。 「2008年02月02日」をテキストファイルAに出力し、 コマンドラインから「2008年02月02日」とか入力して、 テキストファイルAに「2008年02月02日」という行があったら それをテキストファイルBにコピーするという意味か? どういう処理なんだかよくわからない。 あと何がうまくいかないんだかよくわからないから うまくいかないソースを提示したらどうだ。 丸投げで全部書いてくれってのはよくない。
64 名前:デフォルトの名無しさん mailto:sage [2008/02/02(土) 00:41:28 ] ハルヒキャンパスでこのスレ一番上にくるwwwwwワロス >>49 すげえw
65 名前:デフォルトの名無しさん mailto:sage [2008/02/02(土) 00:51:09 ] ていうかハルヒキャンパスなんて名称を聞くと 時代だなあ・・・って思ってしまう 俺のいたころ(つっても数年前だが)には まだハルヒとかなかったもんな
66 名前:デフォルトの名無しさん mailto:sage [2008/02/02(土) 06:57:38 ] >>63 いや、そのまんまの処理だと思うが… たった1行書き出してたった1行読み込んでたった1行マッチさせてたった1行を再書き出し もっと実利に即したわかりやすい課題にしろよとは思うが適当に課題出せばこんなもんだろ >>62 クラスとメソッドを自力で定義してよいという課題な時点で回答は無限に存在する ぜんぜん理解できないスゴい代物が返ってくる可能性があるので、 どの部分をクラスにしてどの部分をメソッドにする気なのか口頭でいいから教えてちょ
67 名前:デフォルトの名無しさん mailto:sage [2008/02/02(土) 07:03:00 ] って、期限過ぎちゃったのか
68 名前:デフォルトの名無しさん mailto:sage [2008/02/02(土) 07:30:00 ] てか、ギリギリしぎだろw
69 名前:デフォルトの名無しさん mailto:sage [2008/02/02(土) 07:58:30 ] こりゃ課題出した先生が悪い だってつまんないんだもん^^;
70 名前:デフォルトの名無しさん [2008/02/06(水) 17:12:21 ] >>66 ありがとうございます。 初心者ですみません>< どの部分をクラス、メソッドにすれば一番理解しやすいものに なるのでしょうか。解説つけることも課題の内なので、理解しやすいもので お願いします。 「どの部分をクラスにしてどの部分をメソッド」というのにすごく驚きました。 そんなに無限にできるのですか?@@
71 名前:デフォルトの名無しさん mailto:sage [2008/02/06(水) 20:26:05 ] >>70 ひとつポリシーの質問なんだが 2000年6月15日に生まれて、今日が 2001年9月20日だった場合、生きてる期間は1年と3月と5日だよな じゃあ今日が 2001年3月14日だった場合は何年と何月と何日だと思う?
72 名前:デフォルトの名無しさん mailto:sage [2008/02/06(水) 22:01:44 ] 年月日の引き算は意外とめんどい そのぶん、普段頭の中でやってる計算をプログラムとして書き下すという訓練には適してるけど
73 名前:デフォルトの名無しさん mailto:sage [2008/02/06(水) 22:06:09 ] 閏年とか計算するともうね。
74 名前:デフォルトの名無しさん [2008/02/07(木) 10:17:58 ] >>71 すみません。 うるう年とか、31日とかは気にせず、30日で 計算で大丈夫です。
75 名前:sage [2008/02/07(木) 10:42:29 ] de = nil ←1 while true begin case de when nil de = gets next when 'l' then puts "X" end rescue puts $! end de = nil ←2 end 今いろいろなソースを読んでいるのですが、 上記の1と2がわかりません。説明をお願いします。 また、
76 名前:デフォルトの名無しさん mailto:sage [2008/02/07(木) 11:01:34 ] 1は、その代入で、de というローカル変数が存在するようにしている、 2は、de が指している文字列オブジェクトが参照されなくなるようにしている、 のだと思う。
77 名前:デフォルトの名無しさん mailto:sage [2008/02/07(木) 12:22:19 ] >>75 begin while de = gets do puts 'X' if de == 'l' end rescue puts $! end たぶんこういう標準入力ループをやりたかったのだろうと推測 while trueを使うことはRubyではあまりない nilの理解はしてるかな Rubyで偽を表す特別な値だ 値の一度も入ってないローカル変数を参照することはできないから、 「仮に」nilを入れておくということをRubyではよくやる それが1なんだが、「エラーが出たから書きました」的投げやり感が…
78 名前:デフォルトの名無しさん mailto:sage [2008/02/07(木) 13:02:36 ] >>74 require 'date' class Date def to_s return self.strftime("%Y年%m月%d日") end def passed_from(base) d = self.day - base.day if d < 0 then d = d + 30; sage_m = 1 # 本当は30とは限らない else sage_m = 0 end m = self.month - base.month - sage_m if m < 0 then m = m + 12; sage_y = 1 else sage_y = 0 end y = self.year - base.year - sage_y if y < 0 puts 'エラー!:生年月日が今日より先です' exit end return "#{y}年#{m}月#{d}日" end end
79 名前:デフォルトの名無しさん mailto:sage [2008/02/07(木) 13:03:05 ] class MyFile def initialize(filename) @file = filename end def save(text) File.open(@file,'w'){|f| f.puts(text)} end def grep(text) matched = Array.new File.open(@file,'r').each{|line| matched.push(line) if line.chomp =~ Regexp.new(text) } return matched end end
80 名前:デフォルトの名無しさん mailto:sage [2008/02/07(木) 13:03:59 ] file_a = MyFile.new('A.txt') file_b = MyFile.new('B.txt') today = Date.today my_birthday = Date.new(1995,7,7) puts "現在時刻\t#{today}" file_a.save(today) file_b.save(file_a.grep(ARGV[0])) puts "生年月日\t#{my_birthday}" puts "生まれてから\t#{today.passed_from(my_birthday)}"
81 名前:デフォルトの名無しさん mailto:sage [2008/02/07(木) 13:07:23 ] >>78-80 をくっつけて実行 $ ruby kadai.rb 2008年02月07日 現在時刻 2008年02月07日 生年月日 1995年07月07日 生まれてから 12年7月0日 $ cat A.txt 2008年02月07日 $ cat B.txt 2008年02月07日 暇な人がもっと簡単にしてくれるはず sage_mはmonthの繰り下がり、sage_yはyearの繰り下がり
82 名前:デフォルトの名無しさん mailto:sage [2008/02/07(木) 16:26:11 ] よしじゃあ俺も・・・ class Time def to_s; strftime('%Y年%m月%d日'); end end class Days def initialize(sec) mo, d, h, m, s = 12, 30, 24, 60, 60 @y = (sec / s / m / h / d / mo).to_i @m = (sec / s / m / h / d ).to_i % mo @d = (sec / s / m / h ).to_i % d end def to_s; sprintf('%d年%02d月%02d日間', @y, @m, @d); end end
83 名前:デフォルトの名無しさん mailto:sage [2008/02/07(木) 16:26:33 ] today = Time.now puts '現在時刻 ' + today.to_s open('a.txt', 'w'){|fp| fp.puts today} open('b.txt', 'w'){|fp| fp.puts File.readlines('a.txt').grep(gets)} birthday = Time.local(2000, 1, 1) age = Days.new(today - birthday) puts '生年月日 ' + birthday.to_s puts '生きてる年数 ' + age.to_s
84 名前:デフォルトの名無しさん mailto:sage [2008/02/07(木) 16:28:41 ] $ ruby kadai.rb 現在時刻 2008年02月07日 2008年02月07日 生年月日 2000年01月01日 生きてる年数 8年02月19日間 二行目が入力するとこね あと年数計算は一月30日、一年360日で適当だからな
85 名前:デフォルトの名無しさん mailto:sage [2008/02/07(木) 18:15:47 ] で、fpって何の意味?
86 名前:デフォルトの名無しさん mailto:sage [2008/02/07(木) 18:42:14 ] File.open('a.txt', 'w'){|f| f.puts today} と f で書く癖をつけておくと後々幸せになれるかと思われ
87 名前:デフォルトの名無しさん mailto:sage [2008/02/07(木) 19:02:47 ] Rubyだとファイルポインタじゃなくてファイルオブジェクトだからfが妥当な気がすま
88 名前:デフォルトの名無しさん mailto:sage [2008/02/07(木) 22:31:18 ] fp は FILE *fp のことかと。 C言語のころのクセなんだろう Rubyでは意味的に >>87 でいいと思われる
89 名前:デフォルトの名無しさん mailto:sage [2008/02/08(金) 07:55:15 ] ifp と ofp みたいにした場合、単に f にしてると if でかぶるから、 fp にしてるのって俺だけ?
90 名前:デフォルトの名無しさん mailto:sage [2008/02/08(金) 08:23:14 ] 俺はその辺わけてるわ。 >>86 みたいに使い捨ての場合は f、 inとoutがあるばあいは、input、outputとちゃんと書く
91 名前:デフォルトの名無しさん mailto:sage [2008/02/08(金) 11:32:09 ] >>77 ありがとうございます。 これをいくつかに分岐させるとしたら。 while de = gets do if de == 'l' puts 'X' else de =='V' puts 'Y' end てな感じでよいのでしょうか?
92 名前:デフォルトの名無しさん mailto:sage [2008/02/08(金) 11:39:46 ] >>89 inとoutでいいじゃん IOっぽいし長くても3文字だし inやoutをデータ変数名に使ってて紛らわしくなるとか口走ったら百叩きで >>91 Rubyにおいてはif文の連結はelisfを使う あるいはcaseを使ってもいい いちいち聞いてると埒あかないから適当なRuby入門サイトでも見て勉強するといい
93 名前:デフォルトの名無しさん mailto:sage [2008/02/08(金) 13:32:54 ] >>92 はい。 elisf調べてみます。
94 名前:デフォルトの名無しさん mailto:sage [2008/02/08(金) 16:05:16 ] 今ごろ泣いてそうだが elsif な 初心者用解説サイトくらい見ながらやったほうが時間の節約にもなるというのは同意 必要なくなったら忘れりゃいいんだし
95 名前:デフォルトの名無しさん mailto:sage [2008/02/08(金) 18:25:07 ] >>92 > inやoutをデータ変数名に使ってて紛らわしくなるとか口走ったら百叩きで 紛らわしいどころか、inは予約語だよ。
96 名前:デフォルトの名無しさん mailto:sage [2008/02/08(金) 21:49:45 ] for i in (1..3) do puts "inは予約語だお" end
97 名前:デフォルトの名無しさん [2008/02/11(月) 17:08:01 ] プログラム(アルゴリズム)の性能評価をしたいんですが、 Rubyのコード内でメモリ消費量やステップ数の計算・表示はできるんでしょうか? また普通どういう方法でおこなうのでしょうか?
98 名前:デフォルトの名無しさん mailto:sage [2008/02/11(月) 17:28:15 ] それはできません
99 名前:デフォルトの名無しさん mailto:sage [2008/02/11(月) 19:16:24 ] >>97 プロファイリングを使う
100 名前:デフォルトの名無しさん mailto:sage [2008/02/11(月) 19:42:40 ] メモリ消費量やステップ数の表示ってできたか?