/* Configuration */
var QUESTION_ID = 169724; // Obtain this from the url
// It will be like https://XYZ.stackexchange.com/questions/QUESTION_ID/... on any question page
var ANSWER_FILTER = "!t)IWYnsLAZle2tQ3KqrVveCRJfxcRLe";
var COMMENT_FILTER = "!)Q2B_A2kjfAiU78X(md6BoYk";
var OVERRIDE_USER = 81420; // This should be the user ID of the challenge author.
/* App */
var answers = [],
answers_hash, answer_ids, answer_page = 1,
more_answers = true,
comment_page;
function answersUrl(index) {
return "https://api.stackexchange.com/2.2/questions/" + QUESTION_ID + "/answers?page=" + index + "&pagesize=100&order=desc&sort=creation&site=codegolf&filter=" + ANSWER_FILTER;
}
function commentUrl(index, answers) {
return "https://api.stackexchange.com/2.2/answers/" + answers.join(';') + "/comments?page=" + index + "&pagesize=100&order=desc&sort=creation&site=codegolf&filter=" + COMMENT_FILTER;
}
function getAnswers() {
jQuery.ajax({
url: answersUrl(answer_page++),
method: "get",
dataType: "jsonp",
crossDomain: true,
success: function(data) {
answers.push.apply(answers, data.items);
answers_hash = [];
answer_ids = [];
data.items.forEach(function(a) {
a.comments = [];
var id = +a.share_link.match(/\d+/);
answer_ids.push(id);
answers_hash[id] = a;
});
if (!data.has_more) more_answers = false;
comment_page = 1;
getComments();
}
});
}
function getComments() {
jQuery.ajax({
url: commentUrl(comment_page++, answer_ids),
method: "get",
dataType: "jsonp",
crossDomain: true,
success: function(data) {
data.items.forEach(function(c) {
if (c.owner.user_id === OVERRIDE_USER)
answers_hash[c.post_id].comments.push(c);
});
if (data.has_more) getComments();
else if (more_answers) getAnswers();
else process();
}
});
}
getAnswers();
var SCORE_REG = /<h\d>\s*([^\n,<]*(?:<(?:[^\n>]*>[^\n<]*<\/[^\n>]*>)[^\n,<]*)*),.*?(\d+)(?=[^\n\d<>]*(?:<(?:s>[^\n<>]*<\/s>|[^\n<>]+>)[^\n\d<>]*)*<\/h\d>)/;
var OVERRIDE_REG = /^Override\s*header:\s*/i;
function getAuthorName(a) {
return a.owner.display_name;
}
function process() {
var valid = [];
answers.forEach(function(a) {
var body = a.body;
a.comments.forEach(function(c) {
if (OVERRIDE_REG.test(c.body))
body = '<h1>' + c.body.replace(OVERRIDE_REG, '') + '</h1>';
});
var match = body.match(SCORE_REG);
if (match)
valid.push({
user: getAuthorName(a),
size: +match[2],
language: match[1],
link: a.share_link,
});
//else console.log(body);
});
valid.sort(function(a, b) {
var aB = a.size,
bB = b.size;
return aB - bB
});
var languages = {};
var place = 1;
var lastSize = null;
var lastPlace = 1;
valid.forEach(function(a) {
if (a.size != lastSize)
lastPlace = place;
lastSize = a.size;
++place;
var answer = jQuery("#answer-template").html();
answer = answer.replace("{{PLACE}}", lastPlace + ".")
.replace("{{NAME}}", a.user)
.replace("{{LANGUAGE}}", a.language)
.replace("{{SIZE}}", a.size)
.replace("{{LINK}}", a.link);
answer = jQuery(answer);
jQuery("#answers").append(answer);
var lang = a.language;
lang = jQuery('<a>' + lang + '</a>').text();
languages[lang] = languages[lang] || {
lang: a.language,
lang_raw: lang,
user: a.user,
size: a.size,
link: a.link
};
});
var langs = [];
for (var lang in languages)
if (languages.hasOwnProperty(lang))
langs.push(languages[lang]);
langs.sort(function(a, b) {
if (a.lang_raw.toLowerCase() > b.lang_raw.toLowerCase()) return 1;
if (a.lang_raw.toLowerCase() < b.lang_raw.toLowerCase()) return -1;
return 0;
});
for (var i = 0; i < langs.length; ++i) {
var language = jQuery("#language-template").html();
var lang = langs[i];
language = language.replace("{{LANGUAGE}}", lang.lang)
.replace("{{NAME}}", lang.user)
.replace("{{SIZE}}", lang.size)
.replace("{{LINK}}", lang.link);
language = jQuery(language);
jQuery("#languages").append(language);
}
}
body {
text-align: left !important;
display: block !important;
}
#answer-list {
padding: 10px;
width: 290px;
float: left;
}
#language-list {
padding: 10px;
width: 500px;
float: left;
}
table thead {
font-weight: bold;
}
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="https://cdn.sstatic.net/Sites/codegolf/all.css?v=ffb5d0584c5f">
<div id="language-list">
<h2>Shortest Solution 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>
<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>
<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>
666 => False
deveria ser um caso de teste.Respostas:
Conjunto Z80 (8 bits), 2 bytes
O código a seguir funciona apenas com valores de até 255:
Versão de 16 bits (funciona em todos os casos de teste), 3 bytes
Isso funciona com valores de até 65535.
Se você estiver se sentindo aventureiro, pode economizar 1 byte armazenando a entrada
A
eC
assim por diantee depois correndo
No entanto, isso sobrecarrega o chamador; portanto, os dois bytes (
push BC
epop AF
) também devem ser contados.fonte
or
s são bit a bit com 2 operandosor
mnemônico é o acumulador A. Nesse caso, o comando não muda A. Ele apenas atualiza o registro de status (e, em particular, o sinalizador de paridade) para refletir o conteúdo do A.P
permitido conforme codegolf.meta.stackexchange.com/a/8509/29560 ? É um bit único noF
registro (flags) que possui apenas três pares de instruções afetadas por ele. Além disso, essa resposta não menciona que está competindo apenas pelos valores de 8 bits, poisA
é um registro de 8 bits. Isso significa que ele é incapaz de dar uma resposta para777
, ou qualquer outro valor sem sinal mais 255.:P
A
está emparelhadoF
, então eu não aceitariaAB
ouBA
como um valor de 16 bits.BC
é de 16 bits, mas você precisará de uma instrução extra para carregar um delesA
antes de executar o XOR no outro. Eu sempre mencionei que minhas respostas do Z80 funcionam totalmente até 255 ou 65535, dependendo da pergunta. Talvez adicione uma versão de 16 bits também? Então, 2 bytes para valores de 8 bits, 3 bytes para valores de 16 bits.JavaScript (ES6), 18 bytes
Experimente online!
Explicação
A lógica bit a bit é assim:
~-n
é equivalente a-(-n)-1
, de modo que apenas outra maneira de fazern-1
. Nesse caso em particular, poderíamos realmente ter usadon-1
.n & (n-1)
remove o bit menos significativo a 1 no n porque decrementing n transforma tudo arrastando 0 é em 1 's e limpa a 1 que se segue imediatamente (carry propagação), deixando tudo o resto inalterado.Exemplo para n = 24 (11000 em binário):
Portanto, temos o processo tantas chamadas recursivas, pois há 1 é na representação binária de n , invertendo o resultado cada vez com
!
. A última chamada sempre retorna 1 .Exemplos:
fonte
Python 2 , 25 bytes
Experimente online!
bin(n)
dá um resultado como'0b10101'
. Lendo isso como um número inteiro de base 13, obtemosEntão,
int(bin(n),13)%2
é igual a 1 + (número de unidades embin(n)
) módulo 2.Se
n
é mau, então o resultado é 1; caso contrário, é 0.Eu peguei esse truque no Noodle9 .
fonte
lambda n:int(`n`,13)%2
. Experimente online!Japonês
-h!
,543 bytesTente
Explicação
fonte
¤¬x v
esta é a resposta de KevinC # (compilador interativo do Visual C #) ,
4338 bytesGolfe Experimente online!
Ungolfed
Código completo com testes
Lançamentos
-5 bytes
- SubstituídoCount
paraSum
43 bytes
- Solução inicial.Notas
fonte
Bash (sem utilitários externos),
5644 byteswhile(($1));do set $(($1/2)) $(($2+$1%2));done;!(($2%2))
Isso pressupõe que o número seja encontrado
$1
, tendo sido passado como o primeiro argumento da linha de comando. Ele também pressupõe que esse seja um script de shell (para que eleexec
próprio possa ).Ele recorre, de certa forma, usando
exec $0
, até o número (in$1
) chegar a zero, dividindo-o por dois em cada iteração. Também soma (in$2
) o número de vezes que obtemos um número ímpar. No final, o número original era "mau" se a soma$2
não fosse ímpar.Invocações de exemplo:
Para
0
:Resultado correto, com um pouco de extra ao lado.
fonte
R ,
3726 bytesExperimente online!
Uma alternativa à resposta de Robert S. , isso evita a divisão de bits incorporada,
mas acaba com menos golfismoe, graças a JayCe e digEmAll, acaba sendo um pouco mais golfista.Funciona apenas para números inteiros positivos menores que .231−1
fonte
%/%
%%
05AB1E , 4 bytes
Experimente online ou verifique todos os casos de teste .
Explicação:
fonte
Stax , 4 bytes
Execute e depure
fonte
R ,
9998443428 bytes-1 graças a Kevin Cruijssen! -54 graças a ngm! -10 graças a Giuseppe! -6 agradecimentos a JayCe!
Experimente online!
Como alternativa, usando o
binaryLogic
pacote (39 bytes):fonte
==0
pode ser<1
:)C (gcc) , 36 bytes
Experimente online!
Método de K&R https://graphics.stanford.edu/~seander/bithacks.html#CountBitsSetKernighan
Deve ser compilado com o nível de otimização 0
fonte
error: expected constructor, destructor, or type conversion before '(' token
(a seta está apontando paraf
no nome da função). Quais sinalizadores de compilador são necessários?-O
.-O0
sinalizador do compilador.Wolfram Language (Mathematica) ,
2422 bytesExperimente online!
fonte
2∣
é uma melhoriaEvenQ
. Experimente online!PHP,
3736 bytesPara executá-lo:
Ou Experimente online!
Imprime
1
para verdadeiro e0
para falso.-1 byte graças a Benoit Esnard !
fonte
<?=1&~substr_count(decbin($argn),1);
. Este também imprime 0 para falso.Braquilog , 4 bytes
Experimente online!
Com vários casos de teste (😈 é mau e 👼 não é).
Usa algo que descobri recentemente sobre o
-
predicado: sua documentação diz apenas "a diferença de elementos de [input]", mas o que realmente faz é "soma dos elementos indexados pares (a partir de 0) da entrada, menos a soma de ímpares" elementos de entrada indexados ".Aqui,
ḃ
converte o número em uma matriz de dígitos binários,o
classifica-os para reunir todos os 1s.Agora, se houvesse um número par de 1s, haveria um número igual de 1s em índices pares e ímpares. Portanto, o
-
que se seguiu daria um 0. Mas se houvesse um número ímpar de 1s, haveria 1 extra, resultando na diferença sendo -1 ou 1.Então, finalmente, afirmamos que a diferença é
0
e obtemos um resultado verdadeiro ou falso de acordo com isso. Com requisitos de saída mais flexíveis , isso poderia ser removido para uma resposta de 3 bytes, com 0 como saída de verdade e -1 e 1 como ambas as saídas de falsey.fonte
INTERCAL ,
906563 bytesExperimente online!
Ungolfed e expandido (pelo que vale a pena) com comentários no estilo C.
Eu tive que fazer algumas concessões para tornar isso possível no INTERCAL. A primeira é que, como em todos os programas INTERCAL, a entrada numérica deve ser gravada. Então, se você quiser inserir,
707
você forneceriaSEVEN OH SEVEN
.A segunda é que INTERCAL realmente não tem valor de verdade ou falsidade. Em vez disso, ele emitirá o numeral romano
I
(1) se o número não for ruim ou um 0 (normalmente representado como-
porque os algarismos romanos normalmente não podem representar 0).Se você quiser inverter esses números para que os números maus retornem 1 e os números não maus retornem 0, você pode alterar as linhas 4 e 5 da versão não armazenada da seguinte maneira, embora adicione 3 bytes.
fonte
Anexo ,
1312 bytesExperimente online!
(Old 13 bytes:
Even@1&`~@Bin
)Esta é uma composição de três funções:
Bin
Sum
Even
Isso verifica que o
Sum
daBin
expansão ary da entrada éEven
.fonte
dc ,
1816 bytesRetorna (para a pilha) 0 para o mal e 1 para não o mal
Experimente online!
Bastante direto - aplica recursivamente o operador de quociente / restante combinado
~
ao novo quociente e adiciona todos os restantes, depois mods por 2(depois de gastar dois bytes para alternar para uma verdade / falsidade padrão).Editado para refletir o consenso de que 0 para verdade e 1 para falsidade são aceitáveis, especialmente em um idioma que não possui nenhum tipo de
if(boolean)
construção.fonte
Python 2, 29 bytes
Experimente online!
Retorna 1 se True, caso contrário 0.
Converte o número em uma string binária como '0b11', conta o número de 1s, obtém o complemento do resultado e retorna o último bit do complemento (obrigado, https://codegolf.stackexchange.com/users/53560/cdlane !) (1 se o número original for par, 0 se for ímpar).
fonte
lambda n:~bin(n).count('1')&1
substitui a divisão modular por algo potencialmente menos caro.x86-16, 3 bytes
Listagem NASM:
A função inteira de 16 bits arg no AX (destruída), retorna o valor em PF.
O hardware calcula a paridade do resultado para nós, no Parity Flag de x86 . O chamador pode usar
jp
/jnp
para ramificar ou o que quiser.Funciona exatamente como a resposta Z80 / 8080 da @ cschultz ; de fato, o 8086 foi projetado para facilitar a transferência de fontes mecânica do 8080 .
Observe que PF é definido apenas a partir do byte baixo de resultados mais amplos; portanto
test edi,edi
, não funcionaria para uma versão x86-64. Você precisaria xor horizontal até 16 bits oupopcnt eax, edi
/and al,1
(onde 0 é verdade).fonte
C ++ (gcc) (-O0),
3631 bytesExperimente online!
C ++ (clang) , 35 bytes
Experimente online!
Aqui está minha primeira tentativa no código de golfe, espero que não quebrei nenhuma regra que eu poderia ter perdido.
Edit:
- Saved 5 bytes, graças ao @ Jonathan Frech: substituídas
!=
por-
ereturn
peloi=
(a última substituição não parece trabalhar com clang embora)- Uma vez que não parece ser um debate se eu deveria usar gcc -O0 abuso, eu pensei que eu pudesse basta dar as duas versões
fonte
!=
para-
e outros quatro pelo golfereturn
parai=
.gcc -O0
truque estúpido ? Não é como se o tamanho total da linguagem de um idioma importasse muito ao comparar implementações. Além disso, torna mais interessante escolher entrereturn
vs. chamada por referência (atualização*i
no local). Prefiro escrever respostas C ou C ++, não apenas respostas não otimizadas para o gcc, porque não otimizadas para o gcc não é uma linguagem muito útil.SML , 32 bytes
Explicação:
%
é o nome da funçãon
é entrada, retorna (n +% (n // 2))% 2Feito por 2 estudantes entediados de Carnegie Mellon
fonte
Quarto (gforth) , 53 bytes
Experimente online!
Explicação
Pega a xoroma dos dígitos da forma binária do número. (divide repetidamente por 2 e xou o restante com o valor "sum")
Código Explicação
fonte
Java 8,
4036 bytes-4 bytes graças a @Okx por algo que eu não deveria ter me esquecido ..
Experimente online.
Explicação:
Observe que os caracteres que codificam para
0
e1
são48
e49
, mas somando-os e recebendo o módulo-2, ainda mantém os resultados corretos porque48%2 = 0
e49%2 = 1
.fonte
n.toString(n,2)
salva 4 bytes.~n.toString(n,2).chars().sum()%2
salvar um byte.0
e1
não são verdade / falsey em Java, apenasbooleans
/Booleans
são. Se um desafio declarasse que duas saídas distintas são permitidas, isso<1
poderia ter sido removido para economizar 2 bytes. :)Perl 6 , 21 bytes
Teste-o
Expandido:
fonte
*.base(2)%9%%2
{:3(.base(2))%%2}
Retina 0.8.2 , 28 bytes
Experimente online! O link inclui casos de teste. Explicação:
Converta para unário.
Conversão binária parcial (deixa zeros extras).
Exclua todos os zeros.
Módulo os dois por dois.
Teste se o resultado é zero.
fonte
Montagem x86,
1211 bytes-1 byte graças à sugestão de @ ceilingcat
fonte
inc eax
vez denot eax
. Também é possível mencionar que isso requer um processador com suporte para aspopcnt
instruções.Utilitários Bash + GNU, 33
Experimente online!
Lê a entrada de STDIN. Saídas 1 para True e 0 para False.
dc
converte a entrada em uma sequência bináriatr
remove zeroswc
conta os restantes (e a nova linha à direita, que corrige o senso de lógicadc
calcula contagem mod 2 e gera a respostafonte
Python 2,
2827 bytesExperimente online!
Retorna um valor verdadeiro se exatamente um de
the ones-bit is a 1
ethe result of calling this function on n/2 is truthy
for verdadeiro (oun==0
). Funciona porquen/2
é equivalente a um deslocamento de bits correto com a divisão do piso (somente no Python 2).Versão alternativa, também
2827 bytesExperimente online!
Com base no método K&R de contagem de bits de conjunto referenciados por vazt.
Ambos podem ser dois bytes mais curtos se a saída permitir que falsey signifique mal.
Edit: Obrigado a Amphibological por salvar um byte!
fonte
1
eor
para salvar +1 byte. Ótima solução!APL (Dyalog Unicode) , SBCS de 10 bytes
Função tácita anônima. Pode usar qualquer matriz de números inteiros como argumento.
Experimente online!
2∘⊥⍣¯1
converter para binário, usando quantos dígitos forem necessários para o maior número, separar dígitos ao longo do eixo primário1⍪
precede aqueles ao longo do eixo primário≠⌿
Redução de XOR ao longo do eixo primáriofonte
J , 9 bytes
Função tácita anônima. Pode usar qualquer matriz inteira como argumento.
Experimente online!
1-
um menos (isto é, negação lógica de)2|
o mod-2 de1#.
a soma (lit. a avaliação de base 1) de#:
a representação bináriafonte
2|1+1#.#: