動機
- AtCoderの問題を解いたあとにメモを残す際に問題文を併記したい
- URLを貼る形式だと,問題文の確認にひと手間かかってしまうので
- 問題文の単純なコピペではフォーマットが崩れてしまうので,なんとかしたい
やったこと
スクレイピングによって問題文を自動取得してマークダウンファイルに保存するコードを書いた。不完全なコードだがそれなりに実用に耐えそうなので,運用しつつ頃合いをみて改修していくつもり。
コードはGitHubに置いた。
Prerequisites
- python 3.6+
- BeautifulSoup4
- markdownify
Usage
ファイル名: get_problem_md.py
単一の問題を取得する場合(例: ABC199のA問題 など)
- 問題文のurlを引数として与えて実行する
python get_problem_md.py https://atcoder.jp/contests/abc199/tasks/abc199_a
複数の問題を取得する場合(例: ABC199のA問題からF問題まで など)
-
対象コンテストのいずれかの問題文のurlを引数として与える
-
-r (--range)
で範囲を以下のように指定する- 例:
-r abdf
(A, B, D, F問題を取得) - 例:
-r a-d
(AからD問題までを取得)- この指定法は
a-d
とa-f
のみ対応
- この指定法は
- 例:
python get_problem_md.py https://atcoder.jp/contests/abc199/tasks/abc199_a -r a-f
カレントディレクトリ以外にmdファイルを保存する場合
-
-d (--dir)
で指定する:- 例:
-d ./hoge
- 例:
出力の例
ZONeエナジー プログラミングコンテスト “HELLO SPACE”: A - UFO襲来
出力例の引用始まり
A - UFO Invasion
URL: https://atcoder.jp/contests/zone2021/tasks/zone2021_a
配点 : 100 点
ストーリー
俺はマーフィ。プログラミングコンテストが趣味の MAD HACKER だ。
ある晩、コンテストサイトでいつものように MAD な超絶解答を提出しようとしていたら、街の上空に巨大な UFO が現れた。
突然の事態に世界中は大混乱。楽しみにしていたプロコンも即中止になってしまった。
それから 1 週間、UFO は解読不能のメッセージを発信しながら空中に鎮座している。
俺は、レーティングを上げるせっかくのチャンスが奪われた怒りに震え上がっていた。
あの UFO... 絶対ハックしてやるぜ。
まずは頭を働かせるため、俺はありったけの ZONe を買いに行くことにした。
問題文
長さ 12 の文字列 S が与えられます。S の中に ZONe という文字列は (連続する部分文字列として) いくつ含まれるでしょうか?
制約
- S は英字からなる長さ 12 の文字列
入力
入力は以下の形式で標準入力から与えられる。
S
出力
答えを出力せよ。
入力例 1
abcdZONefghi
出力例 1
1
S の 5 文字目から 8 文字目までが ZONe となっています。
入力例 2
ZONeZONeZONe
出力例 2
3
入力例 3
helloAtZoner
出力例 3
0
S の 8 文字目から 11 文字目までが Zone となっていますが、これは ZONe ではありません。
出力例の引用終わり
今後やりたいこと
- 空白行の除去 (マークダウンでは複数(n>2)の空白行は無視されるので問題はないが)
- 数式への対応