Tâche
Avec deux entiers strictement positifs n et d en entrée, déterminez si n est divisible par d , c’est-à-dire s’il existe un entier q tel que n = qd
.
Vous pouvez écrire un programme ou une fonction et utiliser l’une quelconque de nos méthodes standard de réception d’entrée et de sortie.
Le résultat devrait être une valeur de vérité ou de fausseté ; vérité si n est divisible par d , et fausseté autrement.
Votre code doit uniquement gérer les entiers qu'il peut représenter de manière native, tant qu'il fonctionne pour tous les entiers signés 8 bits. Cependant, votre algorithme doit fonctionner pour des entiers arbitrairement grands.
Vous pouvez utiliser n'importe quel langage de programmation , mais notez que ces failles sont interdites par défaut.
C'est du code-golf , donc la réponse valide la plus courte - mesurée en octets - est gagnante.
Cas de test
n, d output
1, 1 truthy
2, 1 truthy
6, 3 truthy
17, 17 truthy
22, 2 truthy
1, 2 falsy
2, 3 falsy
2, 4 falsy
3, 9 falsy
15, 16 falsy
Classement
Le fragment de pile au bas de cet article génère le catalogue à partir des réponses a) sous forme de liste des solutions les plus courtes par langue et b) sous forme de classement global.
Pour vous assurer que votre réponse apparaît, commencez votre réponse par un titre, en utilisant le modèle Markdown suivant:
## Language Name, N bytes
où N
est la taille de votre soumission. Si vous améliorez votre score, vous pouvez conserver les anciens scores en les effaçant. Par exemple:
## Ruby, <s>104</s> <s>101</s> 96 bytes
Si vous souhaitez inclure plusieurs numéros dans votre en-tête (par exemple, parce que votre score est la somme de deux fichiers ou si vous souhaitez répertorier séparément les pénalités d'indicateur d'interprétation), assurez-vous que le score réel est le dernier numéro de l'en-tête:
## Perl, 43 + 3 (-p flag) = 45 bytes
Vous pouvez également faire du nom de la langue un lien qui apparaîtra ensuite dans l'extrait de code:
## [><>](http://esolangs.org/wiki/Fish), 121 bytes
<style>body { text-align: left !important} #answer-list { padding: 10px; width: 290px; float: left; } #language-list { padding: 10px; width: 290px; float: left; } table thead { font-weight: bold; } table td { padding: 5px; }</style><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="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><script>var QUESTION_ID = 86149; var ANSWER_FILTER = "!t)IWYnsLAZle2tQ3KqrVveCRJfxcRLe"; var COMMENT_FILTER = "!)Q2B_A2kjfAiU78X(md6BoYk"; var OVERRIDE_USER = 48934; 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.toLowerCase(), 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 > b.lang_raw) return 1; if (a.lang_raw < b.lang_raw) 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); } }</script>
Réponses:
Gelée , 1 octet
Cela m'a pris des heures pour jouer au golf.
Essayez-le en ligne!
la source
Brain-Flak ,
727064625846 octetsPrend dividende et diviseur (dans cet ordre) en tant qu'entrée et affiche le diviseur (vérité) ou rien. Comme chaque pile a une quantité implicite et infinie de zéros, une sortie vide doit être considérée comme falsifiée.
Bien qu'elle ne soit pas propre à la pile, cette solution utilise une seule pile.
Essayez-le en ligne!
Merci à @WheatWizard pour le golf de 2 octets!
Comment ça marche
Calcul du module, 42 octets
Le programme complet ci-dessus peut être modifié de manière triviale pour calculer le module à la place.
Comme auparavant, cette méthode n’est pas nettoyée, mais elle n’utilise qu’une seule pile. Un module de 0 laissera la pile vide, ce qui revient à peu près à laisser 0 ; chaque pile contient des zéros infinis.
Essayez-le en ligne!
Comment ça marche
Comparez les deux boucles du testeur de divisibilité et du calculateur de module.
La seule différence est l'emplacement de
{(<()>)}{}
, qui permute d et r si d = 0 . Pour calculer le module, nous effectuons cet échange après avoir décrémenté d et incrémenté r .Ce changement n’affecte pas le résultat si a% b> 0 , mais si a% b = 0 , il part (n, d, r) = (0, b, 0) - plutôt que (n, d, r) = (0, 0, b) - sur la pile.
Ainsi, pour obtenir le module, il suffit de faire apparaître n et d avec
{}{}
.Calcul du module d'empilement, 64 octets
L'algorithme de module de 42 octets n'est pas propre à la pile et ne peut donc pas être utilisé tel quel dans tous les programmes. La version suivante extrait dividende et diviseur (dans cet ordre) de la pile active et pousse le module en retour. Il n'a pas d'autres effets secondaires.
Cette solution est en grande partie basée sur l'enregistrement précédent de 72 octets de @ WheatWizard, mais elle enregistre 6 octets en ne changeant jamais de piles.
Essayez-le en ligne!
Comment ça marche
la source
x86_32 code machine, 8 octets
C'est ma première réponse au code de golf, alors j'espère que je respecte toutes les règles.
Cela appelle d'abord cdq pour effacer le registre edx, puis effectue une division signée sur le registre ecx, qui stocke le reste dans edx. La ligne de test edx, edx définira l'indicateur zéro si edx est égal à zéro, et sete met un 0 pour false si edx n'est pas nul et un 1 pour true si edx était 0.
Ceci est juste l'extrait de code qui contribue au nombre d'octets, mais pour le test, voici le code C que j'ai écrit avec l'assemblage en ligne, car il est plus facile de gérer les E / S de cette façon.
la source
Hexagonie,
15, 13, 1210 octetsLa langue préférée de tous les hexagones! :RÉ
TL; DR utilise des solutions magiques non formatées avec un nombre d'octets décroissant:
Sauvegardé de 2 octets grâce à l'assistant de présentation de @ MartinEnder.
@FryAmTheEggman a économisé 1 octet en utilisant les coins de manière plus créative
@MartinEnder et @FryAmTheEggman ont tous deux proposé une solution à 10 octets qui n'imprime rien pour les valeurs erronées.
Ma solution (15):
Non formaté:
Formaté:
La solution de @Martin Ender (13):
Non formaté:
Formaté:
Explication:
D'abord, nous obtenons l'entrée et prenons le module.
Ensuite, il vérifie si le module est 0 ou non. Si c'est le cas, l'IP tourne à gauche de 60 degrés, rebondit sur le miroir, définit la cellule sur 1 et imprime.
Ensuite, l'IP continue sur la quatrième ligne. Quand il atteint le
>
, il tourne à droite à la place (car la valeur de la cellule est maintenant 1). Il disparaît et revient dans le coin inférieur droit en direction du nord-ouest. L'IP frappe le<
, va le long de la rangée supérieure et revient dans le coin droit pour frapper la@
, arrêtant le programme.Si le module s'avère positif, l'IP tourne de 60 degrés vers la droite. Une fois sorti du coin inférieur droit, il continue sur le bord inférieur gauche en raison des règles d'enveloppement d'Hexagony. Le
'
est réutilisé pour que l'adresse IP aille dans une cellule contenant 0. L’IP parcourt ensuite la quatrième rangée, s’enroule autour de la seconde, atteint l’impression et se reflète dans le<
. Le reste du chemin@
est le même.C'est de la magie sérieuse.
Solution de FryAmTheEggman (12):
Non formaté:
Formaté:
Explication:
Comme les autres solutions, il obtient l’entrée et prend le module.
Ensuite, l'adresse IP est déviée dans le coin inférieur. Si le module est positif, il va sur le bord supérieur gauche. Le
?
n'a plus d'entrée, il met donc la cellule à 0. Le!
puis imprime le 0 et@
met fin au programme.Les choses sont beaucoup plus délicates lorsque le module est 0. Tout d'abord, il est décrémenté, puis réinitialisé à 0, puis à 1, puis imprimé. Ensuite, le 1 est décrémenté à 0. Après cela, le programme s'exécute comme au début jusqu'à ce qu'il essaie de le faire
0%0
. Cela le fait jeter une erreur silencieuse et quitter.J'aime beaucoup le truc d'erreur silencieux, mais un moyen plus simple serait de remplacer le
(
avec par de/
manière à ce que l'adresse IP passe par la première fois, mais se reflète dans@
la seconde.Solution collaborative (10):
Non formaté:
Formaté:
Ce programme démarre de la même manière que tous les autres programmes: il obtient l’entrée et le modifie.
Si l'entrée est 0, l'IP tourne à gauche quand il frappe
<
. Il est dévié dans1!@
, qui imprime 1 et quitte.Si l'entrée est positive, l'IP tourne à droite quand il frappe
<
. Il sort par le coin et longe le @ en haut à droite sans imprimer.la source
Flocons du cerveau
102, 98,96 octetsEww. Brut. Je pourrais poster une explication, mais je la comprends à peine moi-même. Cette langue me fait mal au cerveau.
Essayez-le en ligne!
Merci à l'utilisateur de github @Wheatwizard pour avoir fourni un exemple de module. Je n'aurais probablement pas pu comprendre cela moi-même!
En outre, la réponse plus courte est ici .
Explication éventuellement incorrecte:
Le reste est assez simple.
la source
The rest is pretty straightforward.
Oui, on dirait bien.Javascript (ES6)
171211 octetsla source
d=a=>b=>a%b<1
suivi ded(32,2)
dans la console JS ... je reçois simplement la réponsefunction b=>a%b<1
d(32)(2)
. Parce qued(32)
donnefunction b=>a%b<1
, vous devez alors appeler cette fonction avec votreb
valeurVim, 11 frappes
Pas mal pour une langue qui ne gère que des chaînes. :RÉ
la source
<C-Left>
-il? Impossible de le tester car il change de fenêtre sous mac> _>B
plutôt queb
(etCtrl
+Right
est l'équivalent deW
) - la différence est avec des caractères autres que des mots, mais dans ce cas, il fait exactement la même chose :) vimdoc.sourceforge.net/htmldoc/motion. html # <C-Gauche >Mathematica -
17 133 octetsMerci à @MartinEnder d'avoir économisé une tonne d'octets!
la source
Divisible[]
.Rétine, 12 octets
Prend une entrée unaire séparant les espaces, comme
111111111111 1111
vérifier si 12 est divisible par 4 . Imprime 1 (vrai) ou 0 (faux).Essayez-le en ligne!
FryAmTheEggman a sauvegardé deux octets.Oups, j'ai réécrit ma réponse pour prendre les arguments dans le bon ordre. (Puis Fry m'a battu dans les commentaires. Je suis lent à regex!)la source
^(1+)\1* \1$
cela fonctionnera.Lot, 20 octets
Les sorties
1
en cas de succès,0
en cas d'échec.la source
C #,
271312 octetsMerci à TuukkaX d’avoir signalé que des lambdas anonymes sont acceptables. Merci à David Conrad de m'avoir dirigé vers un currying dont je n'étais même pas conscient.
Bref et facile, puisque nous ne traitons que de nombres entiers que nous pouvons utiliser
<1
plutôt que de==0
sauvegarder un octet entier.la source
(a,b)=>a%b<1;
. +1a=>b=>a%b<1;
(remarque: vous devez alors l'appeler commef(a)(b)
plutôt quef(a,b)
)brainfuck, 53 octets
Prend l'entrée sous forme d'octets, la sortie est une valeur d'octet de
0x00
ou0x01
. C'est l' algorithme DivMod suivi d'une négation booléenne .Essayez-le en ligne - Il y a beaucoup de choses supplémentaires à
+
la fin pour que vous puissiez voir la sortie en ASCII.la source
Brain-Flak ,
8886 octetsIl s'agit d'une version plus dense de l'algorithme de test de divisibilité Brain-Flak original écrit par le
Dr Green Eggs, Iron ManDJMcMayhem et moi-même.Voici une brève explication de son fonctionnement:
Essayez-le en ligne!
la source
LOLCODE,
7464 octetsla source
O RLY?
Je ne savais pas ça! en changeant.BTW
Voici des conseils de golf.C, 60 octets
la source
+1
de moi. De plus, nous autorisons les fonctions afin que vous puissiez facilement raccourcir ceint f(a,b){return !(a%b);}
délai ou le rendre encore plus court.int f(a,b){return!(a%b);}
est de 25 octets, et si vous utilisez le bon compilateur, vous pouvez même le fairef(a,b){return!(a%b);}
pour 21 octets.#define f(a,b)!(a%b)
( lien idéal )Dyalog APL , 3 octets
Est-ce que zéro est égal au reste de la division?
la source
R,
22 à20 octetsComme d'habitude, lit deux nombres à partir de l'entrée qui se termine par une ligne vide.
Mise à jour: merci à Jarko Dubbeldam d' avoir supprimé 2 octets (malgré le fait que son édition ait été rejetée, cela a été très utile!).
la source
Java 8, 11 octets
Que diable, il existe des versions JS et C # de cela, pourquoi pas une version Java aussi?
Usage:
la source
a->b->a%b<1
Cela soulève une erreur de syntaxe, n'est-ce pas?Python, 16 octets
la source
lambda a,b:1.*a/b==a/b
, mais j'ai été très impressionné. C'est un morceau de code si complexe ...GolfScript, 3 octets
Explication:
Essayez-le en ligne!
la source
CJam,
64 octets2 octets sauvés grâce à Dennis
Essayez-le en ligne
la source
Brachylog , 2 octets
Essayez-le en ligne!
la source
Julia, 9 octets
Essayez-le en ligne!
la source
Fortran 95, 78 octets
la source
MarioLANG,
121109107 octets14 octets sauvés grâce à Martin Ender
Essayez-le en ligne!
Explication
L'algorithme consiste simplement à continuer à soustraire
d
den
pour voir si vous pouvez le faire un nombre entier de fois et ne pas avoir de reste.Tout d'abord, l'entrée est collectée.
n
est dans la première cellule,d
dans la seconde.C'est essentiellement la boucle principale. Il décrémente les première et deuxième cellules et incrémente la troisième.
Ceci est la sortie finale. Si, après l'incrémentation / la décrémentation, la première cellule est 0, nous avons éliminé
n
. Si après cela, la deuxième cellule (d
) est0
, puisd
est allé dansn
uniformément. Nous incrémentons et imprimons (1
). Sinon, revenez à la première cellule (qui est0
) et imprimez-la.Cette boucle se produit si la deuxième cellule est
0
après incrémentation et décrémentation. Il copie la troisième cellule dans la deuxième cellule. La partie inférieure consiste à contourner la boucle si la cellule ne l’est pas0
.la source
Tcl, 34 octets
Ma première / * réussite * / tentative dans codegolf! Ce code doit être exécuté dans le shell Tcl, sinon il ne fonctionnera pas.
Un octet grâce à @Lynn.
Quatre octets grâce à @Lynn et @LeakyNun (maintenant je comprends ce qu'il voulait dire)!
la source
?1:0
?$a%$b==0
reviendrait?exp $a%$b==0
?exp $a%$b<1
peut-être?PHP,
2322 octetsaffiche 1 pour true, chaîne vide (= rien) pour false
appel de cli avec
n
etd
comme arguments10 octets pour l'ancien PHP:
<?=$n%$d<1
la source
<?=!($A%$B)
. Les valeurs peuvent être transmises dans le cadre de votre$_SESSION
,$_COOKIE
,$_POST
,$_GET
ou (si je ne me trompe pas) sur$_ENV
.for PHP<5.4 with register_globals=On
. Mais je vais l'ajouter pour référence.for PHP<5.4 with register_globals=On
", car vous devez compter les octets de votrephp.ini
fichier contenantregister_globals=On
. Cependant, PHP 4.1 est un cas particulier. C'est la dernière version oùregister_globals=On
est la valeur par défaut, et la plupart des fonctions sont disponibles à partir de PHP 4.1 et plus. Cette version permet également l'utilisation d'autres fonctions, telles queereg
etsplit
sans avertissements.J, 3 octets
Usage:
Je reviendrai
1
. Et est équivalent à pseudocode10 MOD 2 EQ 0
Notez que cela ressemble beaucoup à la réponse APL , car J est inspiré profondément par APL
la source
PowerShell v2 +, 20 octets
Prend les entrées sous forme de deux arguments de ligne de commande
$args
,-join
les regroupe dans une chaîne avec%
comme séparateur, les tuyaux qui mènent àiex
(raccourci pourInvoke-Expression
et similaire àeval
). Le résultat est indifférent0
ou non nul; nous prenons donc la valeur booléenne non!
ce résultat, ce qui signifie soit$TRUE
ou$FALSE
(les entiers non nuls dans PowerShell sont véridiques). Ce booléen est laissé sur le pipeline et la sortie est implicite.Versions alternatives, également 20 octets chacune
Même concept, juste des manières légèrement différentes de structurer l'entrée. Merci à @DarthTwon pour ces informations.
Exemples
la source
param($a,$b)!($a%$b)
!($args[0]%$args[1])
Haskell,
1311 octetsCeci définit une nouvelle fonction
(!) :: Integral n => n -> n -> Bool
. Puisquemod n m
ne renvoie que des nombres positifs sin
etm
sont positifs, nous pouvons sauvegarder un octet en utilisant à la1>
place de0==
.Usage:
la source
((1>).).mod
.