/* 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
devrait être un cas test.Réponses:
Assemblage Z80 (8 bits), 2 octets
Le code suivant ne fonctionne qu'avec des valeurs allant jusqu'à 255:
Version 16 bits (fonctionne sur tous les cas de test), 3 octets
Cela fonctionne avec des valeurs allant jusqu'à 65535.
Si vous vous sentez aventureux, vous pouvez supprimer 1 octet en stockant l’entrée
A
etC
ainsi de suite.puis en cours d'exécution
Cependant, ceci impose un fardeau à l'appelant. Il est donc possible que les deux octets (
push BC
etpop AF
) soient également comptés.la source
or
s sont bitwise avec 2 opérandesor
mnémonique est l'accumulateur A. Dans ce cas, la commande ne change pas A. Elle actualise uniquement le registre d'état (et en particulier l'indicateur de parité). refléter le contenu de A.P
autorisé selon codegolf.meta.stackexchange.com/a/8509/29560 ? C'est un bit unique dans leF
registre (flags) qui n'a que trois paires d'instructions affectées par celui-ci. De plus, cette réponse omet de mentionner qu'il s'agit uniquement d'une compétition pour les valeurs de 8 bits, car ilA
s'agit d'un registre de 8 bits. Cela signifie qu'il est incapable de donner une réponse777
ou une valeur non signée supérieure à 255.:P
A
est couplé avecF
, donc je n'accepterais pasAB
ou enBA
tant que valeur 16 bits.BC
est de 16 bits, mais vous avez besoin d’une instruction supplémentaire pour charger l’un d’euxA
avant de passer à l’autre. Je viens toujours de mentionner que mes réponses Z80 fonctionnent pleinement jusqu'à 255 ou 65535, en fonction de la question. Peut-être ajouter une version 16 bits également? Donc 2 octets pour les valeurs 8 bits, 3 octets pour les valeurs 16 bits.JavaScript (ES6), 18 octets
Essayez-le en ligne!
Explication
La logique des bits va comme ceci:
~-n
équivaut à-(-n)-1
, de sorte que c'est juste une autre façon de fairen-1
. Dans ce cas particulier, nous aurions effectivement pu utilisern-1
.n & (n-1)
supprime le moins bit significatif à 1 en n parce que décrémentation n tour à tour toutes fuite 0 « s dans 1 » s et efface le 1 qui suit immédiatement (par la propagation de transport), tout en laissant tout le reste inchangé.Exemple pour n = 24 (11000 en binaire):
Par conséquent, nous traitons autant d'appels récursifs qu'il y a de 1 dans la représentation binaire de n , en inversant le résultat à chaque fois
!
. Le dernier appel revient toujours 1 .Exemples:
la source
Python 2 , 25 octets
Essayez-le en ligne!
bin(n)
donne un résultat comme'0b10101'
. En lisant ceci comme un entier de base 13, on obtientqui réduit modulo 2 à ≡ 1 ⋅ 1 5 + 1 ⋅ 1 4 + 0 ⋅ 1 3 + 1 ⋅ 1 2 + 0 ⋅ 1 1 + 1 ⋅ 1
Donc
int(bin(n),13)%2
est égal à 1 + (nombre d'unitésbin(n)
) modulo 2.Si
n
est le mal, alors le résultat est 1; sinon c'est 0.J'ai repris cette astuce de Noodle9 .
la source
lambda n:int(`n`,13)%2
. Essayez-le en ligne!Japt
-h!
,543 octetsL'essayer
Explication
la source
¤¬x v
voici la réponse de kevinC # (compilateur interactif Visual C #) ,
4338 octetsGolfed Essayez-le en ligne!
Ungolfed
Code complet avec des tests
Communiqués
-5 bytes
- RemplacéCount
parSum
43 bytes
- Solution initiale.Remarques
la source
Bash (aucun utilitaire externe),
5644 octetswhile(($1));do set $(($1/2)) $(($2+$1%2));done;!(($2%2))
Cela suppose que le numéro se trouve dans
$1
, ayant été passé en tant que premier argument de ligne de commande. Cela suppose également qu'il s'agit d'un script shell (afin qu'il puisse le faireexec
lui-même).Il récidive, d'une manière, en utilisant
exec $0
, jusqu'à ce que le nombre (in$1
) atteigne zéro, en le divisant par deux à chaque itération. Il additionne également$2
le nombre de fois où nous obtenons un nombre impair. À la fin, le nombre initial était "diabolique" si la somme$2
n'était pas étrange.Exemple d'invocations:
Pour
0
:Résultat correct, avec un petit extra sur le côté.
la source
R ,
3726 octetsEssayez-le en ligne!
Une alternative à la réponse de Robert S. , cela évite le fractionnement de bits intégré
mais finit par devenir moins golféet grâce à JayCe et digEmAll finit par arriver légèrement plus golfeur.la source
%/%
%%
05AB1E , 4 octets
Essayez-le en ligne ou vérifiez tous les cas de test .
Explication:
la source
Stax , 4 octets
Exécuter et déboguer
la source
R ,
9998443428 octets-1 merci à Kevin Cruijssen! -54 grâce à ngm! -10 merci à Giuseppe! -6 merci à JayCe!
Essayez-le en ligne!
Sinon, en utilisant le
binaryLogic
package (39 octets):la source
==0
peut l'être<1
:)C (gcc) , 36 octets
Essayez-le en ligne!
Méthode de K & R https://graphics.stanford.edu/~seander/bithacks.html#CountBitsSetKernighan
Doit être compilé avec le niveau d'optimisation 0
la source
error: expected constructor, destructor, or type conversion before '(' token
(la flèche pointe vers le nomf
de la fonction). De quel indicateur de compilateur ai-je besoin?-O
.-O0
drapeau du compilateur.Wolfram Language (Mathematica) ,
2422 octetsEssayez-le en ligne!
la source
2∣
est une amélioration surEvenQ
. Essayez-le en ligne!PHP,
3736 octetsPour l'exécuter:
Ou essayez-le en ligne!
Imprime
1
pour vrai et0
pour faux.-1 octet grâce à Benoit Esnard !
la source
<?=1&~substr_count(decbin($argn),1);
. Celui-ci affiche également 0 pour faux.Brachylog , 4 octets
Essayez-le en ligne!
Avec plusieurs cas de test (😈 est mauvais et 👼 ne l'est pas.)
Utilise quelque chose que j'ai découvert récemment à propos du
-
prédicat: sa documentation ne dit que "la différence d'éléments de [input]", mais ce qu'elle fait en réalité est "la somme d'éléments pair-indexés (à partir de 0) d'entrées, moins la somme d'impairs -indexed éléments d'entrée ".Ici,
ḃ
convertit le nombre en un tableau de chiffres binaires,o
les trie pour rassembler tous les 1.Maintenant, s'il y avait un nombre pair de 1, il y aurait un nombre égal de 1 dans les indices pairs et les indices impairs. Donc
-
après cela donnerait un 0. Mais s'il y avait un nombre impair de 1, il y aurait un 1 supplémentaire qui sortait, la différence étant soit -1 soit 1.Donc, finalement, nous affirmons que la différence est
0
, et obtenons un résultat vrai ou faux en fonction de cela. Avec des exigences de sortie plus flexibles , ceci pourrait être supprimé pour une réponse de 3 octets, avec 0 en sortie de vérité et -1 et 1 en sortie de Falsey.la source
INTERCAL ,
906563 octetsEssayez-le en ligne!
Ungolfed et étendu (pour ce que ça vaut la peine) avec des commentaires de style C.
J'ai dû faire quelques concessions pour que cela soit réalisable dans INTERCAL. Le premier est, comme pour tous les programmes INTERCAL, la saisie numérique doit être écrite. Donc, si vous voulez entrer,
707
vous fournissezSEVEN OH SEVEN
.La seconde est qu'INTERCAL n'a pas vraiment de valeur de vérité ou de fausseté appropriée. Au lieu de cela, il générera le chiffre romain
I
(1) si le nombre n'est pas mauvais, ou un 0 (généralement représenté par le fait-
que les chiffres romains ne peuvent normalement pas représenter 0).Si vous souhaitez les inverser pour que les nombres pervers renvoient 1 et les nombres non pervers, 0, vous pouvez modifier les lignes 4 et 5 de la version sans golf comme suit, bien que cela ajoute 3 octets.
la source
Attaché ,
1312 octetsEssayez-le en ligne!
( De 13 octets:
Even@1&`~@Bin
)Ceci est une composition de trois fonctions:
Bin
Sum
Even
Cela vérifie que le
Sum
de l'Bin
élargissement de l'aire d' entrée estEven
.la source
dc ,
1816 octetsRenvoie (à la pile) 0 pour le mal et 1 pour pas le mal
Essayez-le en ligne!
Assez simple - applique récursivement l'opérateur quotient / reste combiné
~
au nouveau quotient et additionne tous les restants, puis modifie par 2(après avoir passé deux octets à basculer sur une vérité / falsification standard).Modifié pour refléter le consensus selon lequel 0 pour la vérité et 1 pour la fausseté est acceptable, en particulier dans un langage qui n’a aucune sorte de
if(boolean)
construction.la source
Python 2, 29 octets
Essayez-le en ligne!
Retourne 1 si vrai, sinon 0.
Convertit le nombre en chaîne binaire telle que '0b11', compte le nombre de 1, obtient le complément du résultat et renvoie le dernier bit du complément (merci, https://codegolf.stackexchange.com/users/53560/cdlane !) (1 si le numéro d'origine était pair, 0 si il était impair).
la source
lambda n:~bin(n).count('1')&1
remplace la division modulaire par quelque chose potentiellement moins cher.x86-16, 3 octets
Liste NASM:
Fonction entière 16 bits arg dans AX (détruit), valeur renvoyée dans PF.
Le matériel calcule la parité du résultat pour nous, dans l' indicateur de parité de x86 . L'appelant peut utiliser
jp
/jnp
pour créer une branche ou ce qu'il veut.Fonctionne exactement comme la réponse Z80 / 8080 de @ cschultz ; En fait, 8086 a été conçu pour faciliter le portage de source mécanique à partir de 8080 .
Notez que PF est uniquement défini à partir de l'octet de poids faible de résultats plus larges, donc
test edi,edi
ne fonctionnerait pas pour une version x86-64. Il vous faudrait horizontalement jusqu'à 16 bits oupopcnt eax, edi
/and al,1
(0 étant la vérité).la source
C ++ (gcc) (-O0),
3631 octetsEssayez-le en ligne!
C ++ (clang) , 35 octets
Essayez-le en ligne!
Voici ma première tentative de code-golf, en espérant ne pas avoir enfreint une règle que j'ai peut-être manquée.
Edit:
- 5 octets enregistrés grâce à Frech: @ Jonathan remplacé
!=
par-
etreturn
pari=
(le dernier remplacement ne semble pas fonctionner avec clang bien)- Comme il semble y avoir un débat si je devrais utiliser abus gcc -O0, je pensais que je pouvais il suffit de donner les deux versions
la source
!=
au golf-
et quatre autres en jouantreturn
au golfi=
.gcc -O0
bidouillage stupide ? Ce n’est pas comme si la longueur de l’ensemble du passe-partout d’une langue importait beaucoup quand on comparait les implémentations. En outre, il est plus intéressant de choisir entrereturn
vs appel par référence (mise*i
à jour en place). Je préférerais écrire des réponses C ou C ++, et non des réponses non optimisées uniquement à gcc, car non optimisé-gcc n'est pas un langage très utile.SML , 32 octets
Explication:
%
est le nom de la fonctionn
est entré, renvoie (n +% (n // 2))% 2Fait par 2 étudiants Carnegie Mellon ennuyés
la source
Forth (gforth) , 53 octets
Essayez-le en ligne!
Explication
Prend le xor-sum des chiffres de la forme binaire du nombre. (divise à plusieurs reprises par 2 et xors le reste avec la valeur "somme")
Explication du code
la source
Java 8,
4036 octets-4 octets grâce à @Okx pour quelque chose que je n'aurais pas dû m'oublier moi-même ..
Essayez-le en ligne.
Explication:
Notez que l'encodage des caractères pour
0
et1
sont48
et49
, mais en les additionnant et en prenant modulo-2, les résultats sont corrects, car48%2 = 0
et49%2 = 1
.la source
n.toString(n,2)
enregistre 4 octets.~n.toString(n,2).chars().sum()%2
pour enregistrer un octet.0
et1
ne sont pas véridiques / falsey en Java, seulementbooleans
/Booleans
sont. Si un défi indique que deux sorties distinctes sont autorisées, elles<1
auraient pu être supprimées pour économiser 2 octets. :)Perl 6 , 21 octets
Essaye-le
Étendu:
la source
*.base(2)%9%%2
{:3(.base(2))%%2}
Retina 0.8.2 , 28 octets
Essayez-le en ligne! Le lien inclut des cas de test. Explication:
Convertir en unaire.
Conversion binaire partielle (laisse des zéros supplémentaires).
Supprimer tous les zéros.
Modulo les uns par deux.
Testez si le résultat est zéro.
la source
Assemblage x86,
12 à11 octets-1 octet grâce à la suggestion de @ ceilingcat
la source
inc eax
au lieu denot eax
. Vous pouvez également mentionner que cela nécessite un processeur prenant en charge l’popcnt
instruction.FrapperUtilitaires + GNU, 33
Essayez-le en ligne!
Lit les entrées de STDIN. Sorties 1 pour Vrai et 0 pour Faux.
dc
convertit l'entrée en chaîne binairetr
supprime les zéroswc
compte les restants (et le retour à la ligne final, ce qui corrige le sens de la logiquedc
calcule le compte mod 2 et affiche la réponsela source
Python 2,
2827 octetsEssayez-le en ligne!
Renvoie une valeur de vérité si exactement un
the ones-bit is a 1
etthe result of calling this function on n/2 is truthy
est vrai (oun==0
). Cela fonctionne parce que celan/2
équivaut à un décalage de bits correct avec division au sol (donc uniquement avec Python 2).Version alternative, également
2827 octetsEssayez-le en ligne!
Basé sur la méthode K & R de comptage des bits définis référencés par vazt.
Les deux pourraient être plus courts de deux octets si la sortie permettait à falsey de signifier le mal.
Edit: Merci à Amphibological pour la sauvegarde d’un octet!
la source
1
etor
pour enregistrer +1 octet. Belle solution!APL (Dyalog Unicode) , SBCS 10 octets
Fonction tacite anonyme. Peut prendre n'importe quel tableau d'entiers en argument.
Essayez-le en ligne!
2∘⊥⍣¯1
convertir en binaire, en utilisant autant de chiffres que nécessaire en fonction du nombre le plus grand, séparer les chiffres le long de l'axe principal1⍪
les préfixes le long de l'axe principal≠⌿
Réduction XOR le long de l'axe primairela source
J , 9 octets
Fonction tacite anonyme. Peut prendre n'importe quel tableau entier en argument.
Essayez-le en ligne!
1-
un moins (ie négation logique de)2|
le mod-2 de1#.
la somme (lit. l'évaluation de base 1) de#:
la représentation binairela source
2|1+1#.#: