Подходит ли Lua для структур данных и алгоритмов?
Для изучения на удивление хорошо: когда строить можно только из таблиц, каждая структура становится явной, а код остаётся коротким. Подвох в том, что таблицы тихо прощают ошибки: массивы по соглашению начинаются с 1, отсутствующий ключ возвращает nil вместо ошибки, а оператор длины #t надёжен только для последовательности без дыр из nil. Собеседования на Lua проводятся редко, поэтому, если вы готовитесь к собеседованию, наборы задач с собеседований есть и на том языке, на котором вы будете его проходить.
Как сделать стек и очередь из таблицы Lua?
Стек представляет собой часть-массив, с которой работают с одного конца: table.insert(t, x) добавляет элемент, а table.remove(t) снимает его. С очередью нужно аккуратнее, потому что table.remove(t, 1) сдвигает все оставшиеся элементы на одну позицию, так что каждое извлечение стоит O(n). Вместо этого храните два индекса, first и last: добавляйте по last + 1, читайте по first, записывайте в эту ячейку nil и сдвигайте индекс, и извлечение станет константным по времени. На первом шаге вы пишете и то и другое.
Почему #t в Lua иногда даёт неправильную длину?
Потому что # возвращает границу таблицы: такой индекс n, при котором t[n] не равно nil, а t[n + 1] равно. У правильной последовательности ровно одна граница, её длина; поставьте nil в середину, и границ может стать несколько, а # может вернуть любую из них. Поэтому никогда не храните nil в массиве, длину которого измеряете через #, а в структурах с пропусками, например в очереди с двумя индексами, отслеживайте размер сами.
Важны ли структуры данных для скриптов в Roblox?
Да, как только игра перерастает горстку объектов. Инвентарь представляет собой хеш-таблицу, очерёдность появления или ходов устроена как очередь, список кулдаунов может быть очередью с приоритетом, а поиск пути по карте сводится к поиску по графу. Luau, язык, на котором пишут скрипты для Roblox, происходит от Lua 5.1 и сохраняет его таблицы, массивы с индексацией с 1 и оператор #, так что всё, что вы пишете здесь, переносится напрямую.
Какие курсы этого пути не преподаются на Lua?
Три: динамическое программирование и серия по интервью на Python преподаются на Python, а битовые операции на C++. Они перечислены после шагов, каждый со ссылкой, которая открывает курс на его собственном языке. Мемоизация в Lua хранится в таблице; битовые операторы появились только в Lua 5.3, где есть &, |, << и >> из C++, а XOR и NOT оба записываются как ~.
Нужно ли знать Lua, прежде чем начинать этот путь?
Как минимум таблицы, функции, циклы и локальные переменные; метатаблицы пригодятся, если вы хотите, чтобы структуры вели себя как объекты. Если это для вас новое, курс Lua от Coddy сначала бесплатно разберёт эти темы, а этот путь начинается там, где он заканчивается.