INDEX
■はじめに
Rubyの基礎的な問題をたくさん解くことで基本的な考え方やメソッドの使い方を定着させたい。
基本的にはAtCoderというプログラミングコンテスト(競技プログラミング)の過去問を使う。(AtCoderは難易度が分かれており、難易度の低いA問題かB問題を解いていく)
(5/23時点の方針)
メソッドの切り分け方や値の受け渡しを練習するために、コード長の短さについては気にせずに書くことにする。
(2022/10/17時点の方針)
しばらくはB問題を小さい番号の方からやっていく。たまにA問題もやるかも。
■問題
●出典
AtCoder Beginner Contest 074のAB問題
https://atcoder.jp/contests/abc074/tasks/abc074_a
●問題文
N×N のマス目があります。
このマス目の各マスを白色または黒色に塗ることにしました (すべてのマスをどちらか片方の色に塗ります)。
ちょうど A マスを白色に塗るとき、黒色に塗ることになるマスはいくつあるでしょうか。
●制約
- 1≦N≦100
- 0≦A≦N^2
●入力
入力は以下の形式で標準入力から与えられる。
N
A
●出力
黒色に塗ることになるマスの個数を出力せよ。
■回答
●愚直に書く
Nを2乗してAを引けばOKかな?
n = gets.to_i
a = gets.to_i
puts n * n - a
通った!
●メソッド化して書く
メソッドを作る練習のために、あえてそういう書き方をする。
今回は割愛するか…。
●リファクタリング/別アプローチ
リファクタリングもあまり思いつかない。
調べてみたところ、a ** b
でaのb乗とのことなので、
それを使うと共に変数に入れるのも省略して書いてみる。
puts gets.to_i ** 2 - gets.to_i
通った!
●他の方の回答例
考え方としては皆さん同様だった。
●出てきたメソッド等
公式リファレンスを見る訓練。
- Ruby入門 - 演算子(公式リファレンスではないが)
https://www.tohoho-web.com/ruby/operators.html
■振り返りなど
ちょっと久しぶりになってしまったけど、スムーズに解けて良かった。