Luaのデータ構造とアルゴリズム
Luaにあるデータ構造はテーブルひとつだけなので、このパスの構造はすべてテーブルから作ります。配列部からスタックを、2つのインデックスでキューを、テーブルを指すテーブルで木を。そのひとつひとつをLuaで組み上げ、それを使ってソート、再帰、グラフ探索を行い、最後は採点付きの面接問題で締めくくります。無料、ブラウザ完結、ほとんどのコースに修了証が付きます。
377 レッスン284 チャレンジ702 クイズの問題
- 初心者向け
AIによるコーディングサポート
実践的なインタラクティブレッスン
全レッスンに音声ナレーション付き
知識を確かめるクイズ
パス全体で23枚の無料修了証
LuaのDSA、ステップごとに
各ステップは、すでにあるCoddyのコースの組み合わせで、どの「開始」ボタンもコースをLuaで開きます。まだLuaで教えていない3つのコースは、ステップの後にまとめて載せています。
- 1ステップ15件のコース(順番どおり)
- 2ステップ2
データ構造シリーズ パート2
このステップを始める開始双方向連結リスト、ヒープと優先度付きキュー、トライ木、グラフ、そして自己平衡するAVL木。Luaではトライ木のノードは次の文字をキーにしたテーブルにすぎず、グラフは隣接リストのテーブルなので、どの構造も、その考え方以上には複雑になりません。開始5件のコース(順番どおり) - 3ステップ3
ソートアルゴリズム
このステップを始める開始バブル、選択、挿入、マージ、クイック、ヒープ、計数、基数ソートを、Luaで書き、可視化ツールで眺めます。Luaのリファレンスマニュアルにあるとおり、table.sortは安定ではありません。このステップを終えれば、ソートがなぜ安定性を手放すのか、そしてタイブレーク用のインデックスでそれをどう取り戻すのかがわかります。開始8件のコース(順番どおり)- バブルソート11 レッスン10 チャレンジ
- 選択ソート - DSAシリーズ9 レッスン4 チャレンジ54 問題1 プロジェクト
- 挿入ソート - DSAシリーズ9 レッスン4 チャレンジ1 プロジェクト
- マージソート - DSAシリーズ9 レッスン4 チャレンジ52 問題1 プロジェクト
- クイックソート - DSAシリーズ9 レッスン4 チャレンジ52 問題1 プロジェクト
- ヒープソート - DSAシリーズ9 レッスン4 チャレンジ54 問題1 プロジェクト
- カウンティングソート - DSAシリーズ9 レッスン4 チャレンジ52 問題1 プロジェクト
- Radix Sort - DSAシリーズ9 レッスン4 チャレンジ55 問題1 プロジェクト
- 4ステップ4
再帰的な考え方専用ページ
このステップを始める開始Luaでの再帰のチャレンジ問題。Luaには真の末尾呼び出しがあります。return f(x)のような末尾位置での呼び出しでは、呼ばれた関数が呼び出し元のスタックの領域を再利用するので、末尾再帰のループはスタックを伸ばしません。ふつうの深い再帰は、やはりスタックオーバーフローで終わります。動的計画法とビット演算は、それぞれPythonとC++で教えているため、ステップの後にまとめて載せています。開始専用ページ - 5ステップ5
グラフアルゴリズム
このステップを始める開始幅優先探索と深さ優先探索、ダイクストラ法、ベルマン・フォード法、トポロジカルソート、クラスカル法とプリム法を、ステップ2で作ったグラフの上でLuaで学びます。Luaには優先度付きキューがないので、ダイクストラ法に必要なのはステップ2のヒープです。そして幅優先探索には、table.remove(t, 1)を決して呼ばないキューが必要です。開始7件のコース(順番どおり)- 幅優先探索 - グラフアルゴリズム9 レッスン4 チャレンジ54 問題1 プロジェクト
- 深さ優先探索 - グラフアルゴリズム9 レッスン4 チャレンジ54 問題1 プロジェクト
- ダイクストラ法 - グラフアルゴリズム9 レッスン4 チャレンジ54 問題1 プロジェクト
- ベルマン–フォード法 - グラフアルゴリズム9 レッスン4 チャレンジ54 問題1 プロジェクト
- トポロジカルソート - グラフアルゴリズム9 レッスン4 チャレンジ55 問題1 プロジェクト
- クラスカル法 - グラフアルゴリズム9 レッスン4 チャレンジ57 問題1 プロジェクト
- プリム法 - グラフアルゴリズム9 レッスン4 チャレンジ55 問題1 プロジェクト
- 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 チャレンジ
実践で学ぶ
実際のコードを書き、データベースをクエリし、ウェブサイトを構築し、AIプロンプトをマスターしましょう。インタラクティブなレッスンで現代の開発者に必要なすべてのスキルを網羅しています。
連続記録を築こう
継続して進捗を見守りましょう!毎日のコーディング習慣を追跡し、フリーズ日で連続記録を守り、毎日参加することで報酬を獲得しましょう。
12 日連続
明日も戻ってきて連続記録を維持しましょう!
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
ダブル・オア・ナッシング
7日中5日目
連続記録フリーズ
2 left
どこでも学べる
コーディングの旅を持ち歩こう!セットアップ不要、ダウンロード不要 - 開いてすぐにコーディング開始。iOS、Android、Webで4.9星評価で利用可能。
あなたは一人じゃない
グローバルリーダーボードで競い、友達を招待して報酬を獲得し、お互いの成功を祝いましょう。プログラミングは友達と一緒の方が楽しい!
あらゆる学び方に対応
読む・聴く・自分を試す・AIに聞く・学んだことを調べる。どんな学び方にも対応したレッスンです。
変数は、後でプログラム内で参照できる値を格納する、名前のついた入れ物です。
Pythonでは、名前、イコール記号、格納したい値の順で書くことで作成します。
値は後から変えられます。再代入すると、名前は新しい値を指すようになります。
修了証を取得
完了したすべてのコースで証明書を獲得しましょう。LinkedInプロフィールや履歴書に追加して、雇用主にプログラミングスキルをアピールしましょう。
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はどちらも~と書きます。