Tarefa:
Considere o problema: "dado um tabuleiro de xadrez com um quadrado faltando, corte-o em 21 L-triominos". Existe uma prova construtiva bem conhecida de que isso pode ser feito para qualquer tamanho quadrado de tabuleiro de xadrez com potência de dois. Ele funciona dividindo o tabuleiro de xadrez em um tabuleiro de xadrez menor com o buraco e um grande triomino e, em seguida, observando que esse triomino pode ser cortado recursivamente em quatro triominos.
Nesta tarefa, você deve cortar um tabuleiro de xadrez 8x8 em tri-dominó em forma de L e depois colori-lo com quatro cores, de modo que dois tri-dominó adjacentes tenham a mesma cor.
Especificação:
Sua entrada é a posição do furo, fornecida como um par de números inteiros. Você pode escolher qual é o índice da coluna e qual é o índice da linha. Você pode escolher se cada um começa em 0 ou em 1 e longe de qual canto eles aumentam. Você pode solicitar A..H como a primeira coordenada em vez de 0..7 ou 1..8. Você também pode aceitar as duas coordenadas agrupadas em um único número inteiro 0..63 ou 1..64 em ordem lexicográfica (linha principal ou coluna principal, da esquerda para a direita ou da direita para a esquerda, de cima para baixo ou de baixo para cima). Você pode escrever um programa completo ou uma função.
Você pode imprimir a lado a lado como ASCII, como ASCII colorido ou como primitivas gráficas. Se você escolher a saída ASCII, poderá escolher quatro caracteres ASCII imprimíveis para representar as quatro cores. Se você escolher ASCII colorido, poderá escolher quatro caracteres ASCII imprimíveis ou apenas um caractere que não seja o espaço. O furo deve ser representado pelo caractere de espaço. Se um dos seus personagens for o personagem do espaço, nenhum triomino adjacente ao buraco ou na borda do tabuleiro pode ser dessa cor.
Se você escolher saída ASCII colorida ou gráfica, poderá escolher quatro cores dentre # 000, # 00F, # 0F0, # 0FF, # F00, # F0F, # FF0, #FFF ou seus equivalentes mais próximos disponíveis em seu ambiente. Se você escolher saída gráfica, suas primitivas gráficas deverão ter quadrados preenchidos com tamanho mínimo de 32 x 32 pixels e separados por não mais de dois pixels de outra cor. Se o exposto acima exceder a resolução de tela do seu ambiente, o requisito de tamanho mínimo será reduzido para o maior tamanho quadrado que ainda cabe na tela.
Você pode escolher qualquer peça válida do tabuleiro de xadrez fornecido. Você pode escolher qualquer quatro cores do ladrilho que escolher. Sua escolha de quatro cores deve ser a mesma em todas as saídas, mas você não precisa usar todas as cores em todas as saídas.
Exemplos:
Possível saída para entrada = [0, 0] (canto superior esquerdo)
#??##??
##.?#..?
?..#??.#
??##.?##
##?..#??
#.??##.?
?..#?..#
??##??##
Outra saída possível do mesmo programa (entrada = [0, 7]):
??#??#?
?##?##??
..xx..xx
.?x#.?x#
??##??##
..xx..xx
.?x#.?x#
??##??##
Um programa diferente também pode produzir, para a entrada de "D1" (observe a orientação não padrão, mas permitida do tabuleiro de xadrez),
AABBCCAA
ACBACBAC
CCAABBCC
ABBAADD
AABDABDC
BBDDBBCC
BABBACAA
AABAACCA
fonte
Respostas:
JavaScript (ES6),
184 ... 171163 bytesRecebe a entrada como0≤x≤7 0≤y≤7 0 1 2
(x)(y)
, com e . Saída como uma sequência de caracteres com 3 cores (marcadas como , e ).Experimente online!
Método
Trabalhamos em uma matriz de triominoes:4×4
Cada triomino é um dos seguintes:
A configuração inicial da matriz é a seguinte:
Alternamos as duas primeiras cores, como em qualquer tabuleiro de xadrez, o que fornece:
Os próximos passos são:
Por exemplo, supondo que o furo esteja localizado em , isso fornece:(3,0)
E, nesse caso, a matriz final é:
Comentado
Saída gráfica
Clique na imagem para definir a posição do furo.
Mostrar snippet de código
fonte
Carvão , 78 bytes
Experimente online! Link é a versão detalhada do código. Saídas usando
#$%
caracteres. Explicação:Insira as coordenadas do quadrado em branco.
Saída uma sequência compactada. Ele contém novas linhas. Assim, para evitar interromper o fluxo dessa explicação, você encontrará a sequência no final da resposta.
Se qualquer uma das coordenadas for maior que
3
, lembre-se desse fato e subtraia a coordenada de 7.Pule para o
%
quadrado mais próximo de se no lado esquerdo superior%
e substitua-o por um#
ou$
conforme apropriado. (Mas isso será substituído pelo espaço em branco se já estiver neste quadrado.)Apague o quadrado nas coordenadas reduzidas e depois reflita a saída conforme necessário para colocar o espaço em branco na posição original.
Tentei começar com o quadrado de
%
s no centro e trabalhar até as coordenadas desejadas, mas isso levou 90 bytes.fonte