Вступление
XOR - это цифровой логический элемент, который реализует эксклюзив или. В большинстве случаев это отображается как ^
. Четыре возможных результата в двоичном виде:
0 ^ 0 = 0
0 ^ 1 = 1
1 ^ 0 = 1
1 ^ 1 = 0
Это также можно рассматривать как сложение по модулю 2 в двоичном виде. В десятичном формате нам нужно преобразовать десятичное число в двоичное, 35 = 100011
и. 25 = 11001
Чтобы вычислить значение XOR, мы помещаем их друг на друга:
100011
11001 ^
--------
111010 = 58 in decimal
Задача : если задано целочисленное значение N больше 1, выведите таблицу XOR с размером N + 1. Например, N = 5:
0 1 2 3 4 5
1 0 3 2 5 4
2 3 0 1 6 7
3 2 1 0 7 6
4 5 6 7 0 1
5 4 7 6 1 0
Вы можете видеть, что перед каждым числом есть один пробел, потому что наибольшая сумма в таблице имеет длину 1. Однако, если мы возьмем N = 9, мы получим следующую сетку:
0 1 2 3 4 5 6 7 8 9
1 0 3 2 5 4 7 6 9 8
2 3 0 1 6 7 4 5 10 11
3 2 1 0 7 6 5 4 11 10
4 5 6 7 0 1 2 3 12 13
5 4 7 6 1 0 3 2 13 12
6 7 4 5 2 3 0 1 14 15
7 6 5 4 3 2 1 0 15 14
8 9 10 11 12 13 14 15 0 1
9 8 11 10 13 12 15 14 1 0
Наибольшее значение имеет длину 2, поэтому значение выравнивается по правому краю на длину 3 (наибольшая длина + 1).
Правила:
- Начальные пробелы не являются обязательными, только если используются (или не используются) последовательно
- Вы должны вывести таблицу в форме, показанной выше.
- Заполнение между столбцами должно быть как можно меньше
- Это код-гольф , поэтому выигрывает представление с наименьшим количеством байтов!
output an XOR table with the size N+1
Ответы:
MATL , 10 байт
Компилятор (и, в частности, эта программа) теперь, кажется, работает в Octave, хотя все еще нуждается в некоторой доработке. Вы можете временно использовать этот коммит GitHub .
Изменить (30 марта '16) : Попробуйте онлайн!
пример
объяснение
источник
Утилиты Bash + BSD, 45
Я долго ждал, чтобы найти применение
rs
. Это кажется хорошим.rs
возможно, потребуется установить в системах Linux. Но он работает прямо из коробки на OS X.$1
расширяется до N, и, следовательно,echo \$[{0..$1}^{0..$1}]
расширяется доecho $[{0..N}^{0..N}]
eval
ред:$[0^0] $[0^1] $[0^2] ... $[0^N] ... $[N^N]
rs
(изменить) изменить эту строку в N + 1 строк.-j
право оправдывает и-g1
дает ширину желоба 1. Это гарантирует, что итоговая выходная таблица имеет минимальную ширину между столбцами.Я проверил до N = 1000, что заняло 3,8 секунды. Большое N теоретически возможно, хотя bash не хватит памяти в какой-то момент при использовании памяти (N + 1) ² расширения скобки.
источник
С 114
128 152Редактировать Упрощенный подсчет пространства, вдохновленный работой Халеда Хунайфера
Функция переменного тока, которая соответствует спецификациям.
Попробуй вставь как ввод, по умолчанию 9
Меньше гольфа
источник
JavaScript (ES6) 120
122Редактировать 2 байта, сохраненных thx ETHпродукции
Анонимная функция. Примечание: число в таблице ограничено 7 цифрами, что более чем разумно, учитывая общий размер таблицы с учетом больших чисел
Теперь я должен найти более короткий способ получить максимальный размер столбцов, избегая логарифмов
Тестовое задание
источник
~m
чтобы захватить дополнительное пространство. Использование строки шаблона может сохранить два байта:(z,j)=>`(7 spaces)${i^j}`.slice(~m)
(ignore this padding) ``abc`def`` (ignore this too)
abc`def
C, 149 байтов
Детальнее
источник
11..1
по отношению к значимому во входном значенииn
, это можно сделать, сначала найдя ближайшую степень 2, а затем xor с предыдущим числом,0001 xor 1110 = 1111
for(k=1;k<=n;)k*=2;k--;
. Теперь я вижу, что это намного короче, чем моя попытка C к тому же (моя лучше для производительности, но производительность не имеет значения в этом испытании)2^k xor 2^k -1
дляmax{2^k<=n}
или2^k -1
дляmin{2^k>=n}
. чтобы получить все11..1
тамC 103 байта
источник
Желе неконкурентоспособное
7 байт. Этот ответ не является конкурирующим, поскольку он использует функции, которые устарели.
Попробуйте онлайн!
Как это устроено
источник
R, 38 байт
Обычно R требует много байтов только для форматирования вывода. В этом случае все наоборот.
outer
который обычно относится к внешнему произведению двух массивов, может ли при наличии функции выполнять это через поля векторов. В этом случае мы применяем побитовую функцию XORbitwXor
.источник
CJam,
2927 байтПроверьте это здесь.
объяснение
источник
MathCAD, 187 байт
MathCAD легко обрабатывает встроенные таблицы - но не имеет абсолютно ни побитового Xor, ни десятичных в двоичные, ни двоичных в десятичные преобразователи. Функции for перебирают возможные значения. I, a2, Xa и Xb занимают место. Цикл while активно преобразуется в двоичный, а при преобразовании в двоичный также выполняет функцию xor (маленький крестик с кружком вокруг него). Он хранит двоичное число в числе base-10, состоящем из 0 и 1. Затем он преобразуется перед сохранением в М-матрице с помощью функции суммирования.
Это может быть легко исправлено (если только путем замены местозаполнителей на более короткие), но я решил опубликовать его и посмотреть, сможет ли кто-нибудь сыграть в гольф в двоично-десятичном преобразователе больше, чем что-либо еще.
источник
k4, 50 байтов
Например:
источник
Python 3,
133131 байтисточник
Mathematica, 108 байт
Не обращайте внимания на ошибку, она просто
Thread
не знает, что делает.источник
Emacs Lisp, 193 байта
Ungolfed:
Вывод направляется в
*Message*
буфер, который был бы ,stdout
если должныx
были быть использованы внутри сценария.источник
Python 2, 114 байт
Потребовалось некоторое время, чтобы найти способ сделать заполнение переменной ширины
.format()
(некоторые, а не много) и настроить его правильно, но я думаю, что теперь у меня есть все для спецификации. Можно было бы использовать больше гольфа в этом расчете ширины, хотя.источник
Cache ObjectScript , 127 байт
Детальнее:
источник
Пайк, 8 байт (неконкурирующий)
Объяснение:
Попробуй здесь
источник
Python 2, 77 байт
источник
J , 10 байт
Попробуйте онлайн!
источник
Excel VBA, 95 байт
Функция анонимного непосредственного окна VBE, которая принимает данные из диапазона
[A1]
и выводит их на консоль.источник
Small Basic , 499 байт
Скрипт, который принимает входные данные от
TextWindow
объекта и выводит их в тот жеПопробуйте на SmallBasic.com Использование Silverlight и, следовательно, должны быть запущены в IE или Edge
Выберите черную консоль, затем введите целое число ввода и нажмите Enter.
источник
Perl 5
-n
, 62 байтаПопробуйте онлайн!
источник