(con disculpas a Jim West por el título e inspirado al azar por la representación textual de su logotipo por parte de Cisco: .:|:.:|:.
por el concepto)
Dado un entero de entrada 1 <= n <= 255
, genera una representación artística ASCII de un puente colgante de distancia n
siguiendo las siguientes reglas de construcción:
- El inicio y el final del puente (sin contar en la
n
distancia) son siempre-|
y|-
, por lo que el puente puede conectarse adecuadamente a las carreteras cercanas. - El puente no se extiende hacia abajo (el nivel de la carretera, compuesto por el
-
fila, es la fila inferior). - Puede haber como máximo dos piezas de calzada
--
seguidas, cualquier tramo más largo requiere cables de suspensión para soporte. - Los cables de suspensión se
\
extienden desde la carretera hasta las torres.|
en línea recta. - Las torres
|
deben ser lo suficientemente altas como para soportar los cables de suspensión adyacentes, pero no más altas. - El puente debe estar equilibrado de izquierda a derecha sobre el punto medio, favoreciendo las secciones centrales siempre que sea posible.
- Todo lo anterior debería resultar en una minimización de los cables, pero para ser claros, el número de cables de suspensión debe minimizarse sin dejar de seguir las reglas anteriores.
Para proporcionar una representación visual, aquí están los resultados esperados para n = 1, 2, 3, ... 15
:
1
-|-|-
2
-|--|-
3
-|\-/|-
4
-|\--/|-
5
|\ /|
-|-\-/-|-
6
|\ /|
-|-\--/-|-
7
|\ /|
| \ / |
-|--\-/--|-
8
|\ /|
| \ / |
-|--\--/--|-
9
|\ /|
| \ / |
| \ / |
-|\--\-/--/|-
10
|\ /|
| \ / |
| \ / |
-|\--\--/--/|-
11
|\ /|
| \ / |
| \ / |
|\ \ / /|
-|-\--\-/--/-|-
12
|\ /|
| \ / |
| \ / |
|\ \ / /|
-|-\--\--/--/-|-
13
|\ /|
| \ / |
| \ / |
|\ \ / /|
| \ \ / / |
-|--\--\-/--/--|-
14
|\ /|
| \ / |
| \ / |
|\ \ / /|
| \ \ / / |
-|--\--\--/--/--|-
15
|\ /|
| \ / |
| \ / |
|\ \ / /|
| \ \ / / |
| \ \ / / |
-|\--\--\-/--/--/|-
Entrada
Un número entero positivo solo en cualquier formato conveniente , n > 9
.
Salida
El puente de arte ASCII siguiendo la técnica de construcción anterior.
Reglas
- Las nuevas líneas o espacios en blanco iniciales o finales son opcionales, siempre que los caracteres del puente se alineen correctamente.
- Un programa completo o una función son aceptables. Si es una función, puede devolver el resultado en lugar de imprimirlo.
- Si es posible, incluya un enlace a un entorno de prueba en línea para que las personas puedan probar su código.
- Las lagunas estándar están prohibidas.
- Este es el código de golf, por lo que se aplican todas las reglas habituales de golf, y gana el código más corto (en bytes).
Respuestas:
05AB1E ,
795958 bytesPruébalo en línea! .
Explicación:
Encontró la mejor solución, la clave fue devolver las siguientes matrices para cada número de la siguiente manera:
fuente
Python 2, 173 bytes
Refleje el valor de b y agregue el
f=lambda b:'-|'+b[::-1].replace('/','\\')+-~(~i%2)*'-'+b+'|-'
patrón base "-" central (mitad derecha de la línea inferior)
b=(i*'/--')[:~-i/2]
Bucle para capas no inferiores
for x in range(1,~-i/2):
Obtenga los primeros x caracteres del patrón base y complete con "-"
(len(b)-x)*'-'+b[:x]
Reemplazar todo - con espacios para imprimir todas las capas (excepto la parte inferior)
print f().replace('-',' ')
Imprimir capa inferior
print f(b)
fuente
Befunge, 150 bytes
Pruébalo en línea!
También proporcioné una versión no codificada del código que demuestra mejor la arquitectura utilizada en la construcción del puente.
Pruébalo en línea!
Las torres manejan la entrada y la inicialización de parámetros. La plataforma se compone de dos bucles que calculan las partes del puente que deben emitirse para cada coordenada x, y. Y la base contiene la tabla de caracteres para esas partes del puente, así como algún otro código completamente no relacionado.
Explicación detallada
Comenzamos calculando el ancho y la altura del área de salida que deberá iterarse para representar el puente.
Tenga en cuenta que el rango y no está basado en cero. El valor inicial es
5 - (h<5)
y se repite hasta h (el valor actual se almacena en 2,0). El valor de x se repite desde w hasta 0 y se almacena en la pila.El bucle interno es solo una serie de condiciones booleanas que determinan si una coordenada x , y particular coincide con alguna de las ubicaciones que requieren un carácter no espacial. Estos cálculos se basan en dos desplazamientos deslizantes que siguen el camino de los cables de suspensión.
Las diversas condiciones se determinan de la siguiente manera:
Para traducir estas condiciones al desplazamiento correcto de caracteres, solo necesitamos multiplicar cada una de ellas por un desplazamiento apropiado y sumar el resultado. Este cálculo se realiza a medida que se evalúan las condiciones. Entonces se ve algo como esto:
Tenga en cuenta que el puente_deck valor de se fusiona en función de si se ha cumplido alguna de las otras condiciones, ya que un carácter de suspensión o torre tendrá prioridad sobre el mazo.
El resultado final es un desplazamiento en la tabla de personajes en la última línea del campo de juego. Simplemente sacamos ese carácter y repetimos el ciclo.
fuente
Lote, 241 bytes
Nota: Espacio final en la línea 5. Comienza construyendo una fila de espacios, luego agrega cables según sea necesario, repitiendo para construir torres a la altura deseada, y termina reemplazando los espacios restantes con la carretera.
fuente
WinDbg, 312 bytes
La entrada se realiza configurando el pseudo-registro
$t0
.Siento que debería haber una manera de combinar los dos
for
bucles en uno ... tal vez algunas otras oportunidades de golf también ...Este funciona llenando toda el área con camino, luego reemplazando todo excepto la última fila con espacio y finalmente construyendo las columnas y los cables.
Salida de muestra de 1-15:
fuente
Java 8,
423, 412 bytes11 bytes guardados gracias a Kritixi Lithos
golfizado:
sin golf:
fuente
int i,j,k,t=n/2+n%2,u=t-2,q=0
como, en lugar de tenerchar v="-";
, puede usarchar v=45;
y puede cambiar elabc%xyz==0
s aabc%xyz<1
(no lo he probado)