Este desafío se trata de imprimir la secuencia de abacaba de una profundidad específica.
Aquí hay un diagrama de las primeras 5 secuencias ( a(N)
es la secuencia abacaba de profundidad N, mayúsculas / minúsculas es solo para mostrar el patrón, esto no es necesario en la salida de su programa):
a(0) = A
a(1) = aBa
a(2) = abaCaba
a(3) = abacabaDabacaba
a(4) = abacabadabacabaEabacabadabacaba
...
a(25) = abacabadabacabaeabacabadabacabafabacabadabacabaeabacabadabacabagabacabadabacabaeabacabadabacabafabacabadabacabaeabacabadabacabahabacabadabacabaeabacabadabacabafabacabadabacabaeabacabadabacabagabacabadabacabaeabacabadabacabafabacabadabacabaeabacabadabacabaiabacabadabacabaeabacabadabacabafabacabadabacabaeabacabadabacabagabacabadabacabaeabacabadabacabafabacabadabacabaeabacabadabacabahabacabadabacabaeabacabadabacabafabacabadabacabaeabacabadabacabagabacabadabacabaeabacabadabacabafabacabadabacabaeabacabadabacabajabacabadabacabaeabacabadabacabafabacabadabacabaeabacabadabacabagabacabadabacabaeabacabadabacabafabacabadabacabaeabacabadabacabahabacabadabacabaeabacabadabacabafabacabadabacabaeabacabadabacabagabacabadabacabaeabacabadabacabafabacabadabacabaeabacabadabacabaia...
Como probablemente pueda ver, la secuencia de la enésima abacaba es la última con la enésima letra y se le agrega nuevamente. ( a(n) = a(n - 1) + letter(n) + a(n - 1)
)
Su tarea es hacer un programa o función que tome un número entero e imprima la secuencia de abacaba de esa profundidad. La salida debe ser correcta al menos para valores de hasta 15 inclusive.
Respuestas:
Pyth, 11 bytes
Reducción simple
fuente
0
debe ser la secuencia vacía de la OMI, pero voy a conformar a la pregunta ...rev-doc.txt
junto a esta respuesta, y debería mostrarse fácilmente como simple.Python, 44 bytes
Parece sospechosamente podría ser golfable.
fuente
Haskell,
3937 bytesEjemplo de uso:
a 3
->"abacabadabacaba"
.Editar: @Angs encontró dos bytes para guardar. ¡Gracias!
fuente
a n=a(n-1)++[97+n]++a(n-1)
funcionaria? No puedo probar en este momento.[97+n]
es una lista deInteger
ya(n-1)
es una lista deChar
(akaString
). No puede concatenar listas con diferentes tipos.toEnum
hace unChar
fuera de laInteger
.['a'..]!!n
es 2 bytes más corto quetoEnum(97+n)
Pyth,
1413 bytes¡Gracias a Jakube por guardar un byte!
Una solución con 14 bytes:
VhQ=ks[k@GNk;k
.Explicación:
Pruébalo aquí !
fuente
V
línea?hQ
es soloeval(input) + 1
=k
a=
. Pyth asignará automáticamente el resultado ak
, ya quek
es la primera variable en la expresión+k+@GNk
.Vt^2Q=+k@Gx_.BhN`1)k
(En este caso, está configurado para dar los primeros 2 ^ Q-1 caracteres según lo requiera el desafío, pero puede ver cómo cambiar eso.)Retina ,
3732 bytesEl avance de línea final es significativo. La entrada se toma en unario .
Pruébalo en línea!
fuente
Brainfuck, 157 bytes
La entrada se da en binario.
La idea básica es duplicar repetidamente la secuencia actual (comenzando con "a") e incrementar el último elemento después de cada iteración:
a → aa → ab
ab → abab → abac
abac → abacabac → abacabac
...
Cuando todo esto se ha realizado la cantidad de veces especificada, el resultado se imprime excluyendo el último elemento.
Explicación en profundidad
La memoria se organiza de la siguiente manera:
La cuenta regresiva contiene el número de ciclos de copia que aún deben ejecutarse. La secuencia ABACABA se almacena en bloques adyacentes, cada uno formado por 3 celdas. El valor contiene el carácter del elemento (es decir, "A", "B", "C" ...). El indicador Copiar indica si el elemento correspondiente debe copiarse dentro del ciclo de copia actual (0 = copiar, 1 = no). El indicador Fin se establece en 0 para el último elemento mientras se está copiando (es 1 en todos los demás casos).
Ahora al programa real (un poco descuidado):
fuente
Haskell , 36 bytes
Pruébalo en línea!
Esto utiliza un método recursivo diferente de la mayoría de las otras respuestas. Para obtener la siguiente cadena en la secuencia, no unimos dos copias en la cadena anterior con una nueva letra en el medio, sino que incrementamos cada letra y las letras intercaladas
a
.fuente
bcb
lugar decbc
?05AB1E , 12 bytes (no competitivo)
Código:
Voy a ser condenado. Solucioné muchos errores gracias a este desafío jaja.
Explicación:
fuente
JavaScript (ES6),
4342 bytesUn byte guardado gracias a @Neil !
Sin embargo, otra solución recursiva simple ...
fuente
(n+11).toString(36)
¡te ahorra 1 byte y funciona hasta un (25)!CJam (14 bytes)
Demostración en línea
fuente
Ruby (1.9 y superior), 38 bytes
?a
es una forma más elegante de escribir,"a"
pero se ve raro cuando se mezcla con ternary?:
fuente
R , 48 bytes
Pruébalo en línea!
Recurrencia simple
fuente
paste0
es equivalente apaste
withsep=""
, por lo que evita los espacios entre letras quepaste
se agregarían de forma predeterminada.C #, 59 bytes
Solo otra solución de C # ...
fuente
Perl, 33 bytes
No hay necesidad real de no jugar al golf. Construye la cadena agregando iterativamente el siguiente carácter en secuencia más el reverso de la cadena hasta el momento, utilizando el valor ASCII de 'a' como punto de partida. Utiliza
$\
para guardar algunos golpes, pero eso es lo más complicado posible.Trabaja para a
a(0)
travésa(25)
e incluso más allá. Aunque luego ingrese a ASCII extendidoa(29)
, se quedará sin memoria mucho antes de quedarse sin códigos de caracteres:a(25)
es ~ 64MiB.a(29)
es ~ 1GiB.Para almacenar el resultado de
a(255)
(¡no probado!), Se necesitarían 2 ^ 256 - 1 = 1.15x10 ^ 77 bytes, o aproximadamente 1.15x10 ^ 65 unidades de 1 terabyte.fuente
Java 7, 158 bytes
Me gusta acechar a PPCG y me gustaría poder votar / comentar otras respuestas.
La entrada se proporciona como parámetros del programa. Esto sigue el mismo formato que muchas otras respuestas aquí en que es una implementación recursiva directa. Hubiera comentado la otra respuesta, pero todavía no tengo el representante para comentar. También es ligeramente diferente en que la llamada recursiva se realiza dos veces en lugar de construir una cadena y pasarla.
fuente
Mathematica,
3632 bytes¿Alguna vez has visto TWOW 11B?
fuente
"",
y luego puede usar la notación infija paraFold
.<>
, y el n. ° 2 solo funciona para funciones binarias.Python,
62544645 bytesMe gustaría pensar que este código todavía se puede reducir de alguna manera.
Editar: corrección de errores gracias a Lynn. -1 byte gracias a los calamares.
Pruébalo en línea!
fuente
Mathematica, 46 bytes
Función recursiva simple. Otra solución:
fuente
K5, 18 bytes
Aplica repetidamente una función a un valor transportado (
"A"
) y a cada elemento de una secuencia. La secuencia son los caracteres alfabéticos desde B hasta algún número N (`c$66+!
). La función une el argumento izquierdo a cada lado del argumento derecho ({x,y,x}
).En acción:
fuente
JavaScript,
6557 1 bytesManifestación:
1 - gracias Neil por guardar 8 bytes
fuente
(i+11).toString(36)
te ahorra 6 bytes.s="a";
a antes defor
entonces, se convierte en el valor de retorno predeterminado y puede dejar el resto;s
para otro ahorro de 2 bytes.i
línea y soltando el incremento en el bucle for. Así que ...for(i=0;i<n;)s+=(i+++11)...
Japt,
2017 bytes¡Pruébelo en línea!
Cómo funciona
Versión no competitiva, 14 bytes
La
ô
función es comoo
, pero crea el rango en[X..X+Y]
lugar de[X..Y)
.¡Pruébelo en línea!Prefiero cambiar el 97 a 94, en cuyo caso la salida para se
5
ve así:fuente
Java, 219 bytes
Mi primer intento de golf de código. Probablemente se pueda jugar más al golf, pero tengo hambre y salgo a almorzar.
Sin golf:
Algoritmo recursivo de fuerza bruta bastante sencillo, utiliza
char
manipulación.fuente
public
palabra clave dea
yaddLetter
/j
.MATL , 14 bytes
Utiliza la versión 8.0.0 del lenguaje / compilador, que es anterior al desafío.
Ejemplo
Explicación
El secuence se crea por primera vez con los números
0
,1
,2
, ... Estos se convierten en letras'a'
,'b'
,'c'
al final.Editar
Pruébalo en línea!
fuente
Powershell,
53,46,44, 41 BytesPegar en la consola generará resultados erróneos en la segunda ejecución ya
$d
que no se reinicia.Ahorre 2 bytes usando + = Ahorre 3 bytes gracias a @TimmyD
fuente
(
,)
.Gaia , 14 bytes
Pruébalo en línea!
fuente
PowerShell , 54 bytes
Pruébalo en línea!
fuente
Japt , 8 bytes
Intentalo
fuente
Casco , 12 bytes
Pruébalo en línea!
Utiliza indexación basada en 1, que espero que esté bien.
Explicación
fuente
APL (NARS), 24 caracteres, 48 bytes
prueba:
fuente
PHP
-r
, 43 bytesregister_argc_argv
debe estar habilitado para que esto funcione.Pruébalo en línea!
PHP , 51 bytes
Una función anónima que imprime la salida directamente.
Pruébalo en línea!
fuente