Con el gran colapso de la economía universal, también se desplomó la demanda de planetas hechos a medida. Los magrateanos tuvieron que cuidar los ingresos más estables también de una clase más amplia de clientes. Por lo tanto, inventaron la cadena de montaña de tener su propia montaña (o estragos cortos) para personas con un presupuesto más pequeño que no podían permitirse un planeta completo.
Las montañas son de construcción de acuerdo con el plan del cliente (también conocido como cadenas de dígitos y puntos) y entregado usando ASCII-art (que consisten en ,
/
, \
, ^
y v
).
Tarea
Escriba un programa completo que tome la entrada (cadena simple) desde STDIN o como argumento y las salidas a STDOUT. Este rompecabezas es un código de golf, así que por favor muestre algún intento de golf.
Entrada
Una cadena de puntos y dígitos que proporcionan la base para la cadena montañosa. Cada cadena es exactamente el tiempo necesario para soportar las montañas y cada pico está dado por un dígito en lugar de un punto, que indica la altura del pico.
Salida
Una versión ascii de la cadena montañosa.
- Cada dígito en la entrada representa exactamente un pico (
^
) exactamente a la altura indicada por el dígito (es decir, 9 es la altura más alta). - No debe haber picos adicionales en la salida (es decir, en lugares donde hay un punto en la entrada).
- Las montañas son de forma triangular, es decir, las pendientes se crean usando
/
y\
caracteres. - Pases donde se superponen dos montañas con el personaje
v
. - No hay líneas nuevas superfluas ni líneas en blanco.
- Las líneas de relleno con espacios finales son opcionales.
Puede suponer que la entrada proporcionada es válida, es decir, siempre existe una solución de acuerdo con las reglas (por ejemplo, una entrada de 13..
no daría como resultado una configuración válida y puede ignorarse). Además, en cada lado hay exactamente tantos puntos como para que no se puedan cortar las montañas.
Ejemplos
La primera línea muestra la entrada, todas las demás líneas constituyen la salida deseada. (En realidad, las montañas se ven mucho mejor en mi consola que aquí).
1
^
11
^^
1.2.
^
^/ \
.2.3..
^
^/ \
/ \
.2..3..
^
^ / \
/ v \
...4...3...3..
^
/ \ ^ ^
/ \/ \ / \
/ v \
1
, ¿está\n\n\n\n\n\n\n\n^
permitido?Respuestas:
Javascript:
272268233232201192189188178180 caracteresGracias a @Sam por reducirlo de 268 a 233 caracteres, y por @manatwork por otro 1 carácter. @VadimR por señalar un error.
Versión apropiadamente ideada y un tanto descuidada con comentarios:
Como puede observar en el código, esto funciona como un autómata celular, donde cada celda verifica un número en la entrada, se mira a sí mismo y a sus dos vecinos para decidir cuál será la próxima iteración. En cada momento, una célula puede ser una
^
,/
,\
,v
o. La entrada proporcionada en los casos de prueba produce la salida esperada.
Tenga en cuenta que usar el
alert
cuadro apesta, ya que normalmente no tiene una fuente monoespaciada. Puede copiar y pegar el texto delalert
cuadro en otro lugar para una mejor apreciación de la salida, o puede reemplazar la última líneaalert
porconsole.log
, pero como se trata de código de golf,alert
es más corto.Además, no valida nada en la entrada. Simplemente considera los caracteres no reconocidos como espacios de la misma manera que lo hace
.
(de hecho, también.
es un carácter no reconocido).fuente
prompt()
parámetro .delete r; delete s; delete q; delete p; delete t; delete i; delete d;
para asegurarse de que no se contaminó.q.trim()?q+'\n':''
podría serq.trim()&&q+'\n'
, ahorrando dos. Además,i<p.length
podría serp[i]
.Rubí,
208201189Muy divertido desafío! Aquí hay una solución alternativa de Ruby.
Como beneficio adicional, aquí hay una implementación de Ruby del algoritmo de "autómata celular" muy inteligente de Victor, con 162 caracteres:
Salida de ejemplo:
fuente
$/
para nueva línea.C # - 588 caracteres - ¡no es tan bueno como el 321 de Ray!
Salida de ejemplo:
O uno más largo y complejo ...
Rompecabezas brillante ... no es tan fácil como parece ... ¡me encantó!
fuente
3
s están ahí. Si estás hablando del primero, es parte de la pendiente.APL, 65 bytes
⍉⌽↑⌽¨h↑¨'^/v\'[1+(~×a)×2+×2+/2-/0,0,⍨h←¯1+⊃⌈/a-↓|∘.-⍨⍳⍴a←11|⎕d⍳⍞]
⍞
Este símbolo devuelve la entrada sin procesar (no evaluada) como una matriz de caracteres.Resolviendo interactivamente, en una sesión APL:
fuente
Ruby, 390 caracteres
Vaya, este fue complicado.
Terminé teniendo que agregar una nueva cadena para cada carácter, usando una variable
s
que significaba "omitir el siguiente carácter" que era necesario para el procesamiento^
y\
.Esta salida es exactamente la salida de muestra dada para todos los casos de prueba.
Gráfico de lo que significan las variables:
Estoy seguro de que podría jugar mucho más, pero ahora tengo que irme. Será mejorado más tarde!
fuente
.2.2.
y no puedo ver por qué no funciona.Java,
377407Editar: @Victor señaló que este debía ser un programa completo, por lo que agregué algunas docenas de caracteres para que sea compilable y ejecutable. Simplemente pase la "orden de compra" como primer parámetro cuando ejecute el programa, así:
java M ..3.4..6..4.3..
Creo que esto es similar en espíritu a otras respuestas, básicamente solo atraviesa el "orden de la montaña" repetidamente para cada altura posible, y construye las montañas de arriba hacia abajo. De esa manera, solo tengo que lidiar con cuatro condiciones si no estoy construyendo un pico: una pendiente ascendente '/', una pendiente descendente '\, una unión' v 'o vacía' '. Puedo descubrir eso simple mirando los tres espacios centrados "arriba" de mi posición actual en mi construcción de arriba hacia abajo.
Tenga en cuenta que, como otras presentaciones, trato cualquier cosa que no sea un número como equivalente a '.' en la entrada, por brevedad.
Versión de golf:
Forma legible por humanos (y sin algunas de las transfiguraciones equivalentes para lograr la forma de golf):
Disfrutar.
Salida de ejemplo:
fuente
class X{public static void main(String[]z){
.Perl 6,
264 224 216 206 200 194124 bytesGracias a @JoKing por mostrarse como /// solución. Esto se juega un poco más después de corregir el error tr /// en Perl 6.
Mi solución original con subst:
Sin golf:
Salida:
fuente
s///
ytr///
. Creo que el último se puede usar entr
lugar de,s
pero no puedo entender para traducir barras diagonales inversas. Tal vez el primero tambiénPerl,
254 218212Editar: en realidad es una corrección de errores trabajar con el
..3..4...6...5....1
ejemplo de ProgrammerDan , pero, en el proceso, algunos bytes estaban desactivados. Y prueba en línea: https://ideone.com/P4XpMUfuente
C # -
321319Ungolfed y comentó:
Ejemplo:
Sin embargo, creo que genera un espacio adicional antes de cada línea.
fuente
CJAM,
128117112106104 bytesCJam es un poco más joven que este desafío, por lo que esta respuesta no compite. ¡Sin embargo, este fue un desafío muy agradable! Por lo poco que sé sobre J y APL, creo que una presentación en esos sería impresionantemente corta.
Aquí hay un caso de prueba, que creo que contiene todas las posibles combinaciones posibles de pendientes, picos y valles:
cuyos rendimientos
Pruébalo aquí.
Agregaré una explicación para el código más tarde.
fuente
Pitón,
297234218-63 bytes gracias a Jo King
-16 bytes con en
r=s.replace
lugar de lambdaToma información de STDIN. Sin golf, simplificado:
fuente
s.replace
método yo mismo, pero no funciona. Solo está realizando reemplazos en la cadena original ya que las cadenas son inmutablesPowerShell,
148145 bytes¡Es un buen desafío!
Menos guión de prueba de golf:
Salida:
fuente
Pip
-l
, 100 bytes(El lenguaje es más nuevo que la pregunta, pero probablemente no superará la presentación de APL de todos modos. Aunque espero que sea mucho más corto).
Toma entrada a través de la línea de comando argumento. Pruébalo en línea!
fuente