Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

add algo-method support (get-problems only) #152

Open
wants to merge 1 commit into
base: master
Choose a base branch
from

Conversation

takeaship
Copy link

#151 について、私が欲しかった機能なので、get-problemsだけサポートしたものを作りました。
よろしくおねがいします。

@takeaship takeaship force-pushed the add-atlgo-method-service branch from 1fe2c31 to d3e3c0e Compare April 17, 2022 13:23
@takeaship takeaship changed the title add algo-method support (get-problem only) add algo-method support (get-problems only) Apr 17, 2022
kawamataryo added a commit to kawamataryo/zenn-articles that referenced this pull request Jun 14, 2022
diff --git a/articles/92b3a92536fb17.md b/articles/92b3a92536fb17.md
new file mode 100644
index 0000000..3c798b1
--- /dev/null
+++ b/articles/92b3a92536fb17.md
@@ -0,0 +1,132 @@
+---
+title: "Docker + Pytest でアルゴ式のローカル実行環境をしっかり目に作ってみた"
+emoji: "🐢"
+type: "tech" # tech: 技術記事 / idea: アイデア
+topics: ["python", "アルゴ式", "Docker"]
+published: false
+---
+
+[アルゴ式](https://algo-method.com/after_login)はアルゴリズムの勉強にめちゃくちゃ良いですよね。
+
+自分も最近アルゴ式を始めたのですが、サイト上のエディターでのコーディングや、テストの実行が少しストレスでした。それを改善するために、手軽にローカルで実行できる環境を作ってみたので紹介です。
+
+# 作ったもの
+
+以下 Tweet の動画のようにコマンド 1 つで、問題文とテストケースの取得、テストの実行ができる環境を Docker で作ってみました。
+
+https://twitter.com/KawamataRyo/status/1536007164334055424
+
+コードは GitHub Template として公開しています。
+
+https://github.com/kawamataryo/algo-method-local-template
+
+# 使い方
+
+## GitHub Template からのリポジトリ作成
+
+[こちらのリンク](https://github.com/kawamataryo/algo-method-local-template/generate)にアクセスして、Template からリポジトリを作成します。
+
+![](https://i.gyazo.com/0fc42d6a6bf5bb120bffdfe22c25ff0a.png)
+
+あとは、作成したリポジトリをローカルに Clone します。
+
+## 問題文の取得
+
+[アルゴ式](https://algo-method.com/after_login) の解きたい問題にアクセスして、URL から問題の ID を取得します。
+
+https://algo-method.com/tasks/303
+
+上記の問題の場合は URL `https://algo-method.com/tasks/303` の末尾の `303` が ID になります。
+
+あとは、以下コマンドを実行するだけです。
+
+```bash
+make get_question No=303
+```
+
+すると、`questions/303` 配下に `main.py` と `case.json` が生成されます。
+
+```py:questions/303/main.py
+"""
+https://algo-method.com/tasks/303
+
+### 問題文
+カメのアルルは $N$ 個のマスを使って遊んでいます。それぞれのマスには数字が $1$ つずつ書かれており、マス $i$ には $A_i$ が書かれています。$(0 \leq i \leq N-1)$
+アルルはマス $0$ からスタートし、以下のルールに従いながらマス $N-1$ を目指します。
+...
+"""
+
+print("Hello Algor-Method!")
+```
+
+```json:questions/303/case.json
+[
+  [
+    "3\n2 4 7\n",
+    "11\n"
+  ],
+  [
+    "8\n3 1 4 1 5 9 2 6\n",
+    "18\n"
+  ]
+]
+```
+
+`main.py` が解答の記載場所になります。そのまま実装コードを記載してください。
+
+## テストの実行
+
+実装ができたら、テストを実行してみましょう。
+以下コマンドで [Pytest](https://docs.pytest.org/en/7.1.x) が実行されます。
+
+```bash
+make run_test No=330
+```
+
+![](https://i.gyazo.com/e6489ed012126c9d96d08e1621844b57.png)
+
+コンソールに結果が出るので、無事通ったらあとは `main.py` の実装をアルゴ式の Web エディターに貼り付けて解答すれば OK です。
+
+:::message
+解答部分も自動化できたら良いなーと思っていますが、まだできていません 🙈
+:::
+
+# 実装のポイント
+
+## 問題文、テストケースのスクレイピング
+
+問題文とテストケースの取得は [Beautiful Soup](https://www.crummy.com/software/BeautifulSoup/bs4/doc/) で問題文の Web ページをスクレイピングし、その結果から正規表現で抽出しています。
+
+https://github.com/kawamataryo/algo-method-local-template/blob/main/scripts/get_question/get_question.py#L1-L66
+
+:::message
+変更に弱いので、アルゴ式が API を公開してくれたらそちらに移したいです..
+また、こちらの実装 [@TakeshiP](https://twitter.com/takeaship) さんのこちらの PR を参考にさせて頂きました。感謝🙏
+online-judge-tools/api-client#152
+:::
+
+## 標準入出力のテスト
+
+標準入出力のテストは main.py の内容をそのままテストするために少し工夫しています。
+まず、run_test のコマンド実行時に、引数で指定された問題 ID の case.json と main.py の内容をロードしています。
+そして、そのロード結果を Pytest の実行時の引数に渡しています。
+
+https://github.com/kawamataryo/algo-method-local-template/blob/main/scripts/run_test/run_test.py#L1-L22
+
+渡した引数は、Pytest の addoption で fixture 経由で参照できるようにしています。
+
+https://github.com/kawamataryo/algo-method-local-template/blob/main/scripts/run_test/conftest.py#L1-L17
+
+あとは、その値を元に標準入出力のテストを実行します。
+main.py の内容を eval で実行し、case.json の内容で検証しています。
+
+https://github.com/kawamataryo/algo-method-local-template/blob/main/scripts/run_test/test_main.py#L1-L11
+
+標準入出力のテストについては以下記事でもまとめています。
+
+https://zenn.dev/ryo_kawamata/articles/41873296559da1
+
+# おわりに
+
+これで環境が整ったので、あとは問題をときまくってアルゴリズム力を鍛えるのみ!頑張りますね。
+また、使ってみてなにか不具合あれば、気軽に [Issue](https://github.com/kawamataryo/algo-method-local-template/issues) や [Twitter](https://twitter.com/KawamataRyo) で教えてください。
@koba-e964 koba-e964 self-requested a review August 10, 2022 08:07
@takeaship
Copy link
Author

@koba-e964
こちらのリポジトリ、現在も生きていますでしょうか?
生きているなら、再度現在の状態で動作確認・必要があれば修正いたしますのでよろしくお願いします。

@koba-e964
Copy link
Member

今生き返りました、がちょっとレビューに時間がかかりそうです

@takeaship
Copy link
Author

生きているなら幸いです。ではゆっくりやろうと思います。

@takeaship takeaship marked this pull request as draft February 10, 2024 21:55
@takeaship
Copy link
Author

takeaship commented Feb 10, 2024

動作確認のためdraft化
upstreamにrebase

@takeaship takeaship force-pushed the add-atlgo-method-service branch 2 times, most recently from 58eb488 to 8511f29 Compare February 11, 2024 03:13
@takeaship
Copy link
Author

@koba-e964
コードの変更なしで、現在もテストが通り、ojに組み込んで正常に取得できることが確認できましたので、レビューお願いします。
ただcodeforcesのテストが落ちているようです。(サイトの変更起因?)
なのでこちらは別でIssue立てておきます。

@takeaship takeaship marked this pull request as ready for review February 11, 2024 03:18
@kzrnm
Copy link
Contributor

kzrnm commented Feb 11, 2024

ただcodeforcesのテストが落ちているようです。(サイトの変更起因?) なのでこちらは別でIssue立てておきます。

もうあります。

#168

@takeaship
Copy link
Author

ありがとうございます。ではそちらにお任せします。

@kzrnm
Copy link
Contributor

kzrnm commented Feb 17, 2024

@takeaship CI 更新されました

@takeaship takeaship force-pushed the add-atlgo-method-service branch from 8511f29 to a7b63cc Compare February 17, 2024 22:20
@takeaship
Copy link
Author

@kzrnm ありがとうございます🙏

rebaseしました。

@takeaship takeaship force-pushed the add-atlgo-method-service branch 2 times, most recently from 53113e2 to d28e15d Compare February 17, 2024 23:13
@takeaship takeaship force-pushed the add-atlgo-method-service branch from d28e15d to 267ef2e Compare February 18, 2024 02:05
@kzrnm
Copy link
Contributor

kzrnm commented Mar 10, 2024

@koba-e964 AtCoder アカウントのパスワードが変わってるなどでテストがコケているみたいです

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
None yet
Projects
None yet
Development

Successfully merging this pull request may close these issues.

3 participants