Seu desafio é escrever um programa que produza a cor de um determinado quadrado no tabuleiro de xadrez. É assim que um tabuleiro de xadrez se parece:
Você pode ver que o quadrado a1 é escuro e h1 é um quadrado claro. Seu programa precisa produzir dark
ou light
, quando receber um quadrado. Alguns exemplos:
STDIN: b1
STDOUT: light
STDIN: g6
STDOUT: light
STDIN: d4
STDOUT: dark
As regras:
- Você precisa fornecer um programa completo que use STDIN e use STDOUT para produzir
dark
oulight
. - Suponha que a entrada seja sempre válida (
[a-h][1-8]
) - Isso é código-golfe , e a menor quantidade de bytes ganha!
Placar
var QUESTION_ID=63772,OVERRIDE_USER=8478;function answersUrl(e){return"http://api.stackexchange.com/2.2/questions/"+QUESTION_ID+"/answers?page="+e+"&pagesize=100&order=desc&sort=creation&site=codegolf&filter="+ANSWER_FILTER}function commentUrl(e,s){return"http://api.stackexchange.com/2.2/answers/"+s.join(";")+"/comments?page="+e+"&pagesize=100&order=desc&sort=creation&site=codegolf&filter="+COMMENT_FILTER}function getAnswers(){jQuery.ajax({url:answersUrl(answer_page++),method:"get",dataType:"jsonp",crossDomain:!0,success:function(e){answers.push.apply(answers,e.items),answers_hash=[],answer_ids=[],e.items.forEach(function(e){e.comments=[];var s=+e.share_link.match(/\d+/);answer_ids.push(s),answers_hash[s]=e}),e.has_more||(more_answers=!1),comment_page=1,getComments()}})}function getComments(){jQuery.ajax({url:commentUrl(comment_page++,answer_ids),method:"get",dataType:"jsonp",crossDomain:!0,success:function(e){e.items.forEach(function(e){e.owner.user_id===OVERRIDE_USER&&answers_hash[e.post_id].comments.push(e)}),e.has_more?getComments():more_answers?getAnswers():process()}})}function getAuthorName(e){return e.owner.display_name}function process(){var e=[];answers.forEach(function(s){var r=s.body;s.comments.forEach(function(e){OVERRIDE_REG.test(e.body)&&(r="<h1>"+e.body.replace(OVERRIDE_REG,"")+"</h1>")});var a=r.match(SCORE_REG);a&&e.push({user:getAuthorName(s),size:+a[2],language:a[1],link:s.share_link})}),e.sort(function(e,s){var r=e.size,a=s.size;return r-a});var s={},r=1,a=null,n=1;e.forEach(function(e){e.size!=a&&(n=r),a=e.size,++r;var t=jQuery("#answer-template").html();t=t.replace("{{PLACE}}",n+".").replace("{{NAME}}",e.user).replace("{{LANGUAGE}}",e.language).replace("{{SIZE}}",e.size).replace("{{LINK}}",e.link),t=jQuery(t),jQuery("#answers").append(t);var o=e.language;/<a/.test(o)&&(o=jQuery(o).text()),s[o]=s[o]||{lang:e.language,user:e.user,size:e.size,link:e.link}});var t=[];for(var o in s)s.hasOwnProperty(o)&&t.push(s[o]);t.sort(function(e,s){return e.lang>s.lang?1:e.lang<s.lang?-1:0});for(var c=0;c<t.length;++c){var i=jQuery("#language-template").html(),o=t[c];i=i.replace("{{LANGUAGE}}",o.lang).replace("{{NAME}}",o.user).replace("{{SIZE}}",o.size).replace("{{LINK}}",o.link),i=jQuery(i),jQuery("#languages").append(i)}}var ANSWER_FILTER="!t)IWYnsLAZle2tQ3KqrVveCRJfxcRLe",COMMENT_FILTER="!)Q2B_A2kjfAiU78X(md6BoYk",answers=[],answers_hash,answer_ids,answer_page=1,more_answers=!0,comment_page;getAnswers();var SCORE_REG=/<h\d>\s*([^\n,]*[^\s,]),.*?(\d+)(?=[^\n\d<>]*(?:<(?:s>[^\n<>]*<\/s>|[^\n<>]+>)[^\n\d<>]*)*<\/h\d>)/,OVERRIDE_REG=/^Override\s*header:\s*/i;
body{text-align:left!important}#answer-list,#language-list{padding:10px;width:290px;float:left}table thead{font-weight:700}table td{padding:5px}
<script src="https://ajax.googleapis.com/ajax/libs/jquery/2.1.1/jquery.min.js"></script> <link rel="stylesheet" type="text/css" href="//cdn.sstatic.net/codegolf/all.css?v=83c949450c8b"> <div id="answer-list"> <h2>Leaderboard</h2> <table class="answer-list"> <thead> <tr><td></td><td>Author</td><td>Language</td><td>Size</td></tr></thead> <tbody id="answers"> </tbody> </table> </div><div id="language-list"> <h2>Winners by Language</h2> <table class="language-list"> <thead> <tr><td>Language</td><td>User</td><td>Score</td></tr></thead> <tbody id="languages"> </tbody> </table> </div><table style="display: none"> <tbody id="answer-template"> <tr><td>{{PLACE}}</td><td>{{NAME}}</td><td>{{LANGUAGE}}</td><td>{{SIZE}}</td><td><a href="{{LINK}}">Link</a></td></tr></tbody> </table> <table style="display: none"> <tbody id="language-template"> <tr><td>{{LANGUAGE}}</td><td>{{NAME}}</td><td>{{SIZE}}</td><td><a href="{{LINK}}">Link</a></td></tr></tbody> </table>
Respostas:
GS2 ,
1715 bytesO código-fonte usa a codificação CP437 . Experimente online!
Verificação
Como funciona
fonte
Python 2,
4138 bytes3 bytes graças ao Mego para entrelaçamento de strings
Toma entrada como
"g6"
. Isso é claro e escuro entrelaçados.fonte
int(input(),35)
é a parte brilhante. Pensei no entrelaçamento de strings, mas seu método de entrada economiza mais bytes.Hexagonia ,
3432 bytesDesdobrado e com caminhos de execução anotados:
Diagrama gerado com o incrível HexagonyColorer de Timwi .
O caminho púrpura é o caminho inicial que lê dois caracteres, calcula a diferença e assume o módulo 2. Em
<
seguida, atua como um ramo, onde o caminho cinza escuro (resultado1
) é impressodark
e o caminho cinza claro (resultado0
) é impressolight
.Quanto a como eu calculo a diferença e o módulo, aqui está um diagrama da grade de memória (com valores obtidos para a entrada
a1
):Diagrama gerado com o IDE Esotérico ainda mais incrível do Timwi (que possui um depurador visual para Hexagony).
O ponteiro de memória começa na linha rotulada pela borda , onde lemos o caractere.
}
move para a borda rotulada col , onde lemos o dígito."
move para a aresta denominada diff, onde-
calcula a diferença dos dois.'
move-se para a célula não rotulada onde colocamos o2
e{=
move-se para a célula rotulada mod onde computamos o módulo%
.Isso pode ser jogado por alguns bytes pela reutilização de alguns dos itens
;
, mas duvido que possa ser jogado por muito, certamente não pelo lado 3.fonte
CJam, 18 bytes
Demonstração online
Dissecação
fonte
:-)
:^)
sed, 37
Explicação
s/[1357aceg]//g
remove todas as coordenadas com índices ímpares. O buffer padrão resultante possui comprimento 1 para "claro" ou comprimento 0 ou 2 para "escuro"./^.$/
corresponde aos padrões de 1 comprimento,c
suspende o padrão para "light" eq
uits. Caso contrário, o padrão éc
pendurado em "escuro".fonte
q
é redundante, e você pode verificar pela primeira vez escuro com/../
, tio.run/##K05N@f@/WD/a0NjUPDE5NT1WXz@dS19PTz85JbEomys5JzM9o@T//...Pitão, 18 bytes
Interprete a entrada como um número base 35, corte
lightdark
ao meio, imprima.fonte
ShadyAsFuck, 91 bytes / BrainFuck, 181 bytes
Meu primeiro programa real do BrainFuck, agradeço à Mego pela ajuda e por me indicar o arquivo de algoritmos. (Isso significa que eu realmente não fiz isso sozinho, mas copiei alguns algoritmos existentes. Ainda é uma experiência =)
Esta é, obviamente, a tradução das minhas respostas brainfuck:
Desenvolvido usando este intérprete / depurador .
Roubei dois trechos de código para
divmod
eif/else
desde aqui. (Obrigado a @Mego!)Agora temos a configuração das células
>sum 2
e agora executamos o algoritmo divmod:A saída do divmod se parece com isso,
0 d-n%d >n%d n/d
mas zeramos e zeramosd-n%d
a próxima célula também:Preencha uma célula até o valor
100
para obter resultados mais fáceis:Agora a configuração é
>cond 0 100
e, para aplicar oif/else
algoritmo, precisamos de duas variáveis temporárias, por isso escolhemos a configuraçãotemp0 >c temp1 100
fonte
Python 2, 45 bytes
Toma entrada como
"a1"
. Experimente onlinefonte
"ldiagrhgt"[expression::2]
deve funcionar ao salvar um byte ou doisSério , 19 bytes
Toma entrada como
"a1"
Experimente on-line (você precisará inserir manualmente a entrada; os links permanentes não gostam de aspas)
fonte
Código da máquina de Turing, 235 bytes
Usando a sintaxe da tabela de regras definida aqui.
fonte
JavaScript (ES6), 45 bytes
fonte
TI-BASIC, 66 bytes
Testado em uma calculadora TI-84 +.
Aqui está uma variação mais interessante na terceira linha, que infelizmente é exatamente do mesmo tamanho:
Você pensaria que o TI-BASIC seria decente nesse desafio, pois envolve o módulo 2. Não é; essas soluções parecem ser as mais curtas possíveis.
Gastamos muitos bytes para obter os dois caracteres na sequência, mas o que realmente custa são as treze letras minúsculas de dois bytes.
fonte
Befunge-93 ,
39373331 bytesTodo o crédito a Linus, que sugeriu esta solução de 31 bytes:
Teste-o usando este intérprete .
Explicação
O
<
no início envia o ponteiro de instruções para a esquerda, onde ele envolve a direita. Ele então lê dois caracteres da entrada como ASCII, subtrai-os e faz um módulo por 2. Comoa
e1
são ambos ímpares (em termos de código ASCII), isso funciona. Ov
redireciona o ponteiro de instruções para baixo ...... para o
_
, que envia o ponteiro de instrução para a esquerda, se o topo da pilha for 0, e para a direita, caso contrário. Os caracteres de "claro" ou "escuro", respectivamente, são inseridos na pilha na ordem inversa. Ambos os caminhos atingem o^
lado esquerdo, o que envia o ponteiro da instrução para cima ...... para o segmento de saída.
:
duplica a parte superior da pilha,#
pula sobre,
e na_
, o que envia o ponteiro de instruções para a direita se a parte superior da pilha for 0 e deixada em contrário. Quando a pilha está vazia, o topo da pilha (depois:
) é 0; portanto, o ponteiro da instrução atinge o@
que interrompe a execução. Caso contrário, ele atinge o,
, que gera o topo da pilha como um caractere, e então o#
pula sobre o:
e para o>
, o que inicia o processo novamente.fonte
rad"v>"k
sem espaço?dar k
." Experimente no intérprete online vinculado.<>:#,_@ v%2-~~\n"^"light"_"krad
, corrija a nova linha.Japonês ,
2322 bytesJapt é uma versão abreviada do Ja vaScri pt . Intérprete
Como funciona
Usando a nova versão 0.1.3 (lançada em 22 de novembro), isso se torna 17 bytes , mais curto que todos, exceto o GS2:
Ou, alternativamente, uma fórmula mágica: (26 bytes)
fonte
Java,
157127124 bytesfonte
interface i{static void main
como tudo em uma interface é público por padrãoTeaScript , 23 bytes
Infelizmente as strings
dark
elight
não podem ser compactadas.fonte
Ruby,
riscado 4436 bytesfonte
puts
por$><<
(sem espaço).puts
parap
C, 55 bytes
Experimente online
Obrigado DigitalTrauma por muitas dicas de golfe
fonte
(
depoisputs
s;main(){puts(strtol(gets(&s),0,19)&1?"light":"dark");}
. Supõe que a largura inteira seja grande o suficiente para armazenar 3 caracteres de sequência. Você também deve conseguir fazermain(s){puts(strtol(gets(&s),0,19)&1?"light":"dark");}
54, embora, por algum motivo, gets () esteja retornando lixo,s
caso contrário não seja global, portanto, segfaults.BotEngine ,
16514x11 = 154Aqui está com os diferentes segmentos de caminho destacados:
(Quaisquer caracteres não espaciais não destacados servem como argumentos para as instruções
e
e -S
cada uma dessas instruções usa o símbolo à esquerda (em relação à direção da viagem do bot) como argumento)fonte
, 26 caracteres / 34 bytes
Try it here (Firefox only).
fonte
C, 49 bytes
fonte
gets(&c)%256+c/256
?gets(&c)
. Atualizei meu envio de acordo.Clojure, 63 bytes
Eu economizo 2 bytes, citando "claro" e "escuro" com uma única citação, para que Clojure tome isso como literal, em vez de agrupar cada palavra entre aspas. Também guardo alguns bytes usando pr em vez de println.
Algumas informações sobre a citação no Clojure
fonte
Tamanho 0.12 ,
2824 bytesExperimente aqui.
Explicação
fonte
C, 46 bytes
Espera um ambiente em que
int
s sejam armazenados little-endian e tenham pelo menos dois bytes.Explicação
c
éargc
, então inicialmente ele contém01 00 00 00
.gets
lerá dois caracteres, digamosa (0x61)
e1 (0x31)
, e os armazenarác
, que agora érepresentando o número 0x3161 ou 12641.
Essencialmente, neste problema, dado
c = x + 256*y
, queremos calcular(x + y) mod 2
e imprimir uma string de acordo. Para fazer isso, eu poderia ter escritoc % 255 % 2
, como entãoNo entanto,
37
também funciona:x
está no intervalo de 49 a 57 inclusive (dígitos 1 a 8), entãox % 37 == x - 37
.y
está no intervalo de 97 a 104 inclusive (ah em minúsculas), entãoy % 37 == y - 74
.Isso significa que podemos simplificar para
e simplesmente gire as cordas para corrigir a paridade.
fonte
Feixe , 127 bytes
Uma explicação Azul claro - leia um caractere da entrada no feixe, salve o valor do feixe na loja, leia um caractere da entrada no feixe.
Azul escuro - Adiciona armazenamento ao feixe, diminuindo o armazenamento para 0 enquanto incrementa o feixe
Verde claro - Uma construção de teste ainda ímpar. O loop sairá para a esquerda se o feixe for par ou o direito se for ímpar.
Verde escuro - sai escuro
Bronzeado - Saída de luz
fonte
O ,
2217 bytesIsso faz o que é necessário fazer, sem benefícios adicionais.
fonte
Labirinto ,
48464542 bytesObrigado ao Sp3000 por salvar dois bytes.
Experimente online!
Explicação
O início do código é um beco sem saída engraçado. Lembre-se de que o Labyrinth assume um número infinito de zeros quando requer operandos na parte inferior da pilha. O código inicia um na ordem
-
correta, que tenta subtrair dois números, para que a pilha se torne:Em seguida,
,
lê o primeiro caractere,a
diga:O
"
é um no-op, mas também é um beco sem saída, então o ponteiro da instrução se vira e começa a ir para a esquerda. Então`
lê o outro personagem,2
diga:Desta vez,
-
subtrai esses dois números:O IP agora segue a curva do "corredor". O
#
fica a profundidade da pilha, ignorando os zeros implícitas, que, convenientemente, passa a ser2
:E
%
calcula o módulo:Neste ponto, o IP está em uma junção. Se a parte superior da pilha for zero, ela seguirá em frente, onde será
100.97.114.107.@
impressadark
. Mas se a parte superior da pilha for diferente de zero (especificamente1
), ela se moverá para a direita, onde será0:::8.5.3.4.116.@
impressalight
(observe que podemos omitir a liderança1
, porque já existe uma1
na pilha e podemos economizar nas repetidas10
em108
,105
,103
,104
por fazer algumas cópias do10
quando chegar lá).fonte
Matlab, 51 bytes
Eu não acho que isso precise de explicação =)
fonte
> <> , 31 bytes
Aqui eu estou pensando "tem que haver uma maneira melhor ..."
fonte
Perl,
2927 bytesEsse código requer a
-p
opção, que contei como 1 byte.Experimente online no Ideone .
Como funciona
Por causa da
-p
opção, o Perl lê uma linha de entrada e a armazena$_
././
é uma expressão regular que corresponde a um caractere. Isso tem duas implicações:Como a partida foi bem-sucedida,
/./
retorna 1 .A pós-correspondência (segundo caractere de entrada) é armazenada em
$'
.$'+ord
adiciona o número inteiro que o segundo caractere de entrada representa ao ponto de código (ord
) do primeiro caractere da variável implícita$_
.&
toma o AND bit a bit do valor de retorno/./
e da soma$'+ord
, retornando 1 é a soma se ímpar, 0 se for par.?light:dark
retorna claro se a expressão anterior retornou 1 e escuro, caso contrário.Finalmente,
$_=
atribui o resultado ao$_
qual Perl imprime automaticamente, por causa da-p
opção.fonte