Опубликованы (http://www.ioccc.org/years.html#2013) исходные тексты работ (http://www.ioccc.org/2013/whowon.html), победивших в двадцать втором конкурсе IOCCC (International Obfuscated C Code Contest), целью которого было написание наиболее запутанного и трудноразбираемого кода на языке Си.
Участвующие в конкурсе работы, с одной стороны, должны препятствовать анализу кода и пониманию сути решаемой задачи, но, с другой стороны, код должен быть интересен и чем-то примечателен, например, быть необычно оформленным или выделять неожиданные стороны языка Си. Размер исходного кода программы не должен превышать 4096 байт, программа должна собираться и выполнять какое-либо осмысленное действие.
Лучшие работы:
- Adrian Cable (http://ioccc.org/2013/cable3/) - эмулятор IBM PC, способный запустить MS DOS и такие программы, как Windows 3.0, Excel, MS Flight Simulator, AutoCAD, Lotus 1-2-3;<center><a href="http://ioccc.org/2013/cable3/screenshot_flightsim4.png"... src="http://www.opennet.me/opennews/pics_base/0_1388952034.png" style="border-style: solid; border-color: #e9ead6; border-width: 15px;" title="" border=0></a></center>
- Christopher Mills (http://ioccc.org/2013/mills/) - HTTP-сервер, при открытии страницы отображающий 3D-часы;
<center><img src="http://www.opennet.me/opennews/pics_base/0_1388954972.png" style="border-style: solid; border-color: #606060; border-width: 1px;" title="" border=0></center>- Adrian Cable (http://ioccc.org/2013/cable2) - система распознавания текста;
<center><img src="http://www.opennet.me/opennews/pics_base/0_1388955272.png" style="border-style: solid; border-color: #606060; border-width: 1px;" title="" border=0></center>- Yves-Marie Morgan (http://ioccc.org/2013/morgan1) - графический (X11) симулятор солнечной системы, отображающий позиции 8 планет по заданной дате;
- Don Yang (http://ioccc.org/2013/misaka/) - горизонтальное или вертикальное слияние файлов;
<center><img src="http://www.opennet.me/opennews/pics_base/0_1388952946.png" style="border-style: solid; border-color: #606060; border-width: 1px;" title="" border=0></center>- Yusuke Endoh (http://ioccc.org/2013/endoh1/) - реализация SKI-исчисления;
<center><img src="http://www.opennet.me/opennews/pics_base/0_1388953431.png" style="border-style: solid; border-color: #606060; border-width: 1px;" title="" border=0></center>- Qiming Hou (http://ioccc.org/2013/hou/) - система трассировки лучей;
<center><a href="http://ioccc.org/2013/hou/old_default.jpg"><img src="http://www.opennet.me/opennews/pics_base/0_1388954094.jpg" style="border-style: solid; border-color: #e9ead6; border-width: 15px;" title="" border=0></a></center>- Arch Robison (http://ioccc.org/2013/robison/) - вычислитель произвольных арифметических выражений (например, echo '10*(20*(1+(9*5)))/3' | ./robison). Код оформлен в виде набора функций str* и memset;
- Michael Birken (http://ioccc.org/2013/birken/) - игра в тетрис. Код оформлен в виде сцены игры в тетрис;
<center><a href="http://ioccc.org/2013/birken/triple0.gif"><img src="http://www.opennet.me/opennews/pics_base/0_1388954332.gif" style="border-style: solid; border-color: #e9ead6; border-width: 15px;" title="" border=0></a></center>- Yusuke Endoh (http://ioccc.org/2013/endoh2/) - генератор JPEG-файла с изображением кода программы;
<center><img src="http://www.opennet.me/opennews/pics_base/0_1388954553.png" style="border-style: solid; border-color: #606060; border-width: 1px;" title="" border=0></center>- Yves-Marie Morgan (http://ioccc.org/2013/morgan2/) - игра в домино (X11 и ASCII);
- Yusuke Endoh (http://ioccc.org/2013/endoh4/) - формирует 3D-представление многогранника на основе заданных вершин;
- Лучшие однострочники:
- Yusuke Endoh (http://ioccc.org/2013/endoh3/) - синтезатор музыки на основании нотной записи ABC (http://ru.wikipedia.org/wiki/ABC_%28%D0%BD... (размер программы 137 байт);- Adrian Cable (http://ioccc.org/2013/cable1/) - определяет к какой партии относится выбранный президент США (размер программы 88 байт);
- J. David Lowe (http://ioccc.org/2013/dlowe/) - визуализация входных данных в форме графика (149 байт)
<center><img src="http://www.opennet.me/opennews/pics_base/0_1388953237.png" style="border-style: solid; border-color: #e9ead6; border-width: 15px;" title="" border=0></center>
URL: http://developers.slashdot.org/story/14/01/04/2123236/source...
Новость: http://www.opennet.me/opennews/art.shtml?num=38793
Однострочник на перл - чемпион на все времена! :)
Ларри Уолл в этом конкурсе неоднократно участвовал. И видно ведь, что не один perl может быть краток.
на Перле, ёптa
Как это так эмулятор ibm pc в 4кб уложился? фантастика нафик.
Там плюс 12 кило BIOS и 3.7 Makefile
А в Makefile есть вот такая фича# Defines
DEFS=-DKB='(kb=read(H(8),r+1190,1))&&H(7)'Как судьи пропустили такую подставу, нипанятна.
А ты вставь этот дефайн в C файл, размер всё равно будет меньше 4096.
> Как судьи пропустили такую подставу, нипанятна.Obfuscation test PASSED!
/thread
В однострочнике J. David Lowe, в makefile
CFLAGS= ${CWARN} ${CSTD} ${ARCH} ${OPT} ${LIBS} -include stdio.h -include stdlib.h -D'_(x)=strtof(b[x],0)'
Давайте устроим соревнование: кто больше кода в Makefile перенесёт. :)
Предлагаю решение для хранения данных:
Создаешь 100500 файлов. Нулевого размера. С именами в которых данные заколочены. Суммарный размер - ноль. Зато подчитав оглавление диры можно свои данные получить. Таким макаром чувак смог compression contest разок выиграть, "типа, сжав" данные :). Он честно спросил - можно ли более 1 файла. Ему сказали - можно. Ну он и сохранил данные в файлах 0-го размера :).
Читайте hint.text:On UNIX-based systems we can get raw keystrokes using stty. However Windows has no stty. Therefore the Makefile includes a -D entry to define a “keyboard driver” KB which as it stands is suitable for UNIXes, but maybe not non-UNIX platforms.
Этому эмулятору вчера Alan Cox удивлялся.
>[оверквотинг удален]
> - Intel 8086/186 CPU
> - 1MB RAM
> - 8072A 3.5" floppy disk controller (1.44MB/720KB)
> - Fixed disk controller (supports a single hard drive up to 528MB)
> - Hercules graphics card with 720x348 2-color graphics (64KB video RAM), and CGA 80x25 16-color text mode support
> - 8253 programmable interval timer (PIT)
> - 8259 programmable interrupt controller (PIC)
> - 8042 keyboard controller with 83-key XT-style keyboard
> - MC146818 real-time clock
> - PC speakerЭто ж конфиг моего первого ПиСюка, РАМы правда было 768кб
>misaka.cAWWWWW!
cc misaka.c -o hcat && ./hcat misaka.c misaka.c > misaka2.c && cc misaka2.c -o vcat && ./vcat misaka.c misaka.c > misaka3.c && cc misaka3.c -o longcat && ./longcat misaka.c misaka.c > misaka4.c && cat misaka4.c
О-карин! Ня!
В прошлом году от него же Нярко была.
последний скриншот (зеленый) - фотошоп!
Если посмотреть исходники, то можно увидеть, что там используются символы из Unicode.
> последний скриншот (зеленый) - фотошоп!Уникод еще и не такое позволяет.
Вот те фотошоп:
▒▒▒▄▄▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▄▄
▒▒█▒░░░░▄▄▄▄▀░░░░░▒▀▀▄▄▄▒▒█
▒█▒░░░░░▄▀▀▄▄░░░░▒▄▄▄▒▒▒▒▒▒█
█▒▀▄▄▒░░██▄▄▄█░░▒██▄▄█▒▒▒▒▒▒█
█▒▒░▄▀▄▄▄▀░░░░░░▒▒█▒▒▒▒▒▒▒▒█
█▒░░█▄▄░░░░░█▀░░░░▀▄▒▒▄▀▀▀▄█
█▒░░▀█▄█▀▀▄░▀▀▀▀▄▄▄▀▒▒▒█▒▒█
▒█▒░░░▀█▄▄█▀▀▀█▀▀▀█▀█▀██▒▒█
▒▒█▒░░░░▀██▄▄▄█▄▄▄█▄██▒▒▒▒█▄
▒▒▒█▒░░░░░░░░░░░░░▒▒▒▒▒▒▒▒▒█
▒▒▒▒▀▀▀▀▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▀▀
У меня давно сложилось ощущение, что половина программ в Линуксе писалась для этого чемпионата.
> У меня давно сложилось ощущение, что половина программ в Линуксе писалась для
> этого чемпионата.В винде и похуже бывает. Гуглить про "в общем какой-то козел стал гoвнистость" - там показано как программы пишут виндовые програмеры :)
Судя по тому, что нам на работе на заказ пишут (не кислые комплексы пачками за не менее некислые деньги) - виндовые проггеры зачастую их пишут в туалете в процессе дефекации с использованием соответствующей бумаги.
Зато как звучит название этих проггероФФ: сположные "системные интеграторы" и "разработчики систем SCADA/АСУТП"...
А по томе: просто великолепно! Весьма впечатлён.
А ты поищи упомянутый текстик. Там виндовые програмеры сделали из сей какой-то почти одинэс, только ругательный :)
Очень круто :)
И очередные программы из разряда "сделаем тупо ASCII-картинку!".
А
> HTTP-сервер, при открытии страницы отображающий 3D-часы;вообще похоже POSIX использует.
Штаа?
> И очередные программы из разряда "сделаем тупо ASCII-картинку!".Попробуй сам так сделать - не забудь рассказать насколько это просто...
А разве все это не противоречит идеологии OpenSource
> А разве все это не противоречит идеологии OpenSourceНет.
Идеологии - нет.
Идеалам - да.
А на питоне слабо такое с форматированием выделывать? :D
> А на питоне слабо такое с форматированием выделывать? :DПитон сам за тебя всё выделывает.
Питон - ЯП для быдлoкoдeров. А быдлoкодер должен вкалывать от забора и до обеда. Художества быдлoкoдерам не позволяются, это удел настоящих профи.
не совсем то: http://docs.python.org/faq/programming#is-it-possible-to-wri...
Кто понял, где таблица в с президентами? Или ответ рандомно выбирается? :)
Если попытаться написать читаемый эквивалент, то выйдет следующее (я не проверял работоспособность!)int main(int argc, char **argv)
{
if ( (*(int*)argv[1] % 4796 % 275 % argc) == 0 ) /* argc == 4 */
puts(argv[3]);
else
puts(argv[2]);
}Первые четыре буквы имени президента приводятся к int (причем из-за Little Endian байты интерпретируются в обратном порядке: так, obama превратится в 0x6D61626F - 'mabo'). Дальше происходит какой-то фокус с остатками от деления. Кто поймет его - поймет смысл программы.
Имеет смысл посмотреть, как президенты распределены во времени были. Думаю дальше...
Кстати, у кого-нибудь есть ссылка на компактную шпаргалку по сабжу? (извиняюсь за офтопик)
Я думаю победили бывшие кодеры MS Windows, т.к. Майкрософт не жалеет раздавать исходники правительствам стран для сертификации структурами типа ФСБ.Интересно, как они справятся с сертификацией подобного кода?
Такой код можно сертифицировать под требования FAA документ DO-178B ?
Господа, объясните, плиз, как работает однострочник с президентами. В Makefile вроде пусто.
>So how does a one line C source know so much? Hint: it doesn't.
Там два магических числа в коде:) выбор нужного бита внутри кодового int-a - по первой букве фамилии
Не могли бы вы развернуть свою мысль? Что-то я сомневаюсь в вашем утверждении.
> Там два магических числа в коде:) выбор нужного бита внутри кодового int-a
> - по первой букве фамилииПо четырём же байтам, а не по первой букве. Не "нужного бита", а спец.подобранные коэффициенты в типа-хэше -- для ограниченного множества вх.данных выдающие нужные ответы.
---Куда делся ответ другого анонима с читаемым кодом?
Никуда не делся, он чуть выше. Я просто решил отвечать на более раннюю просьбу объяснить.
>> Там два магических числа в коде:) выбор нужного бита внутри кодового int-a
>> - по первой букве фамилии
> По четырём же байтам, а не по первой букве. Не "нужного бита",
> а спец.подобранные коэффициенты в типа-хэше -- для ограниченного множества вх.данных выдающие
> нужные ответы.
> ---Куда делся ответ другого анонима с читаемым кодом?Да, очень похоже на хэш. Но все-таки интересно выяснить, как именно автор подобрал магические числа и почему их три. Должен же там быть какой-то метод! Есть у кого-нибудь догадки?
> какой-то метод! Есть у кого-нибудь догадки?Сначала нужен Гений, придумавший общую конструкцию. Или Художник, укравший оную.
Потом, для таблицы входных и выходных значений, подставляемых в, решаем систему уравнений -- относительно коэффифиентов в данном случае.
Делов-то. Достаточно кудрявая функция, таблица из 51 или сколько их там президентов -- и вперёд по кочкам.
То есть грубо можно считать, что те 51 бит (да-нет, демократ-комунист) почти что забиты в коэфициенты.
>решаем систему уравнений -- относительно коэффифиентов в данном случае.Идея мне понятна. Но вот в данном конкретном случае я немного застрял. У меня получается, что количество переменных больше, чем количество уравнений в системе.
H % A % B % C = D <=> H - q1*A - q2*B - q3*C = D
Даже зная H (числа, получающиеся из четырех букв президента), получается, что частные q1, q2 и q3 в каждом уравнении свои независимые, а D может принимать значение либо 0 (знаем, что демократ) либо неопределенное "от 1 до C-1". Плюс ограничение на то, что все числа натуральные. Не думаю, что тут можно решить систему иначе, как тупым перебором.
Лопни мои глаза, но ведь на первом скриншоте fly!11адын