Aquí hay un arte ASCII de una intersección de 4 vías:
| | |
| |
| | |
| |
| | |
-----+-----+-----
| |
- - -| |- - -
| |
-----+-----+-----
| | |
| |
| | |
| |
| | |
(Observe cómo los caminos horizontales tienen 3 filas de alto, mientras que los caminos verticales tienen 5 columnas de ancho. Esto es por razones estéticas, debido a la fuente rectangular).
Su desafío es producir este arte ASCII. Sin embargo, como estoy seguro de que todos saben, no todas las intersecciones tienen un camino que se desvía en todas las direcciones. Esta intersección particular va NESW
, pero algunas intersecciones pueden ir, por ejemplo NW
:
| | |
| |
| | |
| |
| | |
-----+-----+
| |
- - -| |
| |
-----+-----+
O podría ir SWE
:
-----+-----+-----
| |
- - -| |- - -
| |
-----+-----+-----
| | |
| |
| | |
| |
| | |
O incluso puede ir E
, solo una dirección (aunque difícilmente puede llamar a esto una intersección , pero trate de evitar ser demasiado pedante):
+-----+-----
| |
| |- - -
| |
+-----+-----
Necesita escribir un programa o función que pueda generar fácilmente cualquiera de estas combinaciones. Más específicamente, su desafío es escribir un programa o función que tome una cadena de direcciones, que consiste en NESW
, como entrada, y emite o devuelve este arte ASCII de una intersección con carreteras que apuntan en esas direcciones. Estas direcciones pueden aparecer en cualquier orden, pero la entrada no contener ningún carácter excepción de N
, E
, S
, o W
. Si lo desea, puede solicitar que las entradas estén en minúsculas, pero debe especificar esto en su respuesta. También puede suponer que todas las entradas contendrán al menos una dirección.
El último ejemplo tenía espacios iniciales en cada línea, porque no hay camino que vaya hacia el oeste. Si no tiene un camino hacia el oeste, estos espacios principales son opcionales. Esta:
+-----+-----
| |
| |- - -
| |
+-----+-----
También sería un resultado aceptable. Del mismo modo, si desaparece N
o no S
, las líneas vacías en ese lugar son opcionales. Se permite una nueva línea final, y los espacios finales se permiten siempre que la salida sea visualmente la misma.
Puede tomar entradas y salidas en cualquier formato razonable, como STDIN / STDOUT, argumentos de línea de comando, archivos, argumentos de función / valores de retorno, etc.
Como de costumbre, este es el código de golf , ¡así que trata de obtener la respuesta más corta posible en el idioma que uses!
Muestra IO:
NESW:
| | |
| |
| | |
| |
| | |
-----+-----+-----
| |
- - -| |- - -
| |
-----+-----+-----
| | |
| |
| | |
| |
| | |
NS:
| | |
| |
| | |
| |
| | |
+-----+
| |
| |
| |
+-----+
| | |
| |
| | |
| |
| | |
S:
+-----+
| |
| |
| |
+-----+
| | |
| |
| | |
| |
| | |
EW:
-----+-----+-----
| |
- - -| |- - -
| |
-----+-----+-----
SE:
+-----+-----
| |
| |- - -
| |
+-----+-----
| | |
| |
| | |
| |
| | |
E
, por ejemplo)? ¿Se permiten líneas en blanco iniciales y finales si no hayN
oS
?Respuestas:
Javascript (ES6),
190187185 bytesEste es un intento de construir este personaje de arte ASCII por personaje iterando en una matriz de 17x15. Por lo tanto, la salida siempre se compone de 15 filas de 17 columnas con la intersección de las carreteras centrada en el medio.
Ungolfed y comentó
Matriz
A continuación se muestra la matriz con las coordenadas utilizadas en el código.
Manifestación
El siguiente fragmento permite probar cualquier configuración de carretera.
fuente
PowerShell v3 +,
226204192191 bytesToma la entrada como una cadena de letras mayúsculas, explícitamente la convierte como una
char
matriz. Construye el segmento "Norte" mediante un bucle de0
a4
. Cada ciclo, construye una cadena de 5 espacios (siW
/87
está presente en la entrada), almacena eso en$x
, luego| |
(almacenado en$w
) o| | |
, dependiendo de si estamos actualmente pares o impares. Ese conjunto de cadenas se almacena en$n
, y se multiplica por siN
/78
es-in
la entrada. Eso determinará si$n
se coloca en la tubería o no.Luego, construimos la porción media. La primera línea,
$z
es la "parte superior" de la ruta este-oeste, utilizando la misma lógica paraW
yE
/69
, y rodeada por parens para colocar también una copia en la tubería. Usamos la variable auxiliar$y
para guardar un byte en las-----
secciones.La siguiente línea es solo el número apropiado de espacios (es decir,
$x
) concatenados en cadena con las tuberías de ancho correcto (es decir,$w
). Entonces, la línea de rayas medio, de nuevo conW
yE
lógica y$w
de llenado en el medio. Entonces$x+$w
y de$z
nuevo.Por último, ya que el camino del Sur es el mismo que el del norte, poner
$n
en la tubería siS
/83
es-in
$a
.Todas esas cadenas resultantes se recopilan de la canalización y la salida está implícita al final de la ejecución del programa. Abusa del
Write-Output
delimitador predeterminado para insertar una nueva línea entre elementos.Ejemplos
fuente
C ++
317280276 bytesSin golf:
fuente
strchr
conindex
afeitará algunos más. Definirx
yy
juntos fuera de losfor
bucles.Python 3, 186 bytes
Una lambda anónima llamada con una cadena de direcciones, por ejemplo, 'NWS'
Explicación a seguir
fuente
sed 234
Simplemente construye las diferentes partes si el carácter apropiado está en la línea.
Utiliza en
@
lugar de\n
y subs de\n
nuevo al final.Las partes norte y sur son idénticas, por lo que utilizo lo que es básicamente una función para insertarlas.
fuente
Lotes,
351344341 bytesNota: La línea
set t=
termina en cinco espacios y la líneaif "%i:e=%"=="%i%" set r=
termina en un espacio. Toma entradas que no distinguen entre mayúsculas y minúsculas de STDIN. Editar: Guardado 7 bytes eliminando lad
variable. Guardado 3 bytes usando unfor
bucle para imprimir la sección central. Si se me permiten parámetros de línea de comando separados, entonces para326319316 bytes:fuente
Python 2, 290 bytes
fuente
m,t,s=[],[],[]
podría serm=t=s=[]
.range(5)
podría guardarse en una variable y usarse dos veces, en lugar de escribirrange(5)
dos veces.m
para?t=s=[]
todo desordenadom=t=s=[]
, todos apuntan a la misma referencia.GolfScript, 154 bytes
Pruébalo en línea!
fuente
Pyth (
385380373353 bytes)Golfizado:
Sin golf:
Por supuesto, si hay alguna mejora, por favor dígame.
Guardado 5 bytes gracias a Maltysen
Puedes probarlo aquí
fuente
K
lugar deN
y luego, al asignar por primera vez, no tiene que usar un=
, ahorrándole un byteN[:-1]
esP
Groovy (274 bytes)
Sin golf
Golfed
Pruébelo: https://groovyconsole.appspot.com/script/5082600544665600
fuente