Вызов
Напишите функцию или программу, которая принимает положительное десятичное число, назовите его A и выведите два положительных числа, B и C , так, чтобы:
- A == B bitxor C
- B и C не должны содержать ни одной из цифр 0, 3 или 7 в своем десятичном представлении.
Примеры
>>> decompose(3)
1, 2
>>> decompose(7)
1, 6
>>> decompose(718)
121, 695
>>> decompose(99997)
2, 99999
>>> decompose(4294967296)
4294968218, 922
>>> decompose(5296080632396965608312971217160142474083606142654386510789497504098664630388377556711796340247136376)
6291484486961499292662848846261496489294168969458648464915998254691295448225881546425551225669515922,
1191982455588299219648819556299554251659915414942295896926425126251962564256469862862114191986258666
Поскольку декомпозиция не уникальна, ваша функция / программа не должна выводить те же самые результаты, что и приведенные примеры.
Очень подробные правила
Материалы должны быть в виде полной функции или программы .
import
Заявления же засчитываются окончательный счет.Вы можете предположить, что вход A всегда содержит хотя бы цифру 0, 3 или 7.
Вы можете предположить, что разложение всегда существует.
Вы можете использовать BigInt, если они являются частью стандартных библиотек языка или могут быть установлены через менеджер пакетов языка de jure .
Функция должна быть быстрой. Для запуска на достаточно современном компьютере должно потребоваться не более 20 секунд при вводе 100-значного числа и не более 2 секунд при вводе 10-значного числа.
Функция / программа должна поддерживать ввод не менее 100 цифр .
- Если функция / программа может поддерживать только целые числа до N <100 цифр, штраф до + 10 × (100 / N - 1) байтов к окончательному счету будет уменьшен. Это должно поощрить игроков в гольф поддерживать более широкий диапазон чисел, даже если импорт может быть многословным.
Нет ограничений на представление входных / выходных данных, если они явно представлены в десятичном формате.
- Функция может вводить и выводить строки / BigInts, если встроенных целочисленных типов недостаточно.
- Входные данные могут поступать из параметра функции, аргумента командной строки или STDIN.
- Функция может вернуть результат или просто распечатать результат непосредственно в STDOUT.
- Однако переполнение со знаком на входах / выходах не допускается.
- Приблизительные ответы не допускаются, ввод / вывод должен быть точным.
счет
Это код-гольф . Самое короткое решение в байтах побеждает.
Существует штраф, если программа может поддерживать только цифры менее 100 цифр:
- 64-разрядные целые числа (19 цифр) = +42 байта
- 63-разрядные целые числа (18 цифр) = +45 байтов
- 53-разрядные целые числа (15 цифр) = +56 байт
- 31/32-битные целые числа (9 цифр) = +101 байт