[表示 : 全て 最新50 1-99 101- 201- 301- 2chのread.cgiへ]
Update time : 05/09 21:22 / Filesize : 99 KB / Number-of Response : 315
[このスレッドの書き込みを削除する]
[+板 最近立ったスレ&熱いスレ一覧 : +板 最近立ったスレ/記者別一覧] [類似スレッド一覧]


↑キャッシュ検索、類似スレ動作を修正しました、ご迷惑をお掛けしました

Rubyの宿題教えてください。2限目



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 ]
メモリ消費量やステップ数の表示ってできたか?








[ 続きを読む ] / [ 携帯版 ]

次100 最新50 [ このスレをブックマーク! 携帯に送る ] 2chのread.cgiへ
[+板 最近立ったスレ&熱いスレ一覧 : +板 最近立ったスレ/記者別一覧](*・∀・)<99KB

read.cgi ver5.27 [feat.BBS2 +1.6] / e.0.2 (02/09/03) / eucaly.net products.
担当:undef