Introducción
Un xenodrome en base n es un número entero donde todos sus dígitos en base n son diferentes. Aquí hay algunas secuencias OEIS de xenodromos.
Por ejemplo, en base 16, FACE
, 42
y FEDCBA9876543210
son algunos xenodromes (que son 64206
, 66
y 18364758544493064720
en base 10), pero 11
y DEFACED
no lo son.
Desafío
Dada una base de entrada, n , emite todos los xenódromos para esa base en la base 10 .
La salida debe estar en orden de menor a mayor. Debe quedar claro dónde termina un término en la secuencia y comienza uno nuevo (por ejemplo, [0, 1, 2]
está claro dónde 012
no está).
n será un número entero mayor que 0.
Aclaraciones
Este desafío hace IO específicamente en la base 10 para evitar el manejo de enteros y su base como cadenas. El desafío está en manejar de manera abstracta cualquier base. Como tal, estoy agregando esta regla adicional:
Los enteros no se pueden almacenar como cadenas en una base que no sea la base 10.
Su programa debería ser capaz de manejar teóricamente razonablemente alto n si no hubiera tiempo, memoria, precisión u otras restricciones técnicas en la implementación de un lenguaje.
Este es el código de golf , por lo que el programa más corto, en bytes, gana.
Ejemplo de entrada y salida
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
. ¿Se está rompiendo de esta manera aceptable?Respuestas:
Pyth , 8 bytes
Filtra los números en [0, n ^ n - 1] al no tener elementos duplicados en la base n . La conversión de base en Pyth funcionará con cualquier base, pero como se ve en una lista de números que aumenta rápidamente, eventualmente no podrá almacenar los valores en la memoria.
Pruébalo en línea!
Explicación:
fuente
Python 2, 87 bytes
Imprime líneas en blanco adicionales para no xenodromos:
fuente
Jalea ,
98 bytes¡Gracias a @JonathanAllan por jugar golf en 1 byte!
Pruébalo en línea! o verificar todos los casos de prueba .
Cómo funciona
fuente
Jalea , 12 bytes
TryItOnline!
Funcionará para cualquiera
n
, con suficiente memoria, la conversión de base de Jelly no es restrictiva.¿Cómo?
fuente
JavaScript (ES7), 86 bytes
fuente
1
(Debería salir[0]
, pero RangeErrors.)37
si la precisión no fuera un problema, lo que creo que lo invalida ...n
desde antes1
hasta que la13
precisión de punto flotante la mate.Perl 6 , 47 bytes
Devuelve una Seq . ( Seq es un contenedor Iterable básico para Iterator s)
Con una entrada de
16
toma 20 segundos para calcular el elemento 53905 de la Seq (87887
).Expandido:
fuente
Lote,
204200 bytesNo funcionará para n> 9 porque Batch solo tiene aritmética de 32 bits. Convenientemente, Batch evalúa
f &= b ^= f = 1 << j % n
como enf = 1 << j % n, b = b ^ f, f = f & b
lugar def = f & (b = b ^ (f = 1 << j % n))
.fuente
Mathematica,
5948 bytesContiene el carácter U + F4A1 "Uso privado"
Explicación
Generar
{1, 2, ..., n^n}
. Restar 1. (rendimientos{0, 1, ..., n^n - 1}
)Una función booleana:
True
si cada dígito ocurre como máximo una vez en la basen
.De la lista
{0, 1, ..., n^n - 1}
, seleccione los que danTrue
cuando se aplica la función booleana anterior.Versión de 59 bytes
fuente
Mathematica,
4855 bytes(El espacio triple entre
x
s debe ser reemplazado por el carácter de 3 bytes \ uF4A1 para que el código funcione).Función sin nombre de un único argumento. En lugar de probar enteros para determinar la xenodromicidad, simplemente genera todas las permutaciones posibles de subconjuntos de los dígitos permitidos (lo que evita automáticamente la repetición) y convierte los enteros correspondientes en la base 10. Cada xenodrome se genera dos veces, con y sin un 0 inicial;
Union
elimina los duplicados y ordena la lista para arrancar.fuente
2
. La función da{0, 1}
. Creo que necesitas enPermutations[Range@#-1, #]
lugar deSubsets[Range@#-1]
.