go-coding-kit

module
v0.2.0 Latest Latest
Warning

This package is not in the latest version of its module.

Go to latest
Published: May 7, 2026 License: MIT

README

go-coding-kit

Go Reference

Go 1.19 で書かれた、コーディングテスト用のユーティリティ集。 ジェネリクス(Go 1.18+)を活用しつつ、Go 1.19 標準ライブラリだけで動く範囲に絞っている。

使い方は2通り

1. import で使う(go.mod が使える環境)
go get github.com/aranunara/go-coding-kit@latest
import (
    "github.com/aranunara/go-coding-kit/pkg/ioutil"
    "github.com/aranunara/go-coding-kit/pkg/mathx"
    "github.com/aranunara/go-coding-kit/pkg/ds/heap"
    "github.com/aranunara/go-coding-kit/algo/graph"
)
2. コピペで使う(go.mod が使えない試験環境)

SNIPPETS.md に各機能のコピペ用コードを集約。 必要なブロックを main.go に貼り付けるだけで使える。stdlib のみで動作する。

複数スニペットを併用しても衝突しないよう、コンストラクタは NewStack/NewQueue のように接頭辞付きにリネーム済み。 詳しい命名対応表は SNIPPETS.md を参照。

セットアップ(このリポジトリで開発する場合)

Go 1.19 を明示的に使う

システム Go が 1.19 より新しい場合、go.modgo 1.19 ディレクティブにより 古いバージョン互換でビルドされる。追加の作業は不要。

明示的に go1.19 バイナリで動かしたい場合:

go install golang.org/dl/go1.19@latest
go1.19 download
go1.19 test ./...
動作確認
go build ./...
go vet ./...
go test ./...

ディレクトリ構成

.
├── cmd/
│   └── template/        # 問題ごとの main のひな型
├── pkg/
│   ├── ioutil/          # 高速 stdin / 出力バッファ
│   ├── mathx/           # Min/Max/Abs/GCD/LCM/IsPrime/Sieve/ModPow
│   ├── slicex/          # Map/Filter/Reduce/Reverse/Unique/Chunk/CountBy
│   ├── stringx/         # Reverse/IsPalindrome/IsAnagram
│   └── ds/
│       ├── stack/       # LIFO スタック
│       ├── queue/       # 環バッファ FIFO キュー
│       ├── deque/       # 両端キュー
│       ├── heap/        # ジェネリック優先度付きキュー
│       ├── unionfind/   # Union-Find(経路圧縮 + サイズ)
│       └── trie/        # 文字列 Trie
├── algo/
│   ├── search/          # Find/LowerBound/UpperBound/FindFunc
│   └── graph/           # BFS/DFS/Dijkstra
├── snippets/            # SNIPPETS.md の内容をビルド検証用に1ファイル化したもの
└── SNIPPETS.md          # コピペ用スニペット集(試験環境向け)

使い方の例

stdin を高速に読む
sc := ioutil.NewStdin()
n := sc.NextInt()
xs := sc.NextInts(n)
優先度付きキュー(最小ヒープ)
pq := heap.New(func(a, b int) bool { return a < b })
pq.Push(3); pq.Push(1); pq.Push(2)
v, _ := pq.Pop() // 1
Union-Find
uf := unionfind.New(n)
uf.Union(a, b)
if uf.Same(x, y) { ... }
Dijkstra
g := make(graph.AdjList, n)
g[u] = append(g[u], graph.Edge{To: v, W: w})
dist := graph.Dijkstra(g, src)
二分探索
i := search.LowerBound(xs, target) // xs[i] >= target となる最小の i

新しい問題を解くとき

  1. cmd/template/main.gocmd/<problem>/main.go にコピー
  2. 必要なパッケージを import
  3. go run ./cmd/<problem> で実行

ライセンス

MIT License

Directories

Path Synopsis
algo
graph
Package graph は隣接リスト表現のグラフに対する BFS / DFS / Dijkstra を提供する。
Package graph は隣接リスト表現のグラフに対する BFS / DFS / Dijkstra を提供する。
search
Package search はソート済みスライスに対する二分探索の各種を提供する。
Package search はソート済みスライスに対する二分探索の各種を提供する。
cmd
template command
Command template はコーディングテストの問題向けの main のひな型。
Command template はコーディングテストの問題向けの main のひな型。
pkg
ds/deque
Package deque はジェネリックな両端キューを提供する。
Package deque はジェネリックな両端キューを提供する。
ds/heap
Package heap は container/heap を土台にしたジェネリックな優先度付きキューを提供する。
Package heap は container/heap を土台にしたジェネリックな優先度付きキューを提供する。
ds/queue
Package queue は環バッファに基づくジェネリックな FIFO キューを提供する。
Package queue は環バッファに基づくジェネリックな FIFO キューを提供する。
ds/stack
Package stack はジェネリックな LIFO スタックを提供する。
Package stack はジェネリックな LIFO スタックを提供する。
ds/trie
Package trie はルーンをキーとする Prefix Tree を提供する。
Package trie はルーンをキーとする Prefix Tree を提供する。
ds/unionfind
Package unionfind は Union-Find(互いに素な集合)データ構造を提供する。
Package unionfind は Union-Find(互いに素な集合)データ構造を提供する。
ioutil
Package ioutil はコーディングテスト向けの高速な stdin リーダを提供する。
Package ioutil はコーディングテスト向けの高速な stdin リーダを提供する。
mathx
Package mathx は Go 1.19 の標準ライブラリに不足している数値ヘルパを提供する。
Package mathx は Go 1.19 の標準ライブラリに不足している数値ヘルパを提供する。
slicex
Package slicex はジェネリックなスライスヘルパを提供する。
Package slicex はジェネリックなスライスヘルパを提供する。
stringx
Package stringx はコーディングテストでよく使う文字列ヘルパを提供する。
Package stringx はコーディングテストでよく使う文字列ヘルパを提供する。
Package snippets は SNIPPETS.md と等価な内容を 1 ファイルにまとめたもの。
Package snippets は SNIPPETS.md と等価な内容を 1 ファイルにまとめたもの。

Jump to

Keyboard shortcuts

? : This menu
/ : Search site
f or F : Jump to
y or Y : Canonical URL