http://www.sw.it.aoyama.ac.jp/2010/PB2/lecture7.html
© 2006-10 Martin J. Dürst 青山学院大学
while
の除去collect
,
shuffle
, sort
, zip
,
product
, flatten
and
、or
、not
で組合わせ可能-n
)while
)each
,...)提出: 11月 12日 (金曜日) 22:00 までに Moodle に
famous_while.rb
として投稿
-n
から
while
へ書換えるor
と
include?
)"Hobby missing (#{hobby})"
で簡単化)正解例: 都合により削除
提出: 11月 12日 (金曜日) 22:00 までに Moodle に
famous_sort.rb
として投稿
while
の応用例 (2)
を読み込んだ後、each
で BMI を追加sort_by
で体重ごとに並び変えeach
で名前、身長、体重、BMI を出力正解例: 都合により削除
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
readlines
Array#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#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")
"abcdefghijk".split('').shuffle.join
提出: 11月19日 (金曜日) 22:00 までに Moodle に
mountain.rb
として投稿
最初の行が '*'
一文字、次の行が '*'
二文字などで30行の山を出力するプログラムを作成しなさい。
範囲、Array#collect
などを活用しなさい。全体を用意した後に、一個の
puts
で出力しなさい。while
は禁止。
提出: 11月19日 (金曜日) 22:00 までに Moodle に
pattern.rb
として投稿
演習 2 よりもっと面白い模様を作りなさい。
プログラムの先頭にコメントで仕組を説明しなさい。
「Start Command Prompt with Ruby」のウィンドーバーの右クリックのプロパティでフォントをできるだけ小さく、レイアウトでウィンドウの幅や高さをできるだけ大きくした方が面白い模様が作れる。
二人以上の学生から同様の模様を作るプログラムが提出されているときに減点の対象となる。