INDEX
■はじめに
Rubyの基礎的な問題をたくさん解くことで基本的な考え方やメソッドの使い方を定着させたい。
基本的にはAtCoderというプログラミングコンテスト(競技プログラミング)の過去問を使う。(AtCoderは難易度が分かれており、難易度の低いA問題かB問題を解いていく)
(5/23時点の方針)
メソッドの切り分け方や値の受け渡しを練習するために、コード長の短さについては気にせずに書くことにする。
(2022/10/17時点の方針)
しばらくはB問題を小さい番号の方からやっていく。たまにA問題もやるかも。
■問題
●出典
AtCoder Beginner Contest 076のA問題
https://atcoder.jp/contests/abc076/tasks/abc076_a
●問題文
高橋君はあるプログラミングコンテストが行われているサイトに参加しています。
ここでは, コンテストに出場した時にこの順位に応じて「パフォーマンス」というものがつき、それによってレーティング (整数とは限らない) が次のように変化します。
- 現在のレーティングを a とする。
- 次のコンテストで, パフォーマンス b を取ったとする。
- そのとき, レーティングは a と b の平均まで変化する。
例えば, レーティングが 1 の人が次のコンテストでパフォーマンス
1000 を取ったら, レーティングは 1 と 1000 の平均である 500.5 になります。
高橋君は, 現在のレーティングが R で, 次のコンテストでレーティングをちょうど G にしたいと思っています。
そのとき, 高橋君が取るべきパフォーマンスを求めなさい。
●制約
- 0 ≤ R,G ≤ 4500
- 入力はすべて整数
●入力
入力は以下の形式で標準入力から与えられる。
R
G
●出力
高橋君が取るべきパフォーマンスを出力しなさい。
■回答
●愚直に書く
Gを2倍してRを引けば良さそう。
r = gets.to_i
g = gets.to_i
puts g * 2 - r
通った!
●メソッド化して書く
メソッドを作る練習のために、あえてそういう書き方をする。
今回はメソッド化する余地もあまりないかな…。
●リファクタリング/別アプローチ
リファクタリングも特に思いつかない…。標準入力を1行で取るとかはできるのかな。
●他の方の回答例
方針としては皆さん一緒だった。
コンパクトにまとめるなら以下のような感じ。
puts -gets.to_i+2*gets.to_i
なるほど。
●出てきたメソッド等
公式リファレンスを見る訓練。
今回特に無し!
■振り返りなど
- 久しぶりだったので取っ付きやすい難易度で良かった。
以下テスト
リンク