[[AtCoder]]

AtCoder

原則的に土曜日の21:00から何かしらのプログラミングコンテストが開かれる。日本語サイトなので日本人に人気。

似たサイトが2つある(普通のbeta版)。beta版の方が、問題ページから直接解答できたり機能的に便利なので、そちらを使うよろし。ただしあくまで本家は無印なので、閉じられる可能性はある。

ステキ周辺サービス

てんぷれ

Dokuwiki記事用テンプレート自動生成Pythonスクリプト(コンテスト名・問題名・リンクを埋める)

import os
import requests
import bs4
import pyperclip

contest = 'abc001'


def dokuwiki_link(url, title):
    return '[[' + url + '|' + title + ']]'


def main():
    url_root = 'https://beta.atcoder.jp'
    tasks_url = url_root + '/contests/{contest}/tasks'.format(contest=contest)

    r = requests.get(tasks_url)
    bs = bs4.BeautifulSoup(r.text, 'lxml')

    problem_urls = []
    tbl = bs.find('table').find('tbody')
    for tr in tbl.find_all('tr'):
        problem_url = tr.find('td').find('a').get('href')
        problem_urls.append(problem_url)
    contest_title = bs.select('#main-div a.contest-title')[0]

    dokuwiki_buf = []
    dokuwiki_buf.append('======' + contest_title.text + '======\n\n')
    dokuwiki_buf.append(dokuwiki_link(url_root + contest_title.get('href'), contest_title.text) + '\n\n')

    for problem_url in problem_urls:
        problem_url = url_root + problem_url
        r = requests.get(problem_url)
        bs = bs4.BeautifulSoup(r.text, 'lxml')
        title = bs.find('title').text
        dokuwiki_buf.append('===== ' + title + ' =====\n\n')
        dokuwiki_buf.append(dokuwiki_link(problem_url, title) + '\n\n')
        dokuwiki_buf.append('==== 問題 ====\n\n\n')
        dokuwiki_buf.append('==== 例 ====\n\n\n')
        dokuwiki_buf.append('==== 解法 ====\n\n\n')
        dokuwiki_buf.append('<sxh python>\n\n\n</ sxh>\n\n\n')

    pyperclip.copy(''.join(dokuwiki_buf))


if __name__ == '__main__':
    main()

41行目の</sxh>が干渉しちゃうのでスペース入れてるけど、取る。

programming_algorithm/contest_history/atcoder.txt · 最終更新: 2018/07/10 by ikatakos
CC Attribution 4.0 International
Driven by DokuWiki Recent changes RSS feed Valid CSS Valid XHTML 1.0