■掲示板に戻る■ ■過去ログ倉庫一覧■

【ruby】勉強部屋×メモ【ruby】
1にあ:2011/11/10(木) 07:47:16 ID:bAma8OPc0
rubyに関してのスレです。
勉強とメモ投下用。
雑談などはJavaスレでお願いします。

2にあ:2011/11/10(木) 08:47:53 ID:bAma8OPc0
# encoding: Windows-31J
while input_line = gets
words = input_line.split","
field_count = words.length
name, yomi, age, height, weight, job, special, hobby = words
if words[0][0] =='"'
print $.
puts '行目は行頭に’”’がついてますってんにゃらばすって人が・・・・・・(´;ω;`)ウッ…'
elsif words[0][0] == '('
print $.
puts '行目は行頭に(がついてますって香港のエロい人が言ってたみたいな気がする(´・ω・`)?'
elsif words.length > 8
print $.
puts '行目はデータ項目数が多いですってんにゃらばすって人がそう言ってました(´・ω・`)'
elsif words.length < 8
print $.
puts '行目はデータ項目数が少ないですってんにゃらばすって人がそう言ってました(´・ω・`)'
elsif age.to_i == 0 || age == 'unknown'
print $.
puts '行目は年齢の数値がありません'
elsif height.to_i == 0 || height == 'unknown'
print $.
puts '行目は身長の数値がありません'
elsif weight.to_i == 0 || weight == 'unknown'
print $.
puts '行目は体重の数値がありません'
elsif job == '不明' || job == 'unknown'
print $.
puts '行目は6番目のデータが不明です'
elsif special == '不明' || special == 'unknown'
print $.
puts '行目は7番目のデータが不明です'
elsif hobby == /不明|unknown| NotInformation| 趣味不詳| ??/
print $.
puts '行目は8番目のデータが不明です'
else
data_line = [name, yomi, age, height, weight, job, special, hobby]
data_line.each do |strings|
datas = strings.split","
strings_count = datas.length
name1, yomi1, age1, height1, weight1, job1, special1, hobby1 = datas
bmi = weight.to_f / (height.to_f/100.0) ** 2
puts input_line + ',' + bmi.to_s
end

end
end


これで配列使って出来たはずだけど・・
while input_line = gets
input_line = gets.chomp

の部分ね
input_line = gets.chomp
がはいるとエラーはくんだけども・・・・

3にあ:2011/11/10(木) 08:49:55 ID:bAma8OPc0
>>2

演習2
たぶん、読み込んだ行を配列に入れてくようなことやるのではないかと・・・
つまり
配列[一行目のデータ,二行目のデータ,・・・]
としてから、このデータを並び替えろってことみたい

応用(2)
input_data_array = []
while input_line = gets
input_data_array << input_line.chomp.split(', ')
end

を使う

んで、ここで作った
input_data_array
に対して.eachするってこと

input_data_array << input_line.chomp.split(', ')
という命令は、配列にデータを足すってことです

例えば
shiritori=['りんご']
shiritori<<'ごりら'
shiritori<<'ラッパ'
shiritori<<'パンダ'
shiritori<<'だんご'
みたいにして配列の要素が増やせるということ

4にあ:2011/11/10(木) 08:50:35 ID:bAma8OPc0

input_line = gets
input_line = input_line.chomp

5にあ:2011/11/10(木) 08:51:17 ID:bAma8OPc0
(´・ω・`)っ
http://jp.rubyist.net/magazine/?0018-GameProgramingForRubySDL

みたいな感じ(´・ω・`)
もっと高度なのもあるんだろうけど

Web上で動かすときはまた別っぽいね(;・∀・)

6にあ:2011/11/10(木) 13:08:24 ID:UW7xK5YM0
ruby関連
プログラミング Ruby
http://jbbs.livedoor.jp/bbs/read.cgi/internet/13821/1320484231/

月曜3限 2つめ
http://jbbs.livedoor.jp/bbs/read.cgi/internet/13821/1320484208/

(・∀・)スッドレ! メモiPod用(前のスレ埋)
http://jbbs.livedoor.jp/bbs/read.cgi/internet/12569/1317842147/

月曜3限(ruby講義1埋)
http://jbbs.livedoor.jp/bbs/read.cgi/internet/13821/1318826257/

資料
http://www.sw.it.aoyama.ac.jp/2011/PB2/

7にあ:2011/11/10(木) 14:11:15 ID:UW7xK5YM0
# encoding: Windows-31J
while input_line = gets
input_line = input_line.chomp
words = input_line.split","
field_count = words.length
name, yomi, age, height, weight, job, special, hobby = words
if words[0][0] =='"'
print $.
puts '行目は行頭に’”’がついてますってんにゃらばすって人が・・・・・・(´;ω;`)ウッ…'
elsif words[0][0] == '('
print $.
puts '行目は行頭に(がついてますって香港のエロい人が言ってたみたいな気がする(´・ω・`)?'
elsif words.length > 8
print $.
puts '行目はデータ項目数が多いですってんにゃらばすって人がそう言ってました(´・ω・`)'
elsif words.length < 8
print $.
puts '行目はデータ項目数が少ないですってんにゃらばすって人がそう言ってました(´・ω・`)'
elsif age.to_i == 0 || age == 'unknown'
print $.
puts '行目は年齢の数値がありません'
elsif height.to_i == 0 || height == 'unknown'
print $.
puts '行目は身長の数値がありません'
elsif weight.to_i == 0 || weight == 'unknown'
print $.
puts '行目は体重の数値がありません'
elsif job == '不明' || job == 'unknown'
print $.
puts '行目は6番目のデータが不明です'
elsif special == '不明' || special == 'unknown'
print $.
puts '行目は7番目のデータが不明です'
elsif hobby == /不明|unknown| NotInformation| 趣味不詳| ??/
print $.
puts '行目は8番目のデータが不明です'
else
data_line = [name, yomi, age, height, weight, job, special, hobby]
data_line.each do |strings|
datas = strings.split","
strings_count = datas.length
name1, yomi1, age1, height1, weight1, job1, special1, hobby1 = datas
bmi = weight.to_f / (height.to_f/100.0) ** 2
puts input_line + ',' + bmi.to_s
end

end
end


input_line.chompの部分修正

先が長いな…(´・ω・`)

8にあ:2011/11/10(木) 20:19:50 ID:.Hnr6E5c0
http://www.rubylife.jp/ini/array_class/index14.html

sortについて

9にあ:2011/11/10(木) 20:21:53 ID:.Hnr6E5c0
http://www.mapee.jp/ruby/grepsort_byenumerable.html

10にあ:2011/11/10(木) 20:22:44 ID:.Hnr6E5c0
http://doc.ruby-lang.org/ja/1.9.2/class/Enumerable.html

11にあ:2011/11/10(木) 21:14:13 ID:UW7xK5YM0
現時点まで

各個人のBMI値の算出


これからの流れ

eachの中で
input_lineにbmiの値を加えていく
方法は>>3を参照

sort_byを使って
体重ごとに並び替え

each で
名前、身長、体重、BMI を出力

発展: 出力の最後に「低体重」、「普通体重」、「前肥満」、「肥満」も出力

低体重 18.5未満
普通 18.5以上 25未満
前肥満 25以上 30未満
肥満 30以上

12にあ:2011/11/10(木) 21:37:41 ID:UW7xK5YM0
input_line_data = [input_line]
input_line_data << bmi.spilt','

ってなるのかなあ…(´・ω・`)

てか、.spilt','要るのかなあ(´・ω・`)?

13にあ:2011/11/10(木) 21:54:29 ID:UW7xK5YM0
>>12
配列の要素を足す命令なんだから配列の形式で多分加えられるはず…(´・ω・`)
つまり.spiltの部分はいらないはず。

input_line_data = [input_line]
input_line_data << bmi

これで
input_line_dataの中身は
input_lineにbmiという配列の要素を加えたことになるはずだ。

14にあ:2011/11/11(金) 14:49:25 ID:.Hnr6E5c0
# encoding: Windows-31J
while input_line = gets
input_line = input_line.chomp
words = input_line.split","
field_count = words.length
name, yomi, age, height, weight, job, special, hobby = words
if words[0][0] =='"'
print $.
puts '行目は行頭に’”’がついてますってんにゃらばすって人が・・・・・・(´;ω;`)ウッ…'
elsif words[0][0] == '('
print $.
puts '行目は行頭に(がついてますって香港のエロい人が言ってたみたいな気がする(´・ω・`)?'
elsif field_count > 8
print $.
puts '行目はデータ項目数が多いですってんにゃらばすって人がそう言ってました(´・ω・`)'
elsif field_count < 8
print $.
puts '行目はデータ項目数が少ないですってんにゃらばすって人がそう言ってました(´・ω・`)'
elsif age.to_i == 0 || age == 'unknown'
print $.
puts '行目は年齢の数値がありません'
elsif height.to_i == 0 || height == 'unknown'
print $.
puts '行目は身長の数値がありません'
elsif weight.to_i == 0 || weight == 'unknown'
print $.
puts '行目は体重の数値がありません'
elsif job == '不明' || job == 'unknown'
print $.
puts '行目は6番目のデータが不明です'
elsif special == '不明' || special == 'unknown'
print $.
puts '行目は7番目のデータが不明です'
elsif hobby == /不明|unknown| NotInformation| 趣味不詳| ??/
print $.
puts '行目は8番目のデータが不明です'
else
data_line = [input_line]
data_line.each do |strings|
datas = strings.split","
name1, yomi1, age1, height1, weight1, job1, special1, hobby1 = datas
bmi = weight.to_f / (height.to_f/100.0) ** 2
input_line_data = [data_line]
input_line_data << bmi
each_data = input_line_data
puts each_data
end
end
end


これでeach_data という変数の中にBMIデータを加えたデータが出来上がった(´・ω・`)
さらにこれを

応用(2)に当てはめて

datas_strings = []
while each_data = gets
datas_strings << each_data.chomp.split(',')
end

とかやってくのかな?
end

15にあ:2011/11/11(金) 18:06:48 ID:qrJkQ.vM0
とりあえず、今回はこの配列に内容を足すということをしていきます(´・ω・`)b

puts a[0]
のようにaという配列の中の最初のものを出力するとができると書きましたが、

このaの中にあるデータを書き換えることもできる事も出来ます。
例えば、

a=['ぱぱぼん','パパボンのパパ','パパボンのママ','パパボンのパパのパパ','パパボンのパパのママ']
#aという配列を設定
a[0]='ままぼん'
#aという配列の0番目をままぼんに書き換え
puts a[0]
#aという配列の0番目を出力

という形になっています。
結果は

ままぼん

と出力されます(´・ω・`)b

これは

b='ままぼん'
puts b

でも同じ

配列の書きかえ。

再代入のやり方!

16にあ:2011/11/11(金) 18:20:36 ID:qrJkQ.vM0
>>14
そもそもwhileの中にある文だからwhileは要らないかも…(´・ω・`)

そして、ここで二次元配列の形になるデータが出来上がる。
で、その二次元配列の中から一行分づつのデータを取り出して、その中の体重で並び替え、つまりソートでの並び替えをする。

