Недавно я участвовал в нескольких соревнованиях, которые проводились в Facebook-группе, посвящённой BASIC-программированию для ZX Spectrum. Там попадаются задачки разной сложности, но большинство из них можно решить, минут за 30 написав соответствующий код. Если вы хотите проверить или улучшить свои навыки программирования на BASIC — вам, возможно, будет интересно взглянуть на эти задачки.



Японские узоры


Уве Гейкен предложил воссоздать замысловатый японский узор. Я, взяв за основу фигуру из четырёх линий, напоминающую карамельную трость, отражая, вращая и повторяя её, смог уложить решение этой задачи в 156 байтов:



Орбиты Земли и Венеры


Дэвид Сапфье дал нам задачку на написание самого быстрого кода на BASIC, выводящего траектории орбит Земли и Венеры. Во мне живёт немного бунтарского духа, поэтому я решил написать самый короткий код. Я далеко не сразу добрался до приведённой здесь рабочей версии программы:



Гренландский флаг


Мэттью Лог предложил посоревноваться в написании программы для вывода точной копии флага Гренландии. Этот флаг устроен довольно просто, его описание можно свести к такой формуле: x²+y² < 54² ⊻ y > 0:



Треугольники


Уве Гейкен показал узор, состоящий из треугольников, и предложил написать самый короткий код, воспроизводящий этот узор. Самая короткая найденная мной реализация этой задачи использует UDG (User-Defined Graphics, графические символы, определяемые пользователем):



Сетка


Мэттью Лог дал нам задачку на воссоздание сетчатого узора с применением кода минимального объёма. Удивительно, но мне удалось такой код написать:



Узор из переплетающихся полос


Уве Гейкен предложил написать программу для рисования узора из переплетающихся полосок. Мне было довольно сложно оптимизировать размер этой программы, но в итоге удалось вместить её в 109 байтов:



Узор в виде флага


Мэттью Лог попросил написать самую короткую программу, выводящую узор размером 31x21, напоминающий флаг. Уве Гейкен решил эту задачу с помощью кода длиной в 67 байтов и легко обошёл мою 74-байтную программу:



Минималистичная шестерёнка


Мэттью Лог снова подготовил интересную задачу. На этот раз она заключалась в рисовании простой цилиндрической шестерёнки с 10 зубьями. Вот что у меня получилось:



Увлекаетесь ли вы ретро-программированием?

