Подарки были открыты. Пироги были съедены. Звездные войны были просмотрены. Рождественский сезон начинает сворачиваться. К настоящему времени вы вполне могли вытащить несколько рождественских крекеров . Если вам повезет, вместо обычных бесполезных пластиковых игрушек вы, возможно, выиграли Тайный калькулятор, которым вы сможете удивить своих друзей и родственников .
Этот трюк состоит из 6 карточек с напечатанной на них сеткой чисел 4х8. Каждая карта содержит различное подмножество целых чисел [1,63]
. Маг попросит вас выбрать номер из одной карты и сохранить этот номер в секрете. Маг спросит, какие карты имеют этот номер. Обладая этим знанием, маг сможет волшебным образом определить и раскрыть предполагаемое число.
Выведите полный набор из 6 карт Mystery Calculator в следующем порядке:
1 3 5 7 9 11 13 15
17 19 21 23 25 27 29 31
33 35 37 39 41 43 45 47
49 51 53 55 57 59 61 63
- - - - - - - - - - -
2 3 6 7 10 11 14 15
18 19 22 23 26 27 30 31
34 35 38 39 42 43 46 47
50 51 54 55 58 59 62 63
- - - - - - - - - - -
4 5 6 7 12 13 14 15
20 21 22 23 28 29 30 31
36 37 38 39 44 45 46 47
52 53 54 55 60 61 62 63
- - - - - - - - - - -
8 9 10 11 12 13 14 15
24 25 26 27 28 29 30 31
40 41 42 43 44 45 46 47
56 57 58 59 60 61 62 63
- - - - - - - - - - -
16 17 18 19 20 21 22 23
24 25 26 27 28 29 30 31
48 49 50 51 52 53 54 55
56 57 58 59 60 61 62 63
- - - - - - - - - - -
32 33 34 35 36 37 38 39
40 41 42 43 44 45 46 47
48 49 50 51 52 53 54 55
56 57 58 59 60 61 62 63
Выходные данные могут содержать или не содержать последний заключительный перевод строки. Там не должно быть никаких пробелов. Каждая карта отделена 11 -
перфорациями.
- md5sum с последним переводом строки:
7aa2d9339b810ec62a2b90c5e11d6f4a
- md5sum без окончательного перевода строки:
e9abe4e32dca3e8fbfdaa4886fc5efd2
Для тех из вас, кто больше ориентируется на окна, я также допущу CRLF
окончания стиля линий. В этом случае md5s:
- md5sum с последним переводом строки:
e4f16ff9752eee2cedb5f97c7b5aec6d
- md5sum без окончательного перевода строки:
78c560eed3b83513e3080117ab5dc5fa
источник
Ответы:
Python 2 ,
99969391 байтВыход с ошибкой, которая разрешена по умолчанию .
Попробуйте онлайн! или проверьте хеш MD5 .
Как это работает
После инициализации k как 1 , мы вводим бесконечный цикл, который выполняет следующий код.
tuple(n for n in range(64)if k&n)
создает кортеж всех неотрицательных целых чисел ниже 64 , для которых установлен j- й бит, где j - число итераций цикла, т. е. 2 j = k .('%2d '*7+'%2d\n')*4
сначала создает строку формата'%2d %2d %2d %2d %2d %2d %2d \n'
, а затем повторяет ее четыре раза. Это шаблон для каждой карты, который добавляет каждое целое число в кортеже к двум символам (пробелы в начале), разделяет каждую группу из 8 целых чисел пробелами, а сами группы - переводом строки.Теперь, заявление Python 2
print
- любопытный зверь. Он принимает несколько выражений, разделенных запятыми, и печатает их одно за другим. Он оценивает первое выражение, печатает его, оценивает следующие выражения, печатает его и т. Д. До тех пор, пока не останется больше выражений. Если за последним выражением не стоит запятая, к нему добавляется перевод строки. Кроме того, он добавляет пробел ко всем выражениям, если они не напечатаны в начале строки.На каждой итерации мы сначала печатаем результат применения строки формата к кортежу. Мы находимся в начале строки, поэтому пробел не добавляется.
Затем мы (пытаемся) напечатать результат
11/(k<32)*' -'
. Если k <32 , это выражение оценивается как' - - - - - - - - - - -'
. Опять же, мы в начале строки, поэтому пробел не добавляется. После этого выражения нет запятой, поэтомуprint
добавляется перевод строки. Однако в шестой итерации k = 2 5 = 32 , поэтому при попытке оценки11/(k<32)*' -'
возникает необработанная ошибка ZeroDivisionError . Это выходит из цикла и немедленно завершает программу.источник
C (gcc), 105 байт
источник
Python 2, 132 байта
Расщепление последовательностей раздражает в Python.
Попробуйте онлайн .
источник
Желе ,
2726 байтПопробуйте онлайн! или проверьте хеш MD5 .
Как это работает
источник
G
встроено всерьез для этой задачи. Мне нужно было около 10 байтов, чтобы сделать то же самое.Пип ,
494844 байта43 байта кода, +1 для
-S
флага.Попробуйте онлайн!
объяснение
источник
Рубин, 90 байт
Ungolfed
Довольно просто. Единственное, что может потребовать дополнительного объяснения, - это когда после числа следует новая строка, а не пробел. Это происходит, когда
j+1%16==0
в первых четырех картах иj+1%8
== 0 в двух последних. Следовательно, выражение15>>i/64/4
или эквивалентно15>>i/256
используетсяj
для определения того, требуется ли пробел или символ новой строки.источник
JavaScript (ES6), 150 байт
источник
Perl 6 ,
194 11686 байтПопытайся
Попытайся
Попытайся
(проверьте разделы отладки для результатов MD5)
Последние два были вдохновлены / расшифрованы из реализаций Ruby и C
источник
05AB1E , 71 байт
Попробуйте онлайн!
Этот подход, не пытайтесь. Вероятно, удалит это из позора, чтобы быть честным. Манипулирование матрицами - не моя сильная сторона, поэтому я попытался с помощью грубой силы сгенерировать все 6 последовательностей, а затем накатать их вместе.
источник
Пакетный, 249 байт
Выводит завершающий CRLF.
источник
JavaScript (ES6),
103102 байтаMD5: 7AA2D9339B810EC62A2B90C5E11D6F4A
Тест
Показать фрагмент кода
источник
утилиты bash / Unix,
125124 байтаРедактировать: удалил ненужные ^ из регулярного выражения в конце; в любом случае регулярное выражение всегда будет совпадать в начале строки.
источник
PHP, 102 байта
печатает начальный, но без завершающего символа новой строки и по одному пробелу в каждой строке. Запустите
-nr
или попробуйте онлайн .Для PHP <5.6 замените
2**$c
на(1<<$c)
. PHP 5.5 можно использовать&~1<<$c?:
вместо%2**$c||
.Для PHP <5.5 замените
"\n"[$n++%8]
на($n++%8?"":"\n")
.Черточки - это один символ из-за пробела; добавьте пробел к первому
str_pad
параметру (вставьте пробел перед второй строкой кода), чтобы исправить.Вместо этого удаление начального пробела требует некоторой возни и трех дополнительных байтов:
printf("%c%2d",$n++%8?32:10,++$b%64);
и23
вместо25
.Превращение ведущего символа новой строки в завершающий будет стоить еще три байта:
PHP, 109 байт
соответствует всем спецификациям и работает со всеми версиями PHP.
источник
Python 2 , 89 байт
Попробуйте онлайн!
Объяснение:
источник
05AB1E , 29 байт
Портируйте ответ от @Emigna 05AB1E здесь , после чего я добавил дополнительный код для его печати в соответствии с требованиями этого задания.
Попробуйте онлайн или проверьте md5sum .
Объяснение:
источник
JavaScript, 234 байта.
Я напишу объяснение позже.
Если
console.log
требуется, количество байтов будет 247 байтов.источник