Rubyの宿題教えてください。2限目
at TECH
1:デフォルトの名無しさん
08/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] その他の制限: (どこまで習っているか、標準ライブラリは使ってはいけない等々)
【アップローダー==ラウンジ】(質問が長い時はココ使うと便利 回答者もコードが長ければここに)
URLリンク(kansai2channeler.hp.infoseek.co.jp)
前スレ
スレリンク(tech板)
Ruby Home Page
URLリンク(www.ruby-lang.org)
Ruby 初心者スレッド Part 16
スレリンク(tech板)
Rubyについて Part 30
スレリンク(tech板)
Ruby on Rails
スレリンク(tech板)
その他 過去スレ・関連スレは >>2-
2:デフォルトの名無しさん
08/01/13 07:05:00
詰め込みすぎた
今は反省している
3:デフォルトの名無しさん
08/01/13 18:01:26
乙
4:デフォルトの名無しさん
08/01/13 23:17:57
>>1
乙
5:デフォルトの名無しさん
08/01/14 21:01:58
スレリンク(tech板:8番)
スレリンク(tech板:9番)
スレリンク(tech板:12番)
スレリンク(tech板:22番)
6:デフォルトの名無しさん
08/01/22 23:07:44
宿題まだぁ?
7:デフォルトの名無しさん
08/01/23 10:39:24
ちんちん
8:デフォルトの名無しさん
08/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:デフォルトの名無しさん
08/01/23 23:28:11
ええええええええええええええええええええええええええ
それ宿題っていうか試験のレベルなのでは…
GooglePagesでできることはやたら多岐にわたるぞ
ユーザーからファイルアップロードとHTML入力を許して
「ユーザー名.サービス.com」なサイトを作らせるシステムを作れってことなのかな
10:デフォルトの名無しさん
08/01/24 00:11:38
金くれるならやるレベル
11:デフォルトの名無しさん
08/01/24 00:23:12
CMSのごく単純なのを作れってことでは。
例としてGooglePagesが挙げられているだけで。
12:デフォルトの名無しさん
08/01/24 00:52:06
>>10
そこをなんとかお願いいたします。m(__)m
>>11
その通りです。Google Pagesはあくまで例とのことです。
言葉足らずで申し訳ありません。
まったく手も足もでない状況です・・・
丸投げで申し訳ありませんが、よろしくお願いいたします。m(__)m
13:デフォルトの名無しさん
08/01/24 01:35:42
ちなみにワンライナーでお願いします
14:デフォルトの名無しさん
08/01/24 02:07:08
デンライナーで勘弁してください
15:デフォルトの名無しさん
08/01/24 20:19:10
とっとりライナーでお願いします
16:デフォルトの名無しさん
08/01/24 21:07:57
ワンライナーで勘弁してください
17:デフォルトの名無しさん
08/01/25 19:12:34
ワカランナイナー
18:デフォルトの名無しさん
08/01/25 21:49:54
やってもいいけど、君はどこ大学?
話はそれからだ。
19:デフォルトの名無しさん
08/01/25 22:14:32
レイルズ使ったこと無いから答えられない
20:8
08/01/26 11:35:03
>>19
じゃあ答えなくて良いです。
他の方よろしくお願いいたします。m(__)m
21:デフォルトの名無しさん
08/01/26 12:18:50
了解
22:デフォルトの名無しさん
08/01/27 14:06:48
URLリンク(rubricks.org)
こいつでいいんじゃね?
23:デフォルトの名無しさん
08/01/27 17:18:38
解決ね。
はい、次の宿題どぞー
24:デフォルトの名無しさん
08/01/28 03:03:18
>>1乙
前スレいつの間に落ちたんだ
>>9
ワロタ
25:デフォルトの名無しさん
08/01/28 03:11:37
Rails tutorial CMSで検索しても以外にない
参考になりそうなところ
Ruby on Rails based CMS in Ruby on Rails
URLリンク(wiki.rubyonrails.org)
26:デフォルトの名無しさん
08/01/28 03:15:33
wikiのtutorialならあるから、それを参考にするのhどう?
wikiもCMSの一種だし
pylori*style: RailsでWikiクローンを作る
URLリンク(tam.qmix.org)
Japan.internet.com デベロッパー - RailsでWikiシステムを作成する
URLリンク(japan.internet.com)
その他参考サイト
RoRのサンプルまとめ - plus ultra blog
URLリンク(ultra.boy.jp)
27:デフォルトの名無しさん
08/01/28 20:03:06
>>8
「金くれたらやるよ」でOK
教授にもう少し勉強しなさいって言っておけ
28:28 ◆B/rqf88wwo
08/01/28 23:57:40
【質問テンプレ】
[1] 授業単元:リダイレクト、正規表現など
[2] 問題文(含コード&リンク):(URLリンク(kansai2channeler.hp.infoseek.co.jp))
[3] 環境
[3.1] OS: (Windows)
[3.2] バージョン: (詳しくは分かりませんが最新のものだと思われます)
[3.3] 言語: (Ruby)
[4] 期限: ([2008年1月30日17:00まで])
[5] その他の制限: (とりあえず正規表現あたりまで)
レポートの期限が明後日に迫って神にもすがる思いです・・・
どなたかお願いします_ _
29:デフォルトの名無しさん
08/01/29 00:07:21
ISBN関連は作ったことあるから回答の半分以上はコピペで済むけど
で、自力ではどこまでできたんだよ
レポートに説明書かないといけないんだから方向くらいは示してくれ
30:デフォルトの名無しさん
08/01/29 00:15:27
とりあえずバージョンの見方ぐらいは覚えておこうな。
ruby -v
31:28 ◆B/rqf88wwo
08/01/29 00:20:38
>>29
「入力が終わりに達するまで1行ずつ読み込む」→while line = gets
「1行分のデータをタイトルと旧ISBN規格のコードを代入する」→split(/,/)
「タイトルをキーとするハッシュをソートする」→.sort!
おそらくこの辺りを使うと思うんですが、全体的な構成が全然見えなくて…
あと「while line = gets」を実行すると「Bad file descriptor」というエラーが出てきてどうも上手くいかないみたいなんです。
32:28 ◆B/rqf88wwo
08/01/29 00:23:29
>>30
これは初めて知りました!
実行してみたら「ruby 1.8.5」と出ました。
33:28 ◆B/rqf88wwo
08/01/29 00:26:08
>>31
正しくは
「1行分のデータをタイトルと旧ISBN規格のコードに分割」→split(/,/)
です
34:デフォルトの名無しさん
08/01/29 00:27:46
ぐぐったら色々出てきた
コーディング規約とか書いてあったけど自分で修正するの?
35:28 ◆B/rqf88wwo
08/01/29 00:52:02
>あと「while line = gets」を実行すると「Bad file descriptor」というエラーが出てきてどうも上手くいかないみたいなんです。
これは自己解決しました!
リダイレクト実行の場合、先頭に「ruby」を付けないとこんなエラーが出るみたいです
36:デフォルトの名無しさん
08/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:デフォルトの名無しさん
08/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
08/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:デフォルトの名無しさん
08/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
08/01/29 01:06:21
あ、Emacsからコピペしたときに変なことに
putsのとこは1行で書いてね
そういえばチェックディジットの計算にはmod使えって書いてあったんだっけ
「下1桁を文字列として取る」とか数学的な計算を思いっきり無視してるなスマン
41:デフォルトの名無しさん
08/01/29 01:12:20
ちょwwwww
同じ学類wwwww
そんくらい自分でやれよ!
単位取れても使えなきゃ意味無いぞ!
42:デフォルトの名無しさん
08/01/29 01:18:19
ちなみにワンライナーでお願いします
43:デフォルトの名無しさん
08/01/29 01:21:04
>>41
使わなけりゃ問題はなかんべ
44:デフォルトの名無しさん
08/01/29 01:23:40
学類ってうちの大学かな・・・
45:デフォルトの名無しさん
08/01/29 01:32:56
他に学群学類なんて分け方をしてる大学があったら教えてくれよ。
…まあ、Rubyの産みの親だしな…
46:デフォルトの名無しさん
08/01/29 01:34:12
担当の教官の人がruby-listに投稿したような形跡はあるから、案外ここも見てるかもね
>>44
Tくば大学のハルヒキャンパスだそうな
いや意表ついて本当にハルヒって読むんだったらぼかしにも何にもなってなくてスマンが
47:デフォルトの名無しさん
08/01/29 01:38:26
自力で解説つけろという指定はコピペ可能な提出物の扱いに慣れてる感じがしてさすがに安定感があるな
他の大学でしょぼいとこは真似っこしてみるといいと思う
48:デフォルトの名無しさん
08/01/29 01:44:30
>>46
安心しろ、読み方違うから。
でもしょっちゅうネタになってる…orz
しかし俺の書いたのの半分くらいで作られると、自分の技量の無さがいやと言うほど判って悲しくなってくるぜ
49:デフォルトの名無しさん
08/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:デフォルトの名無しさん
08/01/29 01:54:59
>>48
調べながら書いたので技量はたいしたことない
whileとgetsの使い方なんてエラー出たからマニュアル見て書き換えたくらいで全く覚えてないぞ
51:デフォルトの名無しさん
08/01/29 01:55:43
課題曰く、「可読性も採点対象」だそうな
52:デフォルトの名無しさん
08/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:デフォルトの名無しさん
08/01/29 03:25:27
アルファベット順にソートすんのわすれたけど面倒くさいからもういいぜ
54:デフォルトの名無しさん
08/01/29 03:27:55
最後らへんのputsを削除して
ARGF.each do ... end を puts ARGF.map do ... end.sort
にするだけな気がするけど面倒くさいから試さないぜ
55:デフォルトの名無しさん
08/01/29 11:47:07
>>47
>>37-38をコピペしたら「本当はわかってない」のが丸わかりだろうな
コメントや解説の強制はなかなか効果的だ
56:28 ◆B/rqf88wwo
08/01/29 11:48:04
>>36-39
>>52
みなさんありがとうございます!
大変助かりました。
大いに参考にさせていただきます!
57:デフォルトの名無しさん
08/01/29 12:10:05
>>55
でもまあ動作するスクリプトが目の前にあれば自力ででも作りやすいだろ
コピペで済ますのも自由だしな
58:デフォルトの名無しさん
08/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:デフォルトの名無しさん
08/01/29 18:00:30
おらすうがくっちゅーもんがかいもくわからんですたい。
60:デフォルトの名無しさん
08/01/30 03:13:17
どこが分らんのか分らん。単なるベクトルの計算を地道にやればいいんじゃないの?
require'matrix'してVectorクラス使ってみれば。あとはmathnとか必要に応じて
dj*qは(dj.covector*q)[0]くらいでいけるんじゃね
61:デフォルトの名無しさん
08/01/30 03:27:39
ああ内積のメソッドあったわ・・・
dj*q=dj.inner_product(q)
絶対値もあったわ・・・
(Σ_[i=1, m] dij^2)^(1/2)=dj.r
62:デフォルトの名無しさん
08/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:デフォルトの名無しさん
08/02/02 00:05:56
問題がよくわからない。
「2008年02月02日」をテキストファイルAに出力し、
コマンドラインから「2008年02月02日」とか入力して、
テキストファイルAに「2008年02月02日」という行があったら
それをテキストファイルBにコピーするという意味か?
どういう処理なんだかよくわからない。
あと何がうまくいかないんだかよくわからないから
うまくいかないソースを提示したらどうだ。
丸投げで全部書いてくれってのはよくない。
64:デフォルトの名無しさん
08/02/02 00:41:28
ハルヒキャンパスでこのスレ一番上にくるwwwwwワロス
>>49すげえw
65:デフォルトの名無しさん
08/02/02 00:51:09
ていうかハルヒキャンパスなんて名称を聞くと
時代だなあ・・・って思ってしまう
俺のいたころ(つっても数年前だが)には
まだハルヒとかなかったもんな
66:デフォルトの名無しさん
08/02/02 06:57:38
>>63
いや、そのまんまの処理だと思うが…
たった1行書き出してたった1行読み込んでたった1行マッチさせてたった1行を再書き出し
もっと実利に即したわかりやすい課題にしろよとは思うが適当に課題出せばこんなもんだろ
>>62
クラスとメソッドを自力で定義してよいという課題な時点で回答は無限に存在する
ぜんぜん理解できないスゴい代物が返ってくる可能性があるので、
どの部分をクラスにしてどの部分をメソッドにする気なのか口頭でいいから教えてちょ
67:デフォルトの名無しさん
08/02/02 07:03:00
って、期限過ぎちゃったのか
68:デフォルトの名無しさん
08/02/02 07:30:00
てか、ギリギリしぎだろw
69:デフォルトの名無しさん
08/02/02 07:58:30
こりゃ課題出した先生が悪い
だってつまんないんだもん^^;
70:デフォルトの名無しさん
08/02/06 17:12:21
>>66
ありがとうございます。
初心者ですみません><
どの部分をクラス、メソッドにすれば一番理解しやすいものに
なるのでしょうか。解説つけることも課題の内なので、理解しやすいもので
お願いします。
「どの部分をクラスにしてどの部分をメソッド」というのにすごく驚きました。
そんなに無限にできるのですか?@@
71:デフォルトの名無しさん
08/02/06 20:26:05
>>70
ひとつポリシーの質問なんだが
2000年6月15日に生まれて、今日が
2001年9月20日だった場合、生きてる期間は1年と3月と5日だよな
じゃあ今日が
2001年3月14日だった場合は何年と何月と何日だと思う?
72:デフォルトの名無しさん
08/02/06 22:01:44
年月日の引き算は意外とめんどい
そのぶん、普段頭の中でやってる計算をプログラムとして書き下すという訓練には適してるけど
73:デフォルトの名無しさん
08/02/06 22:06:09
閏年とか計算するともうね。
74:デフォルトの名無しさん
08/02/07 10:17:58
>>71
すみません。
うるう年とか、31日とかは気にせず、30日で
計算で大丈夫です。
75:sage
08/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:デフォルトの名無しさん
08/02/07 11:01:34
1は、その代入で、de というローカル変数が存在するようにしている、
2は、de が指している文字列オブジェクトが参照されなくなるようにしている、
のだと思う。
77:デフォルトの名無しさん
08/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:デフォルトの名無しさん
08/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:デフォルトの名無しさん
08/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:デフォルトの名無しさん
08/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:デフォルトの名無しさん
08/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:デフォルトの名無しさん
08/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:デフォルトの名無しさん
08/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:デフォルトの名無しさん
08/02/07 16:28:41
$ ruby kadai.rb
現在時刻 2008年02月07日
2008年02月07日
生年月日 2000年01月01日
生きてる年数 8年02月19日間
二行目が入力するとこね
あと年数計算は一月30日、一年360日で適当だからな
85:デフォルトの名無しさん
08/02/07 18:15:47
で、fpって何の意味?
86:デフォルトの名無しさん
08/02/07 18:42:14
File.open('a.txt', 'w'){|f| f.puts today}
と f で書く癖をつけておくと後々幸せになれるかと思われ
87:デフォルトの名無しさん
08/02/07 19:02:47
Rubyだとファイルポインタじゃなくてファイルオブジェクトだからfが妥当な気がすま
88:デフォルトの名無しさん
08/02/07 22:31:18
fp は FILE *fp のことかと。 C言語のころのクセなんだろう
Rubyでは意味的に >>87でいいと思われる
89:デフォルトの名無しさん
08/02/08 07:55:15
ifp と ofp みたいにした場合、単に f にしてると if でかぶるから、
fp にしてるのって俺だけ?
90:デフォルトの名無しさん
08/02/08 08:23:14
俺はその辺わけてるわ。
>>86みたいに使い捨ての場合は f、
inとoutがあるばあいは、input、outputとちゃんと書く
91:デフォルトの名無しさん
08/02/08 11:32:09
>>77
ありがとうございます。
これをいくつかに分岐させるとしたら。
while de = gets do
if de == 'l'
puts 'X'
else de =='V'
puts 'Y'
end
てな感じでよいのでしょうか?
92:デフォルトの名無しさん
08/02/08 11:39:46
>>89
inとoutでいいじゃん
IOっぽいし長くても3文字だし
inやoutをデータ変数名に使ってて紛らわしくなるとか口走ったら百叩きで
>>91
Rubyにおいてはif文の連結はelisfを使う
あるいはcaseを使ってもいい
いちいち聞いてると埒あかないから適当なRuby入門サイトでも見て勉強するといい
93:デフォルトの名無しさん
08/02/08 13:32:54
>>92
はい。
elisf調べてみます。
94:デフォルトの名無しさん
08/02/08 16:05:16
今ごろ泣いてそうだが elsif な
初心者用解説サイトくらい見ながらやったほうが時間の節約にもなるというのは同意
必要なくなったら忘れりゃいいんだし
95:デフォルトの名無しさん
08/02/08 18:25:07
>>92
> inやoutをデータ変数名に使ってて紛らわしくなるとか口走ったら百叩きで
紛らわしいどころか、inは予約語だよ。
96:デフォルトの名無しさん
08/02/08 21:49:45
for i in (1..3) do puts "inは予約語だお" end
97:デフォルトの名無しさん
08/02/11 17:08:01
プログラム(アルゴリズム)の性能評価をしたいんですが、
Rubyのコード内でメモリ消費量やステップ数の計算・表示はできるんでしょうか?
また普通どういう方法でおこなうのでしょうか?
98:デフォルトの名無しさん
08/02/11 17:28:15
それはできません
99:デフォルトの名無しさん
08/02/11 19:16:24
>>97 プロファイリングを使う
100:デフォルトの名無しさん
08/02/11 19:42:40
メモリ消費量やステップ数の表示ってできたか?
101:デフォルトの名無しさん
08/02/11 19:48:57
URLリンク(builder.japan.zdnet.com)
これ?
102:デフォルトの名無しさん
08/02/11 20:01:33
お、なんぞこれ、と思ったがgem提供か
gem install なんとか で
Bulk updating Gem source index for: URLリンク(gems.rubyforge.org)
と表示して数分止まるのはどうにかならんもんかね
っていうかこのとき何してるんだ
103:デフォルトの名無しさん
08/02/11 21:04:53
>>102
gem遅いよねえ
たぶん、毎回、URLリンク(gems.rubyforge.org) からYAMLまるごともってきてるからだと思う。
gems鯖側でDBにしてクエリーなげればいいんだろうけどな
104:デフォルトの名無しさん
08/02/11 21:08:35
> URLリンク(gems.rubyforge.org)
スゲエ
スクロールしてもスクロールしても先が見えねえ
105:デフォルトの名無しさん
08/02/11 21:24:37
せめて圧縮するとか
106:デフォルトの名無しさん
08/02/11 21:45:48
$ wget -S --spider URLリンク(gems.rubyforge.org)
--21:43:05-- URLリンク(gems.rubyforge.org)
=> `yaml'
gems.rubyforge.org をDNSに問いあわせています... 205.234.109.19
gems.rubyforge.org[205.234.109.19]:80 に接続しています... 接続しました。
HTTP による接続要求を送信しました、応答を待っています...
1 HTTP/1.1 200 OK
2 Date: Mon, 11 Feb 2008 12:43:08 GMT
3 Server: Apache
4 Last-Modified: Mon, 11 Feb 2008 10:24:05 GMT
5 ETag: "698ba3-f43fad-445df56e95b40"
6 Accept-Ranges: bytes
7 Content-Length: 16007085
8 Keep-Alive: timeout=3, max=100
9 Connection: Keep-Alive
10 Content-Type: text/plain
200 OK
むっちゃプレーンめっちゃプレーン
プレーン以外の選択肢がない…えーと、じ、16MB…?
107:デフォルトの名無しさん
08/02/11 22:04:09
>>104
ワロス
どっかの円周率のサイト思い出した
108:デフォルトの名無しさん
08/02/12 00:47:18
gemが数十ていどだったときは良かったんだけどね。
そろそろgentooのportageみたいに細かく分ける方式にしたほうがいいね。
109:デフォルトの名無しさん
08/02/12 20:53:12
>>104
HAHAHA!
こいつはクレイジーだぜ!
開いただけでfirefoxが112MBもメモリ喰ってる
110:デフォルトの名無しさん
08/02/14 09:52:31
>107
円周率のサイトは無限に続いてたんだっけ?
111:デフォルトの名無しさん
08/02/14 09:58:25
現在の記録、確か1兆桁越えてたっけ?
無限じゃないにしろ、ふつう表示しきれない。
112:デフォルトの名無しさん
08/02/15 01:54:15
宿題かもーん。
113:デフォルトの名無しさん
08/02/15 13:49:30
せっかくだし初学者にもためになるゲームでも作りながら待機しようぜ
114:デフォルトの名無しさん
08/02/15 14:22:44
じゃんけんは前スレで作ったな
○×ゲームも作った覚えがある
3分タイマーとかも作ったっけか
115:デフォルトの名無しさん
08/02/15 17:18:33
オセロとか?
116:デフォルトの名無しさん
08/02/15 18:10:29
Matz並べ
117:デフォルトの名無しさん
08/02/16 03:03:06
やっぱまだまだRubyを教材に使う学校は少ないのかねぇ。
118:デフォルトの名無しさん
08/02/16 03:19:25
鳥取大学もプログラミングの講義の1つにRubyを使ってたけどカリキュラム変更で無くなった><;
CGI使ったクライアント<->サーバの実習みたいなのではRuby使ったけど。
119:デフォルトの名無しさん
08/02/16 03:54:13
>>116
先手、Matzで
Ruby│ │
─┿─┿─
│ │
─┿─┿─
│ │
120:デフォルトの名無しさん
08/02/16 04:18:27
Ruby│Rutile │
─┿──┿─
│ │
─┿──┿─
│ │
121:デフォルトの名無しさん
08/02/16 13:33:10
Ruby│Rutile │
─┿──┿─
│Ruby │
─┿──┿─
│ │
122:デフォルトの名無しさん
08/02/16 13:35:07
Ruby│Rutile │
─┿──┿─
│Ruby │
─┿──┿─
│ │ Ruby
123:デフォルトの名無しさん
08/02/16 13:36:14
Ruby│Rutile │
─┿──┿─
│Rutile │
─┿──┿─
│Rutile │
124:デフォルトの名無しさん
08/02/16 14:19:13
URLリンク(ruby-sapporo.org)
125:デフォルトの名無しさん
08/02/16 16:20:38
>>124 thx
126:デフォルトの名無しさん
08/02/16 18:19:24
Hi all.
What is Rutile??
I don't know.
127:デフォルトの名無しさん
08/02/18 02:23:54
>126
ルビーもルチルも宝石名かつBL誌名
128:デフォルトの名無しさん
08/02/19 07:13:52
>>127
Thanks. I like BL too.
u r a best friend.
129:デフォルトの名無しさん
08/02/20 00:06:31
宿題かもーん。
130:デフォルトの名無しさん
08/02/23 18:49:39
[1] 授業単元:2chの書き込み(よくわからないけどこれでいいのかな)
[2] 問題文(含コード&リンク):net/httpで2chに書き込むソースを作ってください。こちらも作っていますが日付関連でうまくいきません。
cookieが expires=Friday, 01-Jan-2010 00:00:00 GMT; ですごいおかしいです。
[3] 環境
[3.1] OS:Mac,Bash
[3.2] バージョン:Ruby1.8.2
[3.3] 言語: Ruby
[4] 期限:無期限。できれば日曜まで
[5] その他の制限: net/httpを使ってください、コメントありで,UTF8。kconvを使って変換してください。
131:デフォルトの名無しさん
08/02/23 18:55:37
>>130
そんな2ch的に危なっかしいものこっちからホイホイ出せるか(w
あと、Cookieとか2chとかに関する勉強が足りないように見える
それのどこがそんなにおかしいのかさっぱりわからない
132:デフォルトの名無しさん
08/02/23 19:01:18
>>131
ERROR:ブラウザを立ち上げ直してみてください。
とりあえず,
Set-CookiesをそのまんまCookiesヘッダにセットしないで、
Datを取得したときのDateヘッダーをexpiresにセットしても同じで、
expiresを消去しても無効。
どうすればいいんだろうか
133:デフォルトの名無しさん
08/02/23 19:29:46
>>132
> とりあえず
なんでそんなこと場当たり的に試す必要があるんだよ
2chへの書き込み方法はきちんと形式が決まってるだろ
134:デフォルトの名無しさん
08/02/23 19:49:37
1.8.2って何かバグあったっけ?
書き込むがShiftJISでないのに一票
135:デフォルトの名無しさん
08/02/23 20:15:39
>>130
> [1] 授業単元:2chの書き込み(よくわからないけどこれでいいのかな)
この問題は、自力で解決できないやつは質問不可。
136:デフォルトの名無しさん
08/02/23 20:29:33
できたです。
Cookieじゃなくて、POSTのtimeがおかしかった模様。
すいません><
ちなみにKConv.tosjisつかってます
最初はURL間違ってたとかで初歩的だった。
それをなおしたらこれだったんだけど。
Rubyでlocaltimeというの?microtimeだっけ?取得するのはどうやるんだろう
137:デフォルトの名無しさん
08/02/23 21:09:16
>>30
2chブラウザ開発資料
URLリンク(info.2ch.net)
2ちゃんねるの仕様
URLリンク(www.monazilla.org)
Rubyで書かれた2chブラウザ(古いので鼻捥げには未対応と思われ)
URLリンク(www.unixuser.org)
138:デフォルトの名無しさん
08/02/24 06:04:08
2chブラウザでも作ってるっていうんだろうが、
スクリプトで2ch書き込みって時点で危なっかしくて答えられねえよw
139:デフォルトの名無しさん
08/02/24 06:31:39
GoRuaってRubyの2ちゃんブラウザのコードを読んでみれば?
140:140 ◆.DxfZ0s0HA
08/02/26 20:20:04
【質問テンプレ】
[1] 授業単元:GUI等
[2] 問題文(含コード&リンク):(URLリンク(www.dotup.org))
[3] 環境
[3.1] OS: (Windows)
[3.2] バージョン: (1.8.5)
[3.3] 言語: (Ruby)
[4] 期限: ([2008年2月29日17:00まで])
[5] その他の制限: (必ずGUIを用いる)
途中できたところまでのソースも入れてあります。
どうしてもGUIを用いる段階で引っかかっています。
よろしくお願いします。
141:28 ◆B/rqf88wwo
08/02/26 20:20:42
ちなみに>>140のDLパスは「rep」です。
142:デフォルトの名無しさん
08/02/26 20:29:50
tk使うんじゃねか
143:デフォルトの名無しさん
08/02/26 20:33:10
ま
た
○
く
ば
の
ハ
ルヒか
授業見てねーからGUIに何使ってるかわからんので答えられないぞ
しかし微妙にレベルがハイで面白そうな演習してるな
144:140 ◆.DxfZ0s0HA
08/02/26 20:45:19
>>142-143
GUIにtk使うことは確実なんですが…
上手く動作しませんがフォーマットだけはなんとか作れました。
あとはこれで動作するようになればいいのですが…
URLリンク(www.dotup.org)
DLパス:rep
145:デフォルトの名無しさん
08/02/26 23:58:09
これ自分で書いたコード?
見栄えはきっちり書いてるみたいなのにチグハグなところがいっぱいあるんだけど。
146:140 ◆.DxfZ0s0HA
08/02/27 00:10:49
>>145
前に自分で書いた2つの別のコードを組み合わせて作りました。
一部整合性つけるために直した(defの部分など)つもりなんですが…
あとどこを直せば上手く動くのかが見当つかなくて…
147:デフォルトの名無しさん
08/02/27 00:45:33
URLリンク(www2.uploda.org)
定義した関数が
in:標準入力
out:標準出力
のままじゃん
in: 検索語
out: 検索結果
に変更汁
148:デフォルトの名無しさん
08/02/27 00:52:15
ていうかGUIは一旦忘れたほうがいい
引数を受け取って結果を返すメソッドとか作れ
メソッドを作った後にボタン押すと引数が入って結果が画面に表示されるように切り替えればいい
そんな丁寧にやってたら間に合わないかもしれないけれど
149:デフォルトの名無しさん
08/02/27 09:31:30
>>140
# 1/2 : GUI 構築
require 'tk'
label = TkLabel.new(nil,:text=>'検索文字列入力')
label.pack(:side=>:top,:fill=>:x)
$entry = TkEntry.new(nil)
$entry.value = '検索文字列を入力'
$entry.pack(:side=>:top,:fill=>:x)
meta = TkButton.new(nil,:text=>'メタデータから検索')
meta.pack(:side=>:top)
text = TkButton.new(nil,:text=>'本文全体から検索')
text.pack(:side=>:top)
view = TkButton.new(nil,:text=>'ファイルの中身を表示')
view.pack(:side=>:top)
scr = TkScrollbar.new(nil)
$text = TkText.new(nil)
scr.command = '%s yview'%$text.path
$text.yscroll = '%s set'%scr.path
scr.pack(:side=>:left,:fill=>:y)
$text.pack(:side=>:left,:fill=>:both)
# 後半へ続く
150:デフォルトの名無しさん
08/02/27 09:33:10
>>140
# 2/2 真ん中のボタンの処理 : メインループ
text.command = proc {
$text.delete('1.0',:end)
pattern = $entry.value
re = Regexp.new(pattern)
Dir.glob('*.txt') do |filename|
file = File.read(filename)
if file =~ re
meta = file.split("\r\n")[0,2]
meta << filename
$text.insert(:end,meta.join(','))
$text.insert(:end,"\n")
end
end
}
# 上下のボタンは自分で作れるだろ?
meta.command = nil
view.command = nil
#
Dir.chdir('/tmp/aozora')
Tk.mainloop
# 以上
151:149-150
08/02/27 11:22:58
いくつか訂正
・Tk---.new(nil,...) の nil を削除(あっても問題ないけど)
・テキストとスクロールバーを同期させる部分
scr.command $text.yscroll -> $text.yscrollbar(scr)
・実害はないけど被ってる変数名(metaとか)は適当に変更
あと青空文庫からテキスト落してみたけど、作品によって題名、
著者名(、原題、副題、翻訳者等)の並びが違う
検索結果が期待した表示にならないケースが結構あると思う
152:その1/2 Viewクラス(ユーザーインターフェースの役割)
08/02/27 11:45:22
#!ruby -Ks
require "tk"
class View
def initialize
TkRoot.new(:title=>"宿題")
@briefLabel = TkLabel.new(:text=>"検索文字列入力")
@InputEntry = TkEntry.new(:textvariable=>"検索文字列を入力")
@searchMetaButton = TkButton.new(:text=>"メタデータから検索")
@searchBodyButton = TkButton.new(:text=>"本文全体から検索")
@displayFileButton = TkButton.new(:text=>"ファイルの中身を表示")
@scrollbar = TkScrollbar.new
@resultTextArea = TkText.new
@resultTextArea.yscrollbar(@scrollbar)
@resultTextArea.font = TkFont.new({:family=>"MS Pゴシック", :size=>12})
self.pack
return self
end
def pack
@briefLabel.pack( :side=>:top, :fill=>:x)
@InputEntry.pack( :side=>:top, :fill=>:x)
@searchMetaButton.pack( :side=>:top, :fill=>:x)
@searchBodyButton.pack( :side=>:top, :fill=>:x)
@displayFileButton.pack(:side=>:top, :fill=>:x)
@scrollbar.pack( :side=>:right, :fill=>:y)
@resultTextArea.pack( :side=>:bottom, :fill=>:both, :expand=>true)
end
def connect(outlet, action)
outlet.command = proc{method(action).call}
end
end
153:その2/2 Controllerクラス(UIと手続きの関連付け)
08/02/27 11:46:57
class Controller < View
def initialize
super
connect(@searchMetaButton, :searchMeta)
connect(@searchBodyButton, :searchBody)
connect(@displayFileButton, :displayFile)
end
def searchMeta
pattern = @InputEntry.textvariable.value
result = ""
Dir.glob("**.rb"){|filename|
io = File.open(filename)
title = io.gets.chomp; author = io.gets.chomp
io.close
result << "#{title} #{author} #{filename}\n" if author.include?(pattern)
}
@resultTextArea.value = result
end
def searchBody
puts "ここに処理を書くよ"
@resultTextArea.value = "ここに処理を書くよ"
end
def displayFile
filename = @InputEntry.textvariable.value
text = File.open(filename){|io|io.read} if FileTest.exist?(filename)
@resultTextArea.value = text
end
end
# メイン処理
Controller.new
Tk.mainloop
154:デフォルトの名無しさん
08/02/27 13:39:56
なるほど、「乗っかってる」ようなイメージで継承使ってるのね
Tk部品部分と内部検索処理部分でどうやってデータ受け渡そうかとか悩むのが軽減される
155:140 ◆.DxfZ0s0HA
08/02/27 17:32:44
>>147-153
皆さん本当にありがとうございます!
ところで>>149-150は最初のdefの後に続ければいいのでしょうか?
156:149-
08/02/27 18:13:30
>>155
>>149 と >>150 を連結して ruby -Ks 149+150.rb で実行できるはず
最初の def てのは r2-1.rb の fileread のことかな?
適当に書き換えて「メタデータで検索」の中身に使うといいよ
>>153
Controller 内のメソッドは文字列を返すだけにして
connect で定義する proc を
{
input_string = @InputEntry.textvariable.value
@resultTextArea.value = method(action).call(input_string)
}
にすれば tk を分離できるね
157:140 ◆.DxfZ0s0HA
08/02/27 20:33:54
>>156
とりあえず、>>149と>>150を連結してそのまま実行してみたんですが「本文全体検索」は問題なく実行できました。
ただ、「メタデータから検索」ができないんですけどどのようにすればよいのでしょうか…?
あと
>・テキストとスクロールバーを同期させる部分
>scr.command $text.yscroll -> $text.yscrollbar(scr)
の部分はどこに挿入すればいいのでしょうか?
158:デフォルトの名無しさん
08/02/27 21:00:07
少しは自分で考えとかないと、これからの課題の負担が膨大になるぞ
俺たちは授業受けてないんだから、自分からテンプレートくらい出せないと
「明らかに授業と違うプログラム」を提出し続ける羽目になる
それがどう評価されるかは自明だ
てか、改造する心の余裕くらいは持ってほしい所存
159:デフォルトの名無しさん
08/02/27 21:03:10
Ruby/Tkは同じ処理で書き方が山のようにあるから、授業で受けた形式に整えておかないと不審
>>157
それぞれがどういう処理してるかは読める?
160:140 ◆.DxfZ0s0HA
08/02/27 21:10:33
>>159
はい、なんとなくは…
meta.command(上のボタンの処理)とview.command(下のボタンの処理)に付け加える
必要があることは分かります。
ただそのままここでdefを使用しても動作しないみたいで…
161:デフォルトの名無しさん
08/02/27 21:18:36
Ruby/Tkの部品に対する動作、commandはProcオブジェクトである必要がある
defで定義したメソッド名をそのまま指定しても動作しない
Proc.new{ }の中身はいわゆるふつーのRubyスクリプトでよい
変数は「その場」で有効なスコープの変数が使える
どうでもいいけど$entryとか$textとかはグローバル変数でなくてもいいような希ガス
meta.command = Proc.new{ metasearch($entry.value) }
...
def metasearch(search_str)
# search_strをてきとうにけんさく
end
162:デフォルトの名無しさん
08/02/27 21:31:12
てか、metasearchを実行するたびに全ファイルを読み込むのは非常にアレだな
課題として可能なら起動時に@databaseとかにメタデータ部分を保管しておくといいのかもしれん
163:140 ◆.DxfZ0s0HA
08/02/27 22:00:12
>>161
def search(pattern)
result = ""
Dir.glob("//kikyo/home1/saka/pub/data/aozora-portion/*_*_*.txt){|filename|
io = File.open(filename)
title = io.gets.chomp
author = io.gets.chomp
io.close
result << "#{title} #{author} #{filename}\n" if author.include?(pattern)
}
return result
end
meta.command = Proc.new{search($entry.value)
pattern = $entry.value
label.text(pattern)
text.value = search(pattern)
}
これを>>149-150に新たに付け加えてみたのですが上手く動作しません…
どこがおかしいのでしょうか?
164:デフォルトの名無しさん
08/02/27 22:32:26
>どうでもいいけど$entryとか$textとかはグローバル変数でなくてもいいような希ガス
あれ?ほんとだ、なに勘違いしてたんだろ
>>163
saerch を二回呼んでるのは御愛嬌として
・Tk.mainloop 以下の記述は無効(未処理)
・ファイル名が glob のワイルドカードと一致していない
・文字コードが sjis に統一されていない
・副題、原題等がある時 search は正しく動作しない
くらいかな
165:140 ◆.DxfZ0s0HA
08/02/27 22:49:46
>>164
やっぱりここでdefは使わない方がいいのでしょうか…?
混乱してきましたw
166:140 ◆.DxfZ0s0HA
08/02/27 23:04:13
>>158
ちなみに普段の授業ではこういう形式で習っています。
以下はプログラムの1例です。
#! ruby -Ks
require("tk")
def fileread(filename)
io = open(filename, "r")
str = ""
while line = io.gets
str.concat(line)
end
io.close
return str
end
label = TkLabel.new
label.text("ここにファイル名が表示されます")
label.fg("black")
label.pack("fill"=>"x")
button.text("ファイル読み出し")
……
……
……
button.command{
filename = entry.value
label.text(filename)
text.value = fileread(filename)
}
Tk.mainloop
167:デフォルトの名無しさん
08/02/27 23:10:08
defはそのメソッドの使用前の部分にまとめておけ
Tkのパーツに対する初期的指示はTkナントカ.newから.packの間に書いておけ
あと、メソッド単体でも動作するようにしてからTkに組み込め
どこでエラーが発生してるのかわけがわからなくなるから
それと、手を抜くためにも授業は受けておけ
授業を受けておけば授業込みで3時間くらいでパクれるものが、授業を聞かないがために1日以上掛かる
次ページ最新レス表示スレッドの検索類似スレ一覧話題のニュースおまかせリスト▼オプションを表示暇つぶし2ch
5388日前に更新/99 KB
担当:undef