テレビを解いた

投稿日: カテゴリー Rubyタグ

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

AtCoderシリーズです。
今回もAの最も簡単な問題を解いてみました。

問題はこちら。

問題文
高橋君は画面の幅が W 、高さが H のテレビを持っています。
このテレビの画面アスペクト比 W:H が 4:3 か 16:9 か判定してください。

入力
入力は以下の形式で標準入力から与えられる。

W H
1 行目にテレビの画面の幅と高さを表す 2 つの整数 W,H(1≦H,W≦10**5) が空白区切りで与えられる。
テレビの画面アスペクト比は 4:3 か 16:9 になることが保証される。
出力
高橋君のテレビの画面アスペクト比 W:H が 4:3 ならば4:3を、 16:9 ならば 16:9 を 1 行に出力せよ。改行を忘れないこと。

入力例 1
4 3
出力例 1
4:3
画面の幅が 4 、高さが 3 のテレビの画面アスペクト比は 4:3 なので4:3と出力してください。

AtCoderの問題3つ目ですので、gets.split.map { | V | v.to_i } パターンであることは分かりました笑
そして、私が書いたコードはこちら。

W, H = gets.split.map { | v | v.to_i }
puts W%16 == 0 && H%9 == 0 ? "16:9" : "4:3"

今までで最もシンプル、且つRubyっぽく書けたかなと思います。
ロジックとしてはとてもシンプルで、WとHがそれぞれ16と9で割り切れるなら16:9で、割り切れないなら4:3と考えました。
問題文の条件に、テレビの画面アスペクト比は 4:3 か 16:9 になることが保証される。という記載があったので、このロジックが通るだろうと判断できました。

前半は上述の通りですね。
後半ですが、if文をRubyの省略系で書いてます。

puts 条件式 ? 真の場合 : 偽の場合

この個所はあくまでも値を返すだけの個所なので、真偽を記載する個所に条件式を記述することができません。既に前半で条件式を書いているためです。
条件式を最初に書くことも、後に書くこともできるので、うまく使い分けできるようになったらいいなと思いました。

以上。