…(´・ω・`)

#以下二次元配列の資料

配列の中に配列を入れる二次元配列というものがあります(´・ω・`)
例えば、人の名前が配列として列挙される場合
names=['サダム フセイン','ビン ラディン','アドルフ ひこにゃん','麻原 彰晃','にゃら まぎょん','名無しさん お腹いっぱい',]
などの場合
puts names[1]
とすると
ビン ラディン
などと表示されます・
これをさらに、「ビン」と「ラディン」に分けて格納しておくことができます。
names=[['サダム','フセイン'],'ビン ラディン','アドルフ ひこにゃん','麻原 彰晃','にゃら まぎょん','名無しさん お腹いっぱい',]
となっていると
names[0]は['サダム','フセイン']という配列になっていて
fusein=names[0]とすると
fusein[0]は「サダム」
fusein[1]は「フセイン」
が格納されてます。
よって、
names=[['サダム','フセイン'],'ビン ラディン','アドルフ ひこにゃん','麻原 彰晃','にゃら まぎょん','名無しさん お腹いっぱい',]
fusein=names[0]
puts fusein[0]
puts fusein[1]
を実行すると

サダム
フセイン

と出力されるのだけど、わざわざfusein=names[0]をしなくても
names=[['サダム','フセイン'],'ビン ラディン','アドルフ ひこにゃん','麻原 彰晃','にゃら まぎょん','名無しさん お腹いっぱい',]
puts names[0][0]
puts names[0][1]
でも

サダム
フセイン

と出力されます

これが2次元配列というものです(´・ω・`)b

いま、このデータは
names=[['サダム','フセイン'],'ビン ラディン','アドルフ ひこにゃん','麻原 彰晃','にゃら まぎょん','名無しさん お腹いっぱい',]
となって、サダム・フセインのデータ以外は2次元配列になっていないので、これを全て二次元配列の形にになおしなさい(´・ω・`)b

具体的には
names=[['サダム','フセイン'],'ビン ラディン','アドルフ ひこにゃん','麻原 彰晃','にゃら まぎょん','名無しさん お腹いっぱい',]
puts names[1][0]
puts names[1][1]
puts names[5][0]
puts names[5][1]
とすると






と表示されてしまうのを、1行目を書き換えることで

ビン
ラディン
名無しさん
お腹いっぱい

と表示されるように修正してみてください(´・ω・`)b

#資料ここまで

二次元配列から取り出すには二次元配列に対して、変数をつける。

その後、うーんと…(´・ω・`)
その変数のデータ(一行分)の区切りを指定してやる?

で、その区切りに名前をつける
その名前から体重のデータをもとにソートして
取り合えず並び替え。

17にあ:2011/11/11(金) 18:25:01 ID:qrJkQ.vM0
そしてそのデータを元に
eachで
名前、身長、体重、BMIだけを書き出す。
書き出す際に

if文を使って
低体重から肥満までのデータに当てはめて
それぞれに低体重、普通体重、などを表示させるようにputsさせていく。

で課題終了。かな。

うし。
先がようやく少し見えてきたかも。

18にあ:2011/11/11(金) 18:33:50 ID:qrJkQ.vM0
ここでrubyスレの課題

んでは、まず

# encoding: Windows-31J
a=['ぱぱぼん','パパボンのパパ','パパボンのママ','パパボンのパパのパパ','パパボンのパパのママ']
#ココにプログラムを追加するんだよ(´・ω・`)b
puts a[1]
puts a[4]


の配列のデータを
a[0]が「ままぼん」
a[1]が「ままぼんのパパ」
a[2]が「ままぼんのママ」
a[3]が「ままぼんのパパのパパ」
a[4]が「ままぼんのパパのママ」



# encoding: Windows-31J
a=['ぱぱぼん','パパボンのパパ','パパボンのママ','パパボンのパパのパパ','パパボンのパパのママ']
a[0] = 'ままぼん'
a[1] = 'ままぼんのパパ'
a[2] = 'ままぼんのママ'
a[3] = 'ままぼんのパパのパパ'
a[4] = 'ままぼんのパパのママ'
puts a[1]
puts a[4]

で書きかえ終了。

19にあ:2011/11/11(金) 18:35:47 ID:qrJkQ.vM0
スマホでやるのキツいな…(´・ω・`)

20にあ:2011/11/11(金) 20:20:41 ID:qrJkQ.vM0
オッケーです( ´∀`)

さて、ココで気付いたことがあるかな?
例えば、ここで
a[5]='ままぼんのままのまま'
とか足したら、
今まで5つだった配列にもう一つデータが加わることになるのです(´・ω・`)b

# encoding: Shift_JIS
a=['ぱぱぼん','パパボンのパパ','パパボンのママ','パパボンのパパのパパ','パパボンのパパのママ']
a[5]='ままぼんのままのまま'
とすると、
aの要素(配列の中身)の数が一個増えるんです。
配列の個数は.lengthで取得できたので
例えばaの要素の個数はa.lengthで取得することができます。
つまり、aの個数が見たければ
puts a.length
#↑表示するよ、↑aの長さ(配列の個数を)
っていうかたちになるわけですね。

実際にプログラムを見てみると
# encoding: Shift_JIS
a=['ぱぱぼん','パパボンのパパ','パパボンのママ','パパボンのパパのパパ','パパボンのパパのママ']
#aという配列を作りましたよ、中身はパパボンファミリー
puts a.length
#aという配列の長さを出力します
a[5]='ままぼん'
#aという配列の5番目(実際には6番目)に「ままぼん」を足しました
puts a.length
#aという配列の長さを出力します

というプログラムを書くと
5
6
と出力されるはずです
これは最初のaの中身が5つ
次に「ままぼん」を足した時にaの中身が6つになってることを示しています。

で、ここで疑問に思うのが
じゃぁ間違って
a[50]='ままぼん'
とかしたらどうなるのよ?
というところでしょう(´・ω・`)b

# encoding: Shift_JIS
a=['ぱぱぼん','パパボンのパパ','パパボンのママ','パパボンのパパのパパ','パパボンのパパのママ']
#aという配列を作りましたよ、中身はパパボンファミリー
#aという配列の長さを出力します
a[50]='ままぼん'
#aという配列の50番目(実際には51番目)に「ままぼん」を足しました
puts a.length
#aという配列の長さを出力します

こたえは51です(´・ω・`)b
つまり、(0番から数えて)50番目に何かデータを入れようとすると、配列の長さは51になるんです(´・ω・`)b
じゃぁ、何も入ってなかった(0から数えて)5番目とか10番目とかには何が入っているのでしょうか?

それは簡単なことで、「何も入っていない」んです。正確には「」が入っています。
実際にプログラムを動かしてみると

# encoding: Shift_JIS
a=['ぱぱぼん','パパボンのパパ','パパボンのママ','パパボンのパパのパパ','パパボンのパパのママ']
#aという配列を作りましたよ、中身はパパボンファミリー
a[50]='ままぼん'
#aという配列の50番目(実際には51番目)に「ままぼん」を足しました
puts a[0]
puts a[5]
puts a[10]
puts a[50]

を実行すると

ぱぱぼん


ままぼん

と表示されて、a[5]やa[10]には何も入っていないのがわかると思います。
本当に何も入ってないとエラーになるので、正確には「」が入っているわけです


一応メモ…(´・ω・`)

21にあ:2011/11/11(金) 20:33:09 ID:qrJkQ.vM0
>>20
配列の増やし方の単純化?
資料

んじゃね、配列を追加する時にいちいち個数を考えなきゃいけないのかというとそうではないのです
例えば、配列の個数を考えなきゃいけない場合だと

(´っ・ω・`)っ はーいはいはーい、お次の荷物は?
□□□□□_  ( ー`дー´)b エーット、荷物が1,2,3,4,5こあるから・・・(0番目から数えて)5コ目で荷物送ってくださいね

となり、プログラムは

# encoding: Shift_JIS
a=['ぱぱぼん','パパボンのパパ','パパボンのママ','パパボンのパパのパパ','パパボンのパパのママ']
#aという配列を作りましたよ、中身はパパボンファミリー(お荷物w)
next_number=a.length
#next_numberにaの配列の長さが入る。ココでは5が格納される
a[next_number]='ままぼん'
#aという配列の5番目(実際には6番目)に「ままぼん」を足しました
puts a[5]
#aという入れるの6番目を出力

ッテ感じの事になるわけです
ちなみにこの時の出力は

ままぼん

※配列の数え方は0から順番なのでその長さ(項目数)は常に数える時の数値+1となる。
のでその番号に対して項目を入れると必然的に項目が増えていく。

22にあ:2011/11/11(金) 21:25:45 ID:qrJkQ.vM0
>>16
# encoding: Windows-31J
while input_line = gets
input_line = input_line.chomp
words = input_line.split","
field_count = words.length
name, yomi, age, height, weight, job, special, hobby = words
if words[0][0] =='"'
print $.
puts '行目は行頭に’”’がついてますってんにゃらばすって人が・・・・・・(´;ω;`)ウッ…'
elsif words[0][0] == '('
print $.
puts '行目は行頭に(がついてますって香港のエロい人が言ってたみたいな気がする(´・ω・`)?'
elsif field_count > 8
print $.
puts '行目はデータ項目数が多いですってんにゃらばすって人がそう言ってました(´・ω・`)'
elsif field_count < 8
print $.
puts '行目はデータ項目数が少ないですってんにゃらばすって人がそう言ってました(´・ω・`)'
elsif age.to_i == 0 || age == 'unknown'
print $.
puts '行目は年齢の数値がありません'
elsif height.to_i == 0 || height == 'unknown'
print $.
puts '行目は身長の数値がありません'
elsif weight.to_i == 0 || weight == 'unknown'
print $.
puts '行目は体重の数値がありません'
elsif job == '不明' || job == 'unknown'
print $.
puts '行目は6番目のデータが不明です'
elsif special == '不明' || special == 'unknown'
print $.
puts '行目は7番目のデータが不明です'
elsif hobby == /不明|unknown| NotInformation| 趣味不詳| ??/
print $.
puts '行目は8番目のデータが不明です'
else
data_line = [input_line]
data_line.each do |strings|
datas = strings.split","
name1, yomi1, age1, height1, weight1, job1, special1, hobby1 = datas
bmi = weight.to_f / (height.to_f/100.0) ** 2
input_line_data = [data_line]
input_line_data << bmi
each_data = input_line_data
datas_strings = []
datas_strings << each_data.split(',')
data_string_parts = datas_strings.spilt","
names,kananame,ages,heights,weights,jobs,specials,hobbys,bmis = data_string_parts
ary = data_strings.sort_by {|data_string_parts|
weights.to_i
}
end
end
end
end


これで体重での並び替え??

23にあ:2011/11/11(金) 21:32:07 ID:qrJkQ.vM0
>>22
これでaryという変数は体重順番に出ているデータとなるとして
次はeach…(´・ω・`)

名前、身長、体重、BMIをputsの場合
BMI値もifでつける。

24にあ:2011/11/11(金) 22:14:42 ID:qrJkQ.vM0
ary.each do |body_mas|
ary_data = body_mas.spilt","
simei,furi,toshi,hei,wei,jo,spe,hob,bm = ary_data
body_data = '氏名:' + 'simei' + ' 身長:' + hei.to_s + ' 体重:' + wei.to_s + ' BMI値:' + bm.to_s
if bm < 18.5
puts body_data + ':低体重'
elsif bm > 18.5 && bm < 25
puts puts body_data + ':普通体重'
elsif bm > 25 && bm < 30
puts body_data + ':前肥満体重'
else
puts body_data + ':肥満体重'
end


あとでPCで確認…(´・ω・`)

25にあ:2011/11/11(金) 22:26:37 ID:qrJkQ.vM0
資料


a='ぱぱぼんの'
#変数aに文字列「パパボンの」を代入
a<<'ぱぱなのだ'
#文字列aに「ぱぱなのだ」を配列として追加
puts a
aを出力

とすると、なんと

パパボンのぱぱなのだ

