Luaのデータ構造とアルゴリズム
Luaにあるデータ構造はテーブルひとつだけなので、このパスの構造はすべてテーブルから作ります。配列部からスタックを、2つのインデックスでキューを、テーブルを指すテーブルで木を。そのひとつひとつをLuaで組み上げ、それを使ってソート、再帰、グラフ探索を行い、最後は採点付きの面接問題で締めくくります。無料、ブラウザ完結、ほとんどのコースに修了証が付きます。
377 レッスン228 チャレンジ702 クイズの問題
- 初心者向け
AIによるコーディングサポート
実践的なインタラクティブレッスン
全レッスンに音声ナレーション付き
知識を確かめるクイズ
パス全体で23枚の無料修了証
LuaのDSA、ステップごとに
各ステップは、すでにあるCoddyのコースの組み合わせで、どの「開始」ボタンもコースをLuaで開きます。まだLuaで教えていない3つのコースは、ステップの後にまとめて載せています。
- 1ステップ15件のコース(順番どおり)
- 2ステップ2
データ構造シリーズ パート2
このステップを始める開始双方向連結リスト、ヒープと優先度付きキュー、トライ木、グラフ、そして自己平衡するAVL木。Luaではトライ木のノードは次の文字をキーにしたテーブルにすぎず、グラフは隣接リストのテーブルなので、どの構造も、その考え方以上には複雑になりません。開始5件のコース(順番どおり) - 3ステップ3
ソートアルゴリズム
このステップを始める開始バブル、選択、挿入、マージ、クイック、ヒープ、計数、基数ソートを、Luaで書き、可視化ツールで眺めます。Luaのリファレンスマニュアルにあるとおり、table.sortは安定ではありません。このステップを終えれば、ソートがなぜ安定性を手放すのか、そしてタイブレーク用のインデックスでそれをどう取り戻すのかがわかります。開始8件のコース(順番どおり) - 4ステップ4
再帰的な考え方専用ページ
このステップを始める開始Luaでの再帰のチャレンジ問題。Luaには真の末尾呼び出しがあります。return f(x)のような末尾位置での呼び出しでは、呼ばれた関数が呼び出し元のスタックの領域を再利用するので、末尾再帰のループはスタックを伸ばしません。ふつうの深い再帰は、やはりスタックオーバーフローで終わります。動的計画法とビット演算は、それぞれPythonとC++で教えているため、ステップの後にまとめて載せています。開始専用ページ - 5ステップ5
グラフアルゴリズム
このステップを始める開始幅優先探索と深さ優先探索、ダイクストラ法、ベルマン・フォード法、トポロジカルソート、クラスカル法とプリム法を、ステップ2で作ったグラフの上でLuaで学びます。Luaには優先度付きキューがないので、ダイクストラ法に必要なのはステップ2のヒープです。そして幅優先探索には、table.remove(t, 1)を決して呼ばないキューが必要です。開始7件のコース(順番どおり) - 6ステップ6
面接練習
このステップを始める開始10本の面接チャレンジパックと2つのコーディング問題集をLuaで。初見の問題を、テストケースで採点されながら、解説なしで解きます。テーブルを、問題ごとに必要な形に作り変えながら。開始12件のコース(順番どおり)- コーディング面接チャレンジ - パック I3 レッスン3 チャレンジ
- コーディング面接チャレンジ - パック II3 レッスン3 チャレンジ
- コーディング面接チャレンジ - パック III3 レッスン3 チャレンジ
- コーディング面接チャレンジ - パック IV3 レッスン3 チャレンジ
- コーディング面接チャレンジ - パック V3 レッスン3 チャレンジ
- コーディング面接チャレンジ - パック VI3 レッスン3 チャレンジ
- コーディング面接チャレンジ - パック VII3 レッスン3 チャレンジ
- コーディング面接チャレンジ - パック VIII3 レッスン3 チャレンジ
- コーディング面接チャレンジ - パック IX3 レッスン3 チャレンジ
- コーディング面接チャレンジ - X3 レッスン3 チャレンジ
- コーディング問題集32 レッスン31 チャレンジ
- コーディング問題集:Vol. 225 レッスン24 チャレンジ
Learn by Doing
Write real code, query databases, build websites, and master AI prompts. Our interactive lessons cover every skill modern developers need.
Build Your Coding Streak
Stay consistent and watch your progress grow! Track your daily coding habit, protect your streak with freeze days, and earn rewards for showing up every day.
12 days streak
Return tomorrow to keep your streak!
January 2026
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
21
22
23
24
25
26
27
28
29
30
Double or Nothing
Day 5 of 7
Streak Freeze
2 left
Code Anywhere, Anytime
Take your coding journey on the go! No setup, no downloads - just open and start coding. Available on iOS, Android and Web with 4.9 star ratings.
You're Not Alone in This
Compete on global leaderboards, invite friends to earn rewards, and celebrate each other's wins. Coding is better with friends!
Every way to learn
Read, listen, test yourself, ask the AI, or look up anything you've already covered. Every lesson meets you where you are.
A variable is a named container that stores a value you can reference later in your program.
In Python, you create one by writing the name, an equals sign, then the value you want to store.
The value can change over time - reassigning the name simply points it to a new value.
Prove Your Skills
Earn certificates for every course you complete. Add them to your LinkedIn profile and resume to showcase your coding expertise to employers.
LuaのDSAをCoddyで学ぶ理由
- ひとつの構造から、すべての構造を。Luaのテーブルは配列部とハッシュ部をひとつにしたもので、ほかには何も組み込まれていません。リスト型もセットもキューもヒープもありません。Luaではどの構造もテーブルを指すテーブルでできていて、連結リストや木が本当は何なのかを、これ以上なくはっきりと見せてくれます。
- Roblox、ゲーム、プラグインのために。LuaはRoblox(Luauとして)、ゲームのスクリプト、Neovimの設定、Redisのスクリプトを動かしています。そしてゲームのコードはデータ構造のコードです。インベントリはハッシュテーブル、ターン順はキュー、経路探索はグラフ探索です。Luaでデータ構造を学ぶことは、すでにスクリプトを書いている言語でそれらを学ぶことです。
- パスのほぼすべてをLuaで。データ構造、ソート、グラフアルゴリズム、再帰のチャレンジ、面接パックは、すべてLuaで教えています。別の言語で教える3つのコースは、それぞれへのリンクとともにステップの後にまとめて載せています。動的計画法とPython面接シリーズ(Python)、そしてビット演算(C++)です。Luaに残るものはすべて、最初のスタックから最後の面接問題まで、テーブルでできています。
- 面接と同じ形で採点。どのレッスンもテストケースで確認されるLuaのチャレンジで終わり、失敗したときはBugsyがあなたのコードを読み、答えを教えずに修正の方向へ導きます。ほとんどのコースで無料の修了証が発行され、それぞれ専用URLで検証できます。
LuaでのDSA学習についてよくある質問
Luaはデータ構造とアルゴリズムの学習に向いていますか?
nilを返し、長さ演算子#tが信頼できるのはnilの穴のないシーケンスに対してだけです。Luaで行われる面接はほとんどないので、面接が目標なら、面接パックはそこで使う言語でも用意されています。Luaのテーブルからスタックとキューを作るにはどうすればよいですか?
table.insert(t, x)でプッシュし、table.remove(t)でポップします。キューにはもう少し注意が要ります。table.remove(t, 1)は残りのすべての要素を1つずつ前にずらすので、デキューのたびにO(n)かかるからです。代わりにfirstとlastの2つのインデックスを持ちましょう。last + 1に追加し、firstから読み出し、そのスロットをnilにして進めれば、デキューは定数時間になります。ステップ1では、その両方を作ります。Luaでは、なぜ#tがときどき間違った長さを返すのですか?
#tがときどき間違った長さを返すのですか?#はテーブルの境界(border)を返すからです。境界とは、t[n]はnilではないがt[n + 1]はそうであるようなインデックスnのことです。正しいシーケンスには境界がちょうど1つあり、それがその長さです。途中にnilを入れると境界が複数になりうるため、#はそのどれを返してもかまいません。ですから、#で長さを測る配列には決してnilを入れないようにし、2つのインデックスを使うキューのように隙間のある構造では、サイズを自分で管理しましょう。Robloxのスクリプトでもデータ構造は重要ですか?
#演算子を受け継いでいるので、ここで作るものはそのまま持ち込めます。このパスで、Luaで教えていないコースはどれですか?
&、|、<<、>>があり、XORとNOTはどちらも~と書きます。