URL: https://www.opennet.ru/cgi-bin/openforum/vsluhboard.cgi
Форум: vsluhforumID3
Нить номер: 93437
[ Назад ]

Исходное сообщение
"Результаты 22 чемпионата по написанию запутанного кода на яз..."

Отправлено opennews , 06-Янв-14 01:09 
Опубликованы (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.ru/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.ru/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.ru/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.ru/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.ru/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.ru/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.ru/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.ru/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.ru/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.ru/opennews/art.shtml?num=38793


Содержание

Сообщения в этом обсуждении
"Результаты 22 чемпионата по написанию запутанного кода на яз..."
Отправлено Аноним , 06-Янв-14 01:09 
Однострочник на перл - чемпион на все времена! :)

"Результаты 22 чемпионата по написанию запутанного кода на яз..."
Отправлено Anonn , 06-Янв-14 07:03 
Ларри Уолл в этом конкурсе неоднократно участвовал. И видно ведь, что не один perl может быть краток.

"Результаты 22 чемпионата по написанию запутанного кода на яз..."
Отправлено Grammar Nazi , 09-Янв-14 08:09 
на Перле, ёптa

"Результаты 22 чемпионата по написанию запутанного кода на яз..."
Отправлено Жорж , 06-Янв-14 01:33 
Как это так эмулятор ibm pc в 4кб уложился? фантастика нафик.

"Результаты 22 чемпионата по написанию запутанного кода на яз..."
Отправлено pavlinux , 06-Янв-14 01:59 
Там плюс 12 кило BIOS и 3.7 Makefile
А в Makefile есть вот такая фича

# Defines
DEFS=-DKB='(kb=read(H(8),r+1190,1))&&H(7)'

Как судьи пропустили такую подставу, нипанятна.


"Результаты 22 чемпионата по написанию запутанного кода на яз..."
Отправлено Аноним , 06-Янв-14 02:24 
А ты вставь этот дефайн в C файл, размер всё равно будет меньше 4096.

"Результаты 22 чемпионата по написанию запутанного кода на яз..."
Отправлено Аноним , 06-Янв-14 02:37 
> Как судьи пропустили такую подставу, нипанятна.

Obfuscation test PASSED!


"Результаты 22 чемпионата по написанию запутанного кода на яз..."
Отправлено Аноним , 06-Янв-14 12:17 
/thread

"Результаты 22 чемпионата по написанию запутанного кода на яз..."
Отправлено xdbxd , 06-Янв-14 12:46 
В однострочнике J. David Lowe, в makefile
CFLAGS= ${CWARN} ${CSTD} ${ARCH} ${OPT} ${LIBS} -include stdio.h -include stdlib.h -D'_(x)=strtof(b[x],0)'

"Результаты 22 чемпионата по написанию запутанного кода на яз..."
Отправлено pavlinux , 06-Янв-14 14:18 
Давайте устроим соревнование: кто больше кода в Makefile перенесёт. :)

"Результаты 22 чемпионата по написанию запутанного кода на яз..."
Отправлено Аноним , 08-Янв-14 10:13 
Предлагаю решение для хранения данных:
Создаешь 100500 файлов. Нулевого размера. С именами в которых данные заколочены. Суммарный размер - ноль. Зато подчитав оглавление диры можно свои данные получить. Таким макаром чувак смог compression contest разок выиграть, "типа, сжав" данные :). Он честно спросил - можно ли более 1 файла. Ему сказали - можно. Ну он и сохранил данные в файлах 0-го размера :).

"Результаты 22 чемпионата по написанию запутанного кода на яз..."
Отправлено svlasov , 07-Янв-14 14:13 
Читайте 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.


"Результаты 22 чемпионата по написанию запутанного кода на яз..."
Отправлено Anonn , 06-Янв-14 07:05 
Этому эмулятору вчера Alan Cox удивлялся.

