Хабрахабр

Иногда ответ не «42»

Доброй вам пятницы, хабралюди. У меня с друзьями есть такая традиция — мы собираемся и вместе программируем. Раньше у нас такая работа была, а сейчас уже просто традиция — кодобредогенерация. Мы выбрали несложную задачку и нарисовали решений кто во что горазд. Код будет ближе к концу статьи, но не спешите листать вниз, надо же сначала объяснить, что это за код и как мы пришли к нему.

Сама задача — получить число 0x17 самым внезапным образом.

Внимание! Данный пост оскорбляет чувство прекрасного и практики программирования на C. Читайте, воспринимайте и комментируйте на свой страх и риск.

Вот бывает смотришь какой-то код и видишь a = b ^ 7.
Вы любите магические числа в коде? Что это за число, откуда оно взялось, что означает? Почему именно 7? Есть несколько способов разрешить неопределенность такого рода: Столько много вопросов и так мало ответов, если кто-то не утрудился комментарием.

  1. Оставить комментарий. Но комменты для слабаков — не наш путь.
  2. Сделать переменную или макрос с говорящим именем. a = b ^ HEARTBEAT_MASK_BYTE. Уже неплохо, но можно же и лучше, не так ли?
  3. Показать вычислениями путь, который привел к данному числу. Вот! Это отличный способ. Но не всегда применимый, как, например, в рассматриваемом коде. В нем 7 — это законченный и самостоятельный элемент, который не является результатом каких-то операций.

Зачем рассматривать еще какие-то способы? Берем последний и в путь! Но, как я сказал, есть проблема — не всегда есть адекватный способ вычислениями показать путь к числу. Но задача стояла избавиться от магического числа, а не сделать это логично. Более того, доведем задачу до абсурда — будем получать числа максимально непонятным образом.

Программно-аппаратный комплекс в виде вызова функции rand() постановил, что избавляться мы будем от магического числа 0x17.

Коллектив погроммистов в составе меня, Viscount и [УДАЛЕНО] приступил к творчеству.
0х17 способов получить 0x17:

int Ox01 = ~-~-~-~-~-~-~-~-~-' '; int Ox02 = ((!true)["true"]-(false)["FALSE"])>>true; int Ox03 = 'X'/2/2^!*""; int Ox04 = ('0'>>!*"")-!*""; int Ox05 = (~'!'-~'~')>>!*"">>(2==1==0); int Ox06 = ('|'||'|'|'|')["||||||||"]%*"error"; int Ox07 = '.'>>!false; int Ox08 = '\\'>>('!'>>(1<<2)); int Ox09 = '/'-'/'/'/'>>'/'/'/'; int Ox0a = (*"")["yes"]^(*"")["no"]; int Ox0b = *"yes"^*"no"; int Ox0c = '0'/2-!*""; int Ox0d = ((!'!'+'+')>>true)+(true<<true); int Ox0e = (-~true^!false)*(true<<(-~true|!false))-!false; int Ox0f = '!'-'^'%*"*"; int Ox10 = -~*" L"^-~*"5Z"; int Ox11 = *"Totally" -* "not" +* "0x17" + true; int Ox12 = -~!*""*-~!*""*-~!*""*-~!*""*-~!*""+~!*""*-~!*""*-~!*""-true; int Ox13 = -compl(-compl true xor true)<<-compl true|'8'>>('1'^'2'); int Ox14 = '^'>>('<'^'>'); int Ox15 = *"'"-(' '>>!0); int Ox16 = '_'>>-~1; int Ox17 = 010-001+010+010;

Для сомневающихся в том, что указанная задача выполнена верно — ссылка на ideone.

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

Присоединяйтесь! Кстати, мы ищем Питон-разработчика, который умеет программировать понятнее чем я.

Теги
Показать больше

Похожие статьи

Добавить комментарий

Ваш e-mail не будет опубликован. Обязательные поля помечены *

Кнопка «Наверх»
Закрыть