http://www.sw.it.aoyama.ac.jp/2011/PB2/lecture12.html
© 2007-11 Martin J. Dürst 青山学院大学
inject
、group_by
補講についての注意
提出: 12月16日 (金曜日) 22:00 までに Moodle に
famous_hash.rb
のファイル名で投稿
以前作った famous_method.rb
(正解例でも可能)
に連想配列を追加し、出力する文字列 (height, weight, normal,
obese など)
を日本語に置き換えるようなプログラムを作成しなさい。
ヒント:
class Person
の前に連想配列を
Translation
という名前の定数で用意#{Translation[...]}
で output_line
メソッド内で使用発展問題: 複数の言語が使えるようにする (ハッシュのハッシュ)
正解例: famous_hash.rb
提出: 12月16日 (金曜日) 22:00 までに Moodle に
words.rb
のファイル名で投稿
英語などの文書の入力 (<
ファイルまたは直接入力)
を行と単語に分解し、それぞれの単語の数を数えて、アルファベット順にきれいに出力しなさい。
入力例: Ottos Mops, President Obama's speaches
ヒント: 文字列の delete
メソッドで
,.!?;:'"
など記号を取り除く
ヒント: スペースを区切りに単語に分割
ヒント: 大文字・小文字の差をなくす
ヒント: 単語を最初に見つけるときともう一つ見つけるときの処理を分ける
発展問題: 単語の頻度順で出力
正解例: words.rb
def bmi(h,w) 20 end
)1. から 4. の繰り返し
特長: テストが財産として残り、プログラムの改正時に役に立つ
Ruby から使える機能:
require 'test/unit'
)inject
sum = [1, 2, 3, 4].inject(0) do |memo, n| memo + n end
product = (1..10).inject(1) do |memo, n| memo * n end
inject
の引数は出発点
(ない場合は最初の要素)memo
は今までつなぎ合わせた結果group_by
(1..10).group_by do |n| n % 2 end { 0 => [2, 4, 6, 8, 10], 1 => [1, 3, 5, 7, 9] }
famous_people.group_by do |person| person.danger end
仮引数のときの書き方: def my_method (x, y,
&block)
実引数の使い方, その一: block.call
(ブロックを関数のように呼び出す)
実引数の使い方, その二: sort_by &block
(ブロックを別のイテレータに渡す)
提出: 12月23日 (金曜日) 22:00 までに Moodle に
famous_stats.rb
のファイル名で投稿
注意: 12月23日は祝日のため、大学のパソコンは使えません
有名人のデータから次の統計を計算し、出力しなさい。
注意: 肥満度ごとにプログラムをコピペしないで、イテレータを使う
ヒント:
group_by
で肥満度ごとに分割inject
で体重などの合計を計算発展問題: 平均を計算できる関数を作って使う
提出: 12月30日 (金曜日) 22:00 までに Moodle に投稿
注意: 12月23日以降は大学のパソコンは使えません
これから自分が書きたいプログラムの概要・応用を文書 (.txt ファイル) で説明しなさい。
条件:
授業全体の内容を復習し、分からない部分をリストアップ