El juego de damas chinas se juega en un tablero con espacios en forma de estrella de seis puntas:
Podemos crear una representación ASCII-art de este tablero, utilizando .
espacios vacíos y las letras GYORPB
para las seis ubicaciones iniciales de color:
G
G G
G G G
G G G G
B B B B . . . . . Y Y Y Y
B B B . . . . . . Y Y Y
B B . . . . . . . Y Y
B . . . . . . . . Y
. . . . . . . . .
P . . . . . . . . O
P P . . . . . . . O O
P P P . . . . . . O O O
P P P P . . . . . O O O O
R R R R
R R R
R R
R
Para hacerlo más interesante, también podemos cambiar el tamaño. Mediremos el tamaño de un tablero por la longitud lateral de sus ubicaciones de inicio triangulares: el tablero de arriba es de tamaño 4.
Como es realmente difícil escribir todo eso a mano, ¡escriba un programa (o función) para hacerlo!
Detalles
Su código debe tener un número entero positivo que represente el tamaño de la placa, a través de STDIN, ARGV o argumento de función. Envíe el patrón de tablero de ajedrez a STDOUT (puede devolverlo alternativamente como una cadena si su envío es una función).
La salida debe
- no tener espacios finales en absoluto, o
- tener suficientes espacios finales para completar el patrón en un rectángulo perfecto de ancho 6 * N + 1.
La salida puede tener opcionalmente una nueva línea final. No se permite ningún otro espacio en blanco adicional (inicial, final).
Ejemplos
Talla 1:
G
B . . Y
. . .
P . . O
R
Talla 2:
G
G G
B B . . . Y Y
B . . . . Y
. . . . .
P . . . . O
P P . . . O O
R R
R
Talla 4:
G
G G
G G G
G G G G
B B B B . . . . . Y Y Y Y
B B B . . . . . . Y Y Y
B B . . . . . . . Y Y
B . . . . . . . . Y
. . . . . . . . .
P . . . . . . . . O
P P . . . . . . . O O
P P P . . . . . . O O O
P P P P . . . . . O O O O
R R R R
R R R
R R
R
Tanteo
Esto es code-golf : gana el código más corto en bytes.
Respuestas:
Rubí,
141127Devuelve una cadena rectangular
Sin golf en el programa de prueba
fuente
Python 2, 140 bytes
No es genial, pero aquí está mi oferta inicial.
Las reglas de espacios en blanco agregaron muchos bytes. A modo de comparación, aquí hay un programa Python 3 de 120 bytes que solo es correcto visualmente y no sigue las reglas de espacios en blanco:
Y aquí está mi intento recursivo un poco más largo de 149 bytes de Python 3:
fuente
Pitón 2, 152
Este es, en retrospectiva, el enfoque incorrecto para Python, pero lo estoy publicando aquí en caso de que alguien pueda usarlo. En lugar de explicar este lío de código, trataré de decir la idea detrás de esto.
La idea es utilizar coordenadas triangulares , en los que la triangular celosía corresponde al número entero triples
(a,b,c)
cona+b+c=0
.(Aquí, los puntos de la red se dibujan como hexágonos).
Podemos convertir coordenadas cartesianas en triangulares como
señalando eso
x
yy
debe tener la misma paridad, o de lo contrario está fuera del tablero y deberíamos imprimir un espacio.En coordenadas triangulares, las líneas de delimitación de la estrella de seis caras tienen ecuaciones:
a==n, b==n, c==n, a==-n, b==-n, c==-n
.Por lo tanto, podemos determinar en qué región nos encontramos por cuáles
[a,b,c,-a,-b,-c]
son mayoresn
.El rectángulo delimitador requiere que hagamos esto
x
en el intervalo cerrado [-2 * n, 2 * n] yy
en el intervalo cerrado [-3 * n, 3 * n].fuente
Retina , 234 bytes
Toma entrada en unario.
Cada línea debe ir a su propio archivo y
#
debe cambiarse a nueva línea en el archivo. Esto no es práctico, pero puede ejecutar el código tal como está en un archivo con la-s
bandera, manteniendo el#
marcadores y quizás cambiándolos a nuevas líneas en la salida para facilitar su lectura si lo desea.El código tiene una mínima complejidad regex. Los pasos principales en la generación son los siguientes:
G
línea y la primeraB.Y
línea (delimitada por marcadoresijk
y letetros usados reales sonRPO
).G
línea superior con un espacio más, menos una G hasta que solo haya una G.B.Y
línea con un espacio de más y punto, un signo menosB
yY
hasta que no hayaB
eY
izquierda.q
). Mantenemos un marcador (w
) en el medio.RPO
aGBY
si están antes del marcador.Los resultados después de cada uno de los puntos anteriores (delimitados por
=
's) para la entrada1111 (unary 4)
:fuente
JavaScript ( ES6 ) 228
Construcción línea por línea. Increíblemente largo en comparación con @ Sp3000 que hace lo mismo.
Usando la cadena de plantilla para guardar 3 bytes más para las nuevas líneas. Todas las nuevas líneas son significativas y contadas.
fuente