http://www.sw.it.aoyama.ac.jp/2011/PB2/lecture7.html
© 2006-11 Martin J. Dürst 青山学院大学
while の除去collect,
shuffle, sort, zip,
product, flattenand、or、not
で組合わせ可能-n)while)each,...)提出: 11月 11日 (金曜日) 22:00 までに Moodle に
famous_while.rb として投稿
-n から
while へ書換えるor と
include?)"Hobby missing (#{hobby})" で簡単化)正解例: famous_while.rb
提出: 11月 11日 (金曜日) 22:00 までに Moodle に
famous_sort.rb として投稿
while の応用例 (2)
を読み込んだ後、each で BMI を追加sort_by で体重ごとに並び変えeach で名前、身長、体重、BMI を出力正解例: famous_sort.rb
while の除去(while
は多くのプログラミング言語ではよく使用されるが、Ruby
らしいプログラムでは使用しない方がよい)
famous_sort.rb で while は除去可能:
input_data_array = []
while input_line = gets
input_data_array << input_line.chomp.split(', ')
end
⇒
input_lines = readlines
input_data_array = input_lines.collect do |input_line|
input_line.chomp.split(', ')
end
readlinesArray#collect(Array#collect はある配列 (Array)
に使えるメソッド collect の意味;
プログラム内の記述ではなく、説明・コメントのための記述)
do ... end
の中で指定map応用例: [1, 2, 3, 4].collect do |n| n+1 end
⇒ [2, 3, 4, 5]
Array#shuffle: 配列の順番をばらばらにするArray#sort: 配列を順番 (昇順) に直すArray#select: 条件に合うものだけ選択するArray#reject:
条件に合わないものだけ選択するArray#zip:
二つの配列から二項目の配列の配列を作成array1.zip array2
具体例: [1, 2, 3].zip [4, 5, 6] ⇒ [[1, 4],
[2, 5], [3, 6]]Array#product:
二つの配列から全ての組合せの二項目配列を作成array1.product array2
具体例: [1, 2].product [5, 6] ⇒ [[1, 5], [1,
6], [2, 5], [2, 6]]Array#flatten:
配列の配列を一次元の配列にする(Range)
[1, 2, 3, 4, 5] などを書くのはつまらない(初期値..終了値) (1..5), ('a'..'z').to_a で配列へ明示的に変換('A'..'Z').shuffle ⇒ エラー('A'..'Z').to_a.shuffle ⇒ エラーなし(提出不要)
次のプログラムの一行一行の結果を考えて、irb
で確認しなさい。
[1, 2, 3, 4, 5].collect do |n| n*n end
[1, 2, 3, 4, 5].map do |n| n.to_s * n end
(1..5).map do |n| n.to_s * (6-n) end.join
(1..5).map do |n| ' '*n + n.to_s * (6-n) end.join("\n")
(1..10).select do |n| n%3 = 0 end
"abcdefghijk".split('').shuffle.join
提出: 11月18日 (金曜日) 22:00 までに Moodle に
mountain.rb として投稿
最初の行が '*' 一文字、次の行が '*'
二文字などで30行の山を出力するプログラムを作成しなさい。
範囲、Array#collect
などを活用しなさい。全体を用意した後に、一個の
puts で出力しなさい。while は禁止。
提出: 11月18日 (金曜日) 22:00 までに Moodle に
pattern.rb として投稿
演習 2 よりもっと面白い模様を作りなさい。
プログラムの先頭にコメントで仕組を説明しなさい。
「Start Command Prompt with Ruby」のウィンドーバーの右クリックのプロパティでフォントをできるだけ小さく、レイアウトでウィンドウの幅や高さをできるだけ大きくした方が面白い模様が作れる。
二人以上の学生から同様の模様を作るプログラムが提出されているときに減点の対象となる。