としゅつりょくされるんです(´・ω・`)b
これはどういうことかというと

a='ぱぱぼんの'
#変数aに文字列「パパボンの」を代入
puts a[0]
#aの配列の1つ目の要素を出力
puts a[1]
#aの配列の2つ目の要素を出力

ってね、文字列って実は配列みたいな扱いだから、

a='ぱぱぼんの'
#変数aに文字列「パパボンの」を代入
a<<'ぱぱなのだ'

っていうのは
a自体が文字列だけど配列みたいに扱われているので

a = ['ぱ','ぱ','ぼ','ん','の']
a << ['ぱ','ぱ','な','の','だ']

でも同じ


文字列操作
文字列に配列のように要素を追加出来る

26にあ:2011/11/11(金) 22:28:42 ID:qrJkQ.vM0
>>24
ああっ(´っ;ω;`)っ
変数にクォーテーションは要らない!!

これも修正!

27にあ:2011/11/12(土) 00:32:37 ID:qrJkQ.vM0
>>24
あ、end足りない…(´・ω・`)

28にあ:2011/11/12(土) 18:21:53 ID:kX7u3njE0
eachはwhileの外。

メモ!!

29にあ:2011/11/12(土) 18:25:03 ID:kX7u3njE0
>>14
あれ…Σ(;ω;๑`)

でもこれ、whileの中でeachぶんまわしてるはず…

データファイルに書き出してないから結果細かく読んでなかったけどこれもそしたらやり直しなのか…(´;ω;`)

30にあ:2011/11/12(土) 22:39:25 ID:sWlgHIkA0
>>28
感覚としては
(´っ・ω・`)っおーしデータ読み込むでー。あ、でも変なデータは弾くお
[配列さん]←□□□□□□□□□□□□□□□□□□←[ファイル]

の部分を詳しく書くと


(´っ・ω・`)っはーい、ファイルからデータ流しますおー
[ファイル_...
|       □ (´0ω0`∩)体重チェックOK
|       □ (´0ω0`∩)身長チェックOK
|       □ (´0ω0`∩)年齢チェックOK
|       □ (´0ω0`∩)名前チェックOK
|       ・    ・
|       ・    ・
|       ・    ・
|       ・    ・
|       ・    ・
|       □(´0ω0`∩)うーし、オールオッケー
|     ε=□_ 配列]ヘ(゚∀゚ヘ)へっへっへ〜、上物だけを選別したぜ

ってかんじでまず配列にデータを作るんです。
ま、実際にはいっぺんに□が流れてるわけじゃないんだけどね。


whileの中にeachを使わないのはあくまでwhileの中では一行づつのデータを処理しているため、それを繰り返し指定してもすべてのデータにたいしての処理とはならない(最終的にはwhileですべてのデータを処理しているため、結果は正しくはすべてのデータに適応されているが、あくまでそれはwhileの処理である)

31にあ:2011/11/12(土) 22:39:59 ID:sWlgHIkA0
ちょっと情報整理。
上の私のはとりあえずwhileの中でeachしてても問題なく動いているように見えるが、eachは繰り返し命令で、whileも繰り返し命令。
故に無駄に繰り返しが指令されている。
そして、結果動くとしても無意味な繰り返し担っているため、結果は出ていてもこのeachは働いてないと結論付けられる。

学校の課題の指定ではあくまでeachを使ってとの指定。
ゆえにwhileは敢えて終了させてeachで書き直す必要が生まれてくる。

うし。
少し理解出来たかも。
whileに変更してputsだった部分を削り、elseではあくまで問題のない分のデータにせいぜいあらたな変数をつけるくらいで締め括りwhileを終了させる。

…かな(´・ω・`)?

32にあ:2011/11/12(土) 23:37:44 ID:sWlgHIkA0
解説を付けてしまうとあれなので、読みたくなかったらアボンしといてね(´・ω・`)b

data_line = [input_line]
#変数data_lineに配列としてinput_line(加工していない一行)を入れるよ
#この時data_lineは例えば「蒼井 そら, アオイ ソラ, 26, 155, 46, AV女優 タレント, ドライブ, 英語勉強」とかの文字列で
#要素はひとつだよ

data_line.each do |strings|
#んで、要素が一つのdata_lineていう配列に対してeachで全要素を取り出すよ←一回しか動かないやん(;・∀・)
#ちなみに例えばstringsの中身は「蒼井 そら, アオイ ソラ, 26, 155, 46, AV女優 タレント, ドライブ, 英語勉強」

datas = strings.split","
#datasっていう配列を作ってstirngs(蒼井 そら, アオイ ソラ, 26, 155, 46, AV女優 タレント, ドライブ, 英語勉強)を
#カンマで分解してはいれつにするよ(´・ω・`)
#中身は「蒼井 そら」「アオイ ソラ」「26」「155」「46」「AV女優 タレント」「ドライブ」「英語勉強」の8つだよ

name1, yomi1, age1, height1, weight1, job1, special1, hobby1 = datas
#datasからまとめて変数取り出したよ(解説略)

bmi = weight.to_f / (height.to_f/100.0) ** 2
#bmiを計算したよ

input_line_data = [data_line]
#input_line_dataを要素が一個の配列にしたよ。
#中身はdata_lineていう入れる。つまり、input_line_dataっていう箱を開けるとdata_lineという箱が出てきて
#data_lineていう箱を開けるとinput_lineが出てくる(´・ω・`)
#・・・ちょっと無駄に配列使ってる気もする(;・∀・)

input_line_data << bmi
#input_line_dataにbmiを配列要素として足したよ
#これでinputs_line_dataの中身はdata_lineとbmiのふたつになったお(´・ω・`)b

each_data = input_line_data
#each_dataにinput_line_dataをコピーしたよ
#ちなみに内容としては
#puts each_data[0][0]
#すると、「蒼井 そら, アオイ ソラ, 26, 155, 46, AV女優 タレント, ドライブ, 英語勉強」が出力されて
#puts each_data[1]
#するとbmiが出力されます(´・ω・`)b

puts each_data
#んで、出力

end
#eachの繰り返しだけど、この処理だと一回しか動いてないかなぁ(;・∀・)

っていう処理をしております(´・ω・`)b

配列のところゴチャゴチャしてるから、何ならアスキーアートで頑張って解説する( ー`дー´)キリッ

33にあ:2011/11/13(日) 12:24:15 ID:Tj71eflM0
とりあえずelseから書き直し!

34にあ:2011/11/13(日) 13:50:55 ID:Tj71eflM0
array1=[]
# array1という新しいからっぽの配列を作りましたよっと!
while ...
# 繰り返し命令!…の条件にあった場合以下の…を繰り返してね
...
end
# ここでwhileの繰り返し終わりです
array2=[]
# 今度はarray2っていう配列作ったよ!この配列はBMIを足していくための新しい配列だよ!
array1.each do |fields|
# ここから繰り返すよ。この新しい配列の中身の名前はfieldsだよ!
...
# 繰り返しの処理内容
end
# eachによる繰り返し終わりです!
...
...
...

whileも繰り返し
そんでwhileの中ではつねに1行分のデータが来るわけだからその中でeachを使っても無意味(繰り返すためのデータがない)


これを当てはめるとしたら、もしや最初から書き直し…(´・ω・`)?

35にあ:2011/11/13(日) 22:15:08 ID:cyOmGGnY0
>>16
# encoding: Windows-31J
while input_line = gets
input_line = input_line.chomp
words = input_line.split","
field_count = words.length
name, yomi, age, height, weight, job, special, hobby = words
if words[0][0] =='"'
print $.
puts '行目は行頭に’”’がついてますってんにゃらばすって人が・・・・・・(´;ω;`)ウッ…'
elsif words[0][0] == '('
print $.
puts '行目は行頭に(がついてますって香港のエロい人が言ってたみたいな気がする(´・ω・`)?'
elsif field_count > 8
print $.
puts '行目はデータ項目数が多いですってんにゃらばすって人がそう言ってました(´・ω・`)'
elsif field_count < 8
print $.
puts '行目はデータ項目数が少ないですってんにゃらばすって人がそう言ってました(´・ω・`)'
elsif age.to_i == 0 || age == 'unknown'
print $.
puts '行目は年齢の数値がありません'
elsif height.to_i == 0 || height == 'unknown'
print $.
puts '行目は身長の数値がありません'
elsif weight.to_i == 0 || weight == 'unknown'
print $.
puts '行目は体重の数値がありません'
elsif job == '不明' || job == 'unknown'
print $.
puts '行目は6番目のデータが不明です'
elsif special == '不明' || special == 'unknown'
print $.
puts '行目は7番目のデータが不明です'
elsif hobby == /不明|unknown| NotInformation| 趣味不詳| ??/
print $.
puts '行目は8番目のデータが不明です'
else
data_line = [input_line]
end


と、とりまwhileを終わらす。
この時点で問題のないデータは
data_lineという名前の配列になった。

はず…(´・ω・`)

36にあ:2011/11/13(日) 22:19:13 ID:cyOmGGnY0
お次は
eachでBMIを追加。

37にあ:2011/11/13(日) 23:05:18 ID:cyOmGGnY0
・・・・・・・・・(´;ω;`)
ごちゃごちゃになってきた。
elseの締め括りがいけないのかしら。
変数と配列とごちゃごちゃになって頭がこんがらがってきた。
本日終了。

38にあ:2011/11/14(月) 01:40:02 ID:cyOmGGnY0
うわぁぁぁん(´;ω;`)
気になって眠れないよう。
array = [data_line]
array.each do |bmi_data|
bmi = weight.to_f / (height.to_f /100.0)**2
array << bmi
end

# bmiを加えた配列arrayを作成
# 中身はbmi_data

data_strings = []
data_strings.each do |data|
data_strings << array
end

# 全データを格納した配列data_stringsを作成
# 中身はdata(二次元配列)

この二次元配列からが問題(´;ω;`)

39にあ:2011/11/14(月) 02:00:01 ID:cyOmGGnY0
putsさせない分、あたまがごちゃごちゃになりやすい。
putsしないなら変数に代入させると分かりやすく、かつ操作しやすくなるかな(´;ω;`)

40にあ:2011/11/14(月) 02:19:25 ID:cyOmGGnY0
array = [data_line]
array.each do |bmi_data|
bmi = weight.to_f / (height.to_f /100.0)**2
array << bmi
full_data = bmi_data
end

# bmiを加えた配列arrayを作成
# arrayの中身はfull_data

data_strings = []
data_strings.each do |data|
data_strings << full_data
one_data = data

name1,yomi1,age1,height1,weight1,job1,special1,hobby1,bmi1 = data
end

# 全データを格納した配列data_stringsを作成
# 中身はone_data

睡魔が…もうダメ…寝る(๑´-ω-).。oOO グゥグゥ

41にあ:2011/11/14(月) 02:20:42 ID:cyOmGGnY0
うずまきが…(๑´-ω-).。oOO グゥグゥ

42にあ:2011/11/14(月) 05:28:38 ID:cyOmGGnY0
rubyの配列の作り方(´・ω・`)b

a=['にゃんにゃん']
a<<'わんわん'
a<<'がうがう'
で、aは「にゃんにゃん」、「わんわん」、「がうがう」って配列になりました(´・ω・`)b

a=[]
#aに空の配列を定義
a<<'にゃんにゃん'
a<<'わんわん'
a<<'がうがう'
でもaは「にゃんにゃん」、「わんわん」、「がうがう」って配列になりました(´・ω・`)b

whileに絡めるとどうなるかな?



