Introdução
Um xenódromo na base n é um número inteiro em que todos os seus dígitos na base n são diferentes. Aqui estão algumas seqüências OEIS de xenodromos.
Por exemplo, na base 16, FACE
, 42
e FEDCBA9876543210
são algumas xenodromes (que são 64206
, 66
e 18364758544493064720
na base 10), mas 11
e DEFACED
não são.
Desafio
Dada uma base de entrada, n , produza todos os xenodromos dessa base na base 10 .
A saída deve estar na ordem do menor para o maior. Deve ficar claro onde um termo na sequência termina e um novo começa (por exemplo, [0, 1, 2]
fica claro onde 012
não está).
n será um número inteiro maior que 0.
Esclarecimentos
Esse desafio faz E / S especificamente na base 10 para evitar manipular números inteiros e sua base como seqüências de caracteres. O desafio é lidar abstratamente com qualquer base. Como tal, estou adicionando esta regra adicional:
Os números inteiros não podem ser armazenados como seqüências de caracteres em uma base diferente da base 10.
Seu programa deve ser capaz de lidar teoricamente com n razoavelmente alto se não houver tempo, memória, precisão ou outras restrições técnicas na implementação de uma linguagem.
Isso é código-golfe , então o programa mais curto, em bytes, vence.
Exemplo de entrada e saída
1 # Input
0 # Output
2
0, 1, 2
3
0, 1, 2, 3, 5, 6, 7, 11, 15, 19, 21
4
0, 1, 2, 3, 4, 6, 7, 8, 9, 11, 12, 13, 14, 18, 19, 24, 27, 28, 30, 33, 35, 36, 39, 44, 45, 49, 50, 52, 54, 56, 57, 75, 78, 99, 108, 114, 120, 135, 141, 147, 156, 177, 180, 198, 201, 210, 216, 225, 228
ssize_t
. Está quebrando desta maneira aceitável?Respostas:
Pitão , 8 bytes
Filtra os números em [0, n ^ n - 1] por não ter elementos duplicados na base n . A conversão de base no Pyth funcionará com qualquer base, mas como essa lista de números está aumentando rapidamente, ela não poderá armazenar os valores na memória.
Experimente online!
Explicação:
fonte
Python 2, 87 bytes
Imprime linhas em branco extras para não-xenodromos:
fonte
Gelatina ,
98 bytesGraças a @ JonathanAllan por jogar fora um byte!
Experimente online! ou verifique todos os casos de teste .
Como funciona
fonte
Gelatina , 12 bytes
TryItOnline!
Trabalhará para qualquer
n
, com memória suficiente, a conversão de base do Jelly não é restritiva.Quão?
fonte
JavaScript (ES7), 86 bytes
fonte
1
(saída deve[0]
, mas RangeErrors.)37
se a precisão não fosse um problema, que eu acho que o torna inválido ...n
de1
para13
antes que a precisão do ponto flutuante a mate.Perl 6 , 47 bytes
Retorna uma Seq . ( Seq é um invólucro Iterável básico para Iterator )
Com uma entrada
16
, leva 20 segundos para calcular o 53905º elemento da Seq (87887
).Expandido:
fonte
Lote,
204200 bytesNão funcionará para n> 9 porque o Lote possui apenas aritmética de 32 bits. Convenientemente, o Lote avalia
f &= b ^= f = 1 << j % n
comof = 1 << j % n, b = b ^ f, f = f & b
e nãof = f & (b = b ^ (f = 1 << j % n))
.fonte
Mathematica,
5948 bytesContém o caractere "Uso Privado" U + F4A1
Explicação
Gerar
{1, 2, ..., n^n}
. Subtrair 1. (rendimentos{0, 1, ..., n^n - 1}
)Uma função booleana:
True
se cada dígito ocorrer no máximo uma vez na basen
.Na lista
{0, 1, ..., n^n - 1}
, selecione aqueles que oferecemTrue
quando a função booleana acima é aplicada.Versão de 59 bytes
fonte
Mathematica,
4855 bytes(O espaço triplo entre o
x
s precisa ser substituído pelo caractere de 3 bytes \ uF4A1 para que o código funcione.)Função sem nome de um único argumento. Em vez de testar xenodromicidade em números inteiros, ele simplesmente gera todas as permutações possíveis de subconjuntos dos dígitos permitidos (o que evita automaticamente a repetição) e converte os números inteiros correspondentes na base 10. Cada xenódromo é gerado duas vezes, com e sem um 0 inicial;
Union
remove as duplicatas e classifica a lista para inicializar.fonte
2
. A função fornece{0, 1}
. Eu acredito que você precisa emPermutations[Range@#-1, #]
vez deSubsets[Range@#-1]
.