Tengo una caja de arte ASCII y necesito un programa para abrirla.
Ejemplos
Entrada:
-------
| |
|_____|
Salida:
/
/
/
/
/
/
/
| |
|_____|
Especificación
- La primera línea solo consistirá en
-
, al menos 3 de ellos - Las filas del medio comenzarán con
|
espacios, y terminarán con|
- Todas las filas del medio serán iguales
- La última fila comenzará con
|
have_
y terminará con un|
- Todas las filas tendrán la misma longitud.
Abriendo la caja:
- Cada uno
-
debe ser reemplazado por un/
en líneas ascendentes y posición.
Respuestas:
CJam, 14 bytes
Pruébalo en línea!
Cómo funciona
fuente
JavaScript ES6, 57 bytes
Produce una nueva línea líder. Funciona tomando la fila de
-
sy convirtiéndolas en un triángulo, luego reemplazando la-
s con espacios.Editar: Guardado 5 bytes gracias a @ edc65.
fuente
f=s=>s[R='replace'](/-+/,s=>s[R](/-/g,"\n$'/"))[R](/-/g,' ')
\n
y convierto después).pb (NO COMPETENTE), 125 bytes
La versión de pbi que necesita para ejecutar esta respuesta es más nueva que la pregunta. Hubiera funcionado en versiones anteriores, excepto que nunca pude permitir nuevas líneas en la entrada. Oh bien.
Primero, esto determina la altura del cuadro contando nuevas líneas en la entrada. Una vez que sabe eso, va a la ubicación Y del lado derecho de la caja, baja a donde debe estar y dibuja las paredes y el piso, terminando con la tapa.
¡Mira esta divertida animación!
La pausa larga es el pincel que pasa sobre la entrada.
Sin golf:
fuente
Pyth,
1614 bytesExplicación
¡Gracias @FryAmTheEggman por el nuevo algoritmo!
Pruébalo aquí.
fuente
Retina,
3420 bytesEn el primer paso, cada uno
-
se sustituye por los-
siguientes, a/
y una nueva línea. La nueva línea al final de la primera línea original se elimina. En el segundo paso cambiamos los nuevos-
a espacios que resultan en la salida deseada.Pruébelo en línea aquí.
fuente
$%'
para capturar los correos finales-
que le ahorran 5 bytes: ¡ Pruébelo en línea!MATL , 14
15bytesLa entrada debe tener una nueva línea final.
Pruébalo en línea!
Explicación
fuente
Japt,
282625221817 bytes¡Pruébelo en línea!
Emite una nueva línea principal, que es aceptable según el OP.
Cómo funciona
Esto sería 4 bytes más corto si se permite que la bisagra esté en el borde derecho de la caja:
fuente
JavaScript (ES6), 66
PRUEBA
fuente
Java 8,
158118 bytesEsto es solo un comienzo, pero bueno, FGITWFTW.
Espera la entrada como una cadena, devuelve el cuadro.
fuente
Python 3, 1̶7̶0̶ 88 bytes
Aquí está mi código corto (er): EDITAR: ahora 82 bytes más corto con @Dennis 's Code Edit.
Python 3, 421 bytes
Alternativamente, solo por diversión, puede usar uno que lo abra lentamente:
Para usar cualquiera de los dos, debe crear un archivo de texto en el mismo directorio que contenga un cuadro ASCII de cualquier ancho o profundidad llamado 'f.txt'. Luego abrirá esa caja.
fuente
Bash,
858479 caracteres(Versión Pure Bash, no se utilizan comandos externos).
Produce una nueva línea líder.
Ejecución de muestra:
fuente
echo
es un comando externo -/usr/bin/echo
;)echo
ejecutable existe para la conformidad del sistema operativo con los estándares. Hoy en día, ese solo se usa si la portabilidad es importante, ya que está a la altura del estándar , pero la mayoría de los proyectiles modernos tienen su propio componente incorporadoecho
que se usa por defecto: pastebin.com/RnxhweBv @Levi, si cambia el nombre / mueve su/usr/bin/echo
, mi El código seguirá funcionando.Perl,
615433 + 3 = 36 caracteresEjecútalo como
Cada uno
-
en la primera línea se reemplaza por una cadena que es el resultado de la concatenación de algún número de,
/
y\n
.${chr 39}
se evalúa$'
como$POSTMATCH
la variable especial famosa de aka (in) famosa de perl . Por último, chomp se deshace del carácter de nueva línea que se agregó para el último-
personaje.Gracias a @manatwork por guardar más de 7 caracteres.
Bonificación :
s^-^" "x$i++."\\\n"^ge&&chop
abre el cuadro desde el borde derecho en 29 + 3 caracteres :). Ejecútalo como:fuente
-
, así que sí, puedo jugar golf aún más. ¡Gracias!$.==1
→$.<2
,&&chop
→&chop
, elimine el par extra de paréntesislength
, cuente{chr 39}
como 1, ya que no solo es necesario para la versión de línea de comando debido a la sintaxis de shell:$.<2&&s^-^" "x(length$')."/\n"^ge&chop
+ 2 caracteres para las opciones de línea de comando = 40 según mi conteo. pastebin.com/iDhUs9XX$.==1
o$.<2
puede ser eliminado porque solo la primera línea contiene-
\n
.s^-^$'=~y/-/ /r."/\n"^ge&chomp
Pyth,
2623 bytesYuck Definitivamente puede ser más corto; sigo trabajando en eso.
fuente
Python3, 76 bytes
/
precedidas por un número decreciente de espacios.stdin
directamente astdout
.EDITAR: Acabo de notar que mi código es casi idéntico a la edición de comentarios de @Dennis del código Python3 más corto de @ Monster, la única diferencia es imprimir el resto
stdin
directamente en lugar de almacenarlo en una variable. ¡Grandes mentes!fuente
Lienzo ,
64 bytesPruébalo aquí!
Explicación:
fuente
Python 2, 100 bytes
Define una función
o
que toma una cadena como entrada. (El programa completo no se especificó en la pregunta).fuente
PowerShell, 55 bytes
Toma la entrada
$args
como una cadena,-split
s en líneas nuevas`n
( enlace de referencia ) , almacena la primera línea en$d
(como una cadena) y el resto en$b
(como una matriz de cadenas). Luego hacemos un bucle desde lalength
primera línea (menos 1)0
y cada iteración genera ese número de espacios más a/
. Finalmente, la salida$b
(el resto de la cadena de entrada) que, por defecto, generará una por línea.Ejecución de ejemplo
fuente
JavaScript (Node.js) , 56 bytes
Pruébalo en línea!
Debe ser escrito como un comentario de @Neil 's respuesta , pero no puedo crear aún comentarios
fuente
05AB1E (heredado) , 9 bytes
Pruébalo en línea! (solo legado)
Cómo funciona
fuente
Carbón , 14 bytes
Pruébelo en línea (detallado) o pruébelo en línea (puro) .
Explicación:
Divida la entrada por nuevas líneas, tome la longitud de la primera línea e imprima una línea de esa longitud desde la parte superior derecha hasta la parte inferior izquierda:
Muévete una vez a la derecha:
Divida la entrada por nuevas líneas nuevamente, y elimine el primer elemento, e imprima lo que queda implícitamente:
(NOTA: Poner la entrada dividida por nuevas líneas en una variable (ya que lo hago dos veces arriba) es
1 byte más largo y14 bytes usando un método ligeramente diferente (gracias a @Neil ):≔⮌⪪θ¶θ↙L⊟θM→⮌θ
Pruébelo en línea (detallado) o inténtelo en línea (puro) ).fuente
JavaScript ES6, 106 bytes
Bastante simple: obtener la longitud de la primera línea, crear un triángulo espaciado con el final
/
y agregarlo al original, cortado y unido.¡Pruébalo! (Solo ES6
:(
)Mostrar fragmento de código
fuente
.repeat(n-i-1)
=>.repeat(n+~i)
Python 2.7,
120122 caracteresNecesita un archivo
f
con el cuadro original / cerrado, el resultado es el abierto. Saludos a @Monster por la idea ... intentaré averiguar la entrada de varias líneas más adelante y ver si es más corta.Editar
/
tiene un espacio en frente; +2 bytesfuente
Ruby, 59 caracteres
(Código de 57 caracteres + opciones de línea de comando de 2 caracteres).
Ejecución de muestra:
fuente
Bash, 129 caracteres
Requiere un archivo llamado
a
con el cuadro cerrado, salidas a stdout.Es posible que sea más corto usando
sed
y usando stdin y tuberías.fuente
for i in $(seq `awk 'NR<2&&$0=length-1' a` -1 1);{ for j in `seq 1 $i`;{ printf \ ;};echo /;};echo /;tail -n2 a
PHP, 127 caracteres
Versión sin golf:
fuente
$argv
. Hay un par de trucos menores que podría aplicar:$l=strlen(strtok($s=$argv[1],"↵"));while($l)$s=preg_replace("/-/","↵".str_repeat(" ",--$l-$i)."/",$s,1);echo$s;
(Use una nueva línea literal en su código donde está “↵”: pastebin.com/36t2fb0P )Python, 125 bytes (110 sin caja)
Si alguien tiene alguna idea de cómo acortarlo, ¡hágamelo saber!
fuente
Awk,
4746 caracteres(Código de 44 caracteres + opción de línea de comando de 2 caracteres).
Ejecución de muestra:
fuente
Gema,
514931 caracteresEjecución de muestra:
fuente
K (ngn / k) , 18 bytes
Pruébalo en línea!
fuente
05AB1E (heredado) , 12 bytes
Pruébalo en línea!
fuente