Vi isso em um desafio de PHP. O objetivo é fazer um tabuleiro de xadrez com 64 quadrados (8 * 8) com a quantidade mínima de código. Simples o suficiente, eu criei o meu em PHP em 356 bytes (não é impressionante, eu sei) e gostaria de ver algumas outras abordagens. Isso pode ser feito no idioma de sua escolha, desde que você mantenha a baunilha, portanto, não importa. A menor contagem de bytes vence.
A saída deve ficar assim:
E meu código:
<table><?php
$c='black';function p($c,$n){echo'<td style="width:50px;height:50px;background:'.$c.'"></td>';if($n==1){echo"<tr>";}}for($i=1;$i<=64;$i++){if($i%8==0&&$c=="black"){$c="white";$n=1;}elseif($i%8==0&&$c=="white"){$c="black";$n=1;}elseif(isset($n)&&$n==1){$n=0;}elseif($c=="black"){$n=0;$c="white";}elseif($c=="white"){$n=0;$c="black";}p($c,$n);}
Ou legível:
<table><tr>
<?php
$color = 'black';
function printcolor($color, $nl) {
echo '<td style="width:50px; height:50px; background:' . $color . '"></td>';
if ($nl == true) {
echo "</tr><tr>";
}
}
for ($i=1; $i<=64;$i++) {
if ($i % 8 == 0 && $color == "black") {
$color = "white";
$nl = true;
} elseif ($i % 8 == 0 && $color == "white") {
$color = "black";
$nl = true;
} elseif (isset($nl) && $nl == true) {
$nl = false;
} elseif ($color == "black") {
$nl = false;
$color = "white";
}
elseif ($color == "white") {
$nl = false;
$color = "black";
}
printcolor($color, $nl);
}
Editar:
Desculpe, não fui muito específico no começo:
- Os quadrados devem ter 50px * 50px, exceto para imagens vetoriais.
- O formato ou tamanho da saída não é relevante nem precisa ser uma imagem.
- Para fins de avaliação, a saída deve estar visível, como em um arquivo de imagem ou em uma captura de tela
- Nenhuma biblioteca escrita após o lançamento do desafio
code-golf
graphical-output
Bruno
fonte
fonte
Respostas:
Oitava,
2018 bytesObrigado a @Bruno por cortar 2 bytes.
Resultado:
Esta resposta usa uma técnica encontrada aqui . Ele também conta com o dimensionamento automático de imagens no Octave, dependendo do tamanho da janela da figura.
fonte
vim,
47464443riscado 44 ainda é regular 44 ...
Saídas no formato NetPPM (PBM):
fonte
<C-p>
vim sem ter começado a digitar uma palavra ... isso é realmente útil!CSS, 244 bytes
Mostrar snippet de código
Explicação: Um gradiente linear diagonal de 100x100px é criado com quatro paradas para que a maior parte do gradiente seja transparente, exceto por dois cantos triangulares de 50px. (Veja o trecho abaixo). A adição de um segundo gradiente com um deslocamento de 50x50px preenche as metades ausentes dos quadrados. Aumentar o tamanho do corpo permite que o padrão resultante se repita para preencher todo o tabuleiro de xadrez.
Mostrar snippet de código
fonte
}
.html{background:#fff}
? Por padrão, 99% dos navegadores definem o plano de fundo para branco, depoisMathematica, 34 bytes
A saída é uma imagem vetorial e é cercada em um quadro.
Em vez de posicionar corretamente 32 retângulos, podemos apenas gerar uma matriz binária e
ArrayPlot
trabalhar para nós:fonte
GenerateChessBoardWithColorsAsParameters[ColorBlack, ColorWhite, 8, 8, 50, 50]
não funciona? ;)Mathematica,
817255 bytesA imagem é da avaliação de uma versão anterior, mas ainda parece a mesma.
fonte
Oitava, 48 bytes
Isso funciona exatamente da mesma forma que minha resposta do Matlab , mas não existe
spiral
no Octave. Em vez disso, usamos um recurso que o Matlab não possui: Podemos usar a atribuição det
já como uma expressão e, posteriormente, usart
novamente na mesma expressão.(Esta é a versão redimensionada, não quero bagunçar as respostas aqui =)
fonte
Pure Bash (sem utilitários externos), 133
Eu vi o comentário da @ Doorknob como um desafio. É um pouco longo, mas aqui vai:
A saída está no formato .txt do Imagemagick . Observe que isso é puro Bash. Nem o Imagemagick nem quaisquer outros utilitários externos são gerados para gerar essa saída. No entanto, a saída pode ser redirecionada para um arquivo .txt e visualizada com o
display
utilitário ImageMagick :Esse formato de imagem é bom porque não é apenas texto puro, é pouco mais do que uma lista de todos os pixels (x, ye valor da cor), um por linha. É uma questão bastante simples derivar todos os valores de pixel aritmeticamente em um grande loop.
Resposta anterior, 167
A saída está no formato de arquivo de imagem de texto X_PixMap , que também pode ser visualizado com o
display
utilitário ImageMagick .Observe que tirei o máximo do formato XPM que consegui e que
display
ainda o aceitaria. Consegui tirar todo o clichê c, com exceção das"
aspas duplas em torno de cada linha. Não faço ideia de que outros utilitários - se houver - aceitarão isso.fonte
PowerShell + navegador de sua escolha,
149143 bytesA incapacidade de usar importações é realmente difícil, pois todas as chamadas GDI (ou seja, as coisas que o PowerShell usa para desenhar) estão ocultas atrás das importações no .NET ...
Editar - salvou seis bytes graças a @NotThatCharles
Isso usa dois for-loops de
1..8
para gerar uma grande seqüência de caracteres HTML, semelhante ao exemplo PHP fornecido, e enviá-la para o pipeline. Cada vez que calculamos se devemos acrescentar;background:#000
os fundos pretos, assumimos nossa posição atual no módulo 2 do quadro.Para usar, redirecione a saída para o arquivo de sua escolha (por exemplo, com algo parecido
> chessboard.htm
) e, em seguida, inicie-a no navegador de sua escolha. Para a captura de tela abaixo, usei "c.htm" e Firefox.fonte
white
eblack
pode ser#fff
e#000
... mas por que se preocupar em especificar branco?(";background:#000","")[($a+$_)%2]
vez disso.PHP + CSS + HTML, 136 bytes
Levando a mesa a um nível mais alto:
Ele gera o seguinte código:
Ele depende muito da gentileza e do CSS dos navegadores.
fonte
++$i<9
por@++$i<9
. Além disso, para que ele funcione sem<?php
, é necessário ter a diretivashort_open_tags=On
, que é padrão em alguns ambientes. Leia mais em stackoverflow.com/a/2185331/2729937Geléia, 26 bytes
Como o Jelly não tem suporte para imagens incorporadas, imprimimos uma imagem PPM.
Experimente online!(placa menor para velocidade, PPM bruto)
Resultados
Como funciona
Versão não concorrente (24 bytes)
O mais novo intérprete Jelly que antecede este post não foi vetorizado
x
corretamente. Com a versão mais recente, 2 bytes adicionais podem ser salvos.A única diferença é que
x50
produz uma lista simples (com todos os elementos originais repetidos 50 vezes),F
não sendo mais necessário.fonte
;
...;)MATL , 11 (27) bytes
Isso produz a figura a seguir. Não possui um tamanho intrínseco; é dimensionado automaticamente, dependendo do tamanho da janela da figura. Isso parece ser permitido pelo desafio.
Explicação
Se o dimensionamento automático não for permitido:
produz a figura a seguir com quadrados de 50x50 pixels
Explicação
fonte
Pitão,
2826 bytesExplicação
Equivalente em Python
Experimente aqui (apenas os valores das cores)
Saída:
fonte
Matlab, 47 (24) bytes
Isso funciona exatamente da mesma forma que a minha resposta do Oitava , mas pude usar
spiral
qual salvou um byte.spiral(n)
cria umanxn
matriz e a preenche em espiral com os primeirosn^2
números inteiros.Se vectorgraphics for permitido, poderíamos fazê-lo em 24 bytes:
(Esta é a versão redimensionada, não quero bagunçar as respostas aqui =)
fonte
FFmpeg, 78
82 100bytesFinalmente cheguei a limpar o quadro.
Mais velhos :
Sai com erro, mas depois de produzir a imagem abaixo.
(a placa coletou um pouco de poeira)
fonte
CJam, 27 bytes
Experimente online!(placa menor para velocidade, PPM bruto)
Resultados
Como funciona
fonte
HTML com utf-8 - 66b
▚ é utf curto-direto para a entidade & # 9626;
Caractere Unicode 'QUADRANTE SUPERIOR ESQUERDO E INFERIOR' (U + 259A)
bobo me, estava procurando uma solução de 1 utf-8 char - teria sido ... 1b!
fonte
▞
para que o quadrado superior esquerdo fique branco como em um tabuleiro de xadrez padrão. Além disso, use em<pre>
vez de<div>
para que você possa usar novas linhas em vez de<br>
.▚
número de bytes parece errado, deve ter 98 bytes, pois conta com 3 bytes usando a codificação UTF-8. No futuro, você poderá usar isso para verificar o seu UTF-8 Byte CountPHP,
166158155 bytesFunciona no PHP 7.0.2 (tags curtas ativadas) e no Chrome 48.0.2564.97 m
fonte
bgcolor=0
para gerar o plano de fundo preto. Isso deve economizar uma tonelada de bytes! E, em vez de$v%2==0
, use$v&1
, o que deve economizar alguns bytes.PHP> = 5.4,
175159149116 116 bytesNotas
fonte
<table><tr><?php for(;++$i<65;){echo'<td style="width:50px;height:50px;background:#'.(($i+$m)%2?'000':'').'"></td>';if($i%8<1){echo"</tr><tr>";$m=!$m;}}
TR
.++$i<65
por@++$i<65
, pois você está preocupado com os avisos. Isso significa que você pode reduzir$m=$i=0
para apenas$m=0
, economizando 2 bytes. Em vez deecho 'a'.'b'.'c';
, você pode fazerecho 'a','b','c';
. Isso significa que vocêecho
podeecho'<td style="width:50px;height:50px;background:#',($i+$m)%2?'':'000','">';
economizar mais 2 bytes. Além disso, os atributos HTML não requerem aspas. Remova-os e saiba 2 bytes. Além disso, há umbgcolor
atributo muito mais curto , que reduz mais bytes! Você pode usarprint()
afor
para salvar ainda mais bytes!($i+$m)%2
por$i+@$m&1
, o que me permitiu remover isso$m=0
. Adiante, consegui remover o seuif
e substituí-lo por uma operação trenária. Para economizar ainda mais , removi o seustyle
e adicionamos as propriedadeswidth
eheight
. Para obter ainda mais para o lado hacky, eu descobri que o Chrome 48.0.2564.103 m usa preto se a cor de fundo é0
, usando a propriedadebgcolor
. Isso me permitiu reduzir ainda mais! Mais reduções é melhor!JavaScript, 150
Definitivamente, isso pode ser jogado no golfe. Cria HTML.
fonte
iKe , 24 bytes
O núcleo da técnica é gerar uma lista de coordenadas x, divmodá-las e, em seguida, obter um produto cruzado de igualdade para gerar um bitmap apropriado. Usando exemplos menores para fins ilustrativos:
tente aqui . Tecnicamente, o iKe funciona em uma tela lógica de 160 x 160 pixels, mas no modo de tela cheia (o padrão ao seguir um link salvo), isso é aumentado em 3x. Eu acho que isso ainda está seguindo o espírito da pergunta, pois o programa poderia montar um bitmap muito maior com a mesma contagem de caracteres; tudo se resume a uma limitação de exibição arbitrária.
Atualizar:
O iKe não foi projetado principalmente para golfe, mas a codificação ao vivo ainda se beneficia de concisão e padrões saudáveis. Como resultado de mexer com esse problema, decidi permitir que ele use uma paleta padrão, se nenhuma for fornecida. Agora, essa solução específica pode ser expressa com:
Salvando (inelegível) 3 bytes.
fonte
Rubi com sapatos, 97 caracteres
Saída de amostra:
fonte
Lua + LÖVE,
138113112106 caracteresSaída de amostra:
fonte
//
operador de divisão inteira, mas aparentemente ainda não existe um LÖVE construído com um LuaJIT apresentando-o. ☹GIMP, 539 bytes
Esquema Ungolfed script-fu:
No modo de lote, crie uma imagem em branco, crie uma seleção retangular de 50x50, preencha-a e mova-a repetidamente pela imagem, preenchendo quadrados. Salve
c.png
e saia.Saída:
fonte
J,
3331 bytesEu usei um truque com binário.
... porque 43605 no binário é 1010101001010101 (usamos
#:
primitivo para obtê-lo). Primitivo$
forma essa matriz de dígitos binários em uma matriz especificada com as dimensões8 8
. Eviewmat
é apenas uma biblioteca do sistema.A janela é totalmente redimensionável.
Obrigado a @FrownyFrog por reduzi-lo para:
fonte
viewmat 8$#:170 85
é 1 byte mais curtoviewmat#:8$170 85
Excel VBA, 82 bytes
Função de janela imediata VBE anônima que não recebe entrada e gera um tabuleiro de damas para o intervalo
A1:H8
no objeto ActiveSheetEssa função funciona criando primeiro 4 colunas pretas no intervalo
B1:B8,D1:D8,F1:F8,H1:H8
e depois compensando a coloração nas linhas2,4,6 and 8
à esquerda por uma célula.Saída de amostra
fonte
Perl 5-80
Gera um arquivo .PBM:
fonte
PowerShell + GDI, 346 bytes
(novas linhas contam o mesmo que ponto e vírgula, portanto, novas linhas para facilitar a leitura)
Ao contrário da minha outra resposta , esta usa os assemblies .NET para chamar GDI + chamadas de função . Curiosamente, é cerca de duas vezes o comprimento.
As duas primeiras linhas carregam os conjuntos
System.Windows.Forms
eSystem.Drawing
. O primeiro é usado para a janela literal e a tela nela, o segundo é usado para o objeto de desenho (neste código, um pincel) que cria os gráficos na tela.Em seguida, criamos nosso formulário
$f
com a próxima linha e definimos seuwidth
eheight
para ser450
. Observe que não50*8
, pois esses números correspondem à borda da borda da janela de formulários, incluindo a barra de título, o botão Fechar etc.A próxima linha cria nossa tela
$g
chamando o construtor vazio. Por padrão, a parte superior esquerda da área não sistêmica do formulário é igual0,0
e aumenta para a direita e para baixo, perfeita para nossas necessidades.A próxima linha é a chamada real que desenha os gráficos, com
$f.add_paint({...})
. Construímos as chamadas gráficas dando um loop duplo para0..7
e carregando uma variável auxiliar$y
através de cada loop externo. Cada loop interno, dizemos à nossa tela.FillRectangle(...,...)
para desenhar nossos quadrados. O primeiro parâmetro constrói um novoSolidBrush
com uma cor com base em onde estamos no quadro. Outras opções aqui podem ser uma hachura, um gradiente etc. O segundo parâmetro é um novoRectangle
objeto que começa no x especificado$_*50
e$y*50
coordena e se estende para50
cada direção. Lembre-se de que0,0
é o canto superior esquerdo.A linha final apenas exibe a saída com
.showDialog()
.Observe que, uma vez que estamos criando um objeto de formulário , e o PowerShell tem tudo a ver com o pipeline, o fechamento do formulário pop-up passará um
System.Enum.DialogResult
objetoCancel
, pois é tecnicamente o que o usuário fez. Como não estamos capturando ou fazendo algo com esse resultado, a palavraCancel
será exibida para STDOUT quando o programa for concluído, como foi deixado no pipeline.fonte
SELECT. ,
88448278 bytesClaro que é longo, mas as duas primeiras versões que geramos para esta tarefa tinham o dobro do tempo.
Saída:
Como funciona:
Aqui está o programa usado para gerá-lo:
Em outras palavras, o loop n de 0 a 63, desenhando um quadrado em (n% 8-4) + (n // 8-4) i se (-1) ^ (n // 8 + n% 8) não for positivo.
fonte
JavaScript (ES6), 147
fonte
Python, 57 bytes
c
is a line of 50 white and 50 black pixels,200*c
is a row with a white in the front,200*c[::-1]
the reverse.Output as PPM, usage:
fonte