Imagen mía redactando este desafío con mis habilidades avanzadas de dibujo.
Antecedentes
Las guerras de Stickman ocurrieron hace mucho tiempo, cuando la especie dominante de la Tierra estaba hecha de palos. Los historiadores lamentan el hecho de que no había pintores o cámaras en ese entonces, podríamos usar algunas imágenes de esa guerra en los libros de historia de hoy. Ahí es donde tus poderes de codificación se vuelven útiles. Los stickmen se dibujan muy fácilmente y los historiadores lograron encontrar algunos datos sobre cuántos stickmen lucharon en las guerras¹. ¡Ahora depende de usted recrear una imagen del momento justo antes de que comience la guerra!
Aquí están los valientes hombres de palo involucrados en la guerra:
O / | / | \ / El | El | / \ Espadachín OA / | \ | El | El | / \ | Lancero . . ' *. 'O * '\ | /. . El | * * './ \ *. Mago O / | \ El | / \ Villager O / | \ / \ Infantil
Entrada
Recibe a través de stdin o equivalente una representación de cada stickman que apareció a cada lado del campo de batalla. Por ejemplo, si dos espadachines lucharon en el lado derecho y dos lanceros en el lado izquierdo, tu entrada puede ser {Sword: 2}, {Spear: 2}
, [2,0,0,0,0], [0,2,0,0,0]
o a "WW", "SS"
.
Salida
Una representación de cada valiente stickman en un campo de batalla, de acuerdo con las reglas a continuación. Puede mostrarse en stdout o guardarse en un archivo, lo que sea que haga temblar su bote.
Reglas
- En el lado izquierdo estarán todos los stickmen de la primera matriz / cadena / objeto que recibió su programa.
- Esos hombres de palo deben verse exactamente como los mostrados anteriormente en esta pregunta.
- El orden del ejército del lado izquierdo debe ser
Infants Villagers Mages Swordsmen Spearmen
. - El ejército del lado derecho se comportará igual, pero con los personajes y el orden reflejados.
- Cada stickman estará separado por 1 espacio.
- Cada clase estará separada por 3 espacios.
- Los ejércitos estarán separados por 8 espacios.
- Como los hombres de palo no vuelan, debes dibujar el suelo usando guiones menos
-
. - El terreno debe terminar en la misma columna en la que termina el último stickman del ejército derecho.
Ejemplo
Supongamos que mi programa espera dos matrices con longitud 5 y cada valor en la matriz representa, en orden Infants Villagers Mages Swordsmen Spearmen
,.
Entrada: [1,1,2,3,1] [0,0,1,1,1]
. . . . ' *. . ' *. . * '. O 'O *' O * O / O / O / OAAO \ O * O ' O / | \ '\ | /. '\ | /. | / | \ / | / | \ / | / | \ / / | \ | | / | \ \ / | \ | . \ | / ' / | \ | . El | *. El | * | El | El | El | El | El | El | El | El | El | El | El | * | . / \ / \ './ \ *. './ \ *. / \ / \ / \ / \ | | / \ / \. * / \ '. -------------------------------------------------- -------------------------------------
Consideraciones finales
Tenga en cuenta que se aplican lagunas estándar y que el mago es completamente asimétrico solo porque sí.
El resultado de la respuesta más votada será la "imagen de portada" de este desafío. La respuesta más corta antes de fin de mes (31/08/2014) será seleccionada como la ganadora.
Este es el código de golf , por lo que el código más corto, en bytes, gana.
¹ cita requerida
fuente
IVMMWWWS SWM
estar dentro del límite de "cualquier cosa que te ayude"?Respuestas:
JavaScript (E6) 336
344 356 369 424 478 522 570Edición 6 La última edición tuvo errores. Corrección de errores y acortado. Eso es todo lo que espero.
Edit 5 Finalmente encontré una manera de deshacerme de multiplicar por 23 - me molestó desde el principio. Además de otro cambio en la entrada (@William grita cuando es demasiado). Ahora la función espera un parámetro de matriz, que contiene 2 submatrices. Sin este cambio es 349, sigue siendo una mejora
Edición 4 Afeitó algunos bytes más y un pequeño cambio en el formato de entrada. Con el nuevo formato de entrada, una clase faltante se representa como un elemento de matriz vacío. Entonces en
D([1,,2,3,1],[,3,1,1,2])
lugar deD([1,0,2,3,1],[0,3,1,1,2])
. Creo que todavía obedece las reglas.Editar 3 Golfed más. Sin cambios en el algoritmo, pero abusando de un montón de array.map y funciones locales para evitar bucles.
Edite la compresión de 2 cadenas, de la manera correcta ...
Editar Compresión de cadena agregada, mucho trabajo y poco ganado. Ahora los stickmen espejo se generan a partir de una plantilla, no se almacenan.
Hice algunos intentos, primero corriendo.
Para jugar al golf.NB Kolmogorow-negocio aún no se ha abordado.Prueba en la consola FireFox.
Cambie 'return' conAgregar 'alert (...)' para tener una declaración de salida (aunque no sea útil en absoluto)console.log(D([[1,,2,3,1],[,3,1,1,2]]))
Salida
Código de golf
Código (editar 2)
Código sin golf (primera versión)
fuente
Python
362353Editar: eliminar un bucle for y usar la instrucción exec ahorró 9 bytes
Entrada:
Salida:
fuente
C,
418414Entrada de ejemplo:
Salida de ejemplo:
Código de golf (los saltos de línea son solo para facilitar la lectura; debe ser una larga línea de código):
El ancho máximo del campo de batalla es de 999 (podría ahorrar 2 caracteres limitándolo a 99). Utilicé una estructura de control de 1 byte por carácter de salida (sin espacio), dibujando las figuras de abajo hacia arriba.
Hay 5 desplazamientos en la estructura de control.
Algunas otras partes oscuras:
f%27%5
traduce los caracteresVWSMI
a números.0, 1, 2, 3, 4
t*3%12%5+4
calcula el ancho del stickman de tipot
t^3|~o||(s=d[5]+p,*s--=46,*s=39)
explica la asimetría izquierda / derechaargc=3
para generar banderas de dirección de dibujo1
y-1
Código sin golf:
fuente
*a
a una coma? Eso elimina una advertencia y tiene el mismo número de bytes.f=*a
como la condición de detención; compilador puede quejarse pero lo digo en serio. No puedo eliminarlo porque debería haber dos puntos y coma en lafor
sintaxis -loop.Haskell, 556
Formato de entrada
Orden: [Infante, Aldeano, Mago, Espadachín, Lancero], [Lancero, Espadachín, Mago, Aldeano, Infantil]
Salida de muestra
Código
Sin golf
fuente
Haskell (
736733720 Bytes)Llame con ./stickmanwars 2 3 1 3 4 -1 3 2 4 1 0 4 2 1 . El -1 marca el delimitador para las dos matrices. Espero que esté bien.
Bueno, mi primer desafío de golf de código y la primera vez que usé haskell para una aplicación real después de aprenderlo este semestre en mi universidad. Probablemente ni siquiera esté cerca de ser la mejor solución o la más corta, pero me divertí mucho creándola y fue un buen ejercicio :) La crítica y los comentarios son muy apreciados.
Golfed fuera de esto:
fuente
Haskell, 450
¡Genial desafío! Podría ser capaz de jugar golf un poco más. Básicamente, estoy almacenando las figuras en forma de columna para poder agregarlas entre sí fácilmente, y luego voltear todo el conjunto de
String
s alrededor usando Haskell'stranspose
.El formato de entrada es
([Infants,Villagers,Mages,Swordsmen,Spearmen],[Infants,Villagers,Mages,Swordsmen,Spearmen])
Aquí está el ejemplo del OP:
¡Y aquí está mi descripción favorita del infanticida ritual infame durante la segunda era!
fuente
Python (
612,522,460, 440)Cada "línea" se recorta de relleno derecho, y esto se agrega nuevamente al reconstruir.
Pre-invertí los stickmen en mi codificación interna porque me ahorró tener que invertirlos individualmente al representarlos en el código.
Ejecución de muestra:
Código:
fuente
Pitón (476)
Un solucionador diferente al anterior; más largo, pero más funcional.
Código:
fuente