#競技プログラミングの前提
自分が解いているatcoderでは基本的には
何かしらの入力があって、出力を回答として返すというのがルールになっています。
多分どの競技プログラミングもそうですが。。
具体的には以下の流れになります。
入力をgetsで受け取る
↓
何かしら処理をする
↓
putsで回答を出力
いかに具体的な問題文と解答を載せています。
#問題文
いま、神の恵みで高橋くんにお金が与えられます。
神は高橋くんに 2 つの金額を提示します。
正直者の高橋くんは、常に大きな金額を選択します。
そこで、与えられた2 つの整数のうち、大きい方の値を出力するプログラムを書いてください。
#入出力のサンプル
以下の例1では10 11という文字列をgetsで受け取って、11をputsで返せばいい。ということになります。
#回答例
とってもわかりやすく書いた時
sample1.rb
# getsで入力を受け取ります。
input = gets # "10 11"が入る
# 文字列をsplitで空白で区切って配列に格納する。
input_array = input.split(' ') # input_array = [10,11]となっている
# わかりやすくするために2つの変数に置き換える
x = input_array[0] # "10"
y = input_array[1] # "11"
# 比較するためにstringからintegerに変換
x = x.to_i # 10
y = y.to_i # 11
# xとyでどちらが大きいか比べる
if x > y # xの方がyより大きい時
puts x # xを回答として出力
else # yの方がxより大きい時
puts y
end
シンプルに書いた場合
sample2.rb
x,y = gets.split(' ').map{|i| i.to_i}
puts x > y ? x : y
getsとsplitをつなげて書いたり三項演算子を使うことですっきり纏まっています。
この記載量では問題ないですが、上のプログラムのように変数を手当たり次第定義すると処理速度が落ちたりします。
まずは正確な回答ができることが第一ですが、余裕があればリファクタリングをしてスッキリ書けるといいかと思います!
#まとめ
競技プログラミングではgetsで始まりputsで終わる。
スッキリ書くと処理速度が上がる。