Desafio
Escreva uma função ou programa que aceite um número decimal positivo, chame-o de A e produza dois números positivos, B e C , de modo que:
- A == B bitxor C
- B e C não devem conter nenhum dos dígitos 0, 3 ou 7 em sua representação decimal.
Exemplos
>>> decompose(3)
1, 2
>>> decompose(7)
1, 6
>>> decompose(718)
121, 695
>>> decompose(99997)
2, 99999
>>> decompose(4294967296)
4294968218, 922
>>> decompose(5296080632396965608312971217160142474083606142654386510789497504098664630388377556711796340247136376)
6291484486961499292662848846261496489294168969458648464915998254691295448225881546425551225669515922,
1191982455588299219648819556299554251659915414942295896926425126251962564256469862862114191986258666
Como a decomposição não é exclusiva, sua função / programa não precisa produzir exatamente os mesmos resultados que esses exemplos fornecidos.
Regras muito detalhadas
As submissões devem ser na forma de uma função ou programa completo .
import
declarações que contam para a pontuação final.Você pode assumir que a entrada A sempre contém pelo menos um dígito de 0, 3 ou 7.
Você pode assumir que sempre existe uma decomposição.
Você pode usar o BigInt se eles fazem parte das bibliotecas padrão do idioma ou podem ser instalados através do gerenciador de pacotes de jure do idioma .
A função deve ser rápida. Não deve demorar mais de 20 segundos para ser executado em um computador razoavelmente moderno quando alimentado com um número de 100 dígitos e não mais que 2 segundos quando alimentado com um número de 10 dígitos.
A função / programa deve suportar entrada de pelo menos 100 dígitos .
- Se a função / programa puder suportar apenas números inteiros até N <100 dígitos, haverá uma penalidade de + 10 × (100 / N - 1) bytes para a pontuação final. Isso serve para incentivar os golfistas a apoiar uma gama mais ampla de números, mesmo que a importação possa ser detalhada.
Não há restrições à apresentação de entradas / saídas, desde que elas estejam claramente na representação decimal.
- A função pode inserir e enviar strings / BigInts se os tipos inteiros internos não forem suficientes.
- A entrada pode vir do parâmetro da função, argumento da linha de comando ou STDIN.
- A função pode retornar o resultado ou apenas imprimi-lo diretamente em STDOUT.
- No entanto, o estouro assinado nas entradas / saídas não é permitido.
- Respostas aproximadas não são toleradas, as entradas / saídas devem ser exatas.
Pontuação
Este é um código de golfe . A solução mais curta em bytes ganha.
Existe uma penalidade se o programa puder suportar apenas números com menos de 100 dígitos:
- Inteiros de 64 bits (19 dígitos) = +42 bytes
- Inteiros de 63 bits (18 dígitos) = +45 bytes
- Números inteiros de 53 bits (15 dígitos) = +56 bytes
- Inteiros de 31/32 bits (9 dígitos) = +101 bytes