"Результаты 22 чемпионата по написанию запутанного кода на яз..."
Отправлено pavlinux , 06-Янв-14 14:25 
>[оверквотинг удален]
> - 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кб


"Результаты 22 чемпионата по написанию запутанного кода на яз..."
Отправлено Okarin , 06-Янв-14 02:04 
>misaka.c

AWWWWW!


"Результаты 22 чемпионата по написанию запутанного кода на яз..."
Отправлено ano , 06-Янв-14 05:44 
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

"Результаты 22 чемпионата по написанию запутанного кода на яз..."
Отправлено Аноним , 06-Янв-14 06:31 
О-карин! Ня!

"Результаты 22 чемпионата по написанию запутанного кода на яз..."
Отправлено pkunk , 06-Янв-14 08:06 
В прошлом году от него же Нярко была.

"Результаты 22 чемпионата по написанию запутанного кода на яз..."
Отправлено zed_0xff , 06-Янв-14 08:37 
последний скриншот (зеленый) - фотошоп!

"Результаты 22 чемпионата по написанию запутанного кода на яз..."
Отправлено www2 , 06-Янв-14 10:03 
Если посмотреть исходники, то можно увидеть, что там используются символы из Unicode.

"Результаты 22 чемпионата по написанию запутанного кода на яз..."
Отправлено Аноним , 06-Янв-14 11:25 
>  последний скриншот (зеленый) - фотошоп!

Уникод еще и не такое позволяет.
Вот те фотошоп:
▒▒▒▄▄▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▄▄
▒▒█▒░░░░▄▄▄▄▀░░░░░▒▀▀▄▄▄▒▒█
▒█▒░░░░░▄▀▀▄▄░░░░▒▄▄▄▒▒▒▒▒▒█
█▒▀▄▄▒░░██▄▄▄█░░▒██▄▄█▒▒▒▒▒▒█
█▒▒░▄▀▄▄▄▀░░░░░░▒▒█▒▒▒▒▒▒▒▒█
█▒░░█▄▄░░░░░█▀░░░░▀▄▒▒▄▀▀▀▄█
█▒░░▀█▄█▀▀▄░▀▀▀▀▄▄▄▀▒▒▒█▒▒█  
▒█▒░░░▀█▄▄█▀▀▀█▀▀▀█▀█▀██▒▒█  
▒▒█▒░░░░▀██▄▄▄█▄▄▄█▄██▒▒▒▒█▄
▒▒▒█▒░░░░░░░░░░░░░▒▒▒▒▒▒▒▒▒█
▒▒▒▒▀▀▀▀▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▀▀


"Результаты 22 чемпионата по написанию запутанного кода на яз..."
Отправлено Аноним , 06-Янв-14 11:25 
У меня давно сложилось ощущение, что половина программ в Линуксе писалась для этого чемпионата.

"Результаты 22 чемпионата по написанию запутанного кода на яз..."
Отправлено Аноним , 06-Янв-14 11:40 
> У меня давно сложилось ощущение, что половина программ в Линуксе писалась для
> этого чемпионата.

В винде и похуже бывает. Гуглить про "в общем какой-то козел стал гoвнистость" - там показано как программы пишут виндовые програмеры :)


"Результаты 22 чемпионата по написанию запутанного кода на яз..."
Отправлено Fomalhaut , 06-Янв-14 12:10 
Судя по тому, что нам на работе на заказ пишут (не кислые комплексы пачками за не менее некислые деньги) - виндовые проггеры зачастую их пишут в туалете в процессе дефекации с использованием соответствующей бумаги.
Зато как звучит название этих проггероФФ: сположные "системные интеграторы" и "разработчики систем SCADA/АСУТП"...

"Результаты 22 чемпионата по написанию запутанного кода на яз..."
Отправлено Fomalhaut , 06-Янв-14 12:11 
А по томе: просто великолепно! Весьма впечатлён.

"Результаты 22 чемпионата по написанию запутанного кода на яз..."
Отправлено Аноним , 06-Янв-14 12:11 
А ты поищи упомянутый текстик. Там виндовые програмеры сделали из сей какой-то почти одинэс, только ругательный :)

"Результаты 22 чемпионата по написанию запутанного кода на яз..."
Отправлено Admiral , 06-Янв-14 12:08 
Очень круто :)

"Результаты 22 чемпионата по написанию запутанного кода на яз..."
Отправлено BratSinot , 06-Янв-14 12:47 
И очередные программы из разряда "сделаем тупо ASCII-картинку!".
А
> HTTP-сервер, при открытии страницы отображающий 3D-часы;

вообще похоже POSIX использует.


"Результаты 22 чемпионата по написанию запутанного кода на яз..."
Отправлено МегаВова , 06-Янв-14 15:08 
Штаа?

"Результаты 22 чемпионата по написанию запутанного кода на яз..."
Отправлено Аноним , 07-Янв-14 04:44 
> И очередные программы из разряда "сделаем тупо ASCII-картинку!".

Попробуй сам так сделать - не забудь рассказать насколько это просто...


"Результаты 22 чемпионата по написанию запутанного кода на яз..."
Отправлено Аноним , 06-Янв-14 14:36 
А разве все это не противоречит идеологии OpenSource

"Результаты 22 чемпионата по написанию запутанного кода на яз..."
Отправлено Andrey Mitrofanov , 06-Янв-14 14:59 
> А разве все это не противоречит идеологии OpenSource

Нет.


"Результаты 22 чемпионата по написанию запутанного кода на яз..."
Отправлено Аноним , 06-Янв-14 23:24 
Идеологии - нет.
Идеалам - да.

"Результаты 22 чемпионата по написанию запутанного кода на яз..."
Отправлено metallic , 06-Янв-14 14:42 
А на питоне слабо такое с форматированием выделывать? :D

"Результаты 22 чемпионата по написанию запутанного кода на яз..."
Отправлено guest , 06-Янв-14 15:10 
> А на питоне слабо такое с форматированием выделывать? :D

Питон сам за тебя всё выделывает.


"Результаты 22 чемпионата по написанию запутанного кода на яз..."
Отправлено Аноним , 07-Янв-14 04:46 
Питон - ЯП для быдлoкoдeров. А быдлoкодер должен вкалывать от забора и до обеда. Художества быдлoкoдерам не позволяются, это удел настоящих профи.

"Результаты 22 чемпионата по написанию запутанного кода на яз..."
Отправлено chorny , 11-Янв-14 06:33 
не совсем то: http://docs.python.org/faq/programming#is-it-possible-to-wri...

"Результаты 22 чемпионата по написанию запутанного кода на яз..."
Отправлено Аноним , 06-Янв-14 20:34 
Кто понял, где таблица в с президентами? Или ответ рандомно выбирается? :)

"Результаты 22 чемпионата по написанию запутанного кода на яз..."
Отправлено Аноним , 09-Янв-14 13:05 
Если попытаться написать читаемый эквивалент, то выйдет следующее (я не проверял работоспособность!)

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'). Дальше происходит какой-то фокус с остатками от деления. Кто поймет его - поймет смысл программы.

Имеет смысл посмотреть, как президенты распределены во времени были. Думаю дальше...


"Результаты 22 чемпионата по написанию запутанного кода на яз..."
Отправлено Аноним , 06-Янв-14 21:48 
Кстати, у кого-нибудь есть ссылка на компактную шпаргалку по сабжу? (извиняюсь за офтопик)

"Результаты 22 чемпионата по написанию запутанного кода на яз..."
Отправлено yantux , 08-Янв-14 18:40 
Я думаю победили бывшие кодеры MS Windows, т.к. Майкрософт не жалеет раздавать исходники правительствам стран для сертификации структурами типа ФСБ.

Интересно, как они справятся с сертификацией подобного кода?

Такой код можно сертифицировать под требования FAA документ DO-178B ?


"Результаты 22 чемпионата по написанию запутанного кода на яз..."
Отправлено Аноним , 09-Янв-14 06:58 
Господа, объясните, плиз, как работает однострочник с президентами. В Makefile вроде пусто.

"Результаты 22 чемпионата по написанию запутанного кода на яз..."
Отправлено Ann , 09-Янв-14 10:57 
>So how does a one line C source know so much?  Hint: it doesn't.

"Результаты 22 чемпионата по написанию запутанного кода на яз..."
Отправлено Аноним , 09-Янв-14 16:00 
Там два магических числа в коде:) выбор нужного бита внутри кодового int-a - по первой букве фамилии

"Результаты 22 чемпионата по написанию запутанного кода на яз..."
Отправлено Аноним , 09-Янв-14 17:20 
Не могли бы вы развернуть свою мысль? Что-то я сомневаюсь в вашем утверждении.

"Результаты 22 чемпионата по написанию запутанного кода на яз..."
Отправлено Andrey Mitrofanov , 09-Янв-14 17:37 
> Там два магических числа в коде:) выбор нужного бита внутри кодового int-a
> - по первой букве фамилии

По четырём же байтам, а не по первой букве. Не "нужного бита", а спец.подобранные коэффициенты в типа-хэше -- для ограниченного множества вх.данных выдающие нужные ответы.

---Куда делся ответ другого анонима с читаемым кодом?


"Результаты 22 чемпионата по написанию запутанного кода на яз..."
Отправлено Аноним , 09-Янв-14 19:49 
Никуда не делся, он чуть выше. Я просто решил отвечать на более раннюю просьбу объяснить.

"Результаты 22 чемпионата по написанию запутанного кода на яз..."
Отправлено Аноним , 09-Янв-14 19:54 
>> Там два магических числа в коде:) выбор нужного бита внутри кодового int-a
>> - по первой букве фамилии
> По четырём же байтам, а не по первой букве. Не "нужного бита",
> а спец.подобранные коэффициенты в типа-хэше -- для ограниченного множества вх.данных выдающие
> нужные ответы.
> ---Куда делся ответ другого анонима с читаемым кодом?

Да, очень похоже на хэш. Но все-таки интересно выяснить, как именно автор подобрал магические числа и почему их три. Должен же там быть какой-то метод! Есть у кого-нибудь догадки?


"Результаты 22 чемпионата по написанию запутанного кода на яз..."
Отправлено Andrey Mitrofanov , 09-Янв-14 20:02 
> какой-то метод! Есть у кого-нибудь догадки?

Сначала нужен Гений, придумавший общую конструкцию. Или Художник, укравший оную.

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

Делов-то. Достаточно кудрявая функция, таблица из 51 или сколько их там президентов -- и вперёд по кочкам.

То есть грубо можно считать, что те 51 бит (да-нет, демократ-комунист) почти что забиты в коэфициенты.


"Результаты 22 чемпионата по написанию запутанного кода на яз..."
Отправлено Аноним , 10-Янв-14 15:27 
>решаем систему уравнений -- относительно коэффифиентов в данном случае.

Идея мне понятна. Но вот в данном конкретном случае я немного застрял. У меня получается, что количество переменных больше, чем количество уравнений в системе.

H % A % B % C = D <=> H - q1*A - q2*B - q3*C = D

Даже зная H (числа, получающиеся из четырех букв президента), получается, что частные q1, q2 и q3 в каждом уравнении свои независимые, а D может принимать значение либо 0 (знаем, что демократ) либо неопределенное "от 1 до C-1". Плюс ограничение на то, что все числа натуральные. Не думаю, что тут можно решить систему иначе, как тупым перебором.


"Результаты 22 чемпионата по написанию запутанного кода на яз..."
Отправлено hizel , 09-Янв-14 12:41 
Лопни мои глаза, но ведь на первом скриншоте fly!11адын