Dada una cadena no vacía s, con una longitud par, y un entero positivo n, que representa su altura, componga una pirámide usando las siguientes reglas:
La pirámide debe contener n líneas no vacías; Se permiten nuevas líneas al final. Para cada 1 <= i <= n, la línea i-ésima debe contener la cadena con cada carácter individual repetido en el lugar i veces; abcd repetido 3 veces como tal se convierte en aaabbbcccddd. Cada línea debe estar centrada con espacios de relleno para que el centro de cada línea esté alineado verticalmente. Se permiten espacios finales al final de cada línea. También puede tener hasta una nueva línea inicial pero ningún otro espacio en blanco antes de la primera línea.
No se garantiza que la cadena de entrada sea un palíndromo.
Caso de prueba
s = 'o-o o-o', n = 10:
o-o o-o
oo--oo oo--oo
ooo---ooo ooo---ooo
oooo----oooo oooo----oooo
ooooo-----ooooo ooooo-----ooooo
oooooo------oooooo oooooo------oooooo
ooooooo-------ooooooo ooooooo-------ooooooo
oooooooo--------oooooooo oooooooo--------oooooooo
ooooooooo---------ooooooooo ooooooooo---------ooooooooo
oooooooooo----------oooooooooo oooooooooo----------oooooooooo
Respuestas:
05AB1E , 9 bytes
Pruébalo en línea!
γ
fue, en poco tiempo, inspirado por la respuesta de Adnan; peroS
también funcionaríafuente
05AB1E , 11 bytes
Utiliza la codificación 05AB1E . Pruébalo en línea!
fuente
»
une las matrices internas por espacios. ReemplazarloJ
debería funcionar (y creo que debería publicarlo como una respuesta diferente).Jalea ,
1413 bytesPruébalo en línea!
Cómo funciona
fuente
C # (.NET Core) ,
139 137 136130 bytesPruébalo en línea!
Devuelve una enumeración de
string
s con las líneas del dibujo. Una vez unido, el resultado es así:fuente
(n-i-1)*s.Length/2
. Y me gustan tus casos de prueba. +1 :)ಠ_ಠ
se intensifica~i
es equivalente a-i-1
", por lo que puede guardar un byte cambiando(n-i-1)
a(n+~i)
.s=>n=>...
para otro bytenew string(' '...
con"".PadLeft(...
Cheddar ,
7164 bytesGuardado 7 bytes gracias a @ValueInk
Pruébalo en línea! Agregaré una explicación en un momento
Explicación
fuente
center
función que pueda usar como la que tengo en mi respuesta Ruby, porque eso también podría ahorrar bytes.Ruby , 58 bytes
Pruébalo en línea!
fuente
Java 8,
188186185183181173 bytes-2 bytes (185 → 183) debido a una corrección de errores (estaba generando
n+1
líneas en lugar den
). No sucede a menudo que una corrección de errores ahorre bytes. :)-2 bytes (183 → 181) gracias a @ OlivierGrégoire
Explicación:
Pruébalo aquí
fuente
r="",q=s.format("%"+x+"s",r)
guardar 2 bytes. Mucho movimiento por solo dos bytes :(s.format("%"+x+"s",r)
directamente, he podido guardar 8 bytes más después de tu golf. :)JavaScript (ES6), 85 bytes
Toma entrada en la sintaxis de curry
(string)(height)
. Incluye una nueva línea líder.Manifestación
Mostrar fragmento de código
fuente
Carbón de leña , 19 bytes
Pruébalo en línea! El enlace es a la versión detallada del código. Explicación:
Necesitamos líneas repetidas
1..n
veces. La forma más fácil de lograr esto es hacer un bucle de 0 a n, ya que el bucle 0 es básicamente un no-op.Coloque el cursor de modo que la línea resultante esté centrada.
Y así de simple es imprimir cada personaje repetidamente
i
.fuente
Python 2 ,
7577 bytesPruébalo en línea!
fuente
center
incorporado? Realmente necesito leer los documentos a veces: Pn-1
filas.9
líneas de pirámide cuando la entrada es10
...SOGL V0.12 , 14 bytes
Pruébalo aquí!
fuente
∫dI
.Javascript, 105 bytes
Después de unos años de descanso, el Stretch Maniac está de vuelta, con suerte un poco más educado esta vez.
fuente
s=>n=>[...Array(x=n)].reduce(a=>a+'\n'.padEnd(--x*s.length/2+1)+s.replace(/./g,c=>c.repeat(n-x)),'')
tendrás que reemplazar el'
s con backticks y el\n
con una nueva línea literal.Haskell ,
797369 bytesPruébalo en línea!
fuente
..
, se puede eliminar eldiv
:(' '<$[1,3..(n-m)*length s])
.APL (Dyalog) ,
3331 bytes2 bytes de golf gracias a @ZacharyT eliminando paréntesis innecesarios
Pruébalo en línea!
Explicación
El argumento derecho
⍵
es la cadena y el argumento izquierdo⍺
es el número.fuente
⍺-⊢
?SWI Prolog, 398 bytes
No es la solución más compacta (tal vez en algún lugar reinventando la rueda en lugar de usar procedimientos integrados), pero parece funcionar.
Prueba:
Explicación:
w y s escribe la cantidad adecuada de los espacios iniciales:
d gestiona la "duplicación" de caracteres y e es su recurso recursivo:
una y l anexados para el resultado (tal vez no existe construido en un procedimiento?):
o crea la salida:
y finalmente la p es el método principal :
fuente
Japt ,
20 + 1 = 2119 + 1 = 2014 bytesEmite una matriz de líneas: agregue 2 bytes si eso no está permitido.
Pruébalo
Explicación
fuente
SpUl
a ... espera, no importa :( Sin embargo, puedes guardar un byte reemplazándolo(V-X
conXnV
, si no me equivoco.n
; gracias @ETHproductions.PHP, 113 bytes:
Ejecutar
php -nr '<code>' '<string>' <N>
o probarlo en línea .Descompostura
fuente
CJam , 36 bytes
Pruébalo en línea!
fuente
T-SQL, 223 bytes
La entrada es a través preexistente mesa de t con columnas s y n , de acuerdo con nuestras normas IO .
No hay mucho que explicar, es un bucle anidado bastante sencillo, que se usa
@i
para las filas y@j
para recorrer los caracteres de la cadena que sonREPLICATED
@i
tiempos:fuente
R ,
12595 bytesPruébalo en línea!
Explicación:
Es bastante sencillo, dividiendo la cadena y repitiendo los elementos
i
veces cada unorep(s,e=i)
(e
es la abreviatura deeach
) a medida que avanzamos. La parte difícil esrep('',(n-i)/2*length(s)+1)
. Esta es la cadena de relleno, pero es un montón de cadenas vacías. Necesito agregar 1 porque, de lo contrario, el resultado escharacter(0)
un vector de longitud cero ycat
, que por defecto separa sus elementos con espacios, desalinea la línea final.fuente
Mathematica, 97 bytes
entrada
fuente
Tcl,
143142141138 bytesPrueba:
Observación: el "cd" al final del procedimiento evita que el resultado del tiempo se imprima debajo de la pirámide, pero cambia el directorio actual, un efecto secundario que no está explícitamente prohibido.
Gracias a sergiol por una pista para guardar un byte ... y otra pista para guardar un byte más.
¡Gracias al aspecto (en el chat tcl) por otros 3 bytes guardados!
fuente
Rápido, 232 bytes
Probablemente podría ser mejor, pero no tengo mucho tiempo para refactorizar.
Esta respuesta usa Swift 4, por lo que actualmente no se puede ejecutar en línea.
fuente
LOGOTIPO,
9795 bytesPruebe el código en el intérprete FMSLogo.
Defina una función
f
que tome dos entradas:s
y:n
luego imprima el resultado.fuente
Java 8,
164148bytesExplicación:
fuente
Óxido, 107 bytes
enlace de corralito
Define una función anónima que toma un segmento y un número de cadena, imprimiendo el patrón deseado en la salida estándar. Se supone que el segmento de cadena solo contiene caracteres ASCII, pero el desafío nunca especifica que sea necesario el soporte completo de Unicode. Para ser correcto para Unicode también requeriría 117 bytes:
La explicación es bastante simple:
fuente
SOGL V0.12 , 8 bytes
Pruébalo aquí!
Explicación:
No tenía ganas de actualizar mi respuesta anterior aquí, ya que usa un método diferente y usa una nueva función (er que el desafío):
╚
fuente
Python 2 ,
7977 bytesPruébalo en línea!
Editar: -2 bytes cortesía @FlipTack
fuente
[i*(n-m)for i in s]
, ya que.join
es capaz de tomar un generador, que debería tener dos bytes.Excel VBA, 98 bytes
Función de ventana inmediata anónima de VBE que toma la entrada como una cadena desde
[A1]
e int desde[B1]
entonces salidas a la ventana inmediata de VBEfuente