8-Bit Guy выпустил видео про культовую однострочную программу для C64 — генератор лабиринта 10 PRINT CHR$(205.5+RND(1)); : GOTO 10. Строка использует RND(1), который выдаёт число от 0 до 0.999. После сложения с 205.5 получается 205.5–206.499. Функция CHR$ отбрасывает дробную часть, поэтому на экране оказывается либо символ 205 (/), либо 206 (\). Вероятность 50/50. Диагонали случайно соединяются и образуют убегающий лабиринт. Элегантность в том, что здесь вообще нет ветвлений и IF.
8-Bit Guy пошёл дальше и сделал программу ещё короче — в ноль строк. В BASIC можно написать цикл FOR...NEXT прямо в командной строке, без номера строки. А STEP 0 оказывается абсолютно законным: счётчик не меняется, и цикл выполняется вечно. Получается FOR A=0 TO 1 STEP 0:PRINT CHR$(205.5+RND(1));:NEXT. Это как WHILE(1) в C, только короче.
Затем он взялся за скорость. RND медленный. Вместо него используется третий голос звукового чипа SID. Устанавливается шумовая форма волны (POKE 54287,255), и старший осциллятор (PEEK(54299)) выдаёт свежий случайный байт при каждом чтении. Гораздо быстрее, чем вычислять число с плавающей запятой.
Дальше — предварительные вычисления. Вместо того чтобы каждый раз превращать число в биты, программа один раз строит строку, где каждому значению от 0 до 255 соответствует его бинарное представление. Это обычный lookup table. Потом поменяй в этой таблице «0» и «1» на диагональные символы — и весь алгоритм работает с другими значками, без изменения логики.
Полный листинг почти идентичен подходу 8-Bit Guy, но с перекраской экрана в чёрный и индикатором прогресса, чтобы программа не выглядела зависшей.
Самое интересное — 8-Bit Guy выяснил, что его быстрая версия упирается не в скорость интерпретатора BASIC, а в аппаратную прокрутку экрана KERNAL. Даже ассемблер вряд ли дал бы прирост. Это классический пример: прежде чем оптимизировать код, найди реальное узкое место.