Комментарии (19)


  1. shiru8bit
    04.11.2021 16:05
    +15

    Традиционные техники сокращения размера Sinclair BASIC программ, типа NOT PI и VAL "2", были запрещены? Не очень понятно, зачем считать байты, если очевидно, что в байтах ту же самую программу можно сделать короче.


  1. DimPal
    04.11.2021 17:05
    +8

    Побайтно каждая числовая константа хранится в строковом виде плюс 5 байт в бинарном формате. Например A=0 побайтно выглядит как то так: 65,61,48,0,0,0,0,0. Итого вышло 6 байт на одноразрядную константу. Кстати был трюк когда строковое и бинарное значение могли не совпадать. Про DEF FN я вообще молчу, там в бинарное представление засовывали машинный код (загрузчик ArtStudio вроде так делал). Если такую строку попытаться изменить через редактор ZX-Basic то бинарное представление синхронизируется по строковому представлению.


    1. bolk
      05.11.2021 11:44

      О, да. Я помню эти POKE 0, PEEK 0 в листингах программ всяких хакеров, типа Билла Гиоберта, со временем так тоже научился )


      1. Chupaka
        16.11.2021 00:50

        RANDOMIZE USR 0

        Ещё и строка номер 0 :)


    1. DrGluck07
      07.11.2021 17:37

      Да это была вполне стандартная практика с бинарным кодом внутри строки бейсика


  1. forthuser
    04.11.2021 21:51
    +1

    Решение 212 задач на ZX Spectrum Basic на rosettacode.org

    P.S. Можно пополнять разными решениями.


  1. MichaelBorisov
    04.11.2021 22:19
    +5

    Следующий этап — изучение ассемблера и написание анимационных демо-программ!


  1. walhi
    04.11.2021 23:43
    +3

    Вид данной шестерни доставляет много боли... Оно не будет работать же.


    1. greenoberon
      05.11.2021 11:38
      +5

      Если это "шестерня" для оптического энкодера, то вполне рабочая схема.


    1. perfect_genius
      09.11.2021 18:42

      Не будет, пока не обточится :)


      1. walhi
        09.11.2021 20:15

        зуборезом по РУ5?


  1. vvbob
    05.11.2021 11:34
    +9

    Чем, конечно, были хороши те компьютеры, так это тем что начать программировать на них можно было очень быстро и просто. Не надо устанавливать стопятьсот фреймворков, разбираться со всякими IDE, с кучей сложных для новичка понятий.. Просто открываешь довольно простой редактор, и пишешь код, который имеет доступ ко всем ресурсам машины.

    У меня, помню, была книжечка "Программирование на ZX-Basic" довольно толково описывающее встроенный язык, с примерами и задачками, очень было интересно все это изучать и пробовать прямо не отходя от компьютера.


    1. L24RUS
      11.11.2021 11:27
      +2

      Моей первой настольной книжкой по программированию стала "Как написать игру для ZX-Spectrum" после нее игрушки были заброшены )


      1. vvbob
        11.11.2021 11:31
        +1

        Еще у меня был журнал, ZX-Review, кажется, если название не путаю. Толстенная такая книжица, напечатанная убористым шрифтом, на дешевой бумаге. Изучал его от корки до корки, за отсутствием интернета это был один из самых годных источников информации. Правда как раз к моменту когда он попал ко мне в руки, мой клон Спектрума сломался, а потом меня в армию загребли и стало не до развлечений. Потом уже пошли другие компьютеры.


    1. Masurao
      03.12.2021 11:38

      Понимаю, что сейчас, возможно, закидают помидорами, но хочу сказать, что и сейчас есть такой софт, который можно поставить и сделать много чего интересного. Например, горячо нелюбимый школьниками PascalABS. Главное ХОТЕТЬ, главное чтобы было ИНТЕРЕСНО. А вот с этим сейчас у людей все больше проблем...


  1. dBakharov
    06.11.2021 00:34
    +1

    Спасибо за статью, довольно интересно. Мне отдельно понравилось, как автор удивляется мол, вау, получилось, а у меня это вышло, а тут я вот так написал, эх, а тут меня об
    шошли. Забавно


  1. Hasan81
    08.11.2021 10:00
    +5

    В старых компьютерах было что-то завораживающее и вдохновляющее, все новое казалось каким-то космическим, поэтому и стал программистом, а про современное железо и программирование почему-то даже читать иногда не хочется. То ли подача материала такая у современных технологий, то ли старость приближается. Вот любые научные новости читаю до сих пор с удовольствием, а компьютерные обзоры все менее интересны и читабельны. Не стало искры какой-то в этой теме.

    Вот сейчас прочитал и какое-то удовольствие получил от прочтения на волне ностальгии.


    1. Zalechi
      09.11.2021 14:41
      +3

      То же самое наблюдаю и в киноиндустрии. Все эти Звездные Войны, Чужие, Матрица, Терминаторы и Влстелин Колец - были чем-то прорывным, поэтому наше поколение с трепитом относится к эволюции киноиндустрии 70х-90х и начала нулевых. Современое поколение не имеет того переходного опыта и часто нас не понимает и наш восторг от "убогих" лазеров в Звездных Войнах и побитового движения киборга убийцы в первой части терминатора, когда он в последних сценах на заводе тщетно пытается завершить свою программу - убить Сару, но оказывается придавлен прессом и убогие на вид молнии знаменуют его кончину))

      Я тоже рисовал кружки в бейсике, но прогером не стал)))


  1. novos3000
    12.11.2021 11:25

    одна из первых компьютерных игр (для меня) была на космическую тему. Непомню как называлась игра, но раса инопланетян - клинги. "Играли" мы в институте на ДВК-З. По окончании учебы я распечатал листинг на матричном принтере и увез с собой. Потом я собрал Радио-86рк. Было несколько месяцев мучительного набора строк Бейсика на пленочной клавиатуре. После - несколько месяцев отладки. Какой же был кайф...