電波ビーチ

☆(ゝω・)v

ABCから各問題のテストケースとってくるまで自動化

環境はそろえたからやれDo it

最近はモチベが虚無になってしまい、PCすら触らないままダラダラと過ごしていました。なんか太った気がする

先日気の迷いからpaizaをこれまた久しぶりにやりました。ログみたら4ヶ月くらいログインすらしてなかった模様

金に目がくらんだのですが、びっくりするくらい書けなくてつらくなったのでAtcoderBegginerContestを埋めようと思いまして。

わたしはVSCを使ってカラムの右側に問題の入力、左側でコードを書き、ターミナルと出力を表示させてリダイレクトで入力を流し込んで結果を見てみる感じのやつをやってます。雰囲気はこう(出力してませんが) f:id:or3:20180310135911p:plain たいてい問題なんてブラウザ開きながらやるのでテストケースの切り替えはそのたびにコピペしてる感じです。いまのところそんなに不便はないのでこのスタイル。

で、埋めていくにあたり、最初からまとまったディレクトリがないと途中でモチベが虚無を越えてしまうと思い、こんな感じの構成を自動化するやつを書きました。

f:id:or3:20180310140411p:plain

自動化っていうとプログラマっぽいし、30分かかる作業を10秒で終わらせるために1時間かける!みたいな話はカッコよくて憧れがあったのです。結局10時間くらいかかった上に実行も一度限りなので、ハナから手作業でやったほうが早かったというオチがありますが。。

github.com

知見

BeautifulSoupだけです。最初は各問題のページを直接アクセスしてスクレイピングしようとしていたのですが、atcoderのurlの命名規則がどっかで変わる(abc001とか見ると末尾がabc001_1の一方、089だとabc089_aとアルファベット(問題の難易度)になってる)という発見があり、統一されたurlのcontests/abcxxx/tasksのページからリンクをたどる形にしました。 htmlのタグやクラス命名規則も何度か変わってるっぽくて、同定するのが難しく、結局「入力例」と書かれている場所を探してそこからテストケースを探すという力技で切り抜けました。そこらへんはソースを見れば一発でわかると思います。

基本的にBeautifulSoupをネタにした記事はそのへんに大量に転がっているのですが、(pythonのライブラリだとほぼ全部そうだと思ってますが)公式ドキュメントはわからないよう作ってあるとしか思えないので使ってません。これがpythonのZENってやつでしょうか。。。

あと初めてpythonディレクトリ操作みたいなのをやりましたがめちゃくちゃ簡単でいいですね。

お膳立てはした。やれ

残念ながら作り終えた段階でモチベがなくなったので無理です。AOJバージョンでも作ろうかな。。。