月別アーカイブ: 2022年5月

Ruby逆引き・計算・基礎(プログラミング問題用・自分用)

1:1 + 2 + 3 + 4 + 5 = 15のように1 + 2 + 3 ・・・・・・+n の合計が知りたいとき

入力例1
5
出力例1 15
入力例2

10

出力例2

55

解答

n = gets.to_i
r = (1..n) 
puts r.sum
# 55

こちらでもできる(-や*で引き算や掛け算もできる)

n = gets.to_i
r = (1..n)
puts r.inject(:+)
#55

2 与えられた整数の中にnの倍数がいくつあるか知りたいとき

入力例1
2
1 6 9
出力例1
1

解答 select { |i| i % n == 0 }で倍数がわかる

n = gets.to_i
a = gets.split(' ').map(&:to_i).select { |i| i % n == 0 }
puts a.length
# 1

3 数列のn番目からm番目までの和を計算したい時

1行目に整数l,n,mが与えられます。
2行目に長さlの数列aryが与えられます。
数列のn番目からm番目までの和を計算し、出力してください

入力値

5 2 5
4 7 6 2 3 

期待する出力

18

解答  ary[n – 1 .. m – 1]で数列の2番目と5番目の数(7,6,2,3)を取りsumで合計する。

l,n,m = gets.split(' ').map(&:to_i) 
ary = gets.split(' ').map(&:to_i) 

if n == m
 puts ary[n - 1] 
else
 puts ary[n - 1 .. m - 1].sum 
end
# 18

4 等差数列について知りたいとき

5 15 25 35 45 55 65 75 85 95

最初の数字が5で、10ずつ増加しています。
一般的にこれを初項5、公差10の等差数列といいます。
初項mが与えられ、公差nが与えられるので20番目までの数字をスペース区切りで出力するプログラムを作成してください。

入力例

5 4
出力例
5 9 13 17 21 25 29 33 37 41 45 49 53 57 61 65 69 73 77 81

解答  m.step(by: n).take(20)でできる。

  1. 与えられる入力値は2つなので、変数2つに多重代入する。(a = 5, b=4)
  2. 等差数列には.stepを使ったほうが、短く書くことができる。
  3. .take(20)で配列の先頭から20個を配列として返して
  4. .join(‘ ‘)で半角スペース刻みで出力できます。
m, n = gets.split.map(&:to_i) 
puts m.step(by: n).take(20).join(" ")

Ruby逆引き・条件分岐編・基礎(プログラミング問題用・自分用)

例題1 偶数か?奇数か?(.odd? .even?)

数値が奇数だったら”OK”偶数だったら”NG”と出力したい時

入力例1
3
出力例1
OK
入力例2
6
出力例2
NG

解答:奇数であるか調べたいときは.odd?偶数のときは.even?を使う。

# 入力値を受け取る(数値)

n = gets.to_i

# nが奇数の時OKを出力して、偶数の時はNGを出力する

puts answer = n.odd? ? "OK" : "NG"

例題2  〜以上〜未満かどうか?

エタノール(アルコール)の沸点は78.37°Cです。エタノールと水の混合物を加熱して蒸留する時に温度を75℃以上80℃未満で維持したいと思いました。温度計が75℃以上80℃未満のときは”OK”と出力し、それ以外の温度のときは”NG”を出力するプログラムを書いて下さい。

入力例1
76
出力例1
OK
入力例2
86
出力例2
NG

解答 t >= 75 && t < 80 で75以上80未満を表現できる

# 入力値を受け取る(数値)

t = gets.to_i

#75℃以上80℃未満を表現できる

puts t >= 75 && t < 80 ? "OK" : "NG"

例題3 任意のモノを数える( .count() ) 値を比較して条件分岐して出力する。

勝ち負けの結果が与えられます。WがLよりも多ければWin、WがLよりも少なければLoseと出力して、WとLが同じ場合はDrawと出力して下さい。

入力例1
W W W L W L W
出力例1
Win
入力例2
W L L W L W W L W L
出力例2
Draw
入力例2
W L L L W L W L
出力例3
Lose

解答 .countで任意のモノを数えて値を比較して条件分岐する。

# 半角スペース刻みの入力値を受け取り、数値に変換する

ary = gets.split(' ')

# aryの中にWが何個あるか数えて代入

win = ary.count("W")

# aryの中にLが何個あるか数えて代入

lose = ary.count("L")

# winがloseよりも多い時は”Win"winとloseが同じ時は”Draw"
# winがloseよりも少ない時は”Lose"と条件分岐して出力する。

if win > lose 
  puts "Win"
elsif win == lose
  puts "Draw"
elsif win < lose
  puts "Lose"
end