08/02/28 13:33:18
その講義のWebサイト読んでみたんだがC言語をせずにいきなりRubyからやってる感じだな
Ruby特有の記述をバリバリ使うんじゃなくて、どの言語でも通用するような書き方で書いてる雰囲気が漂ってくる
だから#eachとか使わずwhileで回したりしてるとおもふ
176:140 ◆.DxfZ0s0HA
08/02/28 13:34:41
>>174
すいません!
文字列閉じはここに書き写すときに抜け落ちました。
実際はあるんですが、それでも上手く動作しないんです。
あとブロックつきとか何のことか分からないです…
177:140 ◆.DxfZ0s0HA
08/02/28 13:41:29
URLリンク(www.dotup.org)
DL Pass:rep
とりあえず現段階のプログラムリストをアップいたします。
どこかおかしい所があれば修正お願いいたします。
178:デフォルトの名無しさん
08/02/28 16:03:02
>>175
感じも何も、いきなりRubyだ
初めての言語がRubyってどうなんだろうな
179:デフォルトの名無しさん
08/02/28 16:14:39
Cの知識の上にRubyがこないとギクシャクすると思う。
180:デフォルトの名無しさん
08/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:デフォルトの名無しさん
08/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:デフォルトの名無しさん
08/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:デフォルトの名無しさん
08/02/28 17:30:17
どんどんレベルが落ちていくな(w
クラスとメソッドとかの授業はしてないのかしら
ブロックつきメソッドとか
184:140 ◆.DxfZ0s0HA
08/02/28 20:22:25
>>180-182
ご丁寧にありがとうございますm(_ _)m
ようやく全ての機能を満たしたプログラムの完成にこぎつけられました。
ちなみにmetasearchのメソッドのところではタイトルと著者名両方から検索しろとのことだったので
「||」を使ったのですがそれで問題ないみたいです。
とにかく変数がやたらと出てきたのがまず混乱の元だったと思います。。
def部分とその他は分けて考えたほうが良さそうですね・・・
185:デフォルトの名無しさん
08/02/29 00:08:12
なにはともあれ、お疲れさん。
186:デフォルトの名無しさん
08/03/01 00:34:43
宿題かもーん。
187:デフォルトの名無しさん
08/03/01 23:12:32
ファイル読み込みの一番簡単な方法は、
s = IO.read "foobar.txt"
でいいですよね。
書き込みも一発でできないのかな?
これくらい?
open("foobar.txt", "w") {|f| f.write s}
188:デフォルトの名無しさん
08/03/01 23:18:12
ruby unko.rb > foobar.txt
189:デフォルトの名無しさん
08/03/01 23:52:40
まあ、あっても面白いとは思うけどね
そんなこと言ったらread()という関数的メソッドがあってもいいし
190:デフォルトの名無しさん
08/03/02 13:26:35
cat foobar.txt > unko.rb
191:デフォルトの名無しさん
08/03/23 16:53:38
>>188
日本語でおk
192:デフォルトの名無しさん
08/03/23 17:06:50
ルビー う○こ ぽち るび だいなり なんたら ぽち テキスト
193:デフォルトの名無しさん
08/03/30 13:16:29
過疎
194:デフォルトの名無しさん
08/03/31 17:12:10
オブジェクト指向の講義するならRubyなんかよりC++の方がいいんでないの?
教育や学習に限ると、生産性の高さとか全く不要だと思うんだがー
195:デフォルトの名無しさん
08/03/31 17:41:59
オブジェクト指向の授業をするのにRubyを用いる理由がゼロだというなら、C++を使う理由はマイナスだぜ
何が悲しくてオブジェクト指向の理解にC覚えなきゃいかんのよ
196:デフォルトの名無しさん
08/03/31 18:04:09
メモリの使い方とか理解するのにいいと思います
197:デフォルトの名無しさん
08/03/31 18:07:08
Cも覚えられるなら一石二鳥じゃん!
198:デフォルトの名無しさん
08/03/31 21:14:39
宿題かもーん。
199:デフォルトの名無しさん
08/04/02 00:27:51
Rubyで書かれたソースを解析し、
クラス継承図を描くプログラムを完成させなさい。
200:デフォルトの名無しさん
08/04/02 00:55:25
Rubyあんま関係ないな
201:デフォルトの名無しさん
08/04/03 20:48:37
1 から 100 までの数字を出力するプログラム
ただし、
3 の倍数のときは数字の変わりに Aho
5 の倍数のときは数字の変わりに Buzz
3 と 5 の倍数のときは数字の変わりに FizzBuzz
8 の倍数のときには数字の変わりに Ahe
を出力するプログラムを作成してください。
202:デフォルトの名無しさん
08/04/03 20:50:10
訂正
誤
3 の倍数のときは数字の変わりに Aho
正
3 の倍数と 3 が付く数のときは数字の変わりに Aho
203:デフォルトの名無しさん
08/04/03 20:55:18
ワンライナーでお願いします
204:デフォルトの名無しさん
08/04/03 21:21:46
>>201
URLリンク(d.hatena.ne.jp)
205:デフォルトの名無しさん
08/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:デフォルトの名無しさん
08/04/03 21:26:40
>>201
URLリンク(www.yabooo.org)
207:デフォルトの名無しさん
08/05/12 21:49:36
過疎り杉だろw
208:デフォルトの名無しさん
08/05/12 21:50:22
安心しろ、九月に入ったらまた某大学の一年生が助けを求めてくるから
209:デフォルトの名無しさん
08/05/12 21:53:28
講義担当者は骨のある問題頼むぜ
ワンライナーで書いてやっからw
210:デフォルトの名無しさん
08/06/03 17:33:12
宿題かもーん
211:デフォルトの名無しさん
08/06/05 23:27:43
人いるのかなw いたらお願いします
・英文ファイルを読み込んで、40文字の行(単語が2行にまたがっては駄目)
に分割して出力するスクリプトを作成せよ
212:デフォルトの名無しさん
08/06/06 00:54:12
前スレで同じような質問をみたな
確か答えはこんな感じだったはず
puts ARGF.read.gsub(/\s+/," ").gsub(/(.{0,40})\s/,"\\1\n")
213:デフォルトの名無しさん
08/06/06 01:13:11
毎回思うんだが、この手の課題って「空白をカウントするのかどうか」「改行は文字なのか」って絶対触れられないよな
サンプルのテキストファイルを整形しろ、という課題でないと駄目だと思う
214:デフォルトの名無しさん
08/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:デフォルトの名無しさん
08/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:デフォルトの名無しさん
08/06/06 02:06:12
あ゙ー、やっぱ語にタグつけるのが妥当だよな
あと、みんな存在を忘れるんだが 's は頻発するから無視したら駄目だぞ
217:デフォルトの名無しさん
08/06/06 02:51:36
ふつーのアポストロフィSだったら/\w+(?:'s)?/で取れるけど、
foos' みたいなのが難しい…質問者じゃないが教えてエロいひと。
あと\w使ってるけど、英文で単語繋いだりするときってアンダーバーよりもむしろハイフンだよなぁ。
/[A-Za-z]+(?:-[A-Za-z]+)*/とかのほうがいいんだろうか。
218:211
08/06/06 17:50:27
ありがとうございます
219:デフォルトの名無しさん
08/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:デフォルトの名無しさん
08/06/19 19:32:35
ワンライナーでですか?
221:デフォルトの名無しさん
08/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:デフォルトの名無しさん
08/06/19 22:59:50
|io|io が loli に見えて、いい変数使うなあって思った
223:デフォルトの名無しさん
08/06/19 23:28:49
>>221
えっ、えっ、 すごいな、並べるところまでできてしまっているような感じ
ワンライナーでなくても良いんですが。解読するのに1週間くらい
かかりそう。でもすごい。
MS Access で、2つのファイルをテーブルに読み込んで選択クエリー
でつなげばできるんですけど、MS Access も入手できない、poor man
プログラマーは、なんとかしなければならない。でも、すごいな。
224:デフォルトの名無しさん
08/06/19 23:33:22
あ、なんだ、本気だったのね
225:デフォルトの名無しさん
08/06/19 23:41:58
もちろん。
最初に data.txt を読み込んで、次に key.txtを読み込んで、ここにkeyが含まれていない
場合は、そのrecord を削除してしまい、残った record を4番目の項でソートする。
そんな感じでしょうか。 Hash とか使うのかなあと思っていたら、使わなくても良いとは
ちょっと、びっくり。
226:デフォルトの名無しさん
08/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:デフォルトの名無しさん
08/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
08/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:デフォルトの名無しさん
08/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:デフォルトの名無しさん
08/06/20 17:32:26
URLリンク(jp.rubyist.net)
231:デフォルトの名無しさん
08/07/03 10:01:06
はいorいいえの質問に答えてもらって結果を
「はいの数が3つ以上なら~です。」
「はいの数が3つ未満なら~です。」
というように出すプログラムを作りたいのですが
わからなくて…
誰か助けて…
232:デフォルトの名無しさん
08/07/03 10:08:47
授業でどんなことしててどのへんがわからんのかくらいは言え
放っておくと授業で全く触れてないもの使った先生が読めないようなプログラムが回答として返ってくるぞ
小学校の夏休みの算数の宿題に高校数学が使われてたらあからさまに不自然だろ
233:デフォルトの名無しさん
08/07/03 10:26:20
すみません。
授業では基礎的なことしかやっていません。
例えば
gets.chomp
if
printf
STDEER
というようなものを使ったりしています
234:デフォルトの名無しさん
08/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:デフォルトの名無しさん
08/07/03 10:52:18
ありがとうございます!
すみませんがputsというのは習ってないのですが、
どんな意味ですか?
236:デフォルトの名無しさん
08/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:デフォルトの名無しさん
08/07/03 11:12:07
>>236
あ、これならすべて習っています!
本当にありがとうございます。
助かりました(;_;)
238:デフォルトの名無しさん
08/07/05 05:27:15
>>235
putsは改行も一緒に出力する
239:a ◆Ge868FLoWU
08/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:デフォルトの名無しさん
08/07/12 18:45:37
0..a.length-1
まぁこういうのは配列操作のイディオムの知識としては必要なんだろうけど。
(´-ω-`)
241:デフォルトの名無しさん
08/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
08/07/12 19:50:16
>241
「関数定義」という言葉は授業で出てきましたが、よくわかりませんでした。
243:a ◆Ge868FLoWU
08/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:デフォルトの名無しさん
08/07/13 02:39:00
添削:
a.each {|i| i.each{|j| print j, " " }}
puts
inject版とか作ってくれ
245:デフォルトの名無しさん
08/07/13 02:41:29
puts a.flatten.join " "
flatten一発ワロタ
246:デフォルトの名無しさん
08/07/13 02:42:19
ああ、列ごとに改行いるのか(´・ω・`)
>>244 >>245じゃダメだな
247:デフォルトの名無しさん
08/07/13 02:45:29
これで
a.each {|i| puts i.join(" ")}
248:デフォルトの名無しさん
08/07/13 03:07:12
コード補完しれって、 a.each すら使わせたくないんじゃないか?
宿題出した先生は本当はCでやりたいんだと
249:デフォルトの名無しさん
08/07/13 13:44:30
コード補完は単に宿題の採点を楽にする為だと思われ
250:デフォルトの名無しさん
08/07/22 01:08:06
あらかじめ配列 ar に 100個のデータが格納される処理が,プログラムの最初で行われているものとする。その部分については書く必要はない。
ただし,ar に格納されたデータのうち負のものは,誤りを含んだデータなので集計しないようにしたい。
for ループで配列の要素を読み込んでいく,
その要素がゼロ以上の値を持つデータであれば,データの数を数え上げるとともに,データを加算していく。
ループが終了したら,上の例のように出力する。いずれの行の最後にも改行がある。
251:デフォルトの名無しさん
08/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:デフォルトの名無しさん
08/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:デフォルトの名無しさん
08/07/22 10:03:23
> -0
=> 0
> (-0).to_s
=> "0"
254:デフォルトの名無しさん
08/07/22 12:07:59
>>253
irb> ar.all?{|e| e.is_a?(Float)}
true
255:デフォルトの名無しさん
08/07/22 12:26:52
揚げ足とってるだけかしらんけど、それがどうしたんだ?
256:デフォルトの名無しさん
08/07/22 12:36:31
・ データは全て Float だから Integer の話をしても意味がない
・ -0.0 を to_s すると "-0.0" だから指摘に関連性を見出せない
・ トリビアごっこは他の場所でどうぞ
257:デフォルトの名無しさん
08/07/22 12:53:50
なるほど、mswin32版では挙動が違うようだ
ごめんね
258:デフォルトの名無しさん
08/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:デフォルトの名無しさん
08/07/22 13:55:16
>>258
どうでもいいが、それができないとこれからの課題の全てを全部他人が書かないといけなくなるぞ
小学校2年で九九を全く覚えなかった小学生のように窮地に陥る
260:デフォルトの名無しさん
08/07/22 13:59:49
わたしは情報系の学部ではないのでできなくても問題ありません。
ただ単位だけ欲しいんです(><)
261:デフォルトの名無しさん
08/07/22 14:02:03
うん、だから、期限までに誰も助けてくれなかったらどうするの?
262:デフォルトの名無しさん
08/07/22 14:05:27
ここは宿題を教えてもらう場ですよね?
263:デフォルトの名無しさん
08/07/22 14:07:23
ワンライナーにさせてもらえないからみんな苛立ってるんだよw
264:デフォルトの名無しさん
08/07/22 14:09:34
まあそのへんはなんでもいいけど>>258では回答は来ないだろうな
265:デフォルトの名無しさん
08/07/23 00:39:10
せめて問題文を理解して間違いなく写して下さい
266:デフォルトの名無しさん
08/07/23 01:14:19
>>265さん
わかりにくくてごめんなさい。
でも問題文はこれですべてです。コピペしてあるので・・・
267:デフォルトの名無しさん
08/07/23 05:19:11
>>266
そういうことじゃなくて朝鮮語で書けってことじゃないか?
俺はRubyは全くわからないが出題の意図は理解出来たぞ。
268:デフォルトの名無しさん
08/07/23 06:54:20
>>258
要するに課題出した側はwhileを使ってほしいんだろうが、
if文でbreakでもいいのでは
限界より計算結果が大きくなったらbreakするプログラムで
式はsum+=100として
limitとsumをしっかり初期化すればおk
そっちの方がちょっと簡単そう、それを直せば出来る
エラーで困ってるならそれで
endや条件式の等号が==じゃなくて代入=になってないかとか
確認して、
#if・・・
if 1+1==2とかバグがありそうな行をコメントにして、代わりを書いて実行する
バックアップとりまくってアンドゥは1万回でも出来るような環境を利用する
警告出たっけ
269:デフォルトの名無しさん
08/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
08/10/10 21:37:16
せっかく解いたのにお礼がこないね (´・ω・`)
271:デフォルトの名無しさん
08/10/11 16:05:24
お礼が言えるようなまともな奴なら、
そもそも宿題を人に聞いたりはしない。
俺らは粛々と利用されておけば良い。
272:デフォルトの名無しさん
08/10/12 20:29:21
お返事遅くなりまして大変申し訳ありません
ありがとうございました
273:デフォルトの名無しさん
08/10/20 13:12:25
rubyの知識が皆無なのに課題だされて途方にくれています。
誰か教えていただけると幸いです><
WikipediaAPIをrubyで使いたいのですが(実はこの意味もわかってないです
URLリンク(wikipedia.simpleapi.net)
上記のページでも紹介されている
URLリンク(d.hatena.ne.jp)
を参照し、コピペして実行すると
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:デフォルトの名無しさん
08/10/20 16:08:51
>>273
課題の資料読め
275:デフォルトの名無しさん
08/10/20 19:35:48
課題に資料ないんですよ。
WikipediaAPIをrubyで使えれるようにするといわれただけなので…
276:デフォルトの名無しさん
08/10/20 19:55:17
>275
エラーメッセージよく読め。
スペルミスしてないか?
277:デフォルトの名無しさん
08/10/21 09:06:06
sinple_wikipedia_api www
278:デフォルトの名無しさん
08/10/21 19:36:03
この課題、よそのライブラリとか使ってもいいの?
ライブラリ作るのが課題なんじゃないの?
279:デフォルトの名無しさん
08/10/21 19:39:26
課題本文を見ないことにはなんともな
280:デフォルトの名無しさん
08/10/22 00:07:11
質問者の意図は放置してシンプルなのを作ってみた
require 'kconv'
require 'uri'
require 'net/http'
def wikipedia(keyword,query={})
query[:keyword] = URI.escape(keyword.toutf8)
uri = URI('URLリンク(wikipedia.simpleapi.net)')
uri.query = query.to_a.map{|a| a.join('=')}.join('&')
Net::HTTP.get(uri)
end
puts wikipedia('ギコ猫',:output=>:html).toeuc # tosjis,etc
281:デフォルトの名無しさん
08/10/22 19:40:34
>>276
エラーメッセージみても意味不明だったんで聞きました
>>276
コピペなんで何がどう間違えてるかわかりませんでした
>>277
PCから書き込めず携帯で打って間違えましたw
>>278
ライブラリ…?とりあえずできればよそのでも!
>>279
課題というか口頭命令でして…
>>280
動きました!ありがとうございます!!!
本当に感謝です。でもなんでこんなにシンプル…凄いです…
282:デフォルトの名無しさん
08/10/22 20:06:17
・ Rubyに興味はなく、それをやれば終わり
・ それはRubyに関わる始まりに過ぎない
どっちなのかによって回答が大幅に違うと思われる
283:デフォルトの名無しさん
08/10/22 21:19:07
あと半年ほどやらないと卒業できないんです
なので後者ですかね…実際会って教えていただきたいものです
284:デフォルトの名無しさん
08/10/22 21:31:53
あーそりゃ色々な意味で無理だ、今年は諦めて来年に回せ
というか、このタイミングで
・ 勝手ライブラリの WikipediaAPI 使え
・ 使ったことのない Ruby 使え
という指示が出るというのは研究はいったい何なんだろう
285:デフォルトの名無しさん
08/10/22 21:36:57
必修のコンピュータ使用の授業なんじゃないかなあ
その割にはいろいろヘンだが…
とりあえず、Rubyの入門を適当に学ぶしかないな
286:デフォルトの名無しさん
08/10/22 21:39:39
無理ですか><
来年社会人なるのでRubyは多分使いませんww
研究は詳しくは言えないのですが涙目です…;;
287:デフォルトの名無しさん
08/10/22 21:51:57
>>286
「話せない」のなら無理だ
君は自分のやることを理解していない
教官もこんなのが残ってて困ってることだろう
288:デフォルトの名無しさん
08/10/22 22:09:26
おっしゃる通りです…全く迷惑だと痛感してます
何をしたいか概略は話せますがこれを見られ特定されるのは痛いので…
先行研究の技術的な部分で教授に言われることをしている感じなんです
289:デフォルトの名無しさん
08/10/22 22:28:45
あのあれだ、
「○○の××を用いた場合の△△手法開発における基礎的研究」とか
ものすごい注釈つきまくった浅い卒論になる奴だな
3年から本気でやらないからそんな題名レベルで異常に恥ずかしい俺何もやってませんでした的なものになる
履歴書に卒論題名書いたことでむしろ落とされるというレアな経験をお前も体験するんだ
とりあえず、本当はRuby関係ないんじゃね?
欲しいのはWikipediaのデータなんじゃないかと
290:デフォルトの名無しさん
08/10/22 22:41:04
就職先はすでに決まりました
ついでに女です
291:デフォルトの名無しさん
08/10/22 22:48:45
小出し君に構うと損するぞ
292:デフォルトの名無しさん
08/11/01 23:39:41
最近記憶が飛ぶんです
293:デフォルトの名無しさん
08/11/06 15:18:56
質問なんですが
windowsではプロセスってつかえないっすか?
294:デフォルトの名無しさん
08/11/06 15:28:47
使えますが。
Process クラスの使い勝手は Unix と違ってくるかもしれん。
295:デフォルトの名無しさん
08/11/06 21:55:11
ありがとうございます。よく調べてみます!
296:デフォルトの名無しさん
08/11/08 23:05:21
URLリンク(upload.fam.cx)
297:デフォルトの名無しさん
08/12/24 14:58:22
test
298:デフォルトの名無しさん
08/12/30 03:01:09
>>272
もういないだろうけど小●先生はきっとここ見てると思うよ
299:デフォルトの名無しさん
09/01/01 11:48:51
299
300:デフォルトの名無しさん
09/01/01 11:49:35
300
301: 【小吉】 【1044円】
09/01/01 11:52:07
○
/⌒\ (__)
\●/(__)/⌒\
∩ ( ・ω・ )\●/ あけましておめでとうございます
Y  ̄ ||y||  ̄`''φ
Lノ /ニ|| ! ソ >
乂/ノ ハ ヽー´
`ー-、__|
ことしもよろしくね☆
302:デフォルトの名無しさん
09/01/04 23:07:19
100マス計算をするプログラムを書いてください。
プログラムがランダムに出題し、人間が100個の
マスに回答を入力し、確認ボタンを押すと
全問正解なら回答にかかった時間を表示して終了。
間違った場合は間違った場所にカーソルが止まり、
別の値が入力されるまで待ちます。
横10個、縦10個の数字は各々11~99までの乱数、
演算は +,-,x のみでよいです。
よろしくおねがいします。
303:デフォルトの名無しさん
09/01/05 00:33:25
>>302
全然宿題じゃないだろこれw
仕事頼むなら金出せよ
304:デフォルトの名無しさん
09/01/05 01:13:00
>>302
URLリンク(www.imymode.com)
作成方法について
作り方を公開する予定は今のところないのですが、実際プログラムは驚くほど簡単です。
10×10のマスにランダムに数字を入れて、それを計算と会っているかどうかチェックするだけです。プログラムを始めたばかりの方の勉強として作るにはちょうどいいかもしれません。
がんばってくださいね。
305:デフォルトの名無しさん
09/01/05 01:14:09
おまいらそんなレスでお茶を濁していていいのか
Python宿題スレでも見て来い
306:デフォルトの名無しさん
09/01/05 01:19:34
この百マス計算で、わが娘はギュウギュウ絞られ、はじめは7分とか8分かかって指折り数えながら問題を解いていましたが、この紙を200枚近く消化することで最近は3分あまりで問題を解くようになりました。
自分の小学生時代を思い起こせば、無駄な労力と思います。こんなことをしなくても足し算の答えなんて変わらないのだから、その分少しでも余分に遊んで暮らしたいと小学生なら思うことでしょう。
ところが大人になって、九九の答えより足し算の答えのほうが出しにくいことを悟ってからは、人間多少はこんな理不尽な労働もしておく必要があったことを少しはわかりました。
第一の試練は、人生最大の難関だった就職試験に「クレペリン検査」が含まれていたことです。
10分ほどの時間を限られて、数字の列をただ足していくテストですが、私は1分で50ほどしか足し算ができず、本当は正答数より仕事上のムラや能率を調べるテストなはずですが、自分の能力の低さを改めて思い知らされることになりました。
それに追い討ちをかけるように、検査の間の休息時間に試験官がこんなことを言い出したのです。
「この検査ねえ。私は長年やっているけれども一人だけ、いたね。1分間で百問全部できる人が。傾向も何もわかったものじゃない。まあ、能力が高いといえばそれまでなんだけどね。」
試験中にそんなことを言い出す試験官もけっこう珍しいとは思います。
その後、私の受験勉強にクレペリン検査対策が含まれたのは言うまでもありません。ちょっとやっておけば少なくともうろたえないで済みます。
第二の試練は、「脳を鍛える大人のDSトレーニング」の登場です。
私も鍛えられなければボケる歳になってしまいました。
307:デフォルトの名無しさん
09/01/05 08:24:08
URLリンク(ja.wikipedia.org)
いじめとかそういう思い出がいつのまにか美化されるようなのと似た話だな。
308:デフォルトの名無しさん
09/01/05 08:33:29
URLリンク(ja.wikipedia.org)
老人にボケが発生するのは
死を待つ苦しみを和らげるためらしい
309:デフォルトの名無しさん
09/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:デフォルトの名無しさん
09/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:デフォルトの名無しさん
09/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:デフォルトの名無しさん
09/01/05 11:12:45
もしかして減算は上の値から左の値を引くのかな
だったらcheckメソッド内の '-'=>proc{|y,x| y-x} を {|y,x| x-y} に修正
313:デフォルトの名無しさん
09/01/06 02:37:04
生きるだけなら人の一生は長い。
しかしそれ以外するには時間が足りない。
うまくなりたいなら毎日やる。
ひとつだけならまだしも
二つとなるとハードルは一気に上がる。
そしてそのことを悩むとなれば三つとなりまたあがる。
ならばいっその事悩まずに
やってしまえばいい。
一人今、この体での一度きりの人生。
悔いを残すくらいなら今を生きて
今できることをすればいい。
焦っても仕方のないことだから
歩いていこうどこまでも。
「人生は何かを成し遂げるには短すぎるものだが、何もしないとすれば長すぎる」
孔子
314:デフォルトの名無しさん
09/01/06 20:37:16
>>313
URLリンク(www.iknow.co.jp)
315:デフォルトの名無しさん
09/01/11 02:03:14
RubyでGUIアプリケーションは作成可能でしょうか?
友人からは、GUIアプリケーションは
VC++、VBとかじゃないと無理と聞いたのですが・・・
316:デフォルトの名無しさん
09/01/11 02:07:26
可能か不可能かだけを答えるなら、可能。
317:デフォルトの名無しさん
09/01/11 03:46:03
いろいろあるよ
URLリンク(jp.rubyist.net)
318:デフォルトの名無しさん
09/01/11 07:31:51
ていうか初心者スレでロクに相手されなかったからってマルチはよくねえな
ボタンなんかをくっつけてマウス操作に対応させることはできるが、GUIをメインに作る言語よりは絶対に劣る
ビジュアルなんとかの言語はGUI作成のフォローが半端ないから作るのが簡単
RubyでGUIをやるということは「わざわざ難しいやり方でイマイチなものを手間隙かけて作る」ことに他ならない
319:デフォルトの名無しさん
09/01/11 07:52:21
>>318
馬鹿ですね
わかります
320:デフォルトの名無しさん
09/01/11 09:19:41
>>315
>VC++、VBとかじゃないと無理と聞いたのですが・・・
釣りだろうけど
そんなことはないよ
URLリンク(wxpython.org)
321:デフォルトの名無しさん
09/01/11 09:37:13
「できる」と「やりやすい」の間には深く暗い溝がある
下手に「できる」と言わないほうがいいこともあるのさ
正確であることがいいこととは限らない
322:デフォルトの名無しさん
09/01/11 10:45:16
無理か無理じゃないかの溝のほうがでっかいけどな
323:デフォルトの名無しさん
09/01/11 10:53:29
つか、Aというプログラミング言語で可能なことがBというプログラミング言語で可能かどうかという問いには
多くの場合「そりゃやろうと思えば不可能じゃないけどぉ…」という留保つきの回答がほとんどだろ
324:デフォルトの名無しさん
09/01/11 11:33:38
Pythonは楽だけどRubyではしんどい
VBは楽で良いと思う
C++が楽というのは同意しかねる
C#の間違いじゃないのか
325:デフォルトの名無しさん
09/01/11 11:47:44
他人にやらせるのが一番いいよ
326:デフォルトの名無しさん
09/01/11 20:05:38
URLリンク(japanese.joelonsoftware.com)
327:デフォルトの名無しさん
09/01/17 15:15:14
宿題じゃないですが、これより強いジャンンケン戦略作れます?
URLリンク(www.ceres.dti.ne.jp)
328:デフォルトの名無しさん
09/01/17 16:06:38
/ /::// : : : : : : : i: : : ∧\: : : : :∧: :\ : : : : : : : : : ヽ.: : :|ム: : : : : : : : : : :
/ /://.: : : : : : :i : |: : : : ∧: ヘ: : : :∧: ::ム._: : : : : : : : :.l: : :|ム!: : : : : : : : : :
. / / .|.: : : : : : : |: :ム、: : ∧.ヘ ><´ ̄\ヘ`,ハ: : ム、 ハ: : |ム!: : : : : : : : : :
,'. |: : :i: : :i: : ハ,斗―.、: :∧ ヘ r',ィ==寸ュ、_,ハ: : i: |: : |: : |ム!: : : : : : : : : :
i | :|: i : : i: : :ヘ、〉zュ、\::ヘ. .\ '´ f⌒付ハヘ〉!|: |: |: : 「.ヽ!ム!: : : : : : : : : :
| |: |: i : : i: : : : r{.「⌒ヽ \ヘ. ` .kr'...::i:::::!′|: |: | : fい lム!: : : : : : : : : : :
| .| ∧ヘ: : :ヘ: : : N kr'::ム ヽ Vし'ク;ソ .|: |: |: / .メム!: : : : : : : : : : :
. N ヽ \: :\:`ヽ. Vし! `ー " ノ ル' / |/ Nム: : : : : : : : : : :
. '. \ \: :\∧ゝノ. . |: /.i .|. | Vム: : : : : : : : : :
. \|丶: : ∧. ` __ ,イ レi i. | .| i.Nム: : : : : : : : : :
|: :i: : 「`ヽ. ヽ ) / | i i. | .| i.|. Vム: : : : : : : :
|: :i: : | .,≧、 / | i i. | .| i.| Vム: : : : : : : :
-‐-、j: :i: :i.| / } ` rュ-1´ ,ィ| i i .L__ | i.| Vム: : : : : : :
. { ヽi i.|‐/ .ノ_,ィj .>! r<´ | i i .! `ヽ L__ Vム: : : : : :
`ヾ. └-イ / / ト、_}-{_ァ|. | i i | 、丶ヽy'¨ ̄`Vム__: : : : 受験生の皆さん
/ | `ー-‐'´ ̄ ̄`Y. .〈. ノ≧{:::{≦.、 | i i |. \/ }ム}. 〉 センター試験
. /. |、 、____,斗-!、/.::/:/:/|「|:∧:::〉| i i |、 >' ./ム! / 頑張って下さい
{ | ノ―〈/::/.:||::!:::::V. | i i |/ ./ム! /
329:デフォルトの名無しさん
09/01/17 16:17:36
>>327
これより強い戦略ってどういう意味で言ってるの?
330:デフォルトの名無しさん
09/01/17 16:30:54
>>329
よく考えたらじゃんけんで強い戦略なんてないですよね?
class NoStrategy < Strategy
def nextHand
Hand.new.getHand(rand(3))
end
end
として、このNoStrategyに対して常に5割を上回る勝率が出せる戦略ってあるのでしょうか?
さしずめ今回の問題に関しては、WinningStrategyに対してProbStrategyより高い勝率で勝てる
戦略って感じでしょうか。
331:デフォルトの名無しさん
09/01/17 16:38:32
>>330
ランダムに出す
332:デフォルトの名無しさん
09/01/17 21:18:56
33.33%以上はみり
333:デフォルトの名無しさん
09/01/17 21:19:54
33.33%以上は33.333%
334:デフォルトの名無しさん
09/01/18 09:24:33
人間は、直前に出した手と同じ手はあまり出さなかったりするようなクセがあるので、
人間がじゃんけんに出す手はランダムとは限らない。つまり、繰り返す場合は出してくる
手をバイグラムとかで分析して対応すれば期待値以上いく可能性はある。
というかざっと見た感じ、historyってのでなんかそれらしいことやってるね。
335:デフォルトの名無しさん
09/01/18 10:01:16
一番咄嗟に出やすいのがグーだと言われている
その次がパー
意識して出さないと出ないのがチョキ
336:デフォルトの名無しさん
09/01/18 10:09:08
L字のチョキはパーより上
337:デフォルトの名無しさん
09/01/18 10:51:37
>>335
「グーで負けた。グーで負けるというのは、保守的なために敗北したかのような、苦い後悔が残るものだ。 」
338:デフォルトの名無しさん
09/01/18 11:26:54
サザエさんが番組の終わりに出す手は
グー 282回
チョキ 308回
パー 283回
(1991-2009)
これ豆知識な
339:デフォルトの名無しさん
09/01/20 20:08:26
宿題ではなく、Hobby です。カレンダーデータを10年程度出力したいので以下のスクリプト
を作りました。コードと出力が美しくありません。
require 'date'
day=Date.new(2009,1,18)
for i in 1..5000
day=day.next
case day.wday
when 0
then printf("%s","日,")
when 1
then printf("%s","月,")
when 2
then printf("%s","火,")
# 中略
end
puts day.strftime("%Y%m%d,%Y,%b,%m月,%d,%a,%w,%W")
end
day.wday から月、火を出力するコードが冗長です。rubyらしくしたい。
月や日の表示がいつも2桁になります。01月ではなく1月にしたい。以上です。
340:デフォルトの名無しさん
09/01/20 20:11:45
Rubyらしくって話ならforはあまりというかほとんど使わない。
341:デフォルトの名無しさん
09/01/20 20:20:01
カレンダーは定番で安定だな
> day.wday から月、火を出力するコードが冗長です。
そういうときは、たとえばHashを使う
今回に限っては配列でもいいけれど
require 'date'
weekdays = {0 => '日', 1 => '月', 2 => '火',3 => '水', 4 => '木', 5 => '金', 6 => '土' }
puts weekdays[Date.today.wday]
342:デフォルトの名無しさん
09/01/20 20:44:16
>>339
require 'date'
day = Date.new(2009,1,18)
last = Date.new(day.year+1, day.month, day.mday)
weekdays = {0 => '日', 1 => '月', 2 => '火', 3 => '水', 4 => '木', 5 => '金', 6 => '土'}
while day < last do
wday = weekdays[day.wday]
puts day.strftime("%Y%m%d,%Y,%b,%-m月,%-d,#{wday},%w,%W")
day = day.next
end
もしかしたら、%-m や %-d は動作しないかもしれない
343:デフォルトの名無しさん
09/01/20 20:46:02
>>340
そうですね。 5000.times とかで書けるのでしょうか。
344:デフォルトの名無しさん
09/01/20 20:56:54
>>342
動きました。ちゃあんと1桁表示、2桁表示、自動的に変わります。
あ、ありがとうございました。なんというスピード。驚きました。
345:デフォルトの名無しさん
09/01/20 22:00:52
最悪で12回のメソッド呼び出し->O(1)
が何回もだもんなぁ。
346:デフォルトの名無しさん
09/01/20 22:30:55
wday = '日月火水木金土'[day.wday*2,2]
たぶんソースが2バイトにならないエンコード(UTF-8とか)だとだめ
347:デフォルトの名無しさん
09/01/20 22:32:15
>>346
測定可能な負荷または速度の差は発生しないか、たぶんハッシュのほうが誤差レベルで速い
348:デフォルトの名無しさん
09/01/20 22:41:20
>>346
これでよくねえ?ハッシュにする意味がわからんw
いやまあ結果的に全然問題ないし、もっと一般的な話なんだろうけど
puts %w[日 月 火 水 木 金 土][Date.today.wday]
349:デフォルトの名無しさん
09/01/20 22:45:35
>>342さんのをちょいじってみた。
Date#uptoがあるとさっき知ったもので。
require 'date'
y, m, d = 2009, 1, 18
weekdays = {0 => '日', 1 => '月', 2 => '火', 3 => '水', 4 => '木', 5 => '金', 6 => '土'}
Date.new(y, m, d).upto Date.new(y.succ, m, d.pred) do |day|
puts day.strftime("%Y%m%d,%Y,%b,%-m月,%-d,#{weekdays[day.wday]},%w,%W")
end
350:デフォルトの名無しさん
09/01/20 22:49:56
>>348
自分が書き捨てるなら配列を使う
ただ、これは「たまたま」 Date#wday の返り値が0から始まって抜けなく6まで連続していたから可能な
きわめて特殊な事例に過ぎないと考える
「case文が単純なルックアップしかしないのになんか冗長」という人に教えるのは
{条件 => 値} の Hashであるべきだと思うよ
351:デフォルトの名無しさん
09/01/20 22:53:46
0~6ってシンボルになるんかな
352:デフォルトの名無しさん
09/01/20 22:59:07
>>351
うんにゃ、Integerクラスのオブジェクト、つまりただの整数
RubyのHashのキーは、あらゆるオブジェクトを指定できる
文字列しか指定できないようなイメージがどうしても付きまとうが、本当は何でもいい
あとで変化してしまうようなものを指定するとキー名では取り出せなくなるけどな
353:デフォルトの名無しさん
09/01/20 23:19:25
wdayが0-6を返すのもmonが0-11なのも、「たまたま」でも「特殊」でもないよ
Cの構造体「struct tm」がベース、配列を使う事を前提に0からの連番になってる
こればどの言語でもほぼ共通してるからフツーは>>348風の記述になる
354:デフォルトの名無しさん
09/01/20 23:21:33
case → コレクションの変換というカテゴリにおいては「たまたま」でも間違ってないと思う
ここで配列じゃツブシが利かんわけで、宿題スレにはいまいち不向き
355:デフォルトの名無しさん
09/01/20 23:26:11
ロケールを適切にすればstrftimeで日本語の曜日が出てこないかね
356:デフォルトの名無しさん
09/01/20 23:57:20
>>355
あいにく、rubyの標準実装ではハードコーディングされているので㍉
357:デフォルトの名無しさん
09/01/21 00:07:37
cronで動かしたときだけシェルスクリプト中のなんかどっかの何かが違ってうまくいかん、という
めんどくさいデバッグの経験があると、ロケールに頼る出力は嫌がるね
358:デフォルトの名無しさん
09/01/25 18:16:41
オリジナルのrubyプログラムを作成しなさい。繰り返しや条件分岐といった
プログラミングの基本要素が含まれていればどんなものでも構いません。
ただし、20行以上の長さである事と、口頭試問によるプログラムの説明
をしてもらいます。
という課題が今日でたのですが、期限が明日までです。。。
誰か助けてください。
359:デフォルトの名無しさん
09/01/25 18:18:22
> 課題が今日でたのですが、期限が明日までです
うひゅ
まあどんなものでもいいというのなら、何かかんたんなゲームでも作ればいいんじゃね
説明もしやすかろう
360:デフォルトの名無しさん
09/01/25 18:21:16
プログラムはまあ出来るけど
>口頭試問によるプログラムの説明
こっちは助けられないぜ?
課題は簡単だから、とりあえずチュートリアル読んで自分で理解しないと
口頭試問はパスできないと思う。
URLリンク(www1.tf.chiba-u.jp)
361:デフォルトの名無しさん
09/01/25 18:26:52
他愛のないゲームは割とお勧めだが、
意外とめんどいのでじゃんけんはやめたほうがいいとアドバイスはしておく
自作の場合は「これなんでここをこういうふうにしたの?」に答えられないとかありえないからな
他人が作ったのではどうにもなるまい
362:デフォルトの名無しさん
09/01/25 18:31:21
これはいい課題だなw
363:デフォルトの名無しさん
09/01/25 18:34:51
下手に1週間とか期間長くすると
ファイル4つくらいでダウンローダー作ってくる空気読めない昔の俺みたいなのが混じるからな
1日でちっちゃいの適当に作れというのは妥当だ
てか、授業受けてて「あーじゃあこれでこういうプログラム作るとこんな動きするんだなー」とか思わなかったのかね
思わないんだとしたらどんなもの作ろうかさっぱり思いつかない可能性はあるな
364:デフォルトの名無しさん
09/01/25 18:41:13
URLリンク(www1.tf.chiba-u.jp)
ってどうやって見るんですか?文字化けしてわけが分かりません。。
質問ばかりで申し訳ない
365:デフォルトの名無しさん
09/01/25 18:42:22
>>364
use firefox
366:デフォルトの名無しさん
09/01/25 18:43:48
よく初心者が始める数当てゲームがいいんじゃないの?
367:デフォルトの名無しさん
09/01/25 18:44:59
なべあつ問題か、FizzBuzzでもいいのかもだが、
20行以上になるかな?
368:デフォルトの名無しさん
09/01/25 18:47:58
まあどんなプログラムを書くかも問題だが
とりあえず授業で出てきた関数/メソッド/構文を使うほうがいいぞ
そうでないと授業受けてないのがバレてツッコミが厳しくなることは容易に想像できる
369:デフォルトの名無しさん
09/01/25 18:48:59
>>364
どのブラウザか知らないが、
大抵は[表示]-[エンコード]みたいなメニューがあるから、そこでエンコードをUnicode(UTF-8)にする
ってかIE7、Firefox3、Opera9全部で正常に表示されたが
370:デフォルトの名無しさん
09/01/25 19:27:46
>>368
関数って何ですか?
371:デフォルトの名無しさん
09/01/25 19:41:19
授業で使ってない言葉使うのはまずいよね
372:デフォルトの名無しさん
09/01/25 19:53:45
>>370
hage("test");
↑
この hage って奴が関数
puts 1234.to_s
↑
これも関数だけどRubyでは
この . の後のつくのはメソッドという
373:デフォルトの名無しさん
09/01/25 20:04:42
>>372
Rubyには関数は存在できない
374:デフォルトの名無しさん
09/01/25 20:09:09
hage()もメソッドなんだけど便宜的に関数と呼ばれたりする
それを許さず関数とか言った途端に怒り出すのは狂信者
375:デフォルトの名無しさん
09/01/25 20:12:29
煽りにも気付かずに頑なに関数と言い放つ人をいじめたくなるのは分からんでもない
376:デフォルトの名無しさん
09/01/25 20:14:27
「クラスやメソッド」という言葉にそれ以外のものが混じる余地がないのがそれこそ普通だと思う
377:デフォルトの名無しさん
09/01/25 20:20:32
授業聴いてなかったと思われるから不利
378:デフォルトの名無しさん
09/01/25 20:25:50
出席すらしてないかも。
379:デフォルトの名無しさん
09/01/25 20:26:21
「宿題でこんなん作りましたがどうですか」でない時点で匙は投げてるだろ
380:デフォルトの名無しさん
09/01/25 20:41:20
いま、チュートリアル見ながらやってます。ありがとうございました。
また、途中で分からなくなったらよろしくお願いします。
381:デフォルトの名無しさん
09/01/25 21:33:28
オリジナルのrubyプログラムを作成しなさい。繰り返しや条件分岐といった
プログラミングの基本要素が含まれていればどんなものでも構いません。
ただし、20行以上の長さである事と、口頭試問によるプログラムの説明
をしてもらいます。
という課題が今日でたのですが、期限が明日までです。。。
誰か助けてください。
382:デフォルトの名無しさん
09/01/25 21:46:28
課題が思いつかないなら
数あてゲームや簡単なフィルタ(ファイルからのキーワード検索や大文字小文字変換とか)
でいいんじゃないの?
丸ごと考えろというならこんなところで聞いてないで適当にググって見つけた
ソースをコピベしたほうが早い
383:デフォルトの名無しさん
09/01/25 22:26:59
while true
384:デフォルトの名無しさん
09/01/25 23:51:57
[1] 授業単元: スクリプトプログラミング
[2] 問題文:curses及びファイル等機能拡張を実装したLifegameを作成しなさい。
[3] 環境
[3.1] OS:Mac OS X Leopard
[3.2] バージョン: Ruby 1.8.6
[3.3] 言語: Ruby
[4] 期限: 2009年01月27日21:00まで
[5] その他の制限: 特になし
385:デフォルトの名無しさん
09/01/25 23:53:00
require 'win32ole'
s = WIN32OLE.new('SAPI.SpVoice')
vs = s.GetVoices
naoko = nil
(0 .. vs.Count-1).each do |i|
id = vs.Item(i).Id
puts id
if (id.match(/LHNAOKO/))
naoko = vs.Item(i)
end
end
s.Voice = naoko
s.Rate = 5
s.Speak('課題が思いつかないなら', 2)
s.Speak('数あてゲームや簡単なフィルタ', 2)
s.Speak('(ファイルからのキーワード検索や大文字小文字変換とか)', 2)
s.Speak('でいいんじゃないの?', 2)
s.Speak('丸ごと考えろというなら', 2)
s.Speak('こんなところで聞いてないで', 2)
s.Speak('適当にググって見つけた', 2)
s.Speak('ソースをコピベしたほうが早い', 2)
386:デフォルトの名無しさん
09/01/26 00:45:46
女性の声はやめてほしいw
387:デフォルトの名無しさん
09/01/26 00:57:07
>>384
機能拡張前のLifegameのソースよこせ
388:デフォルトの名無しさん
09/01/26 01:11:47
URLリンク(metatoys.org)
389:デフォルトの名無しさん
09/01/26 01:49:08
ライフゲームくらいになると授業とは無関係に作ることができるから、
授業で作ったベースのものがないと頓珍漢なクオリティのしかできあがらないな
390:384 ◆tu89IYB51k
09/01/26 03:40:37
URLリンク(kansai2channeler.hp.infoseek.co.jp)
遅くなってすいませんベースです、どうもCursesのほうは実装されているようにも見えるのですが
恥ずかしながら授業にほとんど出てなかったため内容がほとんど理解できてません・・・
本当に申し訳ありませんがそれも含めてどうかお願いします
391:デフォルトの名無しさん
09/01/26 03:52:42
素直にCで授業やれよ、と思う
392:デフォルトの名無しさん
09/01/26 04:21:25
>[2] 問題文:curses及びファイル等機能拡張を実装したLifegameを作成しなさい。
これだけ読んでも、何作りゃいいのかさっぱりわからんのだが
ファイルをどうすりゃいいの?
393:デフォルトの名無しさん
09/01/26 04:42:07
#
# 初期盤面
#
def init()
$field=[
[1,0,0,0,0,0,1,0,0,0],
[1,0,0,1,0,0,0,0,1,0],
[0,0,1,1,0,0,1,0,0,0],
[0,0,0,1,0,1,0,0,0,0],
[0,0,0,1,0,0,0,1,0,0],
[0,0,0,0,0,0,0,0,1,0],
[0,0,0,0,0,0,0,0,1,0],
[0,0,0,0,1,1,0,0,1,0],
[0,1,0,0,1,0,0,0,0,0],
[0,0,0,0,1,0,0,0,1,0]]
# 盤面の大きさの設定(H=行数、W=幅)
$H=$field.size
$W=$field[0].size
$FP=open("lifegame.log","w")
end
394:デフォルトの名無しさん
09/01/26 04:42:56
def savefield()
for line in 0..$H-1
for col in 0..$W-1
$FP.print($field[line][col]==1?"o":"_")
end
$FP.print("\n")
end
end
##############
#
# MAIN
#
init()
createtmp()
init_screen() # curses 画面初期化
begin
crmode # リターンキーなしで文字入力を許す
for generation in 1..20
printfield()
$FP.print("Generation:",generation,"\n")
savefield()
nextgeneration()
copynext()
c=getch()
printf("[%x,%c]",c,c)
if( c==97 || c==0x1B )then; break; end
end
ensure
close_screen() # 画面を閉じる
$FP.close
end
395:デフォルトの名無しさん
09/01/26 04:46:34
出題者の書きたかったことの意図を汲んで、世代のログをファイルに保存してみた
正直、この書き方は気持ち悪くて仕方ない
Rubyでなくてもいい書き方をRubyでやる意味って確かにないよな
元のファイルの最初の init()…end を>>393で置き換えて、
最後の
##############
#
#
# MAIN
#
のとこを>>394で置き換える
##############
の前にdef savefield()…endがある状態
396:384 ◆tu89IYB51k
09/01/26 16:41:46
回答ありがとうございます、レスが遅くなってすいません。>>395を参考に置き換えてみたのですが
ruby: invalid option -1 (-h will show valid options) (RuntimeError)
とエラーが出て実行できません。たびたび申し訳ありませんがこのエラーの解決方法を教えてもらえませんか?
どうかよろしくお願いします
397:デフォルトの名無しさん
09/01/26 16:50:46
>>396
URLリンク(kansai2channeler.hp.infoseek.co.jp)
398:384 ◆tu89IYB51k
09/01/26 17:53:38
すいません、自分で統合してみたファイルのurlをつけるのを忘れてました
URLリンク(kansai2channeler.hp.infoseek.co.jp)
あと>>397さんのを試したところエラーは表示されなくなりましたが
Lifegameが表示されなくなってしまいました
399:デフォルトの名無しさん
09/01/27 14:01:03
> 恥ずかしながら授業にほとんど出てなかったため
ご両親はお前のために命を削って働いて
決して安くない授業料を捻出しているのに、
お前ときたら……。
400:デフォルトの名無しさん
09/01/27 14:42:46
親の教育のせいだね
401:デフォルトの名無しさん
09/01/27 14:48:07
まあ半分くらいはそうだな
402:デフォルトの名無しさん
09/01/29 04:23:49
URLリンク(www.nikoli.co.jp)
1.「スリザーリンク」を解くプログラムを書いてください
2.適当な難易度で問題を出題するプログラムを書いてください
403:デフォルトの名無しさん
09/01/29 08:15:04
なんでよりによってスリリンなんだ
404:デフォルトの名無しさん
09/01/29 08:49:58
そんな簡単に問題作れるなら俺だって問題送って小遣い稼ぎしたい
405:デフォルトの名無しさん
09/01/29 08:53:06
問題作成してお金になるなら俺だって小遣い稼ぎたい
406:デフォルトの名無しさん
09/01/29 09:13:38
スレリンク(tech板:751番)
> 751 名前:デフォルトの名無しさん [sage] 投稿日:2009/01/27(火) 18:46:14
> URLリンク(www.nikoli.co.jp)
> 1.「スリザーリンク」を解くプログラムを書いてください
> 2.適当な難易度で問題を出題するプログラムを書いてください
407:デフォルトの名無しさん
09/01/29 09:47:04
これは酷い
408:デフォルトの名無しさん
09/01/29 19:23:55
PuzzleManiakであるなあ。嵌ってるわ
起点への一本道をランダムに作るのはいいとして、どの程度ヒントを出すかが難しいな。
3と0だけ全部表示しちまって、あとは適当にランダムで表示する枠選べば適当な難易度になるかな?
面白い課題だけど実装案出すだけでもキツそうだなw
409:デフォルトの名無しさん
09/01/29 21:52:02
Ruby、Perl、Pythonの違いをレポートで比較しないといけないんですが、違いを教えてください。
410:デフォルトの名無しさん
09/01/29 22:03:13
>>409
Perlスレで聞け
411:デフォルトの名無しさん
09/01/29 22:04:53
>>410え、なんで?
412:デフォルトの名無しさん
09/01/29 22:11:46
的確なアドバイスだな
っていうか、Perlはバージョンによってアホみたいに内容が違うからPerlから攻めたほうが吉
413:デフォルトの名無しさん
09/01/29 22:43:21
Perlの質問スレないもん><
414:デフォルトの名無しさん
09/01/29 22:47:22
このへん?
スレリンク(tech板)
415:デフォルトの名無しさん
09/01/29 22:56:37
>>408
ヒントの出し方が悪いと答えが二通り以上考えられたりするんだよね
416:デフォルトの名無しさん
09/01/29 22:59:53
>>415
スリザーリンクは回答は1通りです
417:デフォルトの名無しさん
09/01/29 23:28:33
>>416
一通りにならないダメ問題が生成されるってことでしょ
418:デフォルトの名無しさん
09/01/30 00:54:54
何にせよ、ここでは解決しないって事がわかったのは良い経験
419:デフォルトの名無しさん
09/01/30 01:06:05
>>402
1だけ書いてみた
URLリンク(kansai2channeler.hp.infoseek.co.jp)
2は知らん
420:デフォルトの名無しさん
09/01/30 04:17:42
>>409
どれもあんまり新しい記事じじゃないが
matzがPythonについて語ってるの
URLリンク(jp.rubyist.net)
ラリーウォールがRubyについても一部語っている
URLリンク(slashdot.jp)
その後に企画されたmatzへのインタビュー
URLリンク(slashdot.jp)
421:デフォルトの名無しさん
09/01/30 09:12:42
>>419
狼!ありがとうございます!!
Pythonスレより先に解答が出るとは思いませんでした!!!
422:デフォルトの名無しさん
09/01/30 10:59:45
>>419の罪は重い
423:デフォルトの名無しさん
09/01/31 02:02:44
馬鹿なの?
死ぬの?
424:デフォルトの名無しさん
09/01/31 04:50:43
Ruby1.9.1キタ―――(゚∀゚)―――!!
425:デフォルトの名無しさん
09/01/31 23:02:02
スレリンク(denki板:965番)
426:デフォルトの名無しさん
09/02/02 00:37:30
>>419のコードを読んでみてる。
色んな意味で読みにくいんだが、面白いな。
Walls にちょっと感動したよ。
427:デフォルトの名無しさん
09/02/02 00:43:28
いや、これあまりRuby的ではないから参考にしたらいかんよ
428:デフォルトの名無しさん
09/02/02 00:50:00
早期の完全動作書き上げを目的にするから、その人の地が出るよね(それが面白いという説があるが)
なんとなくJavaっぽい雰囲気
printf() なんて久しぶりに見た
429:デフォルトの名無しさん
09/02/02 00:55:40
>>426
それは分かってる。自分用に読みやすく書き換えたコードからは、
とりあえずInteger#times()を追放した。
そろそろクラスの構成が変わるかも。
430:デフォルトの名無しさん
09/02/02 18:53:53
前回、カレンダーでお世話になりました。
前回は、1日1行でしたが、今回は、1週を1行にしたいのですが...
require 'date'
day = Date.new(2009,2,2)
last = Date.new(day.year+10, day.month, day.mday)
weekdays = {0 => '日', 1 => '月', 2 => '火', 3 => '水', 4 => '木', 5 => '金', 6 => '土'}
while day < last do
wday = weekdays[day.wday]
puts day.strftime("%Y%W,%Y,%b,%-m月,%-d,#{wday},%a,%w,%W")
day = day+7
end
で出力に、月曜日から日曜日までの出力を一行に出力したいですが
どうすれば良いでしょうか?
431:デフォルトの名無しさん
09/02/02 19:29:56
そのへんは山場なんでちっとは頭使おうぜ
print で月曜から改行なしで日付だけ表示して日曜日が終わったときに改行するようにしたいとか
日付の文字を月曜から7個追加していって1週間をヨコ長の文字列にして表示するのがよさそうとか
なんかプランとかないん?
432:デフォルトの名無しさん
09/02/02 19:51:10
でへっ
だんな、お見通しですな。
433:デフォルトの名無しさん
09/02/02 20:53:58
何点でしょうか? 一応、やりたいことはできたかな。
require 'date'
day = Date.new(2009,2,2)
last = Date.new(day.year, day.month+1, day.mday)
weekdays = {0 => '日', 1 => '月', 2 => '火', 3 => '水', 4 => '木', 5 => '金', 6 => '土'}
while day < last do
print day.strftime("%Y%W,%Y,%W,")
dayday=day
while dayday < day+7 do
wday = weekdays[dayday.wday]
print dayday.strftime("%b,%-m月,%-d,#{wday},%a,%w,")
dayday= dayday+1
end
print "\n"
day = day+7
end
434:デフォルトの名無しさん
09/02/02 21:35:02
60点くらいでいいとこなんじゃね
435:デフォルトの名無しさん
09/02/02 22:06:09
行末の "," が取れない。 60点かあ。Cってとこね。
436:デフォルトの名無しさん
09/02/02 22:35:17
そりゃ一体化してるからな
日付部は日付部だけにして、カンマは別なとこで表示するようにしとけ
そうしたほうがシンプルだ
月曜表示
カンマ
火曜表示
カンマ
水曜表示
カンマ
木曜表示
カンマ
金曜表示
カンマ
土曜表示
437:デフォルトの名無しさん
09/02/02 22:45:00
配列に文字列要素を格納していって最後に
カンマで結合して出力って手もある
a = []
a.push('a')
a.push('b')
a.push('c')
a.join(',')
=> "a,b,c"
438:デフォルトの名無しさん
09/02/02 22:57:29
まだ早いと思って飛ばしたんだが…
439:デフォルトの名無しさん
09/02/02 23:18:05
それは失礼しました
440:デフォルトの名無しさん
09/02/02 23:20:16
コレクションをいつ使ってもらうかってけっこう困るよね
441:デフォルトの名無しさん
09/02/02 23:28:31
やりたいことが明確なら、構文を便利機能として
まるのみしてもらって理解は後から、
というのもありかと
442:デフォルトの名無しさん
09/02/03 00:42:02
>>419です
そうですか、Java野郎なのバレバレですか
でも、最近は前任者の作ったひどい生jspを力技で
修正するばかりの日々なので、すでにJavaとすらいえないかも
実はRubyも10行以上のプログラムは数年ぶりで、newの構文が
30秒も思い出せなかったのにはびっくりです
コード書くのは面白かったんだけど、
Python, Perlの比較対象にならないソースでごめんなさい
443:デフォルトの名無しさん
09/02/03 22:30:07
1年でRuby習ったってのに2年ではPerl使えと言われた…
教授の趣味らしい
444:デフォルトの名無しさん
09/02/03 22:40:38
学生も大変なんですね。。。
445:デフォルトの名無しさん
09/02/03 22:44:52
3年はPythonですか
446:デフォルトの名無しさん
09/02/04 00:59:46
別の世界があることを知るのはよいことだ
447:デフォルトの名無しさん
09/02/04 01:54:32
実習授業の6割くらいは似非FORTRANとしてしか使ってないから
授業ごとに切り替わっても実際的な問題はない
448:デフォルトの名無しさん
09/02/04 03:51:41
授業ごとに切り替わるとかって大変じゃね?
全部習得したら凄い人材にはなりそうだけど
449:デフォルトの名無しさん
09/02/04 09:06:16
凄くはないだろ
450:デフォルトの名無しさん
09/02/04 13:12:02
C/Javaとスクリプトと関数型が切り替わるならすごいけどお手軽LLばっかり
やっててもな・・・
451:デフォルトの名無しさん
09/02/07 02:19:19
Scheme→C言語→空白→(Verilog HDL)
もどうかと思うけどな…。
452:435
09/02/07 10:31:16
>>435 ですが、こんな風にしてみました。
require 'date'
day = Date.new(2009,2,9)
last = Date.new(day.year, day.month+2, day.mday)
weekdays = {0 => '日', 1 => '月', 2 => '火', 3 => '水', 4 => '木', 5 => '金', 6 => '土'}
while day < last do
records=Array.new
records.push(day.strftime("%Y%W,%Y,%W"))
dday = day
while dday < day+7 do
wday = weekdays[dday.wday]
records.push(dday.strftime("%b,%-m,%d,%w,#{wday},%a"))
dday = dday+1
end
print records.join(',')
print "\n"
day = day+7
end
453:デフォルトの名無しさん
09/02/08 14:41:39
>>452
require 'date'
day = Date.new(2009,2,9)
last = Date.new(day.year, day.month+2, day.mday)
weekdays = "日,月,火,水,木,金,土".split(/,/)
while day < last
records = [day.strftime("%Y%W,%Y,%W")]
7.times{
records << day.strftime("%b,%-m,%d,%w,#{weekdays[day.wday]},%a")
day += 1
}
print records.join(','),"\n"
end
454:デフォルトの名無しさん
09/02/08 14:48:03
>>453
> weekdays = "日,月,火,水,木,金,土".split(/,/)
ソースにはこれの実行結果を直に書くべき
毎回文字列から split させるというのは微妙にくどい
というか>>435の欲しいものが微妙につかめない俺
455:デフォルトの名無しさん
09/02/08 14:57:21
オフィシャルに提供されてる
weekdays = %w(日 月 火 水 木 金 土)
みたいな書き方でもいいな
456:デフォルトの名無しさん
09/02/08 15:17:12
weekdays = defined? weekdays ? weekdays : "日,月,火,水,木,金,土".split(/,/)
457:デフォルトの名無しさん
09/02/08 16:29:33
>>456
きもい
458:デフォルトの名無しさん
09/02/08 17:05:20
>>454
「毎回」の意味を具体的に。
459:Calendar君
09/02/08 18:05:58
>>454
カレンダーデータを作成したい理由は、所謂、システム手帳の
週間スケジュールのリフィルを作りたい。これが目的です。
従いまして、
1. ruby でカレンダーデータを作成する。
2. カレンダーデータを OOo Base あるいは、MS Access に食わせる。
3. レポート機能を使って求めるリフィルをデザインし印刷する。
という事になります。OOo でレポートを作成するには、Sun Report Builder
という拡張ツールをインストールせねばなりませんが、まあそんな事を
やりたいために、まずは、ruby でカレンダーデータを作成しています。
祝日のデータは今のところ、手動で追加しています。
460:デフォルトの名無しさん
09/02/08 19:03:25
データ構造とかちゃんと考えてる?
今までのやりとり見てると、プログラムなんか作らずに手帳に直接書いた方がましに思える
461:デフォルトの名無しさん
09/02/08 19:10:06
ていうか印刷できるリフィルデータは巷にいくつかあるだろう
それのデザインだけ変えりゃいいんじゃねの
まあ、Rubyの勉強も兼ねたいっていうなら別に問題ないけれど
462:デフォルトの名無しさん
09/02/08 19:20:11
最初にことわったかも知れませんが半分Hobbyです。街中で入手できる
リフィルでは用が足りないためこんなことをしています。
データ構造とかは何をおっしゃりたいかよくわかりませんが、勉強のため
作成したデータは、MySQLとかに読ませ、OOo から接続したりとか
遊びのネタの中に、char で読み込むのか integer で読み込むのとか、
リソースを無駄使いしないように何文字にするかとかそれなりに考えて
いますが、答えになっていますか?
1年分を作成しようと思うと、手書きではねえ。それを手書きでいいや
と思えるようであれば、こんなことしていません。
463:デフォルトの名無しさん
09/02/08 22:56:55
最近
calendar.google.com
使ってみてる
意外と良いですよ
464:デフォルトの名無しさん
09/02/08 23:28:12
>>455がスマートだな。
>>459
OOOとかAccess通すより、RubyのPDF用ライブラリつかって直接印刷できる形式にした方が早そうだが。
趣味ならとめないが
465:デフォルトの名無しさん
09/02/08 23:29:24
うお、ageちゃった
祝日はAPI使ったら、楽にとれそうだよ
本を読む 祝日のリストをGoogle Calendar APIを使って作る
URLリンク(emasaka.blog65.fc2.com)
466:デフォルトの名無しさん
09/02/08 23:31:20
こっちの方がいいかも。
確か、公式のGoogle Calenderの休日って不完全なんだよね・・・
floatingdays: Google Calendar API で日本の祝日データを取得
URLリンク(fdays.blogspot.com)
467:デフォルトの名無しさん
09/02/08 23:40:26
>>458
こんなん直接 ["日", "月", "火", "水", "木", "金", "土"] でいいじゃん、という程度の話
468:デフォルトの名無しさん
09/02/08 23:51:42
ループの中でなければsplit()で何がいけないの、とか思ってしまうのだが
自分では
"日月火水木金土".split('')
みたいなスタイルが好き
469:デフォルトの名無しさん
09/02/09 00:00:15
URLリンク(www.google.com)
URLリンク(www.google.com)
470:デフォルトの名無しさん
09/02/09 19:46:27
>>464
これ質問しようと思っていたんです。 ruby からいきなり pdf に出力する
やり方があるんですね。これやりたい。次はこれ行ってみます。
471:デフォルトの名無しさん
09/02/09 19:53:50
>>470
てか、pdfを直接エディタで開け
それが答えだ
472:デフォルトの名無しさん
09/02/09 21:05:23
開けてみました。これは敷居が高いな。
473:デフォルトの名無しさん
09/02/09 21:20:28
いや、適当なpdf出力ライブラリ使えよw
検索したらいくつかあるぞ。
そこまで手取り足取りせなならんのかwww
474:デフォルトの名無しさん
09/02/09 22:04:15
あは、
また叱られてしまた。
はい、ぐぐってみましたです。履歴書の出力を説明したサイトを
見つけました。
475:デフォルトの名無しさん
09/02/10 06:38:22
おぬでとう
476:デフォルトの名無しさん
09/02/12 16:49:53
[1] 授業単元:Ruby
[2] 問題文(含コード&リンク):
1から9までの数字を縦横方向に同じものが並ばないように下記の例のように並べる
並べ方が全部で何通りあるかとその並びをすべて列挙する
[3] 環境:特になし
[4] 期限: 明日まで
[5] その他の制限:
例
534681297
685293714
948367125
153472869
426538971
261759483
817945632
379126548
792814356
477:デフォルトの名無しさん
09/02/12 17:02:19
> [4] 期限: 明日まで
鬼だ…
478:デフォルトの名無しさん
09/02/12 17:09:59
Python の宿題ここで答えます Part 1
スレリンク(tech板:785番)
C/C++の宿題片付けます 122代目
スレリンク(tech板:542番)
Rubyの宿題教えてください。2限目
スレリンク(tech板:476番)
こんなんで数独の掲載料もらえるなら俺だって問題送りたい
っていうか、前にスリザーリンク解かせた奴と同じだろお前
479:デフォルトの名無しさん
09/02/13 01:10:45
数独よりもゆるい条件だけど、その例の列を並び換えるだけで
9 ! = 362 880通りになるねえ。列挙頑張ってね!
480:デフォルトの名無しさん
09/02/13 01:12:35
行の並び替えもOKだから1例だけで
(9 ! = 362 880) * (9 ! = 362 880)
481:デフォルトの名無しさん
09/02/14 20:37:06
>>476
勉強がてら作ってみた。
3×3で12通り
4×4で576通り
5×5で161280通り
合ってるかな?
URLリンク(codepad.org)
482:デフォルトの名無しさん
09/02/14 20:51:09
URLリンク(en.wikipedia.org)
483:デフォルトの名無しさん
09/02/14 21:08:12
>>482
おー、合ってるみたいだ
484:デフォルトの名無しさん
09/02/14 22:39:16
>>481
最終セルの判定は calc の前でいいんじゃないの
で、if文の中にnext入れとけば
return if line > @num
の判定も不要
485:デフォルトの名無しさん
09/02/14 23:03:11
>>484
なるほど。
少し簡潔になりました。
アドバイス、サンクス。
486:デフォルトの名無しさん
09/02/23 14:38:51
誰か人いるかな?
487:デフォルトの名無しさん
09/02/23 14:48:35
雑談は雑談スレで
488:デフォルトの名無しさん
09/03/23 11:08:21
[1] 授業単元:Ruby
[2] 問題文(含コード&リンク): 下の例参照
与えられた数字のみからなる文字列から各桁の数字に分割し、
隣り合う数字の合計の下一桁の値を並べたものを次の文字列とし、
結果が一桁になるまで繰り返しそれぞれの過程の文字列を出力する。
[3] 環境:特になし
[4] 期限: 明日まで
[5] その他の制限: 例
525123214112431
77635535523674
4398088075931
727886872424
99564459666
8410894522
251873974
76950261
3545287
899705
78675
5432
95
4
489:デフォルトの名無しさん
09/03/23 11:15:22
[1] 授業単元:Ruby
[2] 問題文(含コード&リンク): 課題2
>>488 の出力において(上から1段目だけは入力なので)
上から2段目から最後の段までに現れる0から9数字の
総出現数と各数字毎の出現比率を出力する。
[3] 環境:特になし
[4] 期限: 明日まで
[5] その他の制限:
129個
0: 10回 3%
1: 43回 20%
2: 8回 2%
...
9: 18回 6%
のように出力してください。
おながいします
490:デフォルトの名無しさん
09/03/23 11:32:14
[1] 授業単元:Ruby
[2] 問題文(含コード&リンク): 課題3
>>489 のスクリプト名を p2.rb とする
その入出力について入力はスクリプトへの標準入力として例えば
echo 525123214112431 | p2.rb
という形で受け取れるようにし、
10, 0.03, 43, 0.20, 8, 0.02, ... 18, 0.06, 129
の様に0から9までの出現数、出現比率(末尾に総数)をカンマ区切りで
出力するように変更し、
さらに新たなスクリプト p3.rb から別プロセスとして p2.rb を起動し、
標準出力を介して 111111111 から 999999999 までの連続する数字を与え、
それぞれの結果を出力する。
[3] 環境:特になし
[4] 期限: 明日まで
[5] その他の制限:
491:デフォルトの名無しさん
09/03/23 11:41:04
[1] 授業単元:Ruby
[2] 問題文(含コード&リンク): 課題4
>>490 の出力について
111111111 から 999999999 までの連続する数字を与える代わりに
N 桁の全ての数字を与え、N を 2 ~ 9 まで変化させたときに
各 N における全ての出現数、出現比率を0から9までの数字毎に合計し、出力する。
[3] 環境:特になし
[4] 期限: 明日まで
[5] その他の制限:
N = 2 のとき 10 ~ 99 について
10 -> 1 が 1回
11 -> 2 が 1回
12 -> 3 が 1回
...
99 -> 18, 9 -> 1 が 1回, 8 が 1回, 9 が 1回
の回数の合計として
0から9までの出現数、出現比率(末尾に総数)をカンマ区切りで出力する。
よろしくおねがいします。
492:デフォルトの名無しさん
09/03/23 11:55:37
配列に対する map は習った?
each_with_index は知っている?
範囲オブジェクト (0..9) は授業で出た?
標準入力のキーワードはいくつかあるけど授業のは何?
493:デフォルトの名無しさん
09/03/23 11:57:58
あ、map は collect かもしれない
a = [1,2,3]
b = a.map{|e| e*2}
p b
これが [2, 4, 6] になるやつ
map でも collect でもいい
494:デフォルトの名無しさん
09/03/23 12:00:18
まだあった
>>490
> さらに新たなスクリプト p3.rb から別プロセスとして p2.rb を起動し
で使うと思われるメソッド(関数)って何?
system とか `` とかあるけどどれ習った?
495:デフォルトの名無しさん
09/03/23 22:10:59
>>488だけやってみた
まぁ後は誰かがやってくれるのを期待してみよう
s=gets.chomp.bytes.map{|x|x-?0.ord}
while (s=s.each_cons(2).map{|x,y|(x+y)%10}).any?
$> << s << "\n"
end
496:デフォルトの名無しさん
09/03/24 02:22:34
>>490までは既にできてる
というか each ばっかでバカみたいに愚直平凡なコード書きまくって疲れたので返事があるまで放置
497:デフォルトの名無しさん
09/03/27 11:23:10
>>495 の罪は重い
498:デフォルトの名無しさん
09/03/28 07:48:29
まあはっきり言って、なにをやってるのかわかりません>< >>495
499:デフォルトの名無しさん
09/03/28 09:11:38
>>488の例での最後の2つ間違ってね?
500:デフォルトの名無しさん
09/03/28 09:26:39
>>499
間違ってるよ
コピペされないように大元が間違いを入れてるんだろう
正しいプログラムを作れば、>>488がそもそも間違ってる(数字の個数自体が合わない)
ということに気づけるようになっているのだろう
とか教育的意図を深読みしたときに限って単なる投稿時の書き写しミスだったりするわけだが(w
501:デフォルトの名無しさん
09/04/06 04:01:10
スルー推奨
502:デフォルトの名無しさん
09/04/08 01:02:35
は?
503:デフォルトの名無しさん
09/04/14 23:19:09
6個のreal型変数x1、y1、x2、y2、x3、y3を定義しそれぞれに実数つを読み込んで、xy平面上の3点
(x1、y1)(x2、y2)(x3、y3)を頂点に持つ三角形の面積を計算して、その値を表示するプログラムを作成してください。
・公式:底辺x高さ÷2を使って計算してください。
お願いします!!
504:デフォルトの名無しさん
09/04/15 03:47:09
マルチ乙
505:デフォルトの名無しさん
09/04/17 21:36:12
Nの階乗を再帰を用いた方法で計算してその計算過程も表示するプログラムを教えてください
あと
def factorial(n)
i = 1
j = 1
while(i <= n)
j = j * i
i = i + 1
end
return j
end
print "Nを入力してください : "
n = gets.to_i
printf("\n%d次のようにして計算します。\n\n", n)
wh = factorial(n)
printf("\n%dの答えは%dです。\n", n, wh)
ってプログラムの「次のようにして計算します。」
の実際の計算過程を表示するにはどう書き直せば良いのでしょうか?
回答お願いします
506:デフォルトの名無しさん
09/04/17 21:50:46
>>505です
すいませんテンプレ入れるの忘れました
[1] 授業単元:Ruby
[2] 問題文 ホワイトとブラック
[3] 環境:Ruby 1.8.6
[4] 期限:2009年月20日07:00まで
[5] その他の制限: Rubyのことは基本的なことくらいしかわかりません
507:デフォルトの名無しさん
09/04/17 21:51:57
「Ruby 階乗 再帰」くらいで検索すれば一発で出てくると思うんだが、そういうことやらないのはなんで?
いや、ものすごく純粋に疑問なんだけど
508:デフォルトの名無しさん
09/04/17 21:59:43
>>507さん
変数を代入してその数の階乗を求めなおかつ計算過程を表示するプログラムが乗ってないからです
509:デフォルトの名無しさん
09/04/17 22:10:20
他人に宿題やってもらおうなんて奴に考えなんぞある訳無い
def fact(n)
m = (1 < n ? fact(n-1) : 1)
result = n * m
puts '%d * %d = %d'%[m,n,result]
result
end
510:デフォルトの名無しさん
09/04/17 23:43:33
>>509さん
えっと・・・本当に初歩的なこと聞いて申し訳ないんですが
どこにそれを入れればよいのでしょうか・・・?
511:デフォルトの名無しさん
09/04/18 00:20:23
ホワイトとブラック ?
512:デフォルトの名無しさん
09/04/18 01:08:53
>>510
ファイル
513:デフォルトの名無しさん
09/04/18 10:29:27
>>511さん
授業で総称してるだけです
ホワイトは普通のNの階乗で
ブラックが再帰を使用した階乗です
>>512さん
言い方がまずかったです
どこの部分を>>509さんの書き込みのように書き直せばいいんですか?
514:デフォルトの名無しさん
09/04/18 10:43:11
授業聞いてれば 1時間で終わったのにね
手抜くから何時間も無駄にかかる
手元に実行環境があれば適当に実行して試せばわかるんだが難しいか
>>509 は >>505 の factorial を置き換えるものだから、factorial(n) の代わりに fact(n) で呼べばいい
ただ、授業で使ってない方法で書かれてるだろうから、このまま提出したら呼び出し食らって減点対象だぞ
515:デフォルトの名無しさん
09/04/18 11:22:34
>>514さん
申し訳ないです
どうやら勘違いしてたみたいです
>>509さんの書き込んでくれたソースを実際走らせて見たんですが
ファイル名:rb2: Invalid char |201' in expression
ファイル名:rb3: Invalid char |201' in expression
ファイル名:rb4: Invalid char |201' in expression
ファイル名:rb4: syntax error, unexpected tSTRING_BEG, e
xpecting kEND
puts '%d * %d = %d'%[m,n,result]
^
ファイル名:rb5: Invalid char |201' in expression
って出てしまいます
516:デフォルトの名無しさん
09/04/18 11:29:08
^は%の下です
517:デフォルトの名無しさん
09/04/18 12:13:06
全角空白になってる
518:デフォルトの名無しさん
09/04/18 12:48:57
>>515
>>517の言ってる事をもう少し噛み砕くと、
>>509のコードはインデントを表すのに全角空白を使ってる。
だからまず行頭の空白を消すべし。もしインデントが欲しかったら新たに加えなおせ。
def とか end を半角で書かなきゃいかんように、
空白文字はtab, spaceを使わにゃいかんと決まっとる。
519:デフォルトの名無しさん
09/04/18 14:03:12
>>513
書き換える必要はない。全角空白は削除する必要はあるけど
520:デフォルトの名無しさん
09/04/18 23:20:53
>>518-519さん
def fact(n)
m = (1 < n ? fact(n-1) : 1)
result = n * m
puts '%d * %d = %d'%[m,n,result]
result
end
と入力してコマンド プロンプトで起動してみましたが
何も実行されませんでした・・・。
521:デフォルトの名無しさん
09/04/18 23:53:45
定義だけで呼び出してないから。
522:デフォルトの名無しさん
09/04/19 00:04:35
>>521さん
呼び出しは
print "Nを入力してください : "
n = gets.to_i
printf("\n%d次のようにして計算します。\n\n", n)
wh = factorial(n)
printf("\n%dの答えは%dです。\n", n, wh)
で良いんですか?
523:デフォルトの名無しさん
09/04/19 00:05:19
>>522
>>514読んでないだろ。
524:デフォルトの名無しさん
09/04/19 01:00:48
>>523読みましたが・・・。
def factorial(n)
if n <= 1
1
else
n * factorial(n-1)
end
end
if ARGV[0] == nil
STDERR.puts "数はいくつ?"
exit 0
end
n =ARGV[0].to_i
printf("%dの階乗=%d\n", n , factorial(n))
一応教科書見ながら作ってみたんですが動かないんですが
どこが悪いんでしょうか?
525:デフォルトの名無しさん
09/04/19 01:35:00
おまえのあたま
526:デフォルトの名無しさん
09/04/19 03:00:15
留学生なのかな?
527:デフォルトの名無しさん
09/04/19 08:39:13
>>514 を音読しろ、まずはそれからだ
528:デフォルトの名無しさん
09/04/19 09:37:23
みなさんご迷惑をおかけして申し訳なかったです・・・。
なんかえらく勘違いしてました・・・。
ようやくできました
ありがとうございました
どうでもいいですが留学生ではないですよ
529:デフォルトの名無しさん
09/04/20 17:47:05
宿題のようで、宿題なのですがよろしくお願いします。
[1] 授業単元:Ruby
[2] 問題文 ファイル分割
下記は、hoge.csvを均等に4分割して tmp/ 以下に書き込むプログラムである。
ruby split.rb hoge.csv tmp/ 4
出力例
tmp/1out.csv
tmp/2out.csv
tmp/3out.csv
tmp/4out.csv
このプログラムをできるだけ簡潔に書け。
ただし、出力された各csvは hoge.csv の1行目のヘッダーを含むものとする。
[3] 環境:Ruby 1.8.7
[4] 期限:2009年月21日12:00まで
[5] その他の制限: RubyGems等の使用など特に制限はなし。より簡潔に書けた方がよい。