RubyでAtCoderの問題に挑戦するときの雛形
雛形
N個の数字を合計する問題の例です
$stdin = DATA
n = gets.to_i
p gets.split.map(&:to_i).take(n).sum
__END__
3
20 30 50
# >> 100
解説
-
gets
は標準入力から受け取ると決まっているのではなく$stdin
から受け取る - 別に
$stdin
は変更してもよい - Ruby には
__END__
の下に記述するとDATA.gets
で順に受けとれる謎の機能がある - なので
$stdin
をDATA
にする - すると
gets
はDATA.gets
相当になる - なので
__END__
の後のテキストがgets
で順に取得できる
ついでに書くと、るびきち先生の rcodetools を活用すると実行結果がソースにコメントとして出ます。
Emacs を利用の方には超おすすめです。
# >> 100
提出
ちょっとダサいですが $stdin = DATA
と __END__
の間の部分だけをコピペして提出します。
n = gets.to_i
p gets.split.map(&:to_i).take(n).sum
$stdin = DATA
がないので gets は本当の標準入力から受け取れます。
欠点
-
__END__
の下に1つ分の入力しか書けない
※便利gemの green_day を使うと、問題に記載してある入力と出力の例を元に、複数のテストケースを作ってくれます
結び
実行するたびに毎回自力で入力したり、試行錯誤するときは gets を使わないコードに置き換えたりするのは面倒なので、このような方法を取ることも多いのかなと思っていたのですが、調べても同じような方法が出てこなかったので紹介しました。
Author And Source
この問題について(RubyでAtCoderの問題に挑戦するときの雛形), 我々は、より多くの情報をここで見つけました https://zenn.dev/megeton/articles/38566f0cc1f800著者帰属:元の著者の情報は、元のURLに含まれています。著作権は原作者に属する。
Collection and Share based on the CC protocol