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

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

НЛО прилетело и опубликовало эту надпись здесь
Напишите в 30 строк машину Тьюринга, а дальше хоть Crysis портируйте ;)
НЛО прилетело и опубликовало эту надпись здесь
По этому вариантов будет не больше 9*7*5*3*1 = 945

А с учетом «зеркальных» (симметричных) раскладок и того меньше.
Представьте очень маленький браузер, который способен отображать предкомпилированный сайт со следующими ограничениями: одна страница может содержать не более 16 символов и 9 ссылок на другие страницы сайта. При этом «зеркальные» отражения можно производить только просьбой пользователю развернуть монитор или играть через зеркало. В реальной игре это можно применять, в этом примере для этого нет места. Но некоторые комбинации, возможно повторяются, не искал.
Если вы запустите генератор, исходный код которого находится в конце статьи, с параметром "-sh > example.html" то можете увидеть принцип работы этой игры на примере HTML.
«Для запуска таких программ требуется не только веб страница, но и браузер, разные библиотеки, ядро ОС. На самом деле работают не 30 строк кода, а десятки, сотни мегабайты программного кода, находящиеся в памяти компьютера.»

Однако за Вашими дерганьями int 10h, int 16h тоже стоит немало кода. Но можно это исключить, работая честно — через порты для клавиатуры и пописывая в B800:0000 для вывода на экран). Правда, не в курсе, будет ли это работоспособно под Windows.
через порты для клавиатуры

… за поддержку USB- и Bluetooth-клавиатур — бонусные баллы…
Май фолт. Впрочем, мои эксперименты в данном направлении завершились во времена PS/2 разъемов :)
image
Действует правило 0xf4: There is xkcd of it. No exceptions. =))
Жду игру в пять строчек на си, где нужно искать утечку памяти.
Вы не поверите, в примере этой статьи, размером с десяток строк на Си (если считать строки с командами, то их всего 5) была ошибка. За неделю статья собрала 30000 просмотров, но никто не заметил эту ошибку. Пример не был спрятан в спойлер, но был в середины статьи.
do scanf("%i",&i); while ( i<1 && i>9 ); // Ошибка в while, которое контролирует диапазон вводимых чисел [1;9].

Если вам хочется найти утечку памяти в пяти строках кода игры
Замените тело main следующим кодом, и добавьте сгенерированные данные из программы, приведённой в этом посте.
  while (1) {
    printf(text[data_pos]);
    int *i=malloc(sizeof(int));
    do scanf("%i",i); while ( *i<1 || *i>9 );
    data_pos=data_addres[data_pos][*i-1];
  }

немало примеров того как немало ошибаются люди, использующие слово «немало»!
не мало, а много ошибок со словом «немало» в этих ваших интернетах.
Достало. Говорите «много», если грамоте не обучены.
Тьфу.
Это всего лишь иллюстрация того факта, что правила раздельного и слитного написания «не» достаточно запутаны. К примеру, пункты 88.2 и 89.3 из
therules.ru/hyphen-particles/
Я считаю, что четкой границы между этими правилами нет. Когда я пишу «немало» и «немного» я имею в виду «много» и «мало» без всякого противопоставления вроде «не мало, а много». Т.е. слитным написанием я подчеркиваю факт отсутствия такого противопоставления.
Снимаю шляпу! Очень классно.
Да..., ну как тут не вспомнить про hugi compo. Не 30 строк, конечно, но зато без таблицы.
да, на асме как-то всегда в байтах меряли, а не в строках…
Если не убрать из требований «бесконечные» данные, то можно запустить что угодно, написав в 30 строк декодер образа этого «что-угодно» обыкновенным XOR с не очень длинным ключом (так обойдется ограничение на запись двочного кода в одну строку, ведь теперь в строке вовсе не код), а после расшифровки просто передать туда управление.
Если же рассматривать «функции BIOS» в широком смысле, т.е. с возможностью использования UEFI-сервисов, то можно буквально несколькими командами попросить диспетчер DXE загрузить драйвер, написанный на EBC (точно не исполняемый код процессора) и лежащий рядом с нашим кодом. Тоже если стараться и не проверять коды возврата, в 30 строк уложиться можно.
чем использование функций биоса лучше функций ОС? И там и там — чужой код. Уж пишите для PC, так память видеоадаптера меняйте вручную.
В видеоадаптере тоже много кода, который переводит байты в изображение :)
И это тоже. Особенно в современных видяхах с акселерацией.

По этой причине, мне кажется, установка ограничений «не юзать ОС» крайне неточным. Если уж «ничего не использовать», то нужно работать в чистой виртуализированной среде с учебным референсным набором инструкций и образцово-показательным пискельным (или векторным) экраном.

Если же мы про суровый тяжкий мир — то юзать надо всё, что доступно. И ОС в том числе.
… и наёмных работников
Если юзать всё, что доступно, то любую игру можно написать в одну строчку bat-файла:
start crysis.exe
Но ведь это будет не любая игра, а существующая. Нового-то не появится.
Добавил параметр для создания исходника с использованием и DOS и BIOS прерываний. Получилось, с некоторыми оптимизациями, до 20 команд сократить.
Не надо ляля. Да, там много чего есть, но вот кода как такового — нету. Это сейчас все разленились и стали эмулировать всё это программно — ну так можно вспомнить, что и процессор нонче не команды x86 исполняет, а свой собственный код и, стало быть, где-то есть транслятор в этот код!
for ( int i=0; i<100; i++)...;
cmp ecx, 100; JNA...
JNA — jump if not above, то есть, на асме написано "<= 100". А во втором примере правильно — там сравнение с "> 99".
В первом примере нужен JL, если signed int.
Комментарий про «хардкор и ассемблер»
Комментарий про комментарий про
НЛО прилетело и опубликовало эту надпись здесь
* Created on 29 Январь 2014 г., 11:51


Даже немного успел порадоваться о том, как быстро прошел январь :)
Зарегистрируйтесь на Хабре, чтобы оставить комментарий

Публикации