Introducción
Es 2600 aC y la gente está construyendo pirámides ahora. Ya formaron la base de la pirámide, pero no saben cómo continuar. Entonces, te pidieron ayuda.
Las reglas para hacer una pirámide son bastante simples. Para la capa sobre la capa anterior, todo lo que necesita hacer es seguir esta guía manual paso a paso:
Corta los bordes de la capa anterior.
Por encima del
/
personaje, debe haber un\
personaje y viceversa. Esto se aplica a todos los caracteres excepto los bordes.El carácter más a la izquierda es siempre un
/
y el carácter más a la derecha es siempre\
.
Tomemos un ejemplo de una base para una pirámide:
//\/\/\\
Cortamos los bordes, dejando:
/\/\/\
Cambiamos las barras diagonales por barras diagonales hacia atrás y viceversa:
\/\/\/
El carácter más a la izquierda es siempre un /
y el carácter más a la derecha es siempre un \
, así que cambiamos eso:
//\/\\
Colocamos esta capa en la capa anterior:
//\/\\
//\/\/\\
Continuamos hasta llegar a la cima (que parece /\
). Entonces, eventualmente obtenemos:
/\
//\\
//\/\\
//\/\/\\
Esto es lo que necesita para generar.
La tarea
Dada la base de una pirámide (con una longitud mayor que 3), genera la pirámide completa. Puede asumir con seguridad que el carácter más a la izquierda es /
y el carácter más a la derecha es a \
. También puede suponer que la longitud de la base es siempre uniforme . Se permite el uso de espacios finales . El uso de espacios iniciales también está permitido, siempre que la pirámide permanezca en su lugar. Se permite el uso de 1 nueva línea final y 1 nueva línea principal .
Casos de prueba
Input: /\\\
Output:
/\
/\\\
Input: //\\///\/\
Output:
/\
/\\\
/\///\
///\\\/\
//\\///\/\
Input: /////////////\
Output:
/\
/\\\
/////\
/\\\\\\\
/////////\
/\\\\\\\\\\\
/////////////\
Este es el código de golf , por lo que gana el envío con la menor cantidad de bytes.
Respuestas:
jalea ,
28 26 2524 bytes-4 bytes gracias a Dennis
Receta:
(servir con limonada, esas pirámides son para trabajadores sedientos)
Prepare su propia pirámide de corte en TryItOnline , o pruebe todos los degustadores sugeridos por el OP
fuente
Retina ,
59565452 bytesPruébalo en línea!
Salida de muestra
fuente
Pyth -
2726 bytesReduce por la operación dada en el OP hasta que se repite, que es el caso de la línea en blanco.
Test Suite .
fuente
Python 2, 78 bytes
Una función recursiva que genera una cadena. Cada capa de la pirámide se agrega a la llamada recursiva con la capa sobre ella. El prefijo
p
, que comienza como un personaje de nueva línea, gana un espacio más para formar el triángulo. La siguiente capa se produce intercambiando barras, cortando el primero y los dos últimos símbolos, y emparejándola dentro de una barra izquierda y derecha.Python 3 puede guardar un byte haciendo
*99
entranslate
, ya que se eliminó el requisito de longitud 256.fuente
Haskell,
98949085 bytesEjemplo de uso (nota: en Haskell las barras invertidas dentro de cadenas literales tienen que escaparse
\\
):Enfoque recurrente simple:
#
hace el trabajo mediante mapeos
, que voltea el/
y\
, en los elementos internos. El parámetro adicionalt
realiza un seguimiento del nivel de sangría y se expande con un espacio en cada llamada recursiva.Nota: la segunda llamada recursiva de
#
(->l#""
) salta directamente al caso base y es solo una forma corta de agregarl
,\
y una nueva línea, es decir, reemplaza++l++"\\\n"
.Editar: @xnor ahorró 5 bytes. ¡Gracias!
fuente
l++"\\\n"
Aspecto del productol#""
.s
es[c|x<-s,c<-"ab",c/=x]
.++"\\\n"
, pero me perdí esta. ¡Gracias!Python 3,
108104101 94 91 8988 bytes-7 bytes gracias a xnor (¡avisándome que no tenemos que imprimir!)
-3 bytes gracias a xnor (tomando la declaración fuera de la declaración de función [d'oh])
-1 byte gracias a Dennis (reemplazar
f,b='/\\'
conb,f='\/'
)Pruébalo en ideone . Nota: entrada ajustada para doble barra invertida (incluso las cadenas sin procesar no funcionarán si terminan en un número impar de barras invertidas).
fuente
f,b='/\\'
fuera de la función.JavaScript (ES6),
9186 bytesLa salida incluye un carácter de nueva línea líder.
fuente
Rubí, 80 bytes.
Sin golf
Véalo en ideone: http://ideone.com/HN0l0Y
fuente
f
en el cuerpoLote, 137 bytes
Convenientemente, mi uso de
%~2
y%1
significa que evito tener que gastar bytessetlocal
. Explicación: Dado que Batch no realizará reemplazos en la cadena vacía, tenemos que configurar la siguiente capa con los bordes "incorrectos", que luego se corregirán como parte de los reemplazos de cadena.fuente
BASH (sed + sort)
7166 Bytesla entrada proviene de stdin.
Ejemplo:
Explicación:
-n
- suprima la impresión automática:l
- ytl
vuelva al principio si esta línea era otra cosa que/\
p
- imprima esta líneay|\\/|1\\|;y|1|/|
- reemplace\
con1
,/
con\
, y luego1
con/
th;:h
- pruebe y salte al mismo lugar, de modo que solo se pruebe la siguiente sustitución más tardes|\\.(.*)./| /\1\\|
, reemplace los dos cortes externos en cada lado con{space}/
y\
sort
,space
viene antes,/
así que esto pone todo en el orden correctofuente
05AB1E,
423836 bytesPruébalo en línea!
Explicación:
(Gracias a Emigna por señalar eso
DD -> Ð
yDR -> Â
).fuente
Dg;GDðK¦¦¨¨„/\‡'\«R'/«ðN׫R}r»
ahorra 7 bytes.Go,
300276 bytesVersión larga:
fuente
import(."regexp";."os")
ahorra 2 bytesPerl,
5352 bytesIncluye +1 para
-p
Ejecutar con la entrada en STDIN, p. Ej.
pyramid.pl
:fuente
05AB1E , 31 bytes
Explicación
Pruébalo en línea
fuente
> <> ,
186179175171 bytesoooh hombre, esta es definitivamente mi mayor> <> respuesta hasta ahora.
Probablemente todavía queda algo de golf por hacer (el área inferior es bastante derrochadora)
Pruébalo en línea
fuente
Powershell, 142 bytes
fuente
C #, 250 bytes
Definitivamente se puede jugar más, pero mi cerebro se apagó, así que decidí dejarlo como está por el momento.
fuente