Menu
Coddy logo textTech

Rangeのメソッド

CoddyのRubyジャーニー「ロジックとフロー」セクションの一部 — レッスン 7/56。

範囲(Range)には、手動でループを書く手間を省いてくれる便利なメソッドが用意されています。

include? は、ある値が範囲内に含まれているかどうかをチェックします:

range = 1..10
puts range.include?(5)   # true
puts range.include?(11)  # false

minmax、およびsizeは範囲に対して直接動作します:

puts (1..10).min   # 1
puts (1..10).max   # 10
puts (1..10).size  # 10

step は、一定の間隔で範囲内を反復処理します。すべての値が必要ない場合に便利です。

(0..10).step(2) do |n|
  puts n
end
# 0, 2, 4, 6, 8, 10

そして、each は配列の場合と同じように動作します:

(1..3).each { |n| puts n * n }
# 1
# 4
# 9
challenge icon

チャレンジ

簡単

含み(inclusive)の範囲と、推測値のリストが与えられます。推測値をスコア化し、その範囲を要約してください。

次の2行を読み込んでください:

  1. スペースで区切られた2つの整数:startend_value
  2. カンマで区切られた整数の推測値リスト

範囲 start..end_value を使用して、以下を出力してください:

  1. Hit: <n>n は範囲内に含まれる推測値の数(include? を使用すること)
  2. Span: <n>n は範囲の size
  3. Multiples of 3 sum: <n>n は範囲内にあるすべての3の倍数の合計(start 以降の最初の3の倍数から step を使用すること)

1行目の入力が 1 10 で、2行目が 3,5,11,7,-2 の場合、出力は以下のようになります:

Hit: 3
Span: 10
Multiples of 3 sum: 18

(ヒットした値:3, 5, 7。1..10 の範囲内の3の倍数:3+6+9 = 18)

チートシート

便利なRangeメソッド:

range = 1..10
range.include?(5)  # true
range.min          # 1
range.max          # 10
range.size         # 10

step は、一定の間隔でジャンプしながら反復処理を行います:

(0..10).step(2) { |n| puts n }
# 0, 2, 4, 6, 8, 10

each は、配列と同じように動作します:

(1..3).each { |n| puts n * n }

自分で試してみよう

start, end_value = gets.chomp.split.map(&:to_i)
guesses = gets.chomp.split(",").map(&:to_i)

# TODO: include? によるヒット数、size によるスパン、step による3の倍数の合計
quiz icon腕試し

このレッスンには短いクイズがあります。レッスンを始めて解答し、進捗を記録しましょう。

ロジックとフローのすべてのレッスン