Как стать автором
Обновить

Комментарии 35

Это магия какая-то.. Первый раз я столкнулся на 64к демках от farbrausch... и.. Ну вы поняли)

farbrausch — это легенда :)

О, да! Их fr-08 шедевр, своего времени. Так же как и Exceed - Heaven Seven.

IMHO, самое интересное в 3D демках начинаются от 4k только, как пример elevated by Rgba & TBC!

Честно - не слежу за демосценой, но скажите - они еще существуют? Делают?))

О, они теперь в браузере демки предпочитают! Нашли Продвигают свою среду визуального программирования cables.gl для WebGL. Это тот редкий случай, когда инструментарий для демок превращается в что-то массово полезное.

А зачем нужен звук, если всё равно выводится один треск?

Разве он не органичен в данном случае?

ограничен чем? правила соревнования требуют звук?


вырезать эти 2 байта и всё

Не оГРаничен, а оРГаничен :))

Правила звука не требуют, но место есть, почему бы и нет? С другой стороны, если его убрать, можно сделать выход. Или что-нибудь ещё (всё-таки 5 байт — не шуточки).

Круто, реально круто!)

А я все жду когда кто-нибудь проапгрейдит ккригер или сделает еще более живую игру и можно даже в большей размерности)

Смысл демок в том и состоит, чтобы на публику наглядно демонстрировать, у кого пипи нейросеть больше!

fun fact: Гифка в статье весит 166кб или примерно в 2500 раз больше чем программа которой она сделана.

При этом плавность оставляет желать лучшего.

Но это ещё цветочки. Иногда видосы 256-байтовых интро занимают сотни мегабайт, имея при этом артефакты компрессии.

В некотором степени интро является очень хорошо сжатым самораспаковывающимся видеофайлом :)

Если хотите подрочить на маленькое, вот я когда-то написал код на питоне, который число из цифр из аргументов, пишет словами из букв, склоняет, до миллиардов. Ещё папе приходилось это когда-то на FoxPro делать для программы зарплат, а я захотел написать свое и поменьше.


import sys
numbers = [['одна', 'две'], ['ноль', 'один', 'два', 'три', 'четыре', 'пять', 'шесть', 'семь', 'восемь', 'девять']]
dozens = ['двадцать', 'тридцать', 'сорок', 'пятьдесят', 'шестьдесят', 'семьдесят', 'восемьдесят', 'девяносто']
secondDozen = ['десять', 'одиннадцать', 'двенадцать', 'тринадцать', 'четырнадцать', 'пятнадцать', 'шестнадцать', 'семнадцать', 'восемнадцать', 'девятнадцать']
hundreds = ['сто', 'двести', 'триста', 'четыреста', 'пятьсот', 'шестьсот', 'семьсот', 'восемьсот', 'девятьсот']
large = [['тысяча', 'тысячи', 'тысяч'], ['миллион', 'миллиона', 'миллионов'], ['миллиард', 'миллиарда', 'миллиардов']]
o, s, l = ('', str(int(sys.argv[1])), len(str(int(sys.argv[1])))) if len(sys.argv) == 2 and len(sys.argv[1]) > 0 and sys.argv[1].isdigit() and int(sys.argv[1]) >= 0 and int(sys.argv[1]) < pow(10, 12) else exit(-1)
d, dd = lambda i : int(s[-i]) if l >= i else 0, lambda i : int((s[-i:] if i == 2 else s[-i:-i + 2]) if l >= i else 0)
for p in [10, 7, 4, 1]:
    dp, dp1, dp2, isP, idP = d(p), d(p + 1), d(p + 2), dd(p + 1) in range(10, 20), min(max(dd(p + 1) - 10, 0), 9)
    o += ''.join([' ' + hundreds[dp2 - 1] if dp2 != 0 else '', ' ' + dozens[dp1 - 2] if dp1 >= 2 else '', ' ' + secondDozen[idP] if isP else ''])
    o += ' ' + (numbers[0][dp - 1] if p == 4 and dp in range(1, 3) else numbers[1][dp]) if l == 1 and p == 1 or dp != 0 and not isP else ''
    pType = -1 if p == 1 or l <= p - 1 else 2 if isP or dp >= 5 else 1 if dp >= 2 else 0 if dp == 1 else 2 if dp1 >= 1 or dp2 >= 1 else -1
    o += ' ' + large[(p - 4) // 3][pType] if pType != -1 else ''
print(o[1].upper() + o[2:])

Какие нежные и к себе принимаете. А мне тоже обидно, что на мой сленг вы видите нечто угрожающее. Статья о сжатии, даже автор говорит о неком гольфкодинге. Я и поделился своим. Это форум, или мы должны только четко-четко по делу восхвалять или опускать методы статьи?

image

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

Сайзкодеры (люди, занимающиеся жёсткой оптимизацией кода по размеру исполняемого файла)

Есть даже специальные площадки для соревнований по решению задач минимальным количестве байт или символов языка включающих и ассемблер.


К примеру:


Здесь вывод ASCII таблицы на ассемблере занял в минимальном решении 74-е байта


Такой ASCII таблицы:
 -------------
0:   0 @ P ` p
1: ! 1 A Q a q
2: " 2 B R b r
3: # 3 C S c s
4: $ 4 D T d t
5: % 5 E U e u
6: & 6 F V f v
7: ' 7 G W g w
8: ( 8 H X h x
9: ) 9 I Y i y
A: * : J Z j z
B: + ; K [ k {
C: , < L \ l |
D: - = M ] m }
E: . > N ^ n ~
F: / ? O _ o DEL

Как и в представленной статье 64-е байт интро — такой полученный результат выглядит как магия.


P.S. Возможно и набор таких задачи для решения, как "побочный" результат, позволяет отрабатывать методы эффективной транспиляции алгоритмов в разные языки и с них
в бинарный код выполняющийся в рамхах используемого процессорного железа.

Да, сайзкодинг — это оптимизация по размеру бинарника, а гольфкодинг — по размеру исходника. Это тоже прикольная штука, я пару раз участвовал (например, тут на C).

В демосцене есть платформы, называемые фэнтези консолями (например, TIC-80, MicroW8 и пр.) Так вот, в TIC-80 исходник не компилируется и хранится в файле в сжатом (заархивированном) виде. По сути, такой сайзкодинг отчасти правильнее назвать гольфкодингом, т.к. чем меньше исходник, тем меньше и сжатый файл. В общем случае. Хотя иногда увеличение размера исходного кода (ради того, чтобы в нём были повторяющиеся символы) может привести к уменьшению сжатого файла. Поэтому я написал "отчасти" :)

Да, но по ссылке на площадку выше, вроде, для ассемблера и считаются полученные байт коды т.к. даже вкладка символов не активна, а для других языков, вероятно, в силу трудности такого подсчёта вкладки байтов и символов особо не различаются.


P.S. На ассемблере реализованы и Уроки от NeHe на masm64 по OpenGL.

Сайзкодинг, кстати, как правило, имеет одну важную особенность: необходимо не просто ужать код насколько это возможно, а привести его к целевому размеру (64, 256 байт и т.д.).

В гольфкодинге люди соревнуются в стиле "у кого меньше, тот и молодец" :)

Вжух — графический режим установлен!

Напомнило, как я в детстве делал "радар" из старого лампового телевизора. Какая видеокарта, какая память? Будем рулить напрямую обмотками отклоняющей системы. Схема донельзя проста, небольшой трансформатор и два конденсатора, по сути это характериограф, показывающий на 90 сдвиг фаз, в результате чего уже имеем круг (подбором емкости можно настроить именно круг а не овал на 4:3 ЭЛТ). Центральная сканирующая полоска была по сути включением-выключением отклоняющих обмоток, и ее можно было модулировать. Модуляцией и положением сканирующей полоски управлял реальный ультразвуковой радар с сельсином на оси, УЗ часть была взята за основу из книжки "юный кибернетик".

Что только не придумаешь, чтобы не учить ненавистные уроки) Тоже в своем роде, электронная демосцена, как из г. и палок собрать нечто неочевидное и крутое.

Аналоговое демо, тру! Цифровые демки на осцилографах есть и сейчас.

Youscope (oscilloscope demo)

Phosphora (Oscilloscope Demo, 1st Place @ Nova 2023 Wild Compo)

Когда в школе учился, делал 3d куб вращающийся на Бэйсике для Спектрума.

это все очень круто, но fsincos - это уже чистерство какое то :) :)

На SSE/AVX даже синус так просто не вычислишь (особенно в упакованном формате) :)

А что делать, таблица синусов 40 байт займет, если без читов.

В фидо в 90х была похожая uue эха, и потом файлэха с демками. Никто не называл это демосценами. Мне запомнился больше всего mars.com файлик, вроде килобайт на 4, там без каких-либо шейдеров из GPU, просто поверхность марса хорошо генерируется, и мышкой можно летать бесконечно.

Демосценой, в единственном числе. Кто знал, тот называл

Имя знакомое)
Евгений, мы где пересекались? Питерский Enlight? Харьковское фидо?

Нет, меня там не было ?‍♂

FYI, Харьковское фидо ещё живо, вот из текущего нодлиста 4 узла.
Host,461,Kharkov_Net,Kharkov,Oleg_Kapustenko,-Unpublished-,300,CM,MO,INA:in.kcci.kharkov.ua,IBN Hub,58,FaxStuff,Kharkov,Oleg_Kapustenko,-Unpublished-,300,CM,MO,INA:in.kcci.kharkov.ua,IBN ,44,Font_Hunter,Kharkov,Andrew_Andrienko,-Unpublished-,300,CM,INA:fhh.kcci.kharkov.ua,IBN,U,NC ,525,Chairwarmer,Kharkov,Vladimir_Epifanov,380-57-7328315,9600,V34,V32B,V42B,MO,XX,TWF ,777,Stiv,Kharkov,Igor_Stezenko,380-57-7149687,9600,V32B,V42B,MO,LO,Tce

Зарегистрируйтесь на Хабре, чтобы оставить комментарий

Публикации