{"id":50799162,"url":"https://github.com/otnc/atcoder-nodejs-template","last_synced_at":"2026-06-12T17:33:26.846Z","repository":{"id":358241313,"uuid":"1240617909","full_name":"otnc/atcoder-nodejs-template","owner":"otnc","description":"A template of useful commands for AtCoder","archived":false,"fork":false,"pushed_at":"2026-05-16T15:13:33.000Z","size":44,"stargazers_count":1,"open_issues_count":0,"forks_count":0,"subscribers_count":0,"default_branch":"main","last_synced_at":"2026-05-16T17:31:21.311Z","etag":null,"topics":["atcoder","atcoder-contests","javascript","js","node","node-js","nodejs","nvm","template"],"latest_commit_sha":null,"homepage":"","language":"CoffeeScript","has_issues":true,"has_wiki":null,"has_pages":null,"mirror_url":null,"source_name":null,"license":"mit","status":null,"scm":"git","pull_requests_enabled":true,"icon_url":"https://github.com/otnc.png","metadata":{"files":{"readme":"README.md","changelog":null,"contributing":null,"funding":".github/FUNDING.yml","license":"LICENSE","code_of_conduct":null,"threat_model":null,"audit":null,"citation":null,"codeowners":null,"security":null,"support":null,"governance":null,"roadmap":null,"authors":null,"dei":null,"publiccode":null,"codemeta":null,"zenodo":null,"notice":null,"maintainers":null,"copyright":null,"agents":null,"dco":null,"cla":null},"funding":{"github":["otnc"],"ko_fi":"devuloper","buy_me_a_coffee":"devuloper"}},"created_at":"2026-05-16T11:00:54.000Z","updated_at":"2026-05-16T15:13:36.000Z","dependencies_parsed_at":null,"dependency_job_id":null,"html_url":"https://github.com/otnc/atcoder-nodejs-template","commit_stats":null,"previous_names":["otnc/atcoder-js-template","otnc/atcoder-nodejs-template"],"tags_count":null,"template":true,"template_full_name":null,"purl":"pkg:github/otnc/atcoder-nodejs-template","repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/otnc%2Fatcoder-nodejs-template","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/otnc%2Fatcoder-nodejs-template/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/otnc%2Fatcoder-nodejs-template/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/otnc%2Fatcoder-nodejs-template/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/otnc","download_url":"https://codeload.github.com/otnc/atcoder-nodejs-template/tar.gz/refs/heads/main","sbom_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/otnc%2Fatcoder-nodejs-template/sbom","scorecard":null,"host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":286080680,"owners_count":34256180,"icon_url":"https://github.com/github.png","version":null,"created_at":"2022-05-30T11:31:42.601Z","updated_at":"2026-05-26T15:22:16.424Z","status":"online","status_checked_at":"2026-06-12T02:00:06.859Z","response_time":109,"last_error":null,"robots_txt_status":"success","robots_txt_updated_at":"2025-07-24T06:49:26.215Z","robots_txt_url":"https://github.com/robots.txt","online":true,"can_crawl_api":true,"host_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub","repositories_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories","repository_names_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repository_names","owners_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners"}},"keywords":["atcoder","atcoder-contests","javascript","js","node","node-js","nodejs","nvm","template"],"created_at":"2026-06-12T17:33:25.784Z","updated_at":"2026-06-12T17:33:26.840Z","avatar_url":"https://github.com/otnc.png","language":"CoffeeScript","funding_links":["https://github.com/sponsors/otnc","https://ko-fi.com/devuloper","https://buymeacoffee.com/devuloper"],"categories":[],"sub_categories":[],"readme":"# AtCoder Node.js Helper\n\nAtCoder の問題を JavaScript (Node.js) で解くためのヘルパーツールです。\n\n## 環境 / 事前準備\n\n- Windows / MacOS / Linux\n  - Node.js v22.19.0 以上が利用可能な環境\n- [AtCoder](https://atcoder.jp/) への登録をする。\n- [nvm-sh/nvm](https://github.com/nvm-sh/nvm) もしくは [corebutler/nvm-windows](https://github.com/coreybutler/nvm-windows) をインストール後、どのバージョンでもいいので Node.js および npm を使用できるようにする。\n\n## セットアップ\n\n```bash\nnpm -g install pnpm@11 # pnpm がインストールされていない場合\npnpm nvm       # .nvmrc のバージョンに切り替え（未インストールなら自動インストール）\nnpm -g install pnpm@11 # 切り替え後に pnpm がインストールされていない場合\npnpm install\n```\n\n\u003e ~~Unix/macOS の場合は `bash scripts/nvm.sh` を使用してください。~~\n\n## ディレクトリ構成\n\n```\nq/\n  YYYYMMDD/           # コンテスト日付ごとのディレクトリ（JST）\n    mock/             # モック入力・期待出力ファイル\n      a/\n        1.txt          # モック入力\n        1._result.txt  # 期待出力\n        2.txt\n        2._result.txt\n        ...\n      b/\n        1.txt\n        ...\n    a.js\n    b.js\n    ...\nscripts/\n  start.coffee         # ファイル生成スクリプト\n  test.coffee          # 実行スクリプト\n  mock.coffee          # モック入力保存\n  mock-delete.coffee   # モック入力削除\n  result.coffee        # 期待出力保存\n  result-delete.coffee # 期待出力削除\n  format.coffee        # Prettier フォーマット\n  nvm.coffee           # Node バージョン切り替え（OS 判定ディスパッチャー）\n  nvm.ps1              # Windows 用\n  nvm.sh               # Unix/macOS 用\n  nvm-restore.coffee   # バージョン復元（OS 判定ディスパッチャー）\n  nvm-restore.ps1      # Windows 用\n  nvm-restore.sh       # Unix/macOS 用\ntemplate.js            # 問題ファイルのテンプレート\n.nvmrc                 # 使用する Node.js バージョン\n```\n\n## 使い方\n\n### Node.js バージョンの切り替え\n\n```bash\npnpm nvm          # 現在のバージョンを .nvm-prev に保存し、.nvmrc のバージョンへ切り替え\npnpm nvm:restore  # .nvm-prev のバージョンに戻す\n```\n\n### 問題ファイルを作成する\n\n```bash\npnpm start \u003c問題番号\u003e\n```\n\n今日の日付（JST）のディレクトリ `q/YYYYMMDD/` に `\u003c問題番号\u003e.js` を `template.js` をもとに生成します。\n\n```bash\npnpm start a\n# =\u003e Created: D:\\...\\q\\20260516\\a.js\n```\n\nファイルが既に存在する場合は上書きせずスキップします。\n\n### 問題を実行する\n\n```bash\npnpm test \u003c問題番号\u003e [日付]\n```\n\n指定した問題ファイルを実行します。日付を省略すると、今日（JST）のディレクトリを優先し、なければ最新のものを使用します。\n\nモックファイルが存在する場合は stdin の代わりに番号順で自動実行します。対応する期待出力ファイル（`\u003c番号\u003e._result.txt`）が存在すれば、実行後に自動比較して結果を表示します。\n\n```bash\npnpm test a\n# Running: D:\\...\\q\\20260516\\a.js\n# (Input: ^Z + Enter to execute)   ← モックなしの場合\n\n# モックあり・期待出力なしの場合\n# Running: D:\\...\\q\\20260516\\a.js\n# Mocks: 2 file(s)\n# --- Mock 1: ...\\mock\\a\\1.txt ---\n# 8\n#\n# --- Mock 2: ...\\mock\\a\\2.txt ---\n# 15\n\n# モックあり・期待出力ありの場合\n# --- Mock 1: ...\\mock\\a\\1.txt ---\n# 8\n# Correct\n#\n# --- Mock 2: ...\\mock\\a\\2.txt ---\n# 9\n# Incorrect\n#   Expected: 15\n#   Actual:   9\n```\n\n```bash\n# パイプで入力する場合\necho \"3 5\" | pnpm test a\n\n# 日付を指定する場合\npnpm test a 20260418\n```\n\n### モック入力の管理\n\n```bash\npnpm mock \u003c問題番号\u003e \u003c番号\u003e [日付]        # stdin を保存（上書き可）\npnpm mock:delete \u003c問題番号\u003e \u003c番号\u003e [日付] # 削除\n```\n\n```bash\npnpm mock a 1        # 入力して ^Z + Enter で q/YYYYMMDD/mock/a/1.txt に保存\npnpm mock a 2        # 2つ目のモック\npnpm mock:delete a 1 # 削除\n```\n\n### 期待出力の管理\n\n```bash\npnpm result \u003c問題番号\u003e \u003c番号\u003e [日付]        # stdin を保存（上書き可）\npnpm result:delete \u003c問題番号\u003e \u003c番号\u003e [日付] # 削除\n```\n\n期待出力を `q/YYYYMMDD/mock/\u003c問題番号\u003e/\u003c番号\u003e._result.txt` に保存します。\n`pnpm test` 実行時に対応するモック番号の結果と自動比較されます。\n\n```bash\npnpm result a 1        # 入力して ^Z + Enter で q/YYYYMMDD/mock/a/1._result.txt に保存\npnpm result:delete a 1 # 削除\n```\n\n### フォーマット\n\n```bash\npnpm format \u003c問題番号\u003e [日付]  # 指定問題ファイルを Prettier でフォーマット\npnpm format                    # プロジェクト全体をフォーマット（prettier --write .）\n```\n\n## テンプレート\n\n```js\nconst fs = require('fs')\n\nfunction main(input) {\n  const args = input.trim().split(/\\s+/)\n  // ---\n}\n\nconst input = fs.readFileSync(0, 'utf-8', '/dev/stdin')\nmain(input)\n```\n\n","project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fotnc%2Fatcoder-nodejs-template","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Fotnc%2Fatcoder-nodejs-template","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fotnc%2Fatcoder-nodejs-template/lists"}