a=[]
#aに空の配列を定義
b=['にゃんにゃん','わんわん','がうがう']
c=['ぬこ','いぬ','Qちゃん']
d=['またたび','ほねっこ','まんじゅう']
a<<b
a<<c
a<<d
でaが二次元配列になる(´・ω・`)b
あえて解説はなし(´・ω・`)

a=[]
#aに空の配列を定義
b=['にゃんにゃん','わんわん','がうがう']
a<<b
c=['ぬこ','いぬ','Qちゃん']
a<<c
d=['またたび','ほねっこ','まんじゅう']
a<<d
の方が親切かな?

43にあ:2011/11/14(月) 06:37:58 ID:cyOmGGnY0
>>42
うーん…(´・ω・`)?
一回配列というかデータをバラして配列にいれていった方が良いのかなあ…

44にあ:2011/11/14(月) 07:42:37 ID:cyOmGGnY0
ちくしょおおお(´;ω;`)
今日までに先週の課題おわらせたかったのにいいいいいいい!!

45にあ:2011/11/14(月) 07:59:43 ID:cyOmGGnY0
>>16
# encoding: Windows-31J
while input_line = gets
input_line = input_line.chomp
words = input_line.split","
field_count = words.length
name, yomi, age, height, weight, job, special, hobby = words
if words[0][0] =='"'
print $.
puts '行目は行頭に’”’がついてますってんにゃらばすって人が・・・・・・(´;ω;`)ウッ…'
elsif words[0][0] == '('
print $.
puts '行目は行頭に(がついてますって香港のエロい人が言ってたみたいな気がする(´・ω・`)?'
elsif field_count > 8
print $.
puts '行目はデータ項目数が多いですってんにゃらばすって人がそう言ってました(´・ω・`)'
elsif field_count < 8
print $.
puts '行目はデータ項目数が少ないですってんにゃらばすって人がそう言ってました(´・ω・`)'
elsif age.to_i == 0 || age == 'unknown'
print $.
puts '行目は年齢の数値がありません'
elsif height.to_i == 0 || height == 'unknown'
print $.
puts '行目は身長の数値がありません'
elsif weight.to_i == 0 || weight == 'unknown'
print $.
puts '行目は体重の数値がありません'
elsif job == '不明' || job == 'unknown'
print $.
puts '行目は6番目のデータが不明です'
elsif special == '不明' || special == 'unknown'
print $.
puts '行目は7番目のデータが不明です'
elsif hobby == /不明|unknown| NotInformation| 趣味不詳| ??/
print $.
puts '行目は8番目のデータが不明です'
else
data_line = []
data_line << name
data_line << yomi
data_line << age
data_line << height
data_line << weight
data_line << job
data_line << special
data_line << hobby
end


これで
data_line = ['name','yomi','age','height','weight','job','special','hobby']
になってるはず…(´・ω・`)

46にあ:2011/11/14(月) 08:08:25 ID:cyOmGGnY0
まず、このdata_lineという配列にbmiを加えたい。
そしてそれはeachでやらなければならない。

data_line.each do |bmi_data|
bmi = weight.to_f / (height.to_f / 100.0)**2
data_line << bmi
end

で、
data_line = ['name','yomi','age','height','weight','job','special','hobby','bmi']

になってるはず(´;ω;`)

47にあ:2011/11/14(月) 08:15:29 ID:cyOmGGnY0
次はbmiを加えたデータすべてを読み込んだ二次元配列のデータを作って体重でソートしたい。
つまり
空っぽのあたらしい配列にdata_lineを読み込ませる。
すべてのデータを読み込ませるのに繰り返し処理が必要。

学校指定では.eachを使うはず。
だから

array = []
array.each do |full_data|
array << data_line
end

これでarrayの中にすべての人のデータが二次元配列として入ってるはず(´;ω;`)

48にあ:2011/11/14(月) 08:22:51 ID:cyOmGGnY0
>>45
あうΣ(;ω;๑`)

