Skip to content

MoSooN1110/problem_randomizer

Repository files navigation

problem_randomizer

AtCoder / Codeforces / CodeChef の問題をランダムに1問選び、
実際に存在する問題URLを1つ出力する Python スクリプトです。

  • AtCoder:URL規則から生成(A〜Hまで対応)
  • Codeforces:公式APIから問題一覧を取得(7日間キャッシュ)
  • CodeChef:公開APIから問題コード一覧を取得(7日間キャッシュ)
  • 生成したURLが実在するかをHTTPで確認し、1問だけ出力します

外部ライブラリは使わず、標準ライブラリのみで動作します。
uv run による軽量な仮想環境実行を前提としています。

  • 依存: 標準ライブラリのみ

挙動

  • AtCoder: ルールベースでコンテストIDとタスクIDを生成してURLを試行します(A〜H 等の範囲を含む)。
  • Codeforces: 公式API (/api/problemset.problems) を取得して候補を生成し、ローカルにキャッシュします。
  • CodeChef: 公開APIから問題コードを取得して候補にします。こちらもローカルにキャッシュします。
  • 生成したURLは HTTP で実在確認され、最初に見つかった1件が標準出力に出力されます。

src.py はコマンドライン引数を受け付けます。実行時にランダムでサイトを選択するか、引数でサイトを指定できます。

キャッシュ

src.py は API 結果を同ディレクトリに JSON で保存します(TTL: 7日)。

  • codeforces_problemset_cache.json — Codeforces の問題一覧(フィルタ済)
  • codechef_problem_codes_cache.json — CodeChef の問題コード一覧

キャッシュを強制的に更新するには、該当ファイルを削除してください。

実行方法

軽量な実行環境ツール uv を使った実行を想定しています。リポジトリのルートで次を実行してください:

uv run python src.py

実行結果は標準出力に1行のURLのみが出力されます(例):

https://atcoder.jp/contests/abc123/tasks/abc123_a
https://codeforces.com/problemset/problem/1760/F
https://www.codechef.com/problems/INTEST

注意事項

  • ネットワーク接続が必要です。APIやサイトの仕様変更により取得に失敗することがあります。
  • AtCoder の問題はルールベースで生成して存在確認するため、必ずしも網羅的ではありません。

オフライン既定モード(デフォルト)と uv run

  • 本スクリプトはデフォルトでネットワークアクセスを行わない「オフライン」モードになっています(NO_INTERNET = True)。
  • ネットワークアクセスを許可して動かす場合は --online を付けます。

使用例:

uv run python src.py              # デフォルト: オフラインモード
uv run python src.py --online    # ネットワークを許可して実行
uv run python src.py --site codeforces
  • 挙動の詳細:

    • AtCoder: atcoder_problem_list.json が存在すればそこからランダムに選びます(存在確認はデフォルトで行いません)。ファイルがなければ従来の生成ロジックにフォールバックします。
    • Codeforces / CodeChef: ローカルキャッシュ(codeforces_problemset_cache.json / codechef_problem_codes_cache.json)を使用して問題を選びます。キャッシュが存在しない場合はエラーになります(--online を付けて初回取得してください)。
    • 生成される URL に対する HTTP チェックはデフォルトでスキップされます(--online を付けると実在確認を行います)。
  • キャッシュの場所・TTL:

    • キャッシュファイルは src.py と同じディレクトリに保存されます。
    • TTL は 7 日です。キャッシュを強制更新したい場合は該当ファイルを削除してください。

ライセンス

MIT License

Copyright (c) 2026 mosoon

Permission is hereby granted, free of charge, to any person obtaining a copy of this software and associated documentation files (the "Software"), to deal in the Software without restriction, including without limitation the rights to use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of the Software, and to permit persons to whom the Software is furnished to do so, subject to the following conditions:

The above copyright notice and this permission notice shall be included in all copies or substantial portions of the Software.

THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.

About

AtCoder Codeforces Codechefから問題を完全ランダムに推薦します

Resources

Stars

Watchers

Forks

Releases

No releases published

Packages

 
 
 

Contributors