Многие языки программирования предоставляют операторы для управления двоичными (base-2) цифрами целых чисел. Вот один из способов обобщения этих операторов на другие базы:
Пусть х и у будут однозначными числами номера в базе B . Определим унарный оператор ~
и бинарные операторы &
, |
и ^
такие , что:
- ~ x = (B - 1) - x
- х & у = мин (х, у)
- х | у = макс (х, у)
- x ^ y = (x & ~ y) | (у & ~ х)
Обратите внимание, что если B = 2, мы получаем знакомые побитовые операторы NOT, AND, OR и XOR.
Для B = 10 мы получаем таблицу «десятичное XOR»:
^ │ 0 1 2 3 4 5 6 7 8 9
──┼────────────────────
0 │ 0 1 2 3 4 5 6 7 8 9
1 │ 1 1 2 3 4 5 6 7 8 8
2 │ 2 2 2 3 4 5 6 7 7 7
3 │ 3 3 3 3 4 5 6 6 6 6
4 │ 4 4 4 4 4 5 5 5 5 5
5 │ 5 5 5 5 5 4 4 4 4 4
6 │ 6 6 6 6 5 4 3 3 3 3
7 │ 7 7 7 6 5 4 3 2 2 2
8 │ 8 8 7 6 5 4 3 2 1 1
9 │ 9 8 7 6 5 4 3 2 1 0
Для многозначных чисел применяйте однозначный оператор цифра за цифрой. Например, 12345 ^ 24680 = 24655, потому что:
- 1 ^ 2 = 2
- 2 ^ 4 = 4
- 3 ^ 6 = 6
- 4 ^ 8 = 5
- 5 ^ 0 = 5
Если операнды имеют разную длину, то добавьте к более короткому начальные нули.
Соревнование
Запишите, как можно меньше байт, программу или функцию, которая принимает в качестве входных данных два целых числа (которые могут быть приняты в диапазоне от 0 до 999 999 999 включительно) и выводит «десятичное XOR» двух чисел, как определено выше.
Контрольные примеры
- 12345, 24680 → 24655
- 12345, 6789 → 16654
- 2019, 5779 → 5770
- 0, 999999999 → 999999999
- 0, 0 → 0
09
ли приемлемый результат для ввода90, 99
?A^B^B=A
a^b=b^a
иa^b^b=a
для баз с нечетным простым делителемОтветы:
Желе , 14 байт
Попробуйте онлайн!
Сетка всех пар из одной цифры
Монадическая ссылка, принимающая список из двух целых чисел в качестве аргумента и возвращающая целое число.
объяснение
Если цифровая матрица приемлема для ввода / вывода:
Желе , 12 байт
Попробуйте онлайн!
источник
Pyth , 31 байт
Попробуйте онлайн!
источник
Python 2 , 71 байт
Попробуйте онлайн!
источник
Forth (gforth) , 111 байтов
Попробуйте онлайн!
Код Объяснение
источник
C # (интерактивный компилятор Visual C #) , 75 байт
Сохранено 6 байтов благодаря @someone
Попробуйте онлайн!
источник
Zip
, вы не можете использовать его, так как он автоматически усекает более длинную коллекцию до длины более короткойPHP ,
111109 байтПопробуйте онлайн!
Тесты: попробуйте онлайн!
Если мы назовем цифры, которые мы хотим XOR,
$a
и$b
я обнаружил, что:$a
меньше 5,XOR = min(9-$a, max($a, $b))
$a
равно или больше 5,XOR = min($a, max(9-$a, 9-$b))
Таким образом, я реализовал эту логику плюс хак для обработки чисел различной длины. Я беру каждую цифру образует конец оба входных чисел (с отрицательными индексирует нравится
input[-1]
,input[-2]
...) и вычислить XOR и поместить результат в обратном порядке в строке , которая будет напечатано в конце. Поскольку я беру цифры из конца чисел, результаты XOR должны быть собраны в обратном порядке. Когда один из входов длиннее другого, отрицательный индекс на более коротком входе приводит к пустой строке, равной 0.источник
Сетчатка ,
8559 байтПопробуйте онлайн! Принимает ввод в виде отдельных строк, но ссылка на набор тестов, который переформатирует ввод через запятую. Объяснение:
Левый блокнот с нулями обеих строк одинаковой длины.
Сортируйте каждую цифру по индексу столбца, затем удалите символ новой строки. Это приводит к объединению цифр таким же образом, как и для транспонирования.
Применять отдельно к каждой паре цифр, объединяя результаты.
Дублируйте пару.
Поменяйте местами вторую цифру первой пары и первую цифру второй, так что теперь мы имеем
x ~y
одну строку и~x y
другую.Сортируйте цифры каждой строки по порядку, чтобы первая цифра была теперь
x & ~y
или~x & y
по необходимости.Обратная сортировка линий.
И извлеките первую цифру, которая является желаемым результатом.
источник