Счетчиковая машина
На курсе по алгоритмам в основном использовали RAM-машину в качестве алгоритмической модели. У нее есть много вариаций с меньшим числом операций, и одна из них — счетчиковая машина, где один из вариантов имеет всего две операции: инкремент и декремент с условным переходом (хотя можно и до одной ужать, Тьюринг-полнота почти везде).
Мне хотелось накодить что-нибудь простенькое и я сделяль.
Если нечем заняться на каникулах, поиграйтесь и попробуйте найти самую короткую программу, которая в нулевом счетчике выставит 2026 (ура, Новый Год), а остальные оставит пустыми, с минимальным использованием дополнительных счетчиков. Это хорошая разминка для ума и особенно для тренировки отлова ошибок типа off-by-one. Можно написать скрипт, который напишет программу за вас. Можно заставить это делать ИИ-агента. ChatGPT, например, в думающем режиме мне доказал, что оптимальное решение — это 2026 инкрементов. А вот Gemini с первого раза бахнул программу на 29 инструкций и 7 счетчиков, что было круче моего рабочего варианта на 34 инструкции. Усердно попыхтев, к счастью, нашел вариант за 26 инструкций и 6 счетчиков (память надо сейчас беречь). Фух, пока еще не совсем отупел.
Код писал на чистом Си, узнал про ungetc и что scanf тупой.
Разумеется, больше всего времени отняло все что угодно, кроме основной логики. Поддержка WASM в браузере сильно разочаровала. Вроде простая задача, запустить нативный код в браузере, еще 5 лет назад такое делал с растом, должно же быть уже все элементарно, да? *падме.jpg*
Спрашивал ChatGPT, попробовал wasmer и bjorn3 — тупо не работают и даже ошибки не выводят, Emscripten показался слишком старым (эй, ну браузере-то надо модно и молодежно!), а jco нужна была промежуточная траспиляция. ChatGPT еще и выдавал какую-то хрень в примерах кода.
В итоге сам нашел хоть что-то рабочее — UWASI. Через гугл, прости господи. Сам прочитал Readme, потому что у гпт лапки и он не смог сгенерировать рабочий код, сам написал как надо. Был баг, что stdin читался по кругу — вставил костыль.
Вот такие пироги. С наступающим!