だから!!
変数にクォーテーションは(ry

49にあ:2011/11/14(月) 08:36:31 ID:cyOmGGnY0
array2 = array.sort_by do |last_data|
weight.to_i
end


これでarray2はソートされたデータ…になったのかな…(´・ω・`)?

50にあ:2011/11/14(月) 08:42:03 ID:cyOmGGnY0
array2.each do |body_mas|
array_data = body_mas.spilt","
simei,furi,toshi,hei,wei,jo,spe,hob,bm = array_data
body_data = '氏名:' + 'simei' + ' 身長:' + hei.to_s + ' 体重:' + wei.to_s + ' BMI値:' + bm.to_s
if bm < 18.5
puts body_data + ':低体重'
elsif bm > 18.5 && bm < 25
puts puts body_data + ':普通体重'
elsif bm > 25 && bm < 30
puts body_data + ':前肥満体重'
else
puts body_data + ':肥満体重'
end


ダメだ…(´・ω・`)
sort_byの結果をイメージ出来ないとそれを操作する部分がきちんと理解できない…(´;ω;`)

51にあ:2011/11/14(月) 14:06:42 ID:cyOmGGnY0
>>45
そうだよ!
whileの中に変数の初期化入れたらダメだってば!!(´;ω;`)毎回蓄積させないと。


>>16
# encoding: Windows-31J
data_line = []
while input_line = gets
input_line = input_line.chomp
words = input_line.split","
field_count = words.length
name, yomi, age, height, weight, job, special, hobby = words
if words[0][0] =='"'
print $.
puts '行目は行頭に’”’がついてますってんにゃらばすって人が・・・・・・(´;ω;`)ウッ…'
elsif words[0][0] == '('
print $.
puts '行目は行頭に(がついてますって香港のエロい人が言ってたみたいな気がする(´・ω・`)?'
elsif field_count > 8
print $.
puts '行目はデータ項目数が多いですってんにゃらばすって人がそう言ってました(´・ω・`)'
elsif field_count < 8
print $.
puts '行目はデータ項目数が少ないですってんにゃらばすって人がそう言ってました(´・ω・`)'
elsif age.to_i == 0 || age == 'unknown'
print $.
puts '行目は年齢の数値がありません'
elsif height.to_i == 0 || height == 'unknown'
print $.
puts '行目は身長の数値がありません'
elsif weight.to_i == 0 || weight == 'unknown'
print $.
puts '行目は体重の数値がありません'
elsif job == '不明' || job == 'unknown'
print $.
puts '行目は6番目のデータが不明です'
elsif special == '不明' || special == 'unknown'
print $.
puts '行目は7番目のデータが不明です'
elsif hobby == /不明|unknown| NotInformation| 趣味不詳| ??/
print $.
puts '行目は8番目のデータが不明です'
else
data_line << name
data_line << yomi
data_line << age
data_line << height
data_line << weight
data_line << job
data_line << special
data_line << hobby
end


とりあえずこうだーー!!

52にあ:2011/11/14(月) 14:15:17 ID:cyOmGGnY0
え…(´;ω;`)
っと…
でもこれだと
data_line
すべての人のデータが入った二次元配列になっちゃうわけで(´;ω;`)

ってことはwhileで配列つくろうとすること自体、やめないと後から混乱してくるってか、おかしくなるのかなあ??

もともとはputs
プログラムは上から順番に実行される。

つまりwhileがend
で全部のデータの判別まではまずやる。


その後そのデータを使ってeachになっていくとして
whileの中では
つか
elseの中では
やはり選別しおわったデータを変数に格納する。程度で終わった方が無難なのかな?

53にあ:2011/11/14(月) 14:29:46 ID:cyOmGGnY0
# encoding: Windows-31J
while input_line = gets
input_line = input_line.chomp
words = input_line.split","
field_count = words.length
name, yomi, age, height, weight, job, special, hobby = words
if words[0][0] =='"'
print $.
puts '行目は行頭に’”’がついてますってんにゃらばすって人が・・・・・・(´;ω;`)ウッ…'
elsif words[0][0] == '('
print $.
puts '行目は行頭に(がついてますって香港のエロい人が言ってたみたいな気がする(´・ω・`)?'
elsif field_count > 8
print $.
puts '行目はデータ項目数が多いですってんにゃらばすって人がそう言ってました(´・ω・`)'
elsif field_count < 8
print $.
puts '行目はデータ項目数が少ないですってんにゃらばすって人がそう言ってました(´・ω・`)'
elsif age.to_i == 0 || age == 'unknown'
print $.
puts '行目は年齢の数値がありません'
elsif height.to_i == 0 || height == 'unknown'
print $.
puts '行目は身長の数値がありません'
elsif weight.to_i == 0 || weight == 'unknown'
print $.
puts '行目は体重の数値がありません'
elsif job == '不明' || job == 'unknown'
print $.
puts '行目は6番目のデータが不明です'
elsif special == '不明' || special == 'unknown'
print $.
puts '行目は7番目のデータが不明です'
elsif hobby == /不明|unknown| NotInformation| 趣味不詳| ??/
print $.
puts '行目は8番目のデータが不明です'
else
data_line = input_line
end


に戻す。

これで
以降、選別し終わったデータ一人分は
data_lineという変数になる。

54にあ:2011/11/14(月) 14:38:58 ID:cyOmGGnY0
whileの段階で二次元配列にするならば
さっきの形は基本いいとして…(´;ω;`)


# encoding: Windows-31J
data_line = []
while input_line = gets
input_line = input_line.chomp
words = input_line.split","
field_count = words.length
name, yomi, age, height, weight, job, special, hobby = words
if words[0][0] =='"'
print $.
puts '行目は行頭に’”’がついてますってんにゃらばすって人が・・・・・・(´;ω;`)ウッ…'
elsif words[0][0] == '('
print $.
puts '行目は行頭に(がついてますって香港のエロい人が言ってたみたいな気がする(´・ω・`)?'
elsif field_count > 8
print $.
puts '行目はデータ項目数が多いですってんにゃらばすって人がそう言ってました(´・ω・`)'
elsif field_count < 8
print $.
puts '行目はデータ項目数が少ないですってんにゃらばすって人がそう言ってました(´・ω・`)'
elsif age.to_i == 0 || age == 'unknown'
print $.
puts '行目は年齢の数値がありません'
elsif height.to_i == 0 || height == 'unknown'
print $.
puts '行目は身長の数値がありません'
elsif weight.to_i == 0 || weight == 'unknown'
print $.
puts '行目は体重の数値がありません'
elsif job == '不明' || job == 'unknown'
print $.
puts '行目は6番目のデータが不明です'
elsif special == '不明' || special == 'unknown'
print $.
puts '行目は7番目のデータが不明です'
elsif hobby == /不明|unknown| NotInformation| 趣味不詳| ??/
print $.
puts '行目は8番目のデータが不明です'
else
data_line << input_line
end

これで良いのかなあ…(´;ω;`)

細々配列に入れていくと二次元配列がなんか変なことになってしまいそうだし。

55にあ:2011/11/14(月) 15:57:00 ID:cyOmGGnY0
wordsは配列そのもの


# encoding: Windows-31J
data_line = []
while input_line = gets
input_line = input_line.chomp
words = input_line.split","
field_count = words.length
name, yomi, age, height, weight, job, special, hobby = words
if words[0][0] =='"'
print $.
puts '行目は行頭に’”’がついてますってんにゃらばすって人が・・・・・・(´;ω;`)ウッ…'
elsif words[0][0] == '('
print $.
puts '行目は行頭に(がついてますって香港のエロい人が言ってたみたいな気がする(´・ω・`)?'
elsif field_count > 8
print $.
puts '行目はデータ項目数が多いですってんにゃらばすって人がそう言ってました(´・ω・`)'
elsif field_count < 8
print $.
puts '行目はデータ項目数が少ないですってんにゃらばすって人がそう言ってました(´・ω・`)'
elsif age.to_i == 0 || age == 'unknown'
print $.
puts '行目は年齢の数値がありません'
elsif height.to_i == 0 || height == 'unknown'
print $.
puts '行目は身長の数値がありません'
elsif weight.to_i == 0 || weight == 'unknown'
print $.
puts '行目は体重の数値がありません'
elsif job == '不明' || job == 'unknown'
print $.
puts '行目は6番目のデータが不明です'
elsif special == '不明' || special == 'unknown'
print $.
puts '行目は7番目のデータが不明です'
elsif hobby == /不明|unknown| NotInformation| 趣味不詳| ??/
print $.
puts '行目は8番目のデータが不明です'
else
data_line << words
end


でやっと二次元配列がwhileのendなあとに出現。
配列のなまえは
data_line
中身は
[[words],[words],[words]…]

と、データの人数分のすべてを格納してあるもの。

56にあ:2011/11/14(月) 20:43:48 ID:KZ1D0bqM0
つぎにしたいこと。
それぞれのwordsにbmiをくっつけたい。

そしてそれをまたソートするためには二次元配列にしておきたい。

57にあ:2011/11/14(月) 21:04:02 ID:KZ1D0bqM0
この処理、いっぺんにやろうとすると無理がありそうだなあ…(´・ω・`)

まずはdata_lineからwordsを取りだし、それにbmiを加える。

ほんでつぎにその、bmiを加えたあとのwordsを二次元配列として格納していく。
ってやらないとダメかぬ。

58にあ:2011/11/14(月) 21:24:23 ID:.Hnr6E5c0
# encoding: Windows-31J
data_line = []
while input_line = gets
input_line = input_line.chomp
words = input_line.split","
field_count = words.length
name, yomi, age, height, weight, job, special, hobby = words
if words[0][0] =='"'
print $.
puts '行目は行頭に’”’がついてますってんにゃらばすって人が・・・・・・(´;ω;`)ウッ…'
elsif words[0][0] == '('
print $.
puts '行目は行頭に(がついてますって香港のエロい人が言ってたみたいな気がする(´・ω・`)?'
elsif field_count > 8
print $.
puts '行目はデータ項目数が多いですってんにゃらばすって人がそう言ってました(´・ω・`)'
elsif field_count < 8
print $.
puts '行目はデータ項目数が少ないですってんにゃらばすって人がそう言ってました(´・ω・`)'
elsif age.to_i == 0 || age == 'unknown'
print $.
puts '行目は年齢の数値がありません'
elsif height.to_i == 0 || height == 'unknown'
print $.
puts '行目は身長の数値がありません'
elsif weight.to_i == 0 || weight == 'unknown'
print $.
puts '行目は体重の数値がありません'
elsif job == '不明' || job == 'unknown'
print $.
puts '行目は6番目のデータが不明です'
elsif special == '不明' || special == 'unknown'
print $.
puts '行目は7番目のデータが不明です'
elsif hobby == /不明|unknown| NotInformation| 趣味不詳| ??/
print $.
puts '行目は8番目のデータが不明です'
else
data_line << words
end
end
array = []
data_line.each do |words|
bmi = weight.to_f / (height.to_f / 100.0)**2
words << bmi
array << words
end

59にあ:2011/11/14(月) 21:32:24 ID:KZ1D0bqM0
array2 = array.sort_by do |words|
weight.to_i
end

(´・ω・`)?

未確認ソート物体…

60にあ:2011/11/15(火) 01:15:11 ID:KZ1D0bqM0
>>59
そういえば;忘れてる…(´・ω・`)
資料ではついてたはずだ。
後で見直して直さなきゃ…

61にあ:2011/11/15(火) 19:55:37 ID:bM6Oldss0
# encoding: Windows-31J
data_line = []
while input_line = gets
input_line = input_line.chomp
words = input_line.split","
field_count = words.length
name, yomi, age, height, weight, job, special, hobby = words
if words[0][0] =='"'
print $.
puts '行目は行頭に’”’がついてますってんにゃらばすって人が・・・・・・(´;ω;`)ウッ…'
elsif words[0][0] == '('
print $.
puts '行目は行頭に(がついてますって香港のエロい人が言ってたみたいな気がする(´・ω・`)?'
elsif field_count > 8
print $.
puts '行目はデータ項目数が多いですってんにゃらばすって人がそう言ってました(´・ω・`)'
elsif field_count < 8
print $.
puts '行目はデータ項目数が少ないですってんにゃらばすって人がそう言ってました(´・ω・`)'
elsif age.to_i == 0 || age == 'unknown'
print $.
puts '行目は年齢の数値がありません'
elsif height.to_i == 0 || height == 'unknown'
print $.
puts '行目は身長の数値がありません'
elsif weight.to_i == 0 || weight == 'unknown'
print $.
puts '行目は体重の数値がありません'
elsif job == '不明' || job == 'unknown'
print $.
puts '行目は6番目のデータが不明です'
elsif special == '不明' || special == 'unknown'
print $.
puts '行目は7番目のデータが不明です'
elsif hobby == /不明|unknown| NotInformation| 趣味不詳| ??/
print $.
puts '行目は8番目のデータが不明です'
else
data_line << words
end
end
array = []
data_line.each do |words|
bmi = weight.to_f / (height.to_f / 100.0)**2
words << bmi
array << words
end
array2 = array.sort_by do |words|
weight.to_i
end
array2.each do |words|
name, yomi, age, height, weight, job, special, hobby,bmi = words
body_data = '氏名:' + name + ' 身長:' + height.to_s + ' 体重:' + weight.to_s + ' BMI値:' + bmi.to_s
if bmi.to_f < 18.5
puts body_data + ':低体重'
elsif bmi.to_f > 18.5 && bmi.to_f < 25
puts puts body_data + ':普通体重'
elsif bmi.to_f > 25 && bm < 30
puts body_data + ':前肥満体重'
else
puts body_data + ':肥満体重'
end
end







BMIがおかしいいい(´;ω;`)
何かがどうかなってBMIが全員一緒になってる・・・

62にあ:2011/11/15(火) 20:03:27 ID:bM6Oldss0
# encoding: Windows-31J
data_line = []
while input_line = gets
input_line = input_line.chomp
words = input_line.split","
field_count = words.length
name, yomi, age, height, weight, job, special, hobby = words
bmi = weight.to_f / (height.to_f / 100.0)**2
if words[0][0] =='"'
print $.
puts '行目は行頭に’”’がついてますってんにゃらばすって人が・・・・・・(´;ω;`)ウッ…'
elsif words[0][0] == '('
print $.
puts '行目は行頭に(がついてますって香港のエロい人が言ってたみたいな気がする(´・ω・`)?'
elsif field_count > 8
print $.
puts '行目はデータ項目数が多いですってんにゃらばすって人がそう言ってました(´・ω・`)'
elsif field_count < 8
print $.
puts '行目はデータ項目数が少ないですってんにゃらばすって人がそう言ってました(´・ω・`)'
elsif age.to_i == 0 || age == 'unknown'
print $.
puts '行目は年齢の数値がありません'
elsif height.to_i == 0 || height == 'unknown'
print $.
puts '行目は身長の数値がありません'
elsif weight.to_i == 0 || weight == 'unknown'
print $.
puts '行目は体重の数値がありません'
elsif job == '不明' || job == 'unknown'
print $.
puts '行目は6番目のデータが不明です'
elsif special == '不明' || special == 'unknown'
print $.
puts '行目は7番目のデータが不明です'
elsif hobby == /不明|unknown| NotInformation| 趣味不詳| ??/
print $.
puts '行目は8番目のデータが不明です'
else
words << bmi
data_line << words
end
end
array = []
data_line.each do |words|
array << words
end
array2 = array.sort_by do |words|
weight.to_i
end
array2.each do |words|
name, yomi, age, height, weight, job, special, hobby,bmi = words
body_data = '氏名:' + name + ' 身長:' + height.to_s + ' 体重:' + weight.to_s + ' BMI値:' + bmi.to_s
if bmi.to_f < 18.5
puts body_data + ':低体重'
elsif bmi.to_f > 18.5 && bmi.to_f < 25
puts puts body_data + ':普通体重'
elsif bmi.to_f > 25 && bmi.to_f < 30
puts body_data + ':前肥満体重'
else
puts body_data + ':肥満体重'
end
end


こうするとBMIはきちんとなるけど・・・・体重でソートされてない・・・・(´・ω・`)

63にあ:2011/11/15(火) 20:12:20 ID:bM6Oldss0
# encoding: Windows-31J
data_line = []
while input_line = gets
input_line = input_line.chomp
words = input_line.split","
field_count = words.length
name, yomi, age, height, weight, job, special, hobby = words
bmi = weight.to_f / (height.to_f / 100.0)**2
if words[0][0] =='"'
print $.
puts '行目は行頭に’”’がついてますってんにゃらばすって人が・・・・・・(´;ω;`)ウッ…'
elsif words[0][0] == '('
print $.
puts '行目は行頭に(がついてますって香港のエロい人が言ってたみたいな気がする(´・ω・`)?'
elsif field_count > 8
print $.
puts '行目はデータ項目数が多いですってんにゃらばすって人がそう言ってました(´・ω・`)'
elsif field_count < 8
print $.
puts '行目はデータ項目数が少ないですってんにゃらばすって人がそう言ってました(´・ω・`)'
elsif age.to_i == 0 || age == 'unknown'
print $.
puts '行目は年齢の数値がありません'
elsif height.to_i == 0 || height == 'unknown'
print $.
puts '行目は身長の数値がありません'
elsif weight.to_i == 0 || weight == 'unknown'
print $.
puts '行目は体重の数値がありません'
elsif job == '不明' || job == 'unknown'
print $.
puts '行目は6番目のデータが不明です'
elsif special == '不明' || special == 'unknown'
print $.
puts '行目は7番目のデータが不明です'
elsif hobby == /不明|unknown| NotInformation| 趣味不詳| ??/
print $.
puts '行目は8番目のデータが不明です'
else
words << bmi
data_line << words
end
end
array = []
data_line.each do |words|
array << words
end
array2 = array.sort_by do |words1|
name, yomi, age, height, weight, job, special, hobby,bmi = words1
weight.to_i
end
array2.each do |words2|
name, yomi, age, height, weight, job, special, hobby,bmi = words2
body_data = '氏名:' + name + ' 身長:' + height.to_s + ' 体重:' + weight.to_s + ' BMI値:' + bmi.to_s
if bmi.to_f < 18.5
puts body_data + ':低体重'
elsif bmi.to_f > 18.5 && bmi.to_f < 25
puts puts body_data + ':普通体重'
elsif bmi.to_f > 25 && bmi.to_f < 30
puts body_data + ':前肥満体重'
else
puts body_data + ':肥満体重'
end
end



これで体重順にソートも反映された

終了だああああああああああああああああああああ(´;ω;`)

64マスお:2011/11/15(火) 20:17:55 ID:bzP/OeqE0
おめでとう(`・ω・´)ノ

65にあ:2011/11/15(火) 20:19:09 ID:KZ1D0bqM0
また新たな試練が…ってかこれでやっと今週の資料に目を通せるし答も見られるお(´・ω・`)

66マスお(゚Д゚)!!:2011/11/15(火) 20:25:40 ID:A4RXkdTw0
http://jbbs.livedoor.jp/bbs/read.cgi/internet/12569/1320878836/61
で、
前略
array = []
data_line.each do |words|
bmi = weight.to_f / (height.to_f / 100.0)**2
words << bmi
array << words
end
後略
で、よく見てもらいたいんだけど、weightとheightの変数って、eachの中では定義も代入も
されていないのね(´・ω・`)b

全く同じ理由で
http://jbbs.livedoor.jp/bbs/read.cgi/internet/12569/1320878836/62

array2 = array.sort_by do |words|
weight.to_i
end
がうまくソートされていなくて
http://jbbs.livedoor.jp/bbs/read.cgi/internet/12569/1320878836/63
array2 = array.sort_by do |words1|
name, yomi, age, height, weight, job, special, hobby,bmi = words1
weight.to_i
end
としていますね?

つまり、eachの中でBMIを付加するには何をしたらいいかは・・・わかるのでは?

67にあ:2011/11/15(火) 20:27:47 ID:x5wpqs9Q0
readlinesがwhileのかわり?
ファイルを一気に読み込む
行ごとに分割
結果が配列

(´・ω・`)?

68にあ:2011/11/15(火) 20:29:04 ID:x5wpqs9Q0
>>66
あ、なるほどね。
代入してやらなきゃならなかったのか…(´・ω・`)

69にあ:2011/11/15(火) 20:35:00 ID:bM6Oldss0
# encoding: Windows-31J
data_line = []
while input_line = gets
input_line = input_line.chomp
words = input_line.split","
field_count = words.length
name, yomi, age, height, weight, job, special, hobby = words
if words[0][0] =='"'
print $.
puts '行目は行頭に’”’がついてますってんにゃらばすって人が・・・・・・(´;ω;`)ウッ…'
elsif words[0][0] == '('
print $.
puts '行目は行頭に(がついてますって香港のエロい人が言ってたみたいな気がする(´・ω・`)?'
elsif field_count > 8
print $.
puts '行目はデータ項目数が多いですってんにゃらばすって人がそう言ってました(´・ω・`)'
elsif field_count < 8
print $.
puts '行目はデータ項目数が少ないですってんにゃらばすって人がそう言ってました(´・ω・`)'
elsif age.to_i == 0 || age == 'unknown'
print $.
puts '行目は年齢の数値がありません'
elsif height.to_i == 0 || height == 'unknown'
print $.
puts '行目は身長の数値がありません'
elsif weight.to_i == 0 || weight == 'unknown'
print $.
puts '行目は体重の数値がありません'
elsif job == '不明' || job == 'unknown'
print $.
puts '行目は6番目のデータが不明です'
elsif special == '不明' || special == 'unknown'
print $.
puts '行目は7番目のデータが不明です'
elsif hobby == /不明|unknown| NotInformation| 趣味不詳| ??/
print $.
puts '行目は8番目のデータが不明です'
else
data_line << words
end
end
array = []
data_line.each do |words_1|
name, yomi, age, height, weight, job, special, hobby = words_1
bmi = weight.to_f / (height.to_f / 100.0)**2
words_1 << bmi
array << words_1
end
array2 = array.sort_by do |words1|
name, yomi, age, height, weight, job, special, hobby,bmi = words1
weight.to_i
end
array2.each do |words2|
name, yomi, age, height, weight, job, special, hobby,bmi = words2
body_data = '氏名:' + name + ' 身長:' + height.to_s + ' 体重:' + weight.to_s + ' BMI値:' + bmi.to_s
if bmi.to_f < 18.5
puts body_data + ':低体重'
elsif bmi.to_f > 18.5 && bmi.to_f < 25
puts puts body_data + ':普通体重'
elsif bmi.to_f > 25 && bmi.to_f < 30
puts body_data + ':前肥満体重'
else
puts body_data + ':肥満体重'
end
end

70にあ:2011/11/16(水) 07:37:53 ID:bM6Oldss0
[1, 2, 3, 4, 5].collect do |n| n*n end

配列の中身1,2,3,4,5それぞれの2乗

結果
1
4
9
16
25


[1, 2, 3, 4, 5].map do |n| n.to_s * n end

配列の中身 1,2,3,4,5をそれぞれそれぞれの数だけかける。
ここではto_sになっているため
1
22
333
4444
55555

のような結果となる
[1, 2, 3, 4, 5].map do |n| n * n end
to_sを除くと
1
4
9
16
25

という結果になる。
つまり掛け算


(1..5).map do |n| n.to_s * (6-n) end.join

1,2,3,4,5それぞれの数字を6から引いたものにかける
1の場合
1×(6−1)となる。 to_sについては前出の例題と同じ

結果
111112222333445

というようになる。



(1..5).map do |n| ' '*n + n.to_s * (6-n) end.join("\n")

(1〜5までそれぞれの数字×' ')+(それぞれの数字を6から引いたものにかけたもの)
to_sは毎度のことながら(ry
結果
11111
2222
333
44
5

・・・・・掲示板に反映されるのかな?これ?
(1個の空白)11111
(2個の空白)2222
(3個の空白)333
(4個の空白)44
(5個の空白)5


というような表示となる。

71にあ:2011/11/16(水) 07:38:07 ID:bM6Oldss0

a = (1..10).select do |n| n%3 = 0 end
puts a

a.rb:2: syntax error, unexpected '=', expecting keyword_end
a = (1..10).select do |n| n%3 = 0 end

エラー・・・・・・・・(´・ω・`)

1〜10それぞれの数字を3で割って?=0?????


だからエラーなのかな?
=0を外してみる

と、1〜10が順番に書き出されるだけ・・・・(´・ω・`)
わからんので保留



"abcdefghijk".split('').shuffle.join

これは a〜kをそのままシャッフルして書き出すというもの。
シャッフルであることの確認のため2回の結果

1回目
hfcdbigakej

2回目
dakjgehcifb


完全にランダム?つまり乱数的な????(´・ω・`)?

72にあ:2011/11/16(水) 07:47:06 ID:x5wpqs9Q0
(1..10).select do |n| n%3 = 0 end

について書いてるうちに閃いたto_iをくっつけたものだけやっとくか…(´・ω・`)?

73にあ:2011/11/16(水) 07:50:57 ID:bM6Oldss0
>>72
意味なかった・・・・・・(´・ω・`)

74にあ:2011/11/16(水) 08:00:15 ID:x5wpqs9Q0
だあああ!!
わからん!!
これは質問スレにもっていくべき(`;ω;´)

75にあ:2011/11/16(水) 08:15:11 ID:x5wpqs9Q0
さて。
★の山だが…(´・ω・`)

一行目が★ひとつ
30行目は★30個のピラミッドを作るってことかな?

つまり
あれ…(´・ω・`)?
33とかだと上手くピラミッド作れるけど30だとピラミッド作れない。
歪む。

ピラミッドじゃなく坂作れってことかな?


★★
★★★
★★★★

みたいなのだったら

★に行数かけていく形で行数が1から30にすれば上手くいくはず。

76にあ:2011/11/16(水) 08:21:02 ID:x5wpqs9Q0
collect使う(´・ω・`)

a = (1..30).collect do |n| n*'★'
puts a

とかかな?

77にあ:2011/11/16(水) 08:28:56 ID:bM6Oldss0
# encoding: Windows-31J
a = (1..30).collect do |n| '★'*n end
puts a

78にあ:2011/11/16(水) 08:31:18 ID:x5wpqs9Q0
文字×数字の形じゃないとエラーなんだぬ(´・ω・`)
どっかでそういえば言ってた気がする。
でも★の坂がでけた∩(´・ω・`)∩

79にあ:2011/11/16(水) 08:48:07 ID:x5wpqs9Q0
>>70
補足

.join
と記述すると
結果を一行にくっつけて吐き出すっぽい
.join("\n")
だと結果ごとに改行して吐き出す。
ってことかぬ。

80にあ:2011/11/16(水) 09:30:04 ID:bM6Oldss0
(1..10).select do |n| n%3 == 0 end

結果

3
6
9

割ったら=0ではなく
割り切れる数ってことだったぬw

81にあ:2011/11/16(水) 09:50:16 ID:x5wpqs9Q0
これって、シャッフルとコレクト、組み合わせとか出来るのかなあ…(´・ω・`)?

ピラミッドな★の山作って
★以外に○だとか☆とかをシャッフルで混ぜて表示出来たらこの季節にピッタリなクリスマスツリーも作れそうなのにな…(´・ω・`)

82マスお(゚Д゚)!!:2011/11/16(水) 14:04:51 ID:A4RXkdTw0
>>81
それ、演習3として採用( ´∀`)
①習ってないけど乱数を使う
>>81のようにシャッフルとコレクトを駆使する
どちらでも面白いね(´・ω・`)

>75は
| ★
| ★★
| ★★★



みたいに30段積み上げるのかも(´・ω・`)

83マスお(゚Д゚)!!:2011/11/16(水) 14:05:35 ID:A4RXkdTw0
>>82
スペースが消える病(´;ω;`)
ピラミッドみたいに左右対称がいいかもってこと。

84にあ:2011/11/16(水) 14:07:34 ID:x5wpqs9Q0
>>82
75はそれやると歪むかなと思って…(´・ω・`)
どっちなんだろね。

85マスお(゚Д゚)!!:2011/11/16(水) 14:09:03 ID:A4RXkdTw0
>>84
プリントでフォントの調整してみなさいみたいなこと書いてあったからできるかな?
過去の資料を見ればできそうなのでレッツトライ( ´∀`)

86マスお(゚Д゚)!!:2011/11/16(水) 14:12:00 ID:A4RXkdTw0
>>85
歪んだ(´;ω;`)

87にあ:2011/11/16(水) 14:12:44 ID:x5wpqs9Q0
>>85
それは演習3だお(´・ω・`)?
演習2ではフォント変えてとかはかかれてない。

横幅を33とかに設定してやれば出来ない事ではないんだ…(´・ω・`)
30で終わらそうとすると歪むの。

だから後でやってはみようかな。

88にあ:2011/11/16(水) 14:14:15 ID:x5wpqs9Q0
あ、ダメだ…(´・ω・`)
やっぱ歪む…(´・ω・`)

89にあ:2011/11/16(水) 14:15:29 ID:x5wpqs9Q0
歪まないでやろうとすると

  ★
 ★★★
★★★★★


みたいなんじゃないと無理だお?

90マスお(゚Д゚)!!:2011/11/16(水) 14:35:56 ID:A4RXkdTw0
>>89
確かに(´0ω0`∩)
ちなみに、クリスマスツリーはがんばって見てくれお(´・ω・`)
なんとか今までの知識で出来るみたい
歪まないように
  ★
 ★★★
★★★★★
な方向がベターかな?

91にあ:2011/11/16(水) 15:04:28 ID:bM6Oldss0
あれ・・・・・・・
やばい・・・・・
ふつうにゆがまないピラミッドできちゃった(´・ω・`)

# encoding: Windows-31J
a = (1..30).collect do |n| ' '*(30-n) + '★'*n end
puts a

92にあ:2011/11/16(水) 15:07:59 ID:bM6Oldss0
なぜ出来たのかすら皆目理解してない・・・・(´・ω・`)
でもきれい。

http://www.dotup.org/uploda/www.dotup.org2268866.jpg

93にあ:2011/11/16(水) 15:11:45 ID:bM6Oldss0
あ、そか
★は全角だけど' 'は半角だからか・・・フムフム(´・ω・`)

あとは
模様をランダムにするのがなあ・・・・

どうしたらいいんだろ(´・ω・`)

94にあ:2011/11/16(水) 15:25:23 ID:x5wpqs9Q0
1から30ってのはそれがそのまま行数にも関わる。
★の部分変えるにしても
あ、
★をこれまた配列にして
シャッフルってのを先に持ってきておいて(´・ω・`)?

ほんでその配列の名前を今の★のところに入れればいいのかなあ?

95にあ:2011/11/16(水) 15:35:52 ID:x5wpqs9Q0
シャッフルした結果のひとつだけを取り出すのってどうやればいいんだろ…(´・ω・`)?
s1,s2,s3みたいに名前つけておいて
s1とかやるとひとつの模様しか出なくなるし…(´・ω・`)?

96にあ:2011/11/16(水) 15:42:57 ID:x5wpqs9Q0
やっぱ乱数ってのを使う以外ないのかなあ(´・ω・`)?

わからんちん。

97マスお:2011/11/16(水) 15:57:31 ID:4J1U6M4s0
ヒントだしていい?

98マスお:2011/11/16(水) 16:10:19 ID:4J1U6M4s0
ある日
oooooとoさんが五人並んでいました。
ところがこの中の何人かをランダムでΘさんに入れ換えろと言うお触れが流れました
困ったので民衆は5人のoに5人のΘを足してぐるぐる混ぜてみました
oΘooΘΘΘooΘ
でもこのままでは入れ替えたことになりません
このとき村のある若者が気づいたのです
(´・ω・`)そうだ、ステチャエバイインダ

メデタシメデタシ

99にあ:2011/11/16(水) 16:11:25 ID:x5wpqs9Q0
…さっぱりわかりません(´;ω;`)

100マスお:2011/11/16(水) 16:17:28 ID:4J1U6M4s0
ある日
oさんが五人並んでいました。
ところがこの中の何人かをランダムでΘさんに入れ換えろと言うお触れが流れました
困ったので民衆は5人のoに5人のΘを足しました
oooooΘΘΘΘΘ

そしてぐるぐる混ぜてみました
oΘooΘΘΘooΘ

でもこのままでは入れ替えたことになりません
このとき村のある若者が気づいたのです
(´・ω・`)そうだ、ステチャエバイインダ

oΘooΘ →墓場 |ΘΘooΘ

(`・ω・´)よしよし、よくやった。わしはまんぞくじゃ

メデタシメデタシ

101にあ:2011/11/16(水) 16:23:54 ID:bM6Oldss0
>>100
さっきとどうも理解度が変わってません・・・・・(´・ω・`)

シャッフルされたものから余計な分を捨てろってこととしても・・

102にあ:2011/11/16(水) 16:26:33 ID:x5wpqs9Q0
まず配列を作る。
b = ['★','☆','○','●','□','■','◇','◆']
s1,s2,s3,s4,s5,s6,s7,s8 = tree
としたとする。

これらをランダムに、ひとつだけ
ってなると
b = ['★','☆','○','●','□','■','◇','◆'].shuffle
s1,s2,s3,s4,s5,s6,s7,s8 = tree

とかやってもランダム表示にはさせられない。

bを代入してもtreeを代入しても変(´・ω・`)

捨てると言われても…(´・ω・`)

103マスお:2011/11/16(水) 16:28:19 ID:4J1U6M4s0
あらw
つまり5行目なら、後ろに適当に混ぜたいもの5つとか足してシャッフル
んで、最初の五文字足せばいいかと(´・ω・`)

104にあ:2011/11/16(水) 16:30:51 ID:x5wpqs9Q0
>>102
なんかいろいろ抜けまくり…(´・ω・`)

まったくランダムにひとつだけ持ってくることは不可能?
固まりでかわるときれいな模様にならない。

105マスお:2011/11/16(水) 16:30:56 ID:4J1U6M4s0
>>71
の、文字列シャッフル使えないかな?
っても脳内プログラミングなんだけど(;´・ω・`)

106マスお:2011/11/16(水) 16:31:52 ID:4J1U6M4s0
>>104
きれいな...は想定してなかった(;´・ω・`)

107にあ:2011/11/16(水) 16:38:36 ID:x5wpqs9Q0
>>106
んーと?
つまり
表示させる部分の' 'は別として
'★'*n
の'★'の部分をランダムにしたいのね…(´・ω・`)
これが複数の文字になるときれいなツリーの形にはならないし
プログラム的に突き詰めて考えれば、可能なんだろうけど、先生のお題からは外れたやり方をもってこないと難しいみたいなんだゆ。

例えば、5種類の模様を使うとして
4行目までは'★'*nとして
5行目以降に5種類全部を表示にしてもその5種類+'★'*(行数-5)とかやらないといけなくなりそうだし…(´・ω・`)?

うーん…(´・ω・`)

108にあ:2011/11/16(水) 16:40:58 ID:x5wpqs9Q0
例えば
if使って行数ごとに
    ★
   ◆◆◆
  〇〇〇〇〇
 ■■■■■■■
★★★★★★★★★

とかならやれるのかなあ?

109マスお:2011/11/16(水) 16:45:16 ID:4J1U6M4s0
たぶんシンプルに一行は無理だからいろいろ処理が入ると思う
少ししたらPCで確認してみるね

110にあ:2011/11/16(水) 16:46:10 ID:x5wpqs9Q0
うい…(´・ω・`)

111マスお(゚Д゚)!!:2011/11/16(水) 17:08:18 ID:zO0mRKqk0
a = (1..30).collect do |n| '★'*n end
は、
a = (1..30).collect do |n|
'★'*n
end
と書きなおすことも出来ます

んでさらに、

a = (1..30).collect do |n|
strint= '★'*n
#stringという変数に★マークを入れてく
string
#このぶぶんは、stringをaという配列に格納する部分と考えて下さい
#Sortの時と同じ・・・といえばわかるかな?
end

とすることができるので、ココでいろんな処理ができるのです(´・ω・`)b
今、suffleとか試し中(´・ω・`)b

112マスお(゚Д゚)!!:2011/11/16(水) 17:09:25 ID:zO0mRKqk0
文字列関係の処理は
http://www.sw.it.aoyama.ac.jp/2011/PB2/lecture3.html
を参考にしていただければ(´・ω・`)
わしも今試してるところ

113マスお(゚Д゚)!!:2011/11/16(水) 17:16:42 ID:zO0mRKqk0
・・・あれ(´;ω;`)
文字列を一部取り出す処理が・・・ないお?(´;ω;`)

114にあ:2011/11/16(水) 17:18:43 ID:bM6Oldss0
# encoding: Windows-31J
a = (1..30).collect do |n| ' '*(30-n) + '★' * n end
b = (1..30).collect do |n| ' '*(30-n) + '○' * n end
c = (1..30).collect do |n| ' '*(30-n) + '■' * n end
d = (1..30).collect do |n| ' '*(30-n) + '◎' * n end
e = (1..30).collect do |n| ' '*(30-n) + '▲' * n end
if n == 1 or n == 6 or n == 11 or n == 16 or n == 21 or n == 26
puts a
elsif n == 2 or n == 7 or n == 12 or n == 17 or n == 22 or n == 27
puts b
elsif n == 3 or n == 8 or n == 13 or n == 18 or n == 23 or n == 28
puts c
elsif n == 4 or n == 9 or n == 14 or n == 19 or n == 24 or n == 29
puts d
else
puts e
end


これだとnをどうかしないと認識しないようでござる。。。(´・ω・`)

115マスお(゚Д゚)!!:2011/11/16(水) 17:24:19 ID:zO0mRKqk0
>>114
ごめん、最初から○○文字列目までを取得・・・とかの処理が授業でやってなかったでござる(´;ω;`)
本当に申し訳ないでござる
使っても.centerとかljust、rjustかな・・・

>>108
のようなkとをやりたいようなら%使うのがベターかな(´・ω・`)?
n=6
decoration=['★','○','■','◎','▲']
#decorationを配列で設定します
puts decoration[n%5]
#この例だと6を5で割った余りである1が入るので
#decorationという配列の1番目の要素である○が表示されます

116にあ:2011/11/16(水) 17:31:01 ID:x5wpqs9Q0
>>115
それでputsてはなく
ifの条件にもってけばいいってことかぬ(´・ω・`)?

117にあ:2011/11/16(水) 17:32:41 ID:x5wpqs9Q0
>>116
いあ、それとも違うな…(´・ω・`)?
えーと…(´・ω・`)?

118にあ:2011/11/16(水) 17:39:25 ID:bM6Oldss0
# encoding: Windows-31J
a = (1..30).collect do |n| ' '*(30-n) + '★' * n end
b = (1..30).collect do |n| ' '*(30-n) + '○' * n end
c = (1..30).collect do |n| ' '*(30-n) + '■' * n end
d = (1..30).collect do |n| ' '*(30-n) + '◎' * n end
e = (1..30).collect do |n| ' '*(30-n) + '▲' * n end
n = (1..30).collect do |n|
if n == 1 or n == 6 or n == 11 or n == 16 or n == 21 or n == 26
puts a
elsif n == 2 or n == 7 or n == 12 or n == 17 or n == 22 or n == 27
puts b
elsif n == 3 or n == 8 or n == 13 or n == 18 or n == 23 or n == 28
puts c
elsif n == 4 or n == 9 or n == 14 or n == 19 or n == 24 or n == 29
puts d
else
puts e
end
end





各模様のツリー全部吐き出しやがったでござる(´・ω・`)
そりゃそうだおなあ・・・・・

119にあ:2011/11/16(水) 17:46:26 ID:x5wpqs9Q0
そっかー…(´・ω・`)
whileと違って全部を読み込んで処理なんだっけ

ますます大混乱…(´・ω・`)

つか、1から30をどうにかしないといけないってことになるんだな…(´・ω・`)

1から30、つまりnを別に配列として定義して代入する形にしないとなのかな??

120にあ:2011/11/16(水) 17:58:00 ID:x5wpqs9Q0
1から30を繰り返しちゃうからその都度ツリー出現になるんだよな…(´・ω・`)

コレクトじゃなくセレクトとか使うべき?
よくわかんなくなったお(´;ω;`)

121にあ:2011/11/16(水) 18:26:14 ID:bM6Oldss0
# encoding: Windows-31J
n = (1..30).collect do |n|
a = ' '*(30-n) + '★' * n
b = ' '*(30-n) + '○' * n
c = ' '*(30-n) + '■' * n
d = ' '*(30-n) + '◎' * n
e = ' '*(30-n) + '▲' * n
if n == 1 or n == 6 or n == 11 or n == 16 or n == 21 or n == 26
puts a
elsif n == 2 or n == 7 or n == 12 or n == 17 or n == 22 or n == 27
puts b
elsif n == 3 or n == 8 or n == 13 or n == 18 or n == 23 or n == 28
puts c
elsif n == 4 or n == 9 or n == 14 or n == 19 or n == 24 or n == 29
puts d
else
puts e
end
end


でけた(´・ω・`)

122にあ:2011/11/16(水) 18:27:48 ID:x5wpqs9Q0
結構あっさりこんがらがりがとけた(`・ω・´)キリッ

そしてクリスマスにツリーが間に合ったあ!

123にあ:2011/11/16(水) 18:47:50 ID:bM6Oldss0
# encoding: Windows-31J
n = (1..30).collect do |n|
a = ' '*(30-n) + '★' * n
b = ' '*(30-n) + '○' * n
c = ' '*(30-n) + '■' * n
d = ' '*(30-n) + '◎' * n
e = ' '*(30-n) + '▲' * n
if n == 1 or n == 6 or n == 11 or n == 16 or n == 21 or n == 26
puts a
elsif n == 2 or n == 7 or n == 12 or n == 17 or n == 22 or n == 27
puts b
elsif n == 3 or n == 8 or n == 13 or n == 18 or n == 23 or n == 28
puts c
elsif n == 4 or n == 9 or n == 14 or n == 19 or n == 24 or n == 29
puts d
else
puts e
end
end
puts 'MerryXmas for You'.center 60

ちとおまけ(´・ω・`)

124にあ:2011/11/16(水) 20:36:40 ID:bM6Oldss0
簡略化できた(´・ω・`)

# encoding: Windows-31J
n = (1..50).collect do |n|
a = ' '*(50-n) + '★' * n
b = ' '*(50-n) + '○' * n
c = ' '*(50-n) + '■' * n
d = ' '*(50-n) + '◎' * n
e = ' '*(50-n) + '▲' * n
if n == 1 or n % 5 ==1
puts a
elsif n == 2 or n % 5 == 2
puts b
elsif n == 3 or n % 5 == 3
puts c
elsif n == 4 or n % 5 == 4
puts d
else
puts e
end
end
puts 'MerryXmas for You'.center 100


これ、もっと発展させると
50と100のところを
getsで取得させてってのも出来そうだぬ(´・ω・`)

125にあ:2011/11/16(水) 20:40:01 ID:bM6Oldss0
さらに整理


# encoding: Windows-31J
n = (1..50).collect do |n|
a = ' '*(50-n) + '★' * n
b = ' '*(50-n) + '○' * n
c = ' '*(50-n) + '■' * n
d = ' '*(50-n) + '◎' * n
e = ' '*(50-n) + '▲' * n
if n % 5 == 1
puts a
elsif n % 5 == 2
puts b
elsif n % 5 == 3
puts c
elsif n % 5 == 4
puts d
else
puts e
end
end
puts 'MerryXmas for You'.center 100



これでおkなんだぬ・・(´・ω・`)

126にあ:2011/11/16(水) 20:47:12 ID:bM6Oldss0
# encoding: Windows-31J
puts '好きな整数を入れてください'
w = gets.to_i
n = (1..w).collect do |n|
a = ' '*(w-n) + '★' * n
b = ' '*(w-n) + '○' * n
c = ' '*(w-n) + '■' * n
d = ' '*(w-n) + '◎' * n
e = ' '*(w-n) + '▲' * n
if n % 5 == 1
puts a
elsif n % 5 == 2
puts b
elsif n % 5 == 3
puts c
elsif n % 5 == 4
puts d
else
puts e
end
end
puts 'MerryXmas for You'.center w*2


これで任意の数字で好きなだけ大きくも小さくも出来るようになったお(´・ω・`)

127にあ:2011/11/16(水) 21:21:29 ID:wPEexvWw0
# encoding: Windows-31J
puts '好きな整数を入れてください'
w = gets.to_i
n = (1..w).collect do |n|
if n % 5 == 1
a = ' '*(w-n) + '★' * n
puts a
elsif n % 5 == 2
b = ' '*(w-n) + '○' * n
puts b
elsif n % 5 == 3
c = ' '*(w-n) + '■' * n
puts c
elsif n % 5 == 4
d = ' '*(w-n) + '◎' * n
puts d
else
e = ' '*(w-n) + '▲' * n
puts e
end
end
puts 'MerryXmas for You'.center w*2


こっちの方が実行速度が早い(´・ω・`)?

まだ理解がいまいち。

128マスお:2011/11/17(木) 00:18:51 ID:bzP/OeqE0
お、かなり高速になった(`・ω・´)

129にあ:2011/11/17(木) 00:22:59 ID:wPEexvWw0
getsなしの方、Rubotでやろうとしたら、横幅大きすぎてきれいにツリー表示を見られなかったw

130マスお:2011/11/17(木) 00:26:57 ID:bzP/OeqE0
>>129
www
今そっちのgetsにかわるもの考えてる
androidのapiでいけるきがするんだけど

131にあ:2011/11/17(木) 00:30:50 ID:wPEexvWw0
>>130
w = 5
にしてやったら
半角と全角のバランスがよくなくて(フォントの関係?等幅フォント系じゃないから?)歪んだツリーになったというね…(´;ω;`)

半角と全角はきっちり等幅にすべきだと思うの…(´;ω;`)

132マスお:2011/11/17(木) 00:33:17 ID:bzP/OeqE0
>>131
祖のためにフォント入れ換えとかはさすがにやだなぁwww

133にあ:2011/11/17(木) 00:34:59 ID:wPEexvWw0
>>132
IS05だとフォント、ひとつだけルート取らなくても入れられるはずなんだけどややこしくてまだ試してない…(´・ω・`)
AndroidSDKでやらないといけないみたいだし。
かわいい等幅フリーフォント探すのも大変そう。

134にあ:2011/11/17(木) 00:38:13 ID:wPEexvWw0
でも、演習3
★ピラミッドが演習2だとしたら
ツリーってのは演習3としては安易すぎるって学校のセンセは思わないかなあ…(´・ω・`)?
それなりにかなり苦労はあるけど、もっと他の配列の操作を使うものを課題としては求めてる気がしないでもない。

135にあ:2011/11/18(金) 07:19:18 ID:Pap35J/c0
input_lines = readlinesinput_data_array = input_lines.collect do |input_line| input_line.chomp.split(', ')end


readlines
ファイル (の残り) を一気に読み込む
行ごとに分割
結果が配列

.collectは.mapでも同じ。

配列になるデータの処理にwhileの代わりに使える処理。

136にあ:2011/11/18(金) 17:42:46 ID:bM6Oldss0
# encoding: Windows-31J
puts '好きな整数を入れてください'
w = gets.to_i
n = (1..w).collect do |n|
puts ' '*(w-n) + ((''.center n,'★●☆★※★☆■★☆□☆★◇★☆◆☆★').split '').shuffle.join
end

137にあ:2011/11/18(金) 19:18:37 ID:bM6Oldss0
# encoding: Windows-31J
puts '好きな整数を入れてください'
w = gets.to_i
pattern = ['★','○', '■','◎','▲']
n = (1..w).collect do |n| ' '*(w-n) + pattern[n%5] * n end
puts n
puts 'MerryXmas for You'.center w*2

でけたっ(´・ω・`)

138にあ:2011/11/18(金) 20:08:34 ID:Pap35J/c0
資料

# encoding: Windows-31J
n=1
puts ((''.center n,'★●※☆').split '').shuffle.join
n=5
puts ((''.center n,'★●※☆').split '').shuffle.join
n=8
puts ((''.center n,'★●※☆').split '').shuffle.join
って実行してみて
何回か実行すると、違うものが出力されるのに注目(´・ω・`)b

puts ((''.center n,'★●※☆').split '').shuffle.join
は、幾つかの段階があって
''←空白の文字列ですよ(´・ω・`)
''.center n,'★●※☆'←空白の文字列を文字列の長さがnになるまで★●※☆を繰り返し足しますよ
ちなみにcenterではなくて、ljustやrjust使っても同じ効果が得られます(´・ω・`)b
文字列.split '' ←文字列をバラバラにして配列に格納しますよ
配列.shuffle ←配列の中身をシャッフルしますよ
配列.join ←配列をつないで一つの文字列にしますよ(´・ω・`)

ってことをやってます(´・ω・`)

139にあ:2011/11/19(土) 11:46:08 ID:bM6Oldss0
さて、ねじりん棒…(´・ω・`)

資料

使うのは
pattern=['★●※☆','☆★●※','※☆★●','●※☆★']

ljust

%4
かぬ?


# encoding: Windows-31J
puts '好きな整数を入れてください'
w = gets.to_i
pattern = ['★◎●☆■△★','◎●☆■△★★','●☆■△★★◎','☆■△★★◎●','■△★★◎●☆']
a = (1..w).collect do |n| ' '*(w-n) + ((''.center n,'pattern[n%5].split '').join
end
puts a
puts 'MerryXmas for You' w*2

かな?

140にあ:2011/11/19(土) 12:20:11 ID:bM6Oldss0
# encoding: Windows-31J
puts '好きな整数を入れてください'
w = gets.to_i
pattern = ['★◎●☆■','◎●☆■★','●☆■★◎','☆■★◎●','■★◎●☆']
n = (1..w).collect do |n| ' '*(w-n) + ((''.ljust n,pattern[n%5]).split'').join end
puts n
puts 'MerryXmas for You'.center w*2

出来た。

しかし色々あるな(´・ω・`)
ねじりん棒の法則・・・・

141にあ:2011/11/19(土) 12:23:05 ID:bM6Oldss0
>>140
patternの模様の数と配列数は合わせないときちんとねじりん棒にならない(´・ω・`)

142にあ:2011/11/19(土) 23:42:56 ID:OhunsncU0
input = gets
a = input.length
として?

whileの条件は
a < 30 && a > 0
で。

if a == 0 or a > 30
でinput = getsを繰り返し。

elsif a > 0 && a < 5 or a == 5
  b = [★◎△]
elsif a > 5 && a < 10 or a == 10
  b = [★◎△■☆]
else
  b = [★◎△■☆▲※○□●]
end

として(´・ω・`)?
このあとが
collectでrotateの処理もして。
ってとこかな?

143にあ:2011/11/19(土) 23:47:36 ID:OhunsncU0
>>142
いあ
whileの条件とifの条件は一緒のはずだ…(´・ω・`)

144にあ:2011/11/19(土) 23:57:54 ID:OhunsncU0
あ、うーん(´・ω・`)?
whileを通りすぎてきたaをまず定義してやらないとcollectで変になるな。

c = (1..a)使うにしても。
これって、結構今まで勉強してきたこと、色々総動員してかないとならないな。

明日…関数の勉強と同時に混乱せずに同時進行でいけるかしら?

最初にputsさせるのが
puts 'クリスマスのメッセージを30文字以内でどうぞ'

として

ifで弾く場合
puts '30文字以内でやり直してください'
とかにして
…いや、何も入力してないパターンもありだからそのまま最初に戻した方がシンプルでいいかもな。

145にあ:2011/11/20(日) 03:00:28 ID:OhunsncU0
# encoding Windows-31J
flag = 0
a = 0
b = []
c = 0
while flag == 0
puts 'クリスマスのメッセージを30文字以内でどうぞ'
input = gets
a = input.length
if a == 0 || a > 30
elsif a > 0 && a < 5 or a == 5
b << [★◎△]
c = c + a
elsif a > 5 && a < 10 or a == 10
b << [★◎△■☆]
c = c + a
else
b <<[★◎△■☆▲※○□●]
c = c + a
end
if a > 0 && a < 30
flag = 1
end
n = (1..c).collect do |n|
' '*(c-n) + ((''.ljust n.b(c-1).rotate #=[b]).split'').join end
puts n
puts input.center c

ダメぽ
もう脳みそ働かない(´・ω・`)

寝る。

どっかでcとか定義しないと…(´๑-ω-).。oOO グゥグゥ

146にあ:2011/11/23(水) 13:37:47 ID:6/nNMvBk0
【JAVA】勉強部屋×雑談4【ruby】
http://jbbs.livedoor.jp/bbs/read.cgi/internet/12569/1322022926/

147にあ★:2011/11/28(月) 17:01:45 ID:???0
puts
print

abs
cell
floor
round

length
reverse
succ

capitalize
downcase
swapcase
upcase

lstrip
rstrip
strip

center
ljust
rjust

count
delete
squeeze

to_i
to_f
to_s
to_a

gets

split
join
chomp

# encoding

if
elsif
else
end

>
<
>=
<=
==
!=

-n

while 条件
処理
end

readlines

メソッド do |変数|
処理
end

each
sort_by
collect
map
shuffle
select
reject
zip
product
flatten

def 関数名(引数)
処理
end

uniform
empty
glue_horizontal
glue_vertical
double_horizontal
double_vertical


自分用にも…(´・ω・`)

■掲示板に戻る■ ■過去ログ倉庫一覧■