Una secuencia de De Bruijn es interesante: es la secuencia cíclica más corta que contiene todas las secuencias posibles de un alfabeto dado de una longitud dada. Por ejemplo, si consideramos el alfabeto A, B, C y una longitud de 3, una salida posible es:
AAABBBCCCABCACCBBAACBCBABAC
Usted se dará cuenta de que cada posible secuencia de 3 caracteres usando las letras A
, B
y C
está ahí.
Su desafío es generar una secuencia de De Bruijn en la menor cantidad de personajes posible. Su función debe tomar dos parámetros, un número entero que representa la longitud de las secuencias y una lista que contiene el alfabeto. Su salida debe ser la secuencia en forma de lista.
Puede suponer que cada elemento del alfabeto es distinto.
Un generador de ejemplo se puede encontrar aquí
Se aplican lagunas estándar
fuente
Respuestas:
Pyth, 31 bytes
Esta es la conversión directa del algoritmo utilizado en mi respuesta CJam . Consejos para el golf de bienvenida!
Este código define una función
g
que toma dos argumentos, la cadena de la lista de caracteres y el número.Ejemplo de uso:
Salida:
Expansión de código:
Pruébalo aquí
fuente
CJam,
52 4948 bytesEsto es sorprendentemente largo. Esto se puede jugar mucho, tomando consejos de la traducción de Pyth.
La entrada va como
es decir: cadena de la lista de caracteres y la longitud.
y la salida es la cadena De Bruijn
Pruébalo en línea aquí
fuente
CJam,
5249 bytesAquí hay un enfoque diferente en CJam:
Toma una entrada como esta:
y produce un trabajo de Lyndon como
Pruébalo aquí
Esto hace uso de la relación con las palabras de Lyndon . Genera todas las palabras de Lyndon de longitud n en orden lexicográfico (como se describe en ese artículo de Wikipedia), luego elimina aquellas cuya longitud no divide n . Esto ya produce la secuencia de De Bruijn, pero como estoy generando las palabras de Lyndon como cadenas de dígitos, también necesito reemplazarlas con las letras correspondientes al final.
Por razones de golf, considero que las letras posteriores del alfabeto tienen un orden lexicográfico más bajo.
fuente
JavaScript (ES6) 143
Usando palabras de Lyndon, como la respuesta de Martin, solo 3 veces más ...
Prueba en la consola FireFox / FireBug
Salida
fuente
Python 2, 114 bytes
No estoy realmente seguro de cómo jugarlo más, debido a mi enfoque.
Pruébalo en línea
Sin golf:
Este código es una modificación trivial de mi solución al desafío más reciente.
La única razón que
[:1-n]
se necesita es porque la secuencia incluye la envoltura.fuente
Powershell,
16496 bytes-68 bytes con -match en
O($n*2^n)
lugar de generador recursivoO(n*log(n))
Ungolfed y script de prueba:
Salida:
Ver también: Un anillo para gobernarlos a todos. Una cadena para contenerlos a todos
fuente