[表示 : 全て 最新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-

175 名前:デフォルトの名無しさん mailto:sage [2008/02/28(木) 13:33:18 ]
その講義のWebサイト読んでみたんだがC言語をせずにいきなりRubyからやってる感じだな
Ruby特有の記述をバリバリ使うんじゃなくて、どの言語でも通用するような書き方で書いてる雰囲気が漂ってくる
だから#eachとか使わずwhileで回したりしてるとおもふ

176 名前:140 ◆.DxfZ0s0HA [2008/02/28(木) 13:34:41 ]
>>174
すいません!
文字列閉じはここに書き写すときに抜け落ちました。
実際はあるんですが、それでも上手く動作しないんです。

あとブロックつきとか何のことか分からないです…

177 名前:140 ◆.DxfZ0s0HA [2008/02/28(木) 13:41:29 ]
www.dotup.org/uploda/www.dotup.org3429.zip.html

DL Pass:rep

とりあえず現段階のプログラムリストをアップいたします。
どこかおかしい所があれば修正お願いいたします。

178 名前:デフォルトの名無しさん mailto:sage [2008/02/28(木) 16:03:02 ]
>>175
感じも何も、いきなりRubyだ
初めての言語がRubyってどうなんだろうな

179 名前:デフォルトの名無しさん mailto:sage [2008/02/28(木) 16:14:39 ]
Cの知識の上にRubyがこないとギクシャクすると思う。

180 名前:デフォルトの名無しさん mailto:sage [2008/02/28(木) 16:30:02 ]
>>178
別に問題はない
きちんとRubyとして教えられてさえいれば
CやBASICのようにRubyを教えるというのは最悪な使われ方

流行のスクリプト言語以外に移ったときには確実に戸惑うが、そんなのはどの言語でも同じだしな

>>177
とりあえず、変数の意味を考えれ
正確なRubyとは違うが
$entry = TkEntry.new()
とnewで定義されてる$entryは「特定のTkの部品TkEntry」を指している
だから、$entry.valueというのはこのTkEntry(一行入力欄)のvalue(テキスト的内容の値)を指している
で、Tkのややこしいとこはデータの取得と再指定が同じ書き方だということだ
entry.value = 'ここが入力欄だよ!'
と書けばentryの入力欄に「ここが入力欄だよ!」と表示されるし
input_text = entry.value
と書けば変数input_textに「現在entryに表示されてる文字列」が入る

で、何が言いたいかというと、36行目の「text.value」でエラーが起きてる
text.valueはtextで示されるTk部品の内容を指してるが、textというTk部品はTkButtonだ

とりあえず、ボタンはボタンらしい変数名にしたほうがいいぞ
metasearch_button = TkButton.new(:text=>'メタデータから検索')
とかいう書き方にすれば、変数の名前見ただけでボタンだってわかるし、
ボタンのvalueにsearch(pattern)の結果を渡すというのがそもそも変だってわかるだろ

181 名前:デフォルトの名無しさん mailto:sage [2008/02/28(木) 17:10:09 ]
require 'tk'

label = TkLabel.new(:text=>'検索文字列入力')
label.pack(:side=>:top,:fill=>:x)
entry = TkEntry.new()
entry.value = '検索文字列を入力'
entry.pack(:side=>:top,:fill=>:x)
metasearch_button = TkButton.new(:text=>'メタデータから検索')
metasearch_button.pack(:side=>:top)
textsearch_button = TkButton.new(:text=>'本文全体から検索')
textsearch_button.pack(:side=>:top)
view_button =TkButton.new(:text=>'ファイルの中身を表示')
view_button.pack(:side=>:top)
scrollbar = TkScrollbar.new()
textfield = TkText.new()
scrollbar.command ='%s yview'%textfield.path
textfield.yscroll = '%s set'%scrollbar.path
scrollbar.pack(:side=>:left,:fill=>:y)
textfield.pack(:side=>:left,:fill=>:both)

def metasearch(pattern)
result = Array.new
# Dir.glob("//kikyo/home1/saka/pub/data/aozora-portion/*_*_*.txt"){|filename|
Dir.glob("data/*_*_*.txt"){|filename|
io = File.open(filename)
title = io.gets.chomp
author = io.gets.chomp
io.close
result << "#{title} #{author} #{filename}" if author.include?(pattern)
}
return result
end

182 名前:デフォルトの名無しさん mailto:sage [2008/02/28(木) 17:10:51 ]
metasearch_button.command = Proc.new{
pattern = entry.value
searchresult = metasearch(pattern)
# searchresult's format is [ "title1 author1 filename1", "title2 author2 filename2", ...]
textfield.value = searchresult.join("\n")
label.text = "#{pattern} は #{searchresult.size}件見つかりました"
}

def textsearch(pattern)
result = Array.new
# Dir.glob("//kikyo/home1/saka/pub/data/aozora-portion/*_*_*.txt"){|filename|
Dir.glob("data/*_*_*.txt"){|filename|
io = File.open(filename)
title = io.gets.chomp
author = io.gets.chomp
file = io.read # 最初の2行はio.gets×2で通り過ぎたあとなのでfileの中身に注意
io.close
puts file
result << "#{title} #{author} #{filename}" if file.include?(pattern)
}
return result
end

textsearch_button.command = Proc.new {
textfield.delete('1.0',:end)
pattern = entry.value
searchresult = textsearch(pattern)
textfield.value = searchresult.join("\n")
label.text = "#{pattern} は #{searchresult.size}件見つかりました"
}
#Dir.chdir('//kikyo/home1/saka/pub/data/aozora-portion')
Tk.mainloop

183 名前:デフォルトの名無しさん mailto:sage [2008/02/28(木) 17:30:17 ]
どんどんレベルが落ちていくな(w

クラスとメソッドとかの授業はしてないのかしら
ブロックつきメソッドとか



184 名前:140 ◆.DxfZ0s0HA mailto:sage [2008/02/28(木) 20:22:25 ]
>>180-182
ご丁寧にありがとうございますm(_ _)m
ようやく全ての機能を満たしたプログラムの完成にこぎつけられました。

ちなみにmetasearchのメソッドのところではタイトルと著者名両方から検索しろとのことだったので
「||」を使ったのですがそれで問題ないみたいです。

とにかく変数がやたらと出てきたのがまず混乱の元だったと思います。。
def部分とその他は分けて考えたほうが良さそうですね・・・

185 名前:デフォルトの名無しさん mailto:sage [2008/02/29(金) 00:08:12 ]
なにはともあれ、お疲れさん。

186 名前:デフォルトの名無しさん mailto:sage [2008/03/01(土) 00:34:43 ]
宿題かもーん。

187 名前:デフォルトの名無しさん [2008/03/01(土) 23:12:32 ]
ファイル読み込みの一番簡単な方法は、
s = IO.read "foobar.txt"
でいいですよね。

書き込みも一発でできないのかな?
これくらい?
open("foobar.txt", "w") {|f| f.write s}

188 名前:デフォルトの名無しさん mailto:sage [2008/03/01(土) 23:18:12 ]
ruby unko.rb > foobar.txt

189 名前:デフォルトの名無しさん mailto:sage [2008/03/01(土) 23:52:40 ]
まあ、あっても面白いとは思うけどね
そんなこと言ったらread()という関数的メソッドがあってもいいし

190 名前:デフォルトの名無しさん mailto:sage [2008/03/02(日) 13:26:35 ]
cat foobar.txt > unko.rb

191 名前:デフォルトの名無しさん mailto:sage [2008/03/23(日) 16:53:38 ]
>>188
日本語でおk

192 名前:デフォルトの名無しさん mailto:sage [2008/03/23(日) 17:06:50 ]
ルビー う○こ ぽち るび だいなり なんたら ぽち テキスト

193 名前:デフォルトの名無しさん mailto:sage [2008/03/30(日) 13:16:29 ]
過疎



194 名前:デフォルトの名無しさん mailto:sage [2008/03/31(月) 17:12:10 ]
オブジェクト指向の講義するならRubyなんかよりC++の方がいいんでないの?
教育や学習に限ると、生産性の高さとか全く不要だと思うんだがー

195 名前:デフォルトの名無しさん mailto:sage [2008/03/31(月) 17:41:59 ]
オブジェクト指向の授業をするのにRubyを用いる理由がゼロだというなら、C++を使う理由はマイナスだぜ
何が悲しくてオブジェクト指向の理解にC覚えなきゃいかんのよ

196 名前:デフォルトの名無しさん mailto:sage [2008/03/31(月) 18:04:09 ]
メモリの使い方とか理解するのにいいと思います

197 名前:デフォルトの名無しさん mailto:sage [2008/03/31(月) 18:07:08 ]
Cも覚えられるなら一石二鳥じゃん!

198 名前:デフォルトの名無しさん mailto:sage [2008/03/31(月) 21:14:39 ]
宿題かもーん。

199 名前:デフォルトの名無しさん mailto:sage [2008/04/02(水) 00:27:51 ]
Rubyで書かれたソースを解析し、
クラス継承図を描くプログラムを完成させなさい。


200 名前:デフォルトの名無しさん mailto:sage [2008/04/02(水) 00:55:25 ]
Rubyあんま関係ないな

201 名前:デフォルトの名無しさん mailto:sage [2008/04/03(木) 20:48:37 ]
1 から 100 までの数字を出力するプログラム
ただし、
3 の倍数のときは数字の変わりに Aho
5 の倍数のときは数字の変わりに Buzz
3 と 5 の倍数のときは数字の変わりに FizzBuzz
8 の倍数のときには数字の変わりに Ahe
を出力するプログラムを作成してください。



202 名前:デフォルトの名無しさん mailto:sage [2008/04/03(木) 20:50:10 ]
訂正


3 の倍数のときは数字の変わりに Aho


3 の倍数と 3 が付く数のときは数字の変わりに Aho


203 名前:デフォルトの名無しさん mailto:sage [2008/04/03(木) 20:55:18 ]
ワンライナーでお願いします




204 名前:デフォルトの名無しさん mailto:sage [2008/04/03(木) 21:21:46 ]
>>201
d.hatena.ne.jp/gom68/20080314/1205471295

205 名前:デフォルトの名無しさん mailto:sage [2008/04/03(木) 21:23:52 ]
p '1 2 Aho 4 Buzz Aho 7 Ahe Aho Buzz 11 Aho Aho 14 AhoBuzz Ahe 17 Aho 19 Buzz
Aho 22 Aho AhoAhe Buzz 26 Aho 28 29 AhoFizzBuzz Aho AhoAhe Aho Aho AhoBuzz Aho Aho Aho Aho Buzz 41 Aho Aho 44 AhoBuzz 46 47 AhoAhe 49 Buzz

206 名前:デフォルトの名無しさん mailto:sage [2008/04/03(木) 21:26:40 ]
>>201
ttp://www.yabooo.org/archives/60


207 名前:デフォルトの名無しさん mailto:sage [2008/05/12(月) 21:49:36 ]
過疎り杉だろw

208 名前:デフォルトの名無しさん mailto:sage [2008/05/12(月) 21:50:22 ]
安心しろ、九月に入ったらまた某大学の一年生が助けを求めてくるから

209 名前:デフォルトの名無しさん mailto:sage [2008/05/12(月) 21:53:28 ]
講義担当者は骨のある問題頼むぜ
ワンライナーで書いてやっからw

210 名前:デフォルトの名無しさん mailto:sage [2008/06/03(火) 17:33:12 ]
宿題かもーん

211 名前:デフォルトの名無しさん mailto:sage [2008/06/05(木) 23:27:43 ]
人いるのかなw いたらお願いします

・英文ファイルを読み込んで、40文字の行(単語が2行にまたがっては駄目)
 に分割して出力するスクリプトを作成せよ

212 名前:デフォルトの名無しさん mailto:sage [2008/06/06(金) 00:54:12 ]
前スレで同じような質問をみたな
確か答えはこんな感じだったはず
puts ARGF.read.gsub(/\s+/," ").gsub(/(.{0,40})\s/,"\\1\n")

213 名前:デフォルトの名無しさん mailto:sage [2008/06/06(金) 01:13:11 ]
毎回思うんだが、この手の課題って「空白をカウントするのかどうか」「改行は文字なのか」って絶対触れられないよな
サンプルのテキストファイルを整形しろ、という課題でないと駄目だと思う



214 名前:デフォルトの名無しさん mailto:sage [2008/06/06(金) 01:56:25 ]
禁則処理とかダメダメだが、即興のやつ。

re = /
  (\w+)
 | (\s+)
 | ([^\w\s]+)
/x

ARGF.each do |line|
 buf = []
 line.scan(re) do
  case
  when $1 then buf << [$1, :word]
  when $2 then buf << [$2, :space]
  when $3 then buf << [$3, :else]
  else raise Exception, 'must not happen'
  end
 end


215 名前:デフォルトの名無しさん mailto:sage [2008/06/06(金) 01:57:22 ]
 until buf.empty?
  tmp = ''
  while tmp.size <= 40
   buf.empty? and break
   s, type = buf.shift
   unless tmp.size + s.size > 40
    tmp << s
   else
    case type
    when :word
     buf.unshift [s, type]
    when :space
     ;
    else
     margin = 40 - tmp.size
     margin, rest = s[0, margin], s[margin-1..-1]
     tmp << margin
     buf.unshift [rest, type]
    end
    break
   end
  end #while tmp.size <= 40
  puts tmp
 end #buf.empty?
end #ARGF.each

216 名前:デフォルトの名無しさん mailto:sage [2008/06/06(金) 02:06:12 ]
あ゙ー、やっぱ語にタグつけるのが妥当だよな
あと、みんな存在を忘れるんだが 's は頻発するから無視したら駄目だぞ

217 名前:デフォルトの名無しさん mailto:sage [2008/06/06(金) 02:51:36 ]
ふつーのアポストロフィSだったら/\w+(?:'s)?/で取れるけど、
foos' みたいなのが難しい…質問者じゃないが教えてエロいひと。

あと\w使ってるけど、英文で単語繋いだりするときってアンダーバーよりもむしろハイフンだよなぁ。
/[A-Za-z]+(?:-[A-Za-z]+)*/とかのほうがいいんだろうか。

218 名前:211 mailto:sage [2008/06/06(金) 17:50:27 ]
ありがとうございます

219 名前:デフォルトの名無しさん mailto:sage [2008/06/19(木) 19:25:36 ]
[1] 授業単元:データベースと統計処理
[2] 問題文(含コード&リンク):()
[3] 環境
 [3.1] OS: Linux
 [3.2] バージョン:ruby 1.8.6 (2007-06-07 patchlevel 36) [i486-linux]
 [3.3] 言語: Ruby
[4] 期限: 今月中
[5] その他の制限: なし
ファイルが2つあります。
key.txt:インデックス(キー)となるファイル、名前が羅列してあります。
Mr.A
Mr.B
Mr.C
Mrs.D
hoge-hoge san
.
(数百人程度)

data.txt:体重のデータファイル
住所、電話番号、氏名(キー)、体重(値)
A市,000-111-1111,Mr.A,81.2
B市,111-222-3333,Mr.B,93.2
.

問題
key.txt に載っている人の体重を data.txt から選び出し、体重の少ない方から
並べて、分布の 50%, 95%, 99% の体重を表示してお終い。体重分布の比較をしたい。
という宿題です。 以上です。





220 名前:デフォルトの名無しさん mailto:sage [2008/06/19(木) 19:32:35 ]
ワンライナーでですか?

221 名前:デフォルトの名無しさん mailto:sage [2008/06/19(木) 19:39:46 ]
>key.txt に載っている人の体重を data.txt から選び出し、体重の少ない方から
>並べて、

ここまではやりました><;
File.open("data.txt"){|io|io.read}.split($/).map{|line| line.split(",")}.delete_if{|record| !File.open("key.txt"){|io|io.read}.split($/).include?(record[2])}.sort{|x,y| x[3]<=>y[3]}

222 名前:デフォルトの名無しさん mailto:sage [2008/06/19(木) 22:59:50 ]
|io|io が loli に見えて、いい変数使うなあって思った

223 名前:デフォルトの名無しさん mailto:sage [2008/06/19(木) 23:28:49 ]
>>221
えっ、えっ、 すごいな、並べるところまでできてしまっているような感じ
ワンライナーでなくても良いんですが。解読するのに1週間くらい
かかりそう。でもすごい。
MS Access で、2つのファイルをテーブルに読み込んで選択クエリー
でつなげばできるんですけど、MS Access も入手できない、poor man
プログラマーは、なんとかしなければならない。でも、すごいな。




224 名前:デフォルトの名無しさん mailto:sage [2008/06/19(木) 23:33:22 ]
あ、なんだ、本気だったのね

225 名前:デフォルトの名無しさん mailto:sage [2008/06/19(木) 23:41:58 ]
もちろん。
最初に data.txt を読み込んで、次に key.txtを読み込んで、ここにkeyが含まれていない
場合は、そのrecord を削除してしまい、残った record を4番目の項でソートする。
そんな感じでしょうか。 Hash とか使うのかなあと思っていたら、使わなくても良いとは
ちょっと、びっくり。

226 名前:デフォルトの名無しさん mailto:sage [2008/06/19(木) 23:51:08 ]
そのへんを素直に処理するとこうだ

# キーを読み込む
indexes = File.readlines('key.txt')

# キーに含まれるデータだけを格納する配列
data = Array.new

# data.txt を1行ごとの配列とし、
File.readlines('data.txt').each do |line|
# 1行をコンマで区切り、
a = line.chomp.split(',')
# 2要素目(3項目目)が keys.txt に含まれていれば data に登録(最後の数字は数値に変換)
data.push([a[0], a[1], a[2], a[3].to_f]) if indexes.include?(a[2])
end

# 3要素目(4項目目、つまり体重の数値)で並び替えたものを sorted_data という配列に
sorted_data = data.sort_by{|a| a[3]}


227 名前:デフォルトの名無しさん mailto:sage [2008/06/20(金) 01:55:52 ]
分布忘れちったからソートするところまで自分もやってみる。
>>226みたいに初心者向けっぽい気づかいを忘れてた。Structとかダメ?

#data.txt 一行ぶんの情報を表す構造体クラス
class Record < Struct.new(:address, :telephon, :name, :weight)
 def initialize(*args)
  args[-1] = Float(args[-1])
  super(*args)
 end
end

#両ファイルを行ごとの配列にして読み込む
entries, data = ["key.txt", "data.txt"].map{|path|
 File.readlines(path).map{|s| s.chomp }
}
#コンマ区切りの情報を分けて、構造体にし、
#key.txtにある名前だけというふるいをかけ、体重の値でソート
records = data.map{|s| Record.new(*s.chomp.split(',')) }.select{|r| entries[r.name] }.sort_by{|r| r.weight }

228 名前:225 mailto:sage [2008/06/20(金) 08:08:28 ]
寝ている間に宿題ありがとうございました。
>>226
とても分かりやすいです。
data.push([a[0], a[1], a[2], a[3].to_f]) if indexes.include?(a[2])
後半の if indexes.include? という部分の記述は経験がありません。
勉強します。

>>227
クラスというのは、どういう風に使うのだろうと思っていました。

key.txt は、100の整数倍を取ることにしていますので、小さい方から
並び替えて、順番を付け、順番/データ数を計算すれば必ず50%, 95%
99% のデータがあります。というわけで、ソートができれば、ゴールまで
もう少しです。

229 名前:デフォルトの名無しさん mailto:sage [2008/06/20(金) 12:50:55 ]
>>226
動いたっぽいです。えーと、
> # キーを読み込む
> indexes = File.readlines('key.txt')
これだと、改行コードが indexes にひっついたままで、data.txt の検索で
引っかかりませんでした。ここは定石にしたがって
i=Files.open("key.txt")
indexes=Array.new
i.each{|key| indexes << key.chomp}
で検索できるようになりました。


230 名前:デフォルトの名無しさん [2008/06/20(金) 17:32:26 ]
jp.rubyist.net/RubyKaigi2008/Live.html

231 名前:デフォルトの名無しさん [2008/07/03(木) 10:01:06 ]
はいorいいえの質問に答えてもらって結果を
「はいの数が3つ以上なら〜です。」

「はいの数が3つ未満なら〜です。」

というように出すプログラムを作りたいのですが
わからなくて…
誰か助けて…

232 名前:デフォルトの名無しさん mailto:sage [2008/07/03(木) 10:08:47 ]
授業でどんなことしててどのへんがわからんのかくらいは言え
放っておくと授業で全く触れてないもの使った先生が読めないようなプログラムが回答として返ってくるぞ
小学校の夏休みの算数の宿題に高校数学が使われてたらあからさまに不自然だろ

233 名前:デフォルトの名無しさん mailto:sage [2008/07/03(木) 10:26:20 ]
すみません。
授業では基礎的なことしかやっていません。
例えば
gets.chomp
if
printf
STDEER
というようなものを使ったりしています



234 名前:デフォルトの名無しさん mailto:sage [2008/07/03(木) 10:27:34 ]
>>232
まったくだ

questions = ['海は死にますか?',
'山は死にますか?',
'風はどうですか?',
'空もそうですか?']
yes = 0
no = 0

puts '質問にyesかnoで答えてください'
questions.each do |q|
puts q
answer = gets
if /^y/i =~ answer then
yes = yes + 1
else
no = no + 1
end
end

puts '結果を発表します'
puts "yes: #{yes} no: #{no}"
if yes < 3 then
puts 'YESが3未満のあなたのさだまさし度はまだまだです'
else
puts 'YESが3以上のあなたのさだまさし度は熱狂的です'
end


235 名前:デフォルトの名無しさん mailto:sage [2008/07/03(木) 10:52:18 ]
ありがとうございます!
すみませんがputsというのは習ってないのですが、
どんな意味ですか?

236 名前:デフォルトの名無しさん mailto:sage [2008/07/03(木) 11:05:04 ]
questions = ["海は死にますか?\n",
"山は死にますか?\n",
"風はどうですか?\n",
"空もそうですか?\n"]
yes = 0
no = 0

print "質問にyesかnoで答えてください\n"
questions.each do |q|
print q
answer = gets
if /^y/i =~ answer then
yes = yes + 1
else
no = no + 1
end
end

print "結果を発表します\n"
print "yes: #{yes} no: #{no}\n"
if yes < 3 then
print "YESが3未満のあなたのさだまさし度はまだまだです\n"
else
print "YESが3以上のあなたのさだまさし度は熱狂的です\n"
end


237 名前:デフォルトの名無しさん mailto:sage [2008/07/03(木) 11:12:07 ]
>>236
あ、これならすべて習っています!
本当にありがとうございます。
助かりました(;_;)

238 名前:デフォルトの名無しさん [2008/07/05(土) 05:27:15 ]
>>235
putsは改行も一緒に出力する

239 名前:a ◆Ge868FLoWU [2008/07/12(土) 18:37:49 ]
[1] プログラミング言語

[2]パスカルの3角形を印字するプログラムを
  書きなさい。ただし、次のプログラムで印字
  されるようにプログラムを作成してください。

[3] 環境
 [3.1] Vista
 [3.2] Ruby 1.8.6-2.6
 [3.3] Ruby
[4] 2008/7/14/8:00
[5] 以下のコードを補完すること

  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]ごとに配列を作る
# そして、印字
(0..a.length-1).each{ |i|
(0..a[i].length-1).each{ |j|
print( " ", a[i][j] )
}
print( "\n" )
}


お願いします。

240 名前:デフォルトの名無しさん mailto:sage [2008/07/12(土) 18:45:37 ]
0..a.length-1


まぁこういうのは配列操作のイディオムの知識としては必要なんだろうけど。
(´-ω-`)


241 名前:デフォルトの名無しさん mailto:sage [2008/07/12(土) 19:37:25 ]
> (0..a.length-1).each{ |i|
> (0..a[i].length-1).each{ |j|
> print( " ", a[i][j] )
> }
> print( "\n" )
> }

吐いた
むしろ泣いた

メソッド定義…、この授業だと「関数定義」とか呼んでそうだが、
def ナントカ
で使い回しできる機能を自分で作ることは習った?

242 名前:a ◆Ge868FLoWU [2008/07/12(土) 19:50:16 ]
>241

「関数定義」という言葉は授業で出てきましたが、よくわかりませんでした。

243 名前:a ◆Ge868FLoWU [2008/07/12(土) 20:27:25 ]
print("Enter n: "); n = gets.chomp.to_i
if( n>30 || n<0 ) then
n = 10
end


a = Array.new( n )
a[0] = [1]
i = 0
j = 0
if j = 0 || j = i
then
a[ i ][ j ] = 1
else
a[ i ][ j ] = a[i-1][j-1]+a[i-1][j]
end
(0..a.length-1).each{ |i|
(0..a[i].length-1).each{ |j|
print( " ", a[i][j] )
}
print( "\n" )
}


自分なりに考えてみた結果、こうなったんですが、やはりエラーが出ます↓

Enter n: >Exit code: -1073741510



(´;ω;`)



244 名前:デフォルトの名無しさん [2008/07/13(日) 02:39:00 ]
添削:

a.each {|i| i.each{|j| print j, " " }}
puts

inject版とか作ってくれ

245 名前:デフォルトの名無しさん [2008/07/13(日) 02:41:29 ]
puts a.flatten.join " "

flatten一発ワロタ

246 名前:デフォルトの名無しさん [2008/07/13(日) 02:42:19 ]
ああ、列ごとに改行いるのか(´・ω・`)
>>244 >>245じゃダメだな

247 名前:デフォルトの名無しさん [2008/07/13(日) 02:45:29 ]
これで
a.each {|i| puts i.join(" ")}

248 名前:デフォルトの名無しさん mailto:sage [2008/07/13(日) 03:07:12 ]
コード補完しれって、 a.each すら使わせたくないんじゃないか?
宿題出した先生は本当はCでやりたいんだと

249 名前:デフォルトの名無しさん mailto:sage [2008/07/13(日) 13:44:30 ]
コード補完は単に宿題の採点を楽にする為だと思われ

250 名前:デフォルトの名無しさん [2008/07/22(火) 01:08:06 ]
あらかじめ配列 ar に 100個のデータが格納される処理が,プログラムの最初で行われているものとする。その部分については書く必要はない。
ただし,ar に格納されたデータのうち負のものは,誤りを含んだデータなので集計しないようにしたい。
for ループで配列の要素を読み込んでいく,
その要素がゼロ以上の値を持つデータであれば,データの数を数え上げるとともに,データを加算していく。
ループが終了したら,上の例のように出力する。いずれの行の最後にも改行がある。


251 名前:デフォルトの名無しさん [2008/07/22(火) 01:11:59 ]
ar = [
4.2,29.8,5.1,19.9,3.4,15.3,11.4,1.1,24.1,28.7,0.0,30.2,-0.0,41.2,8.3,
26.8,27.4,0.5,26.2,35.8,33.7,2.0,9.4,36.8,33.2,7.8,21.6,42.7,31.4,9.3,
16.9,9.4,39.6,-0.7,40.4,43.8,26.6,16.1,38.7,4.5,14.1,4.1,7.8,10.5,26.1,
44.9,26.7,17.6,34.2,10.9,33.6,34.2,28.1,40.6,13.7,5.4,13.2,15.8,22.5,36.5,
2.0,13.1,11.2,-1.7,7.4,39.6,29.5,19.7,21.7,16.3,12.3,41.5,-2.8,13.5,40.9,
-1.7,26.9,6.7,0.7,43.8,43.0,17.4,6.9,35.4,36.2,27.6,10.6,39.8,6.4,31.3,
13.7,0.9,20.2,6.4,36.0,31.9,36.4,-1.3,-3.2,-3.2]
# 以下の部分を適当に補って作成して,下のフォームに記入しなさい。
count = 0
sum = 0.0
for i in ????
# このループの中で if 構文を使ってデータを判定して集計する。
end
print ??????
print ??????


あらかじめ配列 ar に 100個のデータが格納される処理が,プログラムの最初で行われているものとする。その部分については書く必要はない。
ただし,ar に格納されたデータのうち負のものは,誤りを含んだデータなので集計しないようにしたい。
for ループで配列の要素を読み込んでいく,
その要素がゼロ以上の値を持つデータであれば,データの数を数え上げるとともに,データを加算していく。
ループが終了したら,上の例のように出力する。いずれの行の最後にも改行がある。
例 有効なデータの数 = 13
  平均値 = 23


252 名前:デフォルトの名無しさん mailto:sage [2008/07/22(火) 02:13:05 ]
ひとつ問題がある。データ1行目の後ろのほうに -0.0 という値が入ってる。
これをカウントすべきかどうかで平均値が変わる。
計測器によっては -0.0 は 0 から -0.1 を含まない領域の値を示していることがある。
題意からすると、これは負で取り除くべきデータということになる。
しかし、Ruby は 0 も 0.0 も -0.0 も同じゼロとして扱うから、特別に判断処理を入れない限り区別できない。
以下、区別しないスクリプト。
区別したい場合は if のとこを if i >= 0 && i.to_s != '-0.0' then に書き換える。

ar = [
4.2,29.8,5.1,19.9,3.4,15.3,11.4,1.1,24.1,28.7,0.0,30.2,-0.0,41.2,8.3,
26.8,27.4,0.5,26.2,35.8,33.7,2.0,9.4,36.8,33.2,7.8,21.6,42.7,31.4,9.3,
16.9,9.4,39.6,-0.7,40.4,43.8,26.6,16.1,38.7,4.5,14.1,4.1,7.8,10.5,26.1,
44.9,26.7,17.6,34.2,10.9,33.6,34.2,28.1,40.6,13.7,5.4,13.2,15.8,22.5,36.5,
2.0,13.1,11.2,-1.7,7.4,39.6,29.5,19.7,21.7,16.3,12.3,41.5,-2.8,13.5,40.9,
-1.7,26.9,6.7,0.7,43.8,43.0,17.4,6.9,35.4,36.2,27.6,10.6,39.8,6.4,31.3,
13.7,0.9,20.2,6.4,36.0,31.9,36.4,-1.3,-3.2,-3.2]
# 以下の部分を適当に補って作成して,下のフォームに記入しなさい。
count = 0
sum = 0.0
for i in ar
if i >= 0 then
count = count + 1
sum = sum + i
end
end
print "有効なデータの数:#{count}\n"
print "平均値:#{sum / count}\n"


253 名前:デフォルトの名無しさん mailto:sage [2008/07/22(火) 10:03:23 ]
> -0
=> 0
> (-0).to_s
=> "0"



254 名前:デフォルトの名無しさん mailto:sage [2008/07/22(火) 12:07:59 ]
>>253
irb> ar.all?{|e| e.is_a?(Float)}
true

255 名前:デフォルトの名無しさん mailto:sage [2008/07/22(火) 12:26:52 ]
揚げ足とってるだけかしらんけど、それがどうしたんだ?

256 名前:デフォルトの名無しさん mailto:sage [2008/07/22(火) 12:36:31 ]

 ・ データは全て Float だから Integer の話をしても意味がない
 ・ -0.0 を to_s すると "-0.0" だから指摘に関連性を見出せない
 ・ トリビアごっこは他の場所でどうぞ

257 名前:デフォルトの名無しさん mailto:sage [2008/07/22(火) 12:53:50 ]
なるほど、mswin32版では挙動が違うようだ
ごめんね

258 名前:デフォルトの名無しさん [2008/07/22(火) 13:50:23 ]
>>252さんありがとうございす。

このプログラムは,次の数列の和が, i がいくつになったときに,与えられた数を超えるのかを調べている。

sum = a1 + a2 + a3 + ... + ai + ...

ただしここで,ai は次の式で与えられる数である。
ai = i 3 - 4 * i 2

この計算を行うプログラムの不完全なリストが下にある。次の方針にもとづいて完成させなさい。

引数をコマンドライン引数として受け取り limit という整数に代入する(これはすでに書き込まれている)。
数列の和は sum という変数に加算されていくものとする。
i はループのなかで1ずつ増加するようにする。for ループと違って, iはループ変数でなく,したがって自動的に増加することはないことに注意すること(これをうっかりすると無限ループに陥る!)。
while 文を使って,sum が limit よりも小さい間 ループが回るようにする。
ループを抜けたら,結果を印刷する(これもすでに書きこまれている) 。

limit = ARGV[0].to_i
sum = 0
i = 0
while ?????
????
????
end
print "i が", i, "のときに sum は ", limit, " を超えました。\n"




259 名前:デフォルトの名無しさん mailto:sage [2008/07/22(火) 13:55:16 ]
>>258
どうでもいいが、それができないとこれからの課題の全てを全部他人が書かないといけなくなるぞ
小学校2年で九九を全く覚えなかった小学生のように窮地に陥る

260 名前:デフォルトの名無しさん [2008/07/22(火) 13:59:49 ]
わたしは情報系の学部ではないのでできなくても問題ありません。
ただ単位だけ欲しいんです(><)

261 名前:デフォルトの名無しさん mailto:sage [2008/07/22(火) 14:02:03 ]
うん、だから、期限までに誰も助けてくれなかったらどうするの?

262 名前:デフォルトの名無しさん [2008/07/22(火) 14:05:27 ]
ここは宿題を教えてもらう場ですよね?

263 名前:デフォルトの名無しさん mailto:sage [2008/07/22(火) 14:07:23 ]
ワンライナーにさせてもらえないからみんな苛立ってるんだよw



264 名前:デフォルトの名無しさん mailto:sage [2008/07/22(火) 14:09:34 ]
まあそのへんはなんでもいいけど>>258では回答は来ないだろうな

265 名前:デフォルトの名無しさん mailto:sage [2008/07/23(水) 00:39:10 ]
せめて問題文を理解して間違いなく写して下さい

266 名前:デフォルトの名無しさん [2008/07/23(水) 01:14:19 ]
>>265さん
わかりにくくてごめんなさい。
でも問題文はこれですべてです。コピペしてあるので・・・

267 名前:デフォルトの名無しさん [2008/07/23(水) 05:19:11 ]
>>266
そういうことじゃなくて朝鮮語で書けってことじゃないか?
俺はRubyは全くわからないが出題の意図は理解出来たぞ。

268 名前:デフォルトの名無しさん [2008/07/23(水) 06:54:20 ]
>>258
要するに課題出した側はwhileを使ってほしいんだろうが、
if文でbreakでもいいのでは
限界より計算結果が大きくなったらbreakするプログラムで
式はsum+=100として
limitとsumをしっかり初期化すればおk
そっちの方がちょっと簡単そう、それを直せば出来る
エラーで困ってるならそれで
endや条件式の等号が==じゃなくて代入=になってないかとか
確認して、
#if・・・
if 1+1==2とかバグがありそうな行をコメントにして、代わりを書いて実行する
バックアップとりまくってアンドゥは1万回でも出来るような環境を利用する
警告出たっけ

269 名前:デフォルトの名無しさん mailto:sage [2008/07/23(水) 10:51:03 ]
初心者の俺が作ってみた

limit = ARGV[0].to_i
sum = 0
i = 0
while sum <= limit
i += 1
sum += i**3 - 4*i**2
end
print "i が", i, "のときに sum は ", limit, " を超えました。\n"

270 名前:269 mailto:sage [2008/10/10(金) 21:37:16 ]
せっかく解いたのにお礼がこないね (´・ω・`)

271 名前:デフォルトの名無しさん mailto:sage [2008/10/11(土) 16:05:24 ]
お礼が言えるようなまともな奴なら、
そもそも宿題を人に聞いたりはしない。

俺らは粛々と利用されておけば良い。

272 名前:デフォルトの名無しさん [2008/10/12(日) 20:29:21 ]
お返事遅くなりまして大変申し訳ありません
ありがとうございました


273 名前:デフォルトの名無しさん [2008/10/20(月) 13:12:25 ]
rubyの知識が皆無なのに課題だされて途方にくれています。
誰か教えていただけると幸いです><

WikipediaAPIをrubyで使いたいのですが(実はこの意味もわかってないです
ttp://wikipedia.simpleapi.net/
上記のページでも紹介されている
ttp://d.hatena.ne.jp/ma2/20061026/p1
を参照し、コピペして実行すると
c:/ruby/lib
ruby/site_ruby/1.8/rubygems/custom_requre.rb:27:in'gem_original_require':
no such file to load --sinple_wikipedia_api(LoadError)
fro c:/ruby/lib/ruby/site_ruby/1.8/rubygems/custom_requre.rb:27:in'reqire'
というエラーが出てきます。
きっと根本的なことが間違っているんですが…どうすれば使えるようになるので
しょうか?
何かインストールしたりする必要があるんですかね。
正直参照したページも色々理解できてません。馬鹿ですみません。






274 名前:デフォルトの名無しさん mailto:sage [2008/10/20(月) 16:08:51 ]
>>273
課題の資料読め

275 名前:デフォルトの名無しさん mailto:sage [2008/10/20(月) 19:35:48 ]
課題に資料ないんですよ。
WikipediaAPIをrubyで使えれるようにするといわれただけなので…

276 名前:デフォルトの名無しさん mailto:sage [2008/10/20(月) 19:55:17 ]
>275
エラーメッセージよく読め。
スペルミスしてないか?

277 名前:デフォルトの名無しさん [2008/10/21(火) 09:06:06 ]
sinple_wikipedia_api www


278 名前:デフォルトの名無しさん mailto:sage [2008/10/21(火) 19:36:03 ]
この課題、よそのライブラリとか使ってもいいの?
ライブラリ作るのが課題なんじゃないの?

279 名前:デフォルトの名無しさん mailto:sage [2008/10/21(火) 19:39:26 ]
課題本文を見ないことにはなんともな

280 名前:デフォルトの名無しさん mailto:sage [2008/10/22(水) 00:07:11 ]
質問者の意図は放置してシンプルなのを作ってみた

require 'kconv'
require 'uri'
require 'net/http'

def wikipedia(keyword,query={})
 query[:keyword] = URI.escape(keyword.toutf8)
 uri = URI('wikipedia.simpleapi.net/api')
 uri.query = query.to_a.map{|a| a.join('=')}.join('&')
 Net::HTTP.get(uri)
end

puts wikipedia('ギコ猫',:output=>:html).toeuc # tosjis,etc

281 名前:デフォルトの名無しさん mailto:sage [2008/10/22(水) 19:40:34 ]
>>276
エラーメッセージみても意味不明だったんで聞きました

>>276
コピペなんで何がどう間違えてるかわかりませんでした

>>277
PCから書き込めず携帯で打って間違えましたw

>>278
ライブラリ…?とりあえずできればよそのでも!

>>279
課題というか口頭命令でして…

>>280
動きました!ありがとうございます!!!
本当に感謝です。でもなんでこんなにシンプル…凄いです…

282 名前:デフォルトの名無しさん mailto:sage [2008/10/22(水) 20:06:17 ]

 ・ Rubyに興味はなく、それをやれば終わり
 ・ それはRubyに関わる始まりに過ぎない

どっちなのかによって回答が大幅に違うと思われる

283 名前:デフォルトの名無しさん mailto:sage [2008/10/22(水) 21:19:07 ]
あと半年ほどやらないと卒業できないんです
なので後者ですかね…実際会って教えていただきたいものです



284 名前:デフォルトの名無しさん mailto:sage [2008/10/22(水) 21:31:53 ]
あーそりゃ色々な意味で無理だ、今年は諦めて来年に回せ

というか、このタイミングで

 ・ 勝手ライブラリの WikipediaAPI 使え
 ・ 使ったことのない Ruby 使え

という指示が出るというのは研究はいったい何なんだろう

285 名前:デフォルトの名無しさん mailto:sage [2008/10/22(水) 21:36:57 ]
必修のコンピュータ使用の授業なんじゃないかなあ
その割にはいろいろヘンだが…

とりあえず、Rubyの入門を適当に学ぶしかないな

286 名前:デフォルトの名無しさん mailto:sage [2008/10/22(水) 21:39:39 ]
無理ですか><
来年社会人なるのでRubyは多分使いませんww
研究は詳しくは言えないのですが涙目です…;;

287 名前:デフォルトの名無しさん mailto:sage [2008/10/22(水) 21:51:57 ]
>>286
「話せない」のなら無理だ
君は自分のやることを理解していない
教官もこんなのが残ってて困ってることだろう

288 名前:デフォルトの名無しさん mailto:sage [2008/10/22(水) 22:09:26 ]
おっしゃる通りです…全く迷惑だと痛感してます
何をしたいか概略は話せますがこれを見られ特定されるのは痛いので…
先行研究の技術的な部分で教授に言われることをしている感じなんです


289 名前:デフォルトの名無しさん mailto:sage [2008/10/22(水) 22:28:45 ]
あのあれだ、
「○○の××を用いた場合の△△手法開発における基礎的研究」とか
ものすごい注釈つきまくった浅い卒論になる奴だな
3年から本気でやらないからそんな題名レベルで異常に恥ずかしい俺何もやってませんでした的なものになる
履歴書に卒論題名書いたことでむしろ落とされるというレアな経験をお前も体験するんだ

とりあえず、本当はRuby関係ないんじゃね?
欲しいのはWikipediaのデータなんじゃないかと

290 名前:デフォルトの名無しさん mailto:sage [2008/10/22(水) 22:41:04 ]
就職先はすでに決まりました
ついでに女です

291 名前:デフォルトの名無しさん mailto:sage [2008/10/22(水) 22:48:45 ]
小出し君に構うと損するぞ

292 名前:デフォルトの名無しさん mailto:sage [2008/11/01(土) 23:39:41 ]
最近記憶が飛ぶんです

293 名前:デフォルトの名無しさん mailto:sage [2008/11/06(木) 15:18:56 ]
質問なんですが
windowsではプロセスってつかえないっすか?



294 名前:デフォルトの名無しさん mailto:sage [2008/11/06(木) 15:28:47 ]
使えますが。
Process クラスの使い勝手は Unix と違ってくるかもしれん。

295 名前:デフォルトの名無しさん mailto:sage [2008/11/06(木) 21:55:11 ]
ありがとうございます。よく調べてみます!

296 名前:デフォルトの名無しさん mailto:sage [2008/11/08(土) 23:05:21 ]
upload.fam.cx/cgi-bin/img-box/5ic81107014301.jpg

297 名前:デフォルトの名無しさん [2008/12/24(水) 14:58:22 ]
test

298 名前:デフォルトの名無しさん mailto:sage [2008/12/30(火) 03:01:09 ]
>>272
もういないだろうけど小●先生はきっとここ見てると思うよ

299 名前:デフォルトの名無しさん [2009/01/01(木) 11:48:51 ]
299

300 名前:デフォルトの名無しさん [2009/01/01(木) 11:49:35 ]
300

301 名前: 【小吉】 【1044円】 [2009/01/01(木) 11:52:07 ]
       ○
 /⌒\ (__)
 \●/(__)/⌒\
   ∩ ( ・ω・ )\●/  あけましておめでとうございます
   Y  ̄ ||y||  ̄`''φ
    Lノ /ニ|| ! ソ >
    乂/ノ ハ ヽー´
    `ー-、__|

ことしもよろしくね☆

302 名前:デフォルトの名無しさん [2009/01/04(日) 23:07:19 ]
100マス計算をするプログラムを書いてください。
プログラムがランダムに出題し、人間が100個の
マスに回答を入力し、確認ボタンを押すと
全問正解なら回答にかかった時間を表示して終了。
間違った場合は間違った場所にカーソルが止まり、
別の値が入力されるまで待ちます。
横10個、縦10個の数字は各々11〜99までの乱数、
演算は +,-,x のみでよいです。
よろしくおねがいします。

303 名前:デフォルトの名無しさん mailto:sage [2009/01/05(月) 00:33:25 ]
>>302
全然宿題じゃないだろこれw
仕事頼むなら金出せよ



304 名前:デフォルトの名無しさん mailto:sage [2009/01/05(月) 01:13:00 ]
>>302
ttp://www.imymode.com/hp/bbs/index.cgi?mode=view&no=35
作成方法について
作り方を公開する予定は今のところないのですが、実際プログラムは驚くほど簡単です。
10×10のマスにランダムに数字を入れて、それを計算と会っているかどうかチェックするだけです。プログラムを始めたばかりの方の勉強として作るにはちょうどいいかもしれません。
がんばってくださいね。


305 名前:デフォルトの名無しさん mailto:sage [2009/01/05(月) 01:14:09 ]
おまいらそんなレスでお茶を濁していていいのか
Python宿題スレでも見て来い

306 名前:デフォルトの名無しさん mailto:sage [2009/01/05(月) 01:19:34 ]
この百マス計算で、わが娘はギュウギュウ絞られ、はじめは7分とか8分かかって指折り数えながら問題を解いていましたが、この紙を200枚近く消化することで最近は3分あまりで問題を解くようになりました。
自分の小学生時代を思い起こせば、無駄な労力と思います。こんなことをしなくても足し算の答えなんて変わらないのだから、その分少しでも余分に遊んで暮らしたいと小学生なら思うことでしょう。
ところが大人になって、九九の答えより足し算の答えのほうが出しにくいことを悟ってからは、人間多少はこんな理不尽な労働もしておく必要があったことを少しはわかりました。

第一の試練は、人生最大の難関だった就職試験に「クレペリン検査」が含まれていたことです。
10分ほどの時間を限られて、数字の列をただ足していくテストですが、私は1分で50ほどしか足し算ができず、本当は正答数より仕事上のムラや能率を調べるテストなはずですが、自分の能力の低さを改めて思い知らされることになりました。
それに追い討ちをかけるように、検査の間の休息時間に試験官がこんなことを言い出したのです。
「この検査ねえ。私は長年やっているけれども一人だけ、いたね。1分間で百問全部できる人が。傾向も何もわかったものじゃない。まあ、能力が高いといえばそれまでなんだけどね。」
試験中にそんなことを言い出す試験官もけっこう珍しいとは思います。
その後、私の受験勉強にクレペリン検査対策が含まれたのは言うまでもありません。ちょっとやっておけば少なくともうろたえないで済みます。

第二の試練は、「脳を鍛える大人のDSトレーニング」の登場です。
私も鍛えられなければボケる歳になってしまいました。

307 名前:デフォルトの名無しさん mailto:sage [2009/01/05(月) 08:24:08 ]
ttp://ja.wikipedia.org/wiki/%E5%86%85%E7%94%B0%E3%82%AF%E3%83%AC%E3%83%9A%E3%83%AA%E3%83%B3%E7%B2%BE%E7%A5%9E%E6%A4%9C%E6%9F%BB

いじめとかそういう思い出がいつのまにか美化されるようなのと似た話だな。

308 名前:デフォルトの名無しさん mailto:sage [2009/01/05(月) 08:33:29 ]
ttp://ja.wikipedia.org/wiki/%E3%82%A8%E3%83%9F%E3%83%BC%E3%83%AB%E3%83%BB%E3%82%AF%E3%83%AC%E3%83%9A%E3%83%AA%E3%83%B3

老人にボケが発生するのは
死を待つ苦しみを和らげるためらしい

309 名前:デフォルトの名無しさん mailto:sage [2009/01/05(月) 10:19:00 ]
require 'tk'
class Drill100
 PACKOPT = {:side=>:left,:fill=>:both,:expand=>true}
 PACKOPTF = {:side=>:top,:fill=>:both,:expand=>true}
 CELLOPT = {:width=>3}
 def initialize(root)
  @root = root
  @root.title = '100マス計算'
  @size,@min,@max = ( $test ? [2,0,9] : [10,11,99] )
  @column,@row,@cells = [],[],[]
  f = TkFrame.new(@root).pack(PACKOPTF)
  @reset = TkButton.new(f,:text=>'切替',:command=>proc{init}).pack(:side=>:left)
  @start = TkButton.new(f,:text=>'開始',:command=>proc{start}).pack(:side=>:left)
  f = TkFrame.new(@root).pack(PACKOPTF)
  @op = TkLabel.new(f,CELLOPT).pack(PACKOPT)
  @size.times {|i| @column << TkLabel.new(f,CELLOPT).pack(PACKOPT) }
  @size.times do |i|
   f = TkFrame.new(@root).pack(PACKOPTF)
   @row << TkLabel.new(f,CELLOPT).pack(PACKOPT)
   @cells << []
   @size.times {|j| @cells[i] << TkEntry.new(f,CELLOPT).pack(PACKOPT) }
  end
 end
 def init
  @reset.state = :normal
  @start.configure(:text=>'開始',:command=>proc{start})
  @op.text = {'+'=>'-','-'=>'*','*'=>'+'}[@op.text] || '+'
  [@column,@row].each {|labels| labels.each {|l| l.text = random(@min,@max).to_s }}
  @cells.each {|line| line.each {|cell| cell.state = :disabled }}
 end
# つづく

310 名前:デフォルトの名無しさん mailto:sage [2009/01/05(月) 10:20:05 ]
# つづき
 def start
  @reset.state = :disabled
  @start.configure(:text=>'確認',:command=>proc{check})
  @cells.each {|line| line.each {|cell| cell.state = :normal ; cell.value = '' }}
  @cells[0][0].focus
  @starttime = Time.now
 end
 def check
  @endtime = Time.now
  @cells.each_with_index do |line,r|
   line.each_with_index do |cell,c|
    y,x = @row[r].text.to_i,@column[c].text.to_i
    case @op.text
    when '+' then answer = y + x
    when '-' then answer = y - x
    when '*' then answer = y * x
    end
    ( cell.focus ; Tk.bell ; return ) if answer != cell.value.to_i
   end
  end
  time = @endtime - @starttime
  TkDialog.new(@root,:buttons=>[:OK],:message=>"#{time.to_i}秒かかりました")
  init
 end
 def random(min,max) ; rand(max - min + 1) + min ; end
 def run ; init ; Tk.mainloop ; end
end
# $test = true
Drill100.new(Tk.root).run

311 名前:デフォルトの名無しさん mailto:sage [2009/01/05(月) 10:52:54 ]
# 修正
# >>309 initialize の中ほど
  @reset = TkButton.new(f,:text=>'切替',:command=>proc{init}).pack(PACKOPT)
  @start = TkButton.new(f,:text=>'開始',:command=>proc{start}).pack(PACKOPT)
# >>310
 def check
  time = Time.now - @starttime
  op = {'+'=>proc{|y,x| y+x},'-'=>proc{|y,x| y-x},'*'=>proc{|y,x| y*x}}[@op.text]
  @cells.each_with_index do |line,r|
   line.each_with_index do |cell,c|
    answer = op.call(@row[r].text.to_i,@column[c].text.to_i)
    ( cell.focus ; Tk.bell ; return ) if answer != cell.value.to_i
   end
  end
  TkDialog.new(@root,:title=>'全問正解',:buttons=>[:OK],:message=>"#{time.to_i}秒かかりました")
  init
 end

312 名前:デフォルトの名無しさん mailto:sage [2009/01/05(月) 11:12:45 ]
もしかして減算は上の値から左の値を引くのかな
だったらcheckメソッド内の '-'=>proc{|y,x| y-x} を {|y,x| x-y} に修正

313 名前:デフォルトの名無しさん mailto:sage [2009/01/06(火) 02:37:04 ]
生きるだけなら人の一生は長い。
しかしそれ以外するには時間が足りない。
うまくなりたいなら毎日やる。
ひとつだけならまだしも
二つとなるとハードルは一気に上がる。
そしてそのことを悩むとなれば三つとなりまたあがる。
ならばいっその事悩まずに
やってしまえばいい。
一人今、この体での一度きりの人生。
悔いを残すくらいなら今を生きて
今できることをすればいい。
焦っても仕方のないことだから
歩いていこうどこまでも。

「人生は何かを成し遂げるには短すぎるものだが、何もしないとすれば長すぎる」

孔子




314 名前:デフォルトの名無しさん mailto:sage [2009/01/06(火) 20:37:16 ]
>>313
ttp://www.iknow.co.jp/lists/1244







[ 新着レスの取得/表示 (agate) ] / [ 携帯版 ]

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

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