競プロのランダム入力生成方法
備忘録
はじめに
この記事を読もう!
終わり
改善
※ここから先は Mac を仮定
oj を使い始めてからコード毎にディレクトリを作るようになったので、ランダム入力生成コードなどもその都度書く必要があり、汎用的な部分は snippet に追加することにした
愚直解に関しては C++ で毎回書いているけど、これももしかしたら愚直解書く時専用の関数とか作った方がいいのかも?
ランダム入力生成コード
python の snippet に以下を追加した
C++ の snippet があんまり増えるのが嬉しく無いので python にしたけど結構メリットが大きい
import random def RND( l, r, n ): res = [ random.randint( l, r ) for _ in range(n) ] return res # print( *RND( 5, 10, 3 ) ) => 9 6 5
最後のコメントにもある通り、print( *RND( l, r, n ) )
で競プロの入力っぽく出力してくれる
pythonを使うメリット
- 数を少しだけ変えた時などに、コンパイルの手間が省ける
- 直感的な操作が出来る関数が多い
- パソコン出来る気分になる
shellscript
こちらも snippet
while true;do python rand.py>input.txt wrong=$(./a.out < input.txt) correct=$(./g.out < input.txt) if [ $wrong != $correct ]; then echo "$(<input.txt)" echo "Wrong:" echo $wrong echo "Correct:" echo $correct exit fi done
冒頭の記事と比較すると、
- inputの出力
- どっちが正しい答えか記述
この2点は個人的にとっても大事だと思っている
あと、元の記事では make_random.out や guchoku.out みたいな長い名前を採用していたけど長いので適度に短く