Aquí está la tercera ciudad de ABACABA:
_
A|_|
B|__|
A|_|_
C|___|
A|_|
B|__|
A|_|
Está hecho de la secuencia ABACABA , que es básicamente:
- A (primera iteración)
- lugar B - AB
- repetir A - ABA (segunda iteración)
- Lugar C - ABAC
- Repetir ABA - ABACABA (3ra iteración)
y te haces una idea.
Los edificios tienen una altura (correspondiente al número de guiones bajos) igual a las letras convertidas en números como A = 1, B = 2, etc.
Entrada
Una iteración número 1 <= n <= 26.
Salida
La ciudad de ABACABA de orden n , incluidas las letras al comienzo de las líneas.
Respuestas:
Python 2, 82 bytes
Noté que nadie había publicado el método de recursividad binaria y decidí intentarlo ... y ahora, con un truco prestado de Sherlock9, ¡es la respuesta más corta de Python! (Además, gracias a xnor por una reducción más). (Y luego Dennis, que se afeitó un puñado más ...)
Sin golf:
fuente
s
, y haciendo que la segunda línea sea una función anon:f=lambda n:n*"?"and f(n-1)+"_"*(n-2)+"\n%c|%s|"%(64+n,"_"*n)+f(n-1);lambda n:" _"+f(n)
f=lambda n,s=1:n*"_"and" _"*s+f(n-1,0)+"_"*(n-2)+"\n%c|%s|"%(64+n,"_"*n)+f(n-1,0)
debería funcionar.Python 2, 99 bytes
Para encontrar el
i
número th de la secuencia ABACABA, escribai
en binario, cuente el número de ceros finales y agregue uno. Usamos el clásico truco de bitsi&-i
para encontrar la mayor potencia de2
esas divisionesi
, luego calculamos la longitud de bits. En realidad, hacemos una cuentai
regresiva de2**n-1
a0
, lo cual está bien porque la secuencia ABACABA es simétrica.Rastreamos tanto el número actual como el último de la secuencia con la ayuda de una variable "anterior"
b
. Esto nos dice cuántos guiones bajos para imprimir como "saliente". El edificio final se dibuja correctamente sin sobresalir porque0
se trata como si tuviera una longitud de bits1
.El formato de cadena para imprimir se toma de Sp3000 , como es el truco de usar
input
para imprimir la primera línea.fuente
MATL , 59 bytes
Esto usa la versión actual (15.0.0) del lenguaje.
Pruébalo en línea!
(Si las letras no tuvieran que incluirse en la salida: lo siguiente funcionaría, 48 bytes):
Explicación
fuente
CJam,
3735 bytesEsta es una implementación iterativa del algoritmo recursivo de la respuesta de @ quintopia .
Pruébalo en línea!
Cómo funciona
fuente
JavaScript (ES6), 162 bytes
¿Dónde
\n
está el carácter literal de nueva línea?fuente
\n
es al final, si alguien se lo preguntaba.Python 2,
123121 bytesenlace ideone (-2 bytes gracias a @xsot)
f
genera la secuencia ABACABA como una lista de números, por ejemplof(3) = [1, 2, 1, 3, 1, 2, 1]
. El desplazamiento de la entrada por 1 en comparación con el desafío de secuencia ABACABA nos permite jugar desde un bytef
.La primera línea se imprime por separado, después de lo cual todas las demás líneas se imprimen utilizando una expresión que tiene en cuenta el número actual y el siguiente número. Solo por diversión, la primera línea se imprime usando
input()
.fuente
[0]
conL
.Pyth -
6462 bytesProbablemente se podría jugar más al golf, pero lo suficientemente bueno por ahora.
Pruébalo aquí!
Explicación:
fuente
Python 3.5 -
262236220 bytes:-16 bytes gracias a @CatsAreFluffy! ¡Toda mi función ahora puede finalmente estar en una sola línea! :)
Puede ser un poco largo y puede imprimir nuevas líneas entre edificios, pero hace lo que necesita. Puede probarlo usted mismo para confirmarlo.EDITAR:
Mi código de golf anterior no imprimió el patrón correcto en absoluto. Sin embargo, ahora el que se muestra arriba lo hace, y lo hace bien en mi opinión. También puede ejecutarlo usted mismo para confirmar eso.
Nota: El programa imprime todas las letras minúsculas detrás de cada "edificio". Espero que esté bien.
Versión sin golf con explicación:
Básicamente, lo que estoy haciendo es importar primero la función de diccionario ordenado del módulo de colecciones y luego crear un diccionario ordenado, con cada letra minúscula en la lista "j" asignada a su edificio correspondiente, con su longitud correspondiente en guiones bajos. Luego calculo la secuencia, en base a la entrada del usuario, usando la
f=lambda w:"a"[w:]or f(w-1)+j[w]+f(w-1)
función, y luego en función de la secuencia devuelta por eso, se imprimen los edificios, con la letra correspondiente de cada uno.fuente
OrderedDict
como en suo
lugar? Y cambiandoop
ap
yitem
aj
también funciona.if
(todas las entradas son 1≤v≤26), el cambiorange(26)
arange(v)
, y utilizarreturn"\n".join(f(v))
en lugar de lafor
.from collections import*
y eno=OrderedDict
lugar defrom collections import OrderedDict as o
range(26)
arange(v)
resultados en unIndex Error
. Además, hacerreturn"\n".join(f(v))
SOLO devolverá la secuencia, pero no los edificios en sí. Aparte de eso, tus consejos fueron bastante buenos. ¡Gracias! :)Rubí, 129 bytes
Función anónima, devuelve una cadena multilínea.
fuente
JavaScript (ES6), 143
Hay 2 líneas nuevas dentro de los backticks que son significativas y contadas.
... o 138 si las letras pueden estar en minúsculas.
Menos golf
Prueba
fuente
Powershell, 67 bytes
fuente