Introdução
É assim que um tabuleiro de xadrez se parece.
Você pode ver que a1
é um quadrado escuro . No entanto, b1
é um quadrado claro .
A tarefa
O desafio é, dado dark
, light
ou both
, gerar toda a escuridão , luz ou todos os quadrados com um separador (como um espaço em branco ou uma nova linha). A ordem de todos os quadrados não importa .
Casos de teste
Input: dark
Output: a1 a3 a5 a7 b2 b4 b6 b8
c1 c3 c5 c7 d2 d4 d6 d8
e1 e3 e5 e7 f2 f4 f6 f8
g1 g3 g5 g7 h2 h4 h6 h8
Input: light
Output: a2 a4 a6 a8 b1 b3 b5 b7
c2 c4 c6 c8 d1 d3 d5 d7
e2 e4 e6 e8 f1 f3 f5 f7
g2 g4 g6 g8 h1 h3 h5 h7
Input: both
Output: a1 a2 a3 a4 a5 a6 a7 a8
b1 b2 b3 b4 b5 b6 b7 b8
c1 c2 c3 c4 c5 c6 c7 c8
d1 d2 d3 d4 d5 d6 d7 d8
e1 e2 e3 e4 e5 e6 e7 e8
f1 f2 f3 f4 f5 f6 f7 f8
g1 g2 g3 g4 g5 g6 g7 g8
h1 h2 h3 h4 h5 h6 h7 h8
Nota: Eu pretendi a saída, mas isso não é necessário .
Isso é código-golfe , então a submissão com a menor quantidade de bytes ganha!
a2a4a6...
ficaria bem?[[a2,a4,a6,a8],[...]...]
light
,dark
eboth
tem que ser entrada comoString
s ou podem ser representados através de qualquer tipo de dados?Respostas:
Pitão,
2221 bytes-1 byte por @ Sp3000
Sob a função
%Chz3
, osdark
hashes são 1,light
0 eboth
2. Se tomarmos a paridade da soma dos ords de um quadrado de xadrez (ou seja,a1
->[97, 33]
->(97 + 33)%2
=0
, os quadrados escuros vão para 0 e a luz para 1 Isso nos permite filtrar pela desigualdade.Experimente aqui .
fonte
fn%Chz3%sCMT2sM*<G8S8
Utilitários Bash + GNU, 74
{a..h}{1..9}
é uma expansão de bash brace que produz todas as coordenadas para uma placa 8x8, além de uma coluna extra9
. Isso é importante porque torna o comprimento da linha ímpar, o que permite o efeito tabuleiro de damas.O
printf
simplesmente formatos de cada coordenada, um por linha.A expressão sed construída exclui todas as
x9
coordenadas e imprime linhas pares ou ímpares ou as duas linhas de entrada, de acordo com a entrada do script.fonte
JavaScript (SpiderMonkey 30+),
90858382 bytesRetorna uma sequência de quadrados separados por vírgula. Versão compatível para 99 bytes:
Funciona enumerando todos os 64 nomes de quadrados e analisando-os na base 19 para ver se são módulo claro ou escuro 2.
fonte
JavaScript (ES6), 82
87 98Função anônima retornando uma sequência de quadrados separada por espaço.
TESTE
fonte
Lote, 192 bytes
fonte
Pitão,
4839 bytesExperimente aqui!
Ainda mais do que a outra solução Pyth, mas acho que não consigo superar isso com meu algoritmo.
Explicação
Primeiro, geramos uma lista de todos os quadrados no quadro e atribuímos a ele
Y
. Em seguida, filtramos esta lista para que apenas os quadrados de luz permaneçam e atribuímos essa listaJ
. Depois disso, avaliamos a entrada e imprimimos:Y
se a entrada foiboth
J
se a entrada foilight
Y-J
se a entrada foidark
Determinar se um quadrado é claro funciona da seguinte maneira:
18
paraa8
etc.x%2 == y%2
)fonte
Python 2,
737170 bytesAinda estou um pouco confuso se as funções estão bem para a pergunta, já que o desafio menciona um "separador", mas como existem muitas outras submissões de funções, eu fiz o mesmo.
Semelhante à resposta de Erwan, mas com
muitomais Python 2-ness.(-2 bytes graças a @xnor)
fonte
s=="dark"
es[0]=="d"
mas para minha defesa no meu muito primeira tentativa eu useis,*_=s
e 4cmp
ord(s[_])&_
ouord(s[_])/_
.%
:) Obrigado!PHP,
132126120108106 bytesEle percorre as colunas (0-7) e as linhas (1-8) e verifica se a soma de ambas é ímpar / par.
Testado com PHP 5.6.4, execute:
php -d error_reporting=30709 -r '<CODE>' {dark|light|both}
fonte
$s==2
por$s-1
. Se s = 2 $, e -1, é um, o qual é truthy e vai continiue$c=0
pode ser$c
, ele vai dar um monte de avisos, mas pelo menos para escuro que funciona bem$s-1
não funciona, mas deveria. Obrigado por esta ótima idéia! Vou depurar isso mais tarde.$c
variável indefinida ? Isso soa um pouco estranho e inválido. Ou não?Vitsy ,
9082 bytesExplicação da primeira linha:
Explicação da segunda linha:
Haverá novas linhas de bônus para 'escuro' e 'ambos'. Requer que apenas 'escuro', 'ambos' ou 'claro' sejam inseridos.
Experimente online!
fonte
PowerShell v3 +,
142129 bytesRecebe entrada
$a
e define duas variáveis, se queremos gerar$d
arca ou$l
quadrados à direita com base na primeira letra da entrada.Então, nós loop sobre
a-h
e1-8
e usa o mesmo truque que em Determinar a cor de um quadrado de xadrez para analisar se é um quadrado claro ou escuro (ajuste variável ajudante$q
no primeiro teste) e adicionar esse quadrado ao gasoduto se for o caso. Após a execução, os elementos no pipeline são gerados um por linha.Requer v3 ou mais recente para o
-in
operador.Editar - salvou 13 bytes, eliminando
switch
e alterando a ordem dos testes de igualdadefonte
Jolf, 48 bytes
É tudo grego para mim ¯ \ _ (ツ) _ / ¯ Esta é uma transpilação da excelente resposta de edc65.
fonte
Perl, 69 + 3 = 72 bytes
Para ser executado
perl -p
, para o qual eu adicionei 3 bytes.Versão com menos golfe (um pouco diferente, pois o operador de carrinho de bebê dificulta a formatação):
A versão golfed usa
"@{[]}"
; a versão comentada usa@a=...; "@"
para que o código comentado ainda possa ser executado.fonte
map$l.$_,1..8
-1grep$i=!$i||$b,map
again -1C ++, 132 bytes
Recebe entrada por linha de comando. Usa ponteiro / módulo vodu para a condição de impressão.
fonte
n
loop seja necessário. Acho aninhado para loops parai
ej
iria aparar alguns bytes fora. A(i+j)%2
abordagem é realmente inteligente. Eu não tinha pensado nisso.(i//8+i%8)%2
é o mesmo que(i//8+i)%2
para que você possa ganhar alguns bytes se você remover a definição dej=n%8
Java, 143
Ei, não é a resposta mais longa :)
A entrada é aceita como um argumento da linha de comandos.
fonte
PHP,
998279767473 bytesUsa codificação ISO 8859-1.
Execute assim (
-d
adicionado apenas para estética):Funciona assim: a variável
$x
é incrementada de 1 a 71, os números correspondem às células, como mostrado abaixo.Portanto,
$x modulo 9
gera o número da coluna e$x / 9
o número da linha, que eu converto em uma letra usandochr
. O código$z<c|$z>k^$x&1
geratrue
para inputboth
($z<c
) e, no caso delight
oudark
apenas para as células pares ou ímpares, respectivamente ($z>k ^ $x&1
). O resultado dessa expressão determina se as coordenadas da célula serão ou não impressas. Finalmente, se$x modulo 9
resultar0
, pulo essa célula inexistente.1817 bytes (corrigido um bug) tendo apenas 1 loop, convertendo o número em um caractere, e não o contrárioxor
.125
a expressão$x/9+69.9
para obter o número de linha correto antes de converter para um caractere~ß
para gerar um espaçofonte
JavaScript ES6,
187160159 bytesProvavelmente estou sentindo falta de algo dolorosamente óbvio.Ah bem. Não ter que achatar a matriz ajuda.Retorna uma matriz 2D.
Experimente aqui:
Mostrar snippet de código
fonte
Ruby, 85
Eu acho que existem maneiras mais curtas sobre isso, mas esse é um uso fofo
.upto
.fonte
R,
12994 bytesEu sabia que poderia gerar melhor o quadro :). Essencialmente, isso cria uma placa invertida, filtrando as referências da grade onde a sombra não corresponde à entrada. A saída é separada por espaço.
Ungolfed
Teste
fonte
Oracle SQL 11.2,
192180 bytesSem golfe
A visualização v gera as coordenadas de cada quadrado. Se a soma das coordenadas for uniforme, o quadrado será preto, caso contrário, será branco.
fonte
Ferrugem,
263259244 BytesForma expandida:
fonte
MATL , 31 bytes
Experimente online!
fonte
CJam, 29
Apenas uma solução rápida e suja: p
Experimente online
Explicação:
fonte
Haskell,
1331161051009891 bytesEsta é a minha primeira tentativa de jogar golfe em Haskell.
Com a ajuda de Michael Klein, conseguimos obter menos de 100 caracteres!
fonte
c>0
parac==1
ec<1
parac==0
? Salva dois bytes.f r=[[[a,b]|a<-['a'..'h'],b<-['1'..'8']]!!i|i<-[0..63],even i||r<"l",odd i||r!!0/='d']
i
não nos dão listras diagonais. Alguns resolvem isso comi+i`div`8
(comox+y
). Outros começam com['1'..'9']
e, em[0..71]
seguida, retêm apenas osi`mod`9<8
resultados posteriormente, por 96 bytes. No entanto, esse híbrido de nossas duas abordagens se sai bem em 91 bytes:l=[0..7];f r=[["abcdefgh"!!x,"12345678"!!y]|x<-l,y<-l,odd(x+y)||r<"l",even(x+y)||r!!0/='d']
Mathematica 133 bytes
Método 1 : 108 bytes. Isso constrói o quadro como uma tabela, com rótulos em cada célula e retorna diagonais ou faixas claras ou escuras, conforme necessário.
Método 2 : 133 bytes. Cria uma matriz e seleciona de acordo com a natureza ímpar da soma do número da linha + número da coluna de cada célula.
fonte
JS, 197 bytes
fonte
Python (3.5),
1061009692 bytesuse o truque do MegaTom
(i+j)%2
para ganhar 6 bytesExperimente em repl.it
Resultados
Versão anterior
fonte
C ++, 119 bytes
Baseado no truque da MegaTom.
fonte
C (gcc) , 112 bytes
Experimente online!
Se a == 1, um quadrado será sempre preto se a "ímparidade" da linha e coluna for a mesma, ou seja, ambas são ímpares ou ambas são pares. O oposto é verdadeiro para quadrados brancos, onde linha e coluna sempre diferem em termos de singularidade.
Depois disso, é apenas uma questão de combinar loops de linha e coluna, além de consultar uma tabela de precedência do operador até que um nível suficiente de incompreensibilidade seja alcançado.
fonte