日別アーカイブ: 2022年10月11日

TIPS(Ruby:特定の数字や1の位10の位の値で条件分岐する)

目標:なにがしたいか?

特定の数字や1の位10の位の値で条件分岐する方法

問題

あなたはマンションに引っ越しを考えています。
しかし、嫌な数字があり、その数字が含まれる部屋番号の入居を避けることにしました。
そこで、今空いている部屋のうち、部屋番号のどの桁にも嫌な数字が含まれていない部屋番号をリストアップして伝えることにしました。

条件

1:一の位に4が含まれる部屋番号 例:104,204,304
2:13が含まれる部屋番号 例:113,213,313
3:部屋番号666

・1行目に部屋の総数 n
・2行目以降に各部屋番号を表す整数 room_i (1 <= i <= m)

が改行区切りで与えられるので、希望するマンションの部屋番号をすべて改行区切りで出力して下さい。

入力される値

入力は以下のように与えられます。

n #部屋の総数
room_1 #1個目の部屋番号
room_2 #2個目の部屋番号
...
room_n #n個目の部屋番号

それぞれの値は文字列で標準入力から渡されます。

与えられる入力値

9
101
130 
304 
401 
501
666
704
813
902

期待する出力

101
130
401
501
902

コードと解説

#1行目の入力値を受け取る
n = gets.to_i

#n回繰り返す
n.times do |i|

#2行名以降の入力値を受け取りバラバラにする 例:["1", "0", "1"]
  numbers = gets.chomp.chars
#1の位が4の場合か666の場合に対応
  if numbers[-1] == "4" || numbers.join == "666"
#1の位が3で10の位が1の場合に対応して13があるかどうか対応する
  elsif numbers[-1] == "3" && numbers[-2] == "1"
# 上記の条件以外のとき部屋番号を出力する
  else puts numbers.join
  end
end

https://paiza.io/ja/projects/new

↑こちらにコピペして「実行」で確認できます。

↓このような出力結果になっていればOKです。

※ポイント

入力値が301のときgets.chomp.charsで[“1”, “0”, “1”]とひとつずつバラバラにすることができる。

今回は3桁の数字だったが4桁以上の場合を考えて、

配列の[-1]を使うことで1の位、[-2]で10の位で条件分岐してやることができる。