O jogo de damas chinesas é jogado em um tabuleiro com espaços na forma de uma estrela de seis pontas:
Podemos criar uma representação em ASCII deste quadro, usando .
pontos vazios e as letras GYORPB
dos seis locais iniciais coloridos:
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 torná-lo mais interessante, também podemos alterar o tamanho. Mediremos o tamanho de uma placa pelo comprimento lateral de seus locais de partida triangulares: a placa acima é do tamanho 4.
Como é realmente difícil digitar tudo isso à mão, vamos escrever um programa (ou função) para fazer isso!
Detalhes
Seu código deve ter um número inteiro positivo representando o tamanho do quadro, via STDIN, ARGV ou argumento de função. Envie o padrão quadriculado para STDOUT (você pode retorná-lo como uma sequência alternadamente, se o envio for uma função).
A saída deve
- não tem espaços à direita, ou
- tenha espaços à direita exatamente o suficiente para preencher o padrão em um retângulo perfeito de largura 6 * N + 1.
A saída pode opcionalmente ter uma nova linha à direita. Nenhum outro espaço em branco extra (à esquerda, à direita) é permitido.
Exemplos
Tamanho 1:
G
B . . Y
. . .
P . . O
R
Tamanho 2:
G
G G
B B . . . Y Y
B . . . . Y
. . . . .
P . . . . O
P P . . . O O
R R
R
Tamanho 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
Pontuação
Este é o código-golfe : o código mais curto em bytes vence.
Respostas:
Ruby,
141127Retorna uma string retangular
Ungolfed in program program
fonte
Python 2, 140 bytes
Não é ótimo, mas aqui está o meu lance inicial.
As regras de espaço em branco adicionavam muitos bytes. Para comparação, aqui está um programa Python 3 de 120 bytes, que só está correto visualmente e não segue as regras de espaço em branco:
E aqui está minha tentativa Python 3 recursiva de 149 bytes, um pouco mais longa:
fonte
Python 2, 152
Esta é, em retrospecto, a abordagem errada para o Python, mas estou postando aqui caso alguém possa usá-lo. Em vez de explicar essa bagunça de código, tentarei dizer a idéia por trás disso.
A ideia é a utilização de coordenadas triangulares , em que a estrutura triangular corresponde ao número inteiro triplos
(a,b,c)
coma+b+c=0
.(Aqui, os pontos da treliça são desenhados como hexágonos.)
Podemos converter coordenadas cartesianas em triangulares como
observando isso
x
ey
deve ter a mesma paridade; caso contrário, não é quadriculado e devemos imprimir um espaço.Em coordenadas triangulares, as linhas delimitadoras da estrela de seis lados têm equações:
a==n, b==n, c==n, a==-n, b==-n, c==-n
.Assim, podemos determinar em que região estamos e por que
[a,b,c,-a,-b,-c]
são maiores quen
.O retângulo delimitador exige que façamos isso
x
no intervalo fechado [-2 * n, 2 * n] ey
no intervalo fechado [-3 * n, 3 * n].fonte
Retina , 234 bytes
Recebe entrada em unário.
Cada linha deve ir para seu próprio arquivo e
#
deve ser alterada para nova linha no arquivo. Isso é impraticável, mas você pode executar o código como um arquivo com a-s
bandeira, mantendo os#
marcadores e talvez alterando-os para novas linhas na saída para facilitar a leitura, se desejar.O código possui complexidade de regex mínima. As principais etapas da geração são as seguintes:
G
linha e a primeiraB.Y
linha (delimitadas por marcadoresijk
e letetrs reais usadosRPO
).G
linha superior com um espaço positivo, menos um G até que haja apenas um G.B.Y
linha com um espaço de mais e ponto, menos umB
eY
até que não hajaB
eY
esquerda.q
). Mantemos um marcador (w
) no meio.RPO
paraGBY
se estiverem antes do marcador.Os resultados após cada um dos pontos acima (delimitados por
=
's) para a entrada1111 (unary 4)
:fonte
JavaScript ( ES6 ) 228
Construção linha por linha. Incrivelmente longo comparado ao @ Sp3000 que faz o mesmo.
Usando a sequência de modelos para salvar mais 3 bytes para novas linhas. Todas as novas linhas são significativas e contadas.
fonte