Комментарии 35
Это магия какая-то.. Первый раз я столкнулся на 64к демках от farbrausch... и.. Ну вы поняли)
farbrausch — это легенда :)
О, да! Их fr-08 шедевр, своего времени. Так же как и Exceed - Heaven Seven.
IMHO, самое интересное в 3D демках начинаются от 4k только, как пример elevated by Rgba & TBC!
Честно - не слежу за демосценой, но скажите - они еще существуют? Делают?))
Вот буквально вчера выпустили новое https://www.pouet.net/prod.php?which=95048
А зачем нужен звук, если всё равно выводится один треск?
Разве он не органичен в данном случае?
Круто, реально круто!)
А я все жду когда кто-нибудь проапгрейдит ккригер или сделает еще более живую игру и можно даже в большей размерности)
fun fact: Гифка в статье весит 166кб или примерно в 2500 раз больше чем программа которой она сделана.
Если хотите подрочить на маленькое, вот я когда-то написал код на питоне, который число из цифр из аргументов, пишет словами из букв, склоняет, до миллиардов. Ещё папе приходилось это когда-то на 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:])
Какие нежные и к себе принимаете. А мне тоже обидно, что на мой сленг вы видите нечто угрожающее. Статья о сжатии, даже автор говорит о неком гольфкодинге. Я и поделился своим. Это форум, или мы должны только четко-четко по делу восхвалять или опускать методы статьи?
Поясню, почему минусуют. Чтобы написать то, что в статье, надо обладать кучей специфических знаний и техник, за пределами даже базового ассемблера. Скажем так, тут сразу видно, что человек потратил годы, чтобы начать разбираться на таком уровне. А чтобы написать то, что в вашем примере, достаточно знаний базового питона, восьмиклассник напишет.
Сайзкодеры (люди, занимающиеся жёсткой оптимизацией кода по размеру исполняемого файла)
Есть даже специальные площадки для соревнований по решению задач минимальным количестве байт или символов языка включающих и ассемблер.
К примеру:
Здесь вывод ASCII таблицы на ассемблере занял в минимальном решении 74-е байта
-------------
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 ЭЛТ). Центральная сканирующая полоска была по сути включением-выключением отклоняющих обмоток, и ее можно было модулировать. Модуляцией и положением сканирующей полоски управлял реальный ультразвуковой радар с сельсином на оси, УЗ часть была взята за основу из книжки "юный кибернетик".
Что только не придумаешь, чтобы не учить ненавистные уроки) Тоже в своем роде, электронная демосцена, как из г. и палок собрать нечто неочевидное и крутое.
Когда в школе учился, делал 3d куб вращающийся на Бэйсике для Спектрума.
это все очень круто, но fsincos - это уже чистерство какое то :) :)
Имя знакомое)
Евгений, мы где пересекались? Питерский 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
Подробный разбор 64b intro: radar