こんにちは、いなむーです。

いつものatcoderシリーズです。

今回はいつもより問題が簡単だったため、初めてCまで解くことができました。

問題Aはこちら

そして書いたコードはこちら。
[code]
A,B,C = STDIN.gets.split(/ /).map {|v|v.to_i}
p 2 * ( A*B + A*C + B*C )
[/code]

表面積の公式に当てはめただけです。
ただ、公式を思い出すのに苦労しましたがw

つぎに問題Bはこちら

そして書いたコードはこちら。
[code]
X = gets.to_i

(1..1000000000).each do | v |
if (v ** 4) == X
puts v
exit
end
end
[/code]

この辺がプログラマーとの違いな気がします。このコードでは無駄にとにかく4乗になる値を回してるだけなので、きっともっと良い方法がありそうです。

そして問題Cはこちら

書いたコードはこちら。
[code]
K = "WBWBWWBWBWBW" * 3

arr1 = %w[ Do Re Mi Fa So La Si ]
arr2 = Array.new

(0..11).each do | v |
if K[v,1] == "W"
arr2 << K[v,20]
end
end

X = arr1.zip(arr2)
S = gets.chomp
S2 = X.select { | v2 | v2[1]==S }
puts S2[0][0]
[/code]

鍵盤で判断するための20文字が網羅できる数を変数に入れます。
つぎにドレミの値を配列にいれます。
次にドからシまでの間の文字数12鍵分、eachで回しながら取得する文字の位置を変えていき、一文字目がWだったら、その文字の位置から20文字取得して、arr2の配列にいれます。

そして、zipメソッドで配列に配列をいれます。
その配列の2つ目の要素が、標準入力と一緒だったら、1つ目の要素(音階)を表示させる。

これが流れです。

もはやClassとかにしていないし、結構雑になってしまったのでリファクタリングしたいですが、色々勉強になったので良かったです。

以上。

カテゴリー: Ruby