Aufgabe
Gegeben seien zwei streng positive ganze Zahlen n und d als Eingabe, bestimmen , ob n ist teilbar durch d , das heißt, wenn es vorhanden ist eine ganze Zahl q derart , daß n = qd
.
Sie können ein Programm oder eine Funktion schreiben und eine unserer Standardmethoden zum Empfangen und Bereitstellen von Eingaben verwenden.
Die Ausgabe sollte ein wahrer oder falscher Wert sein . wahr, wenn n durch d teilbar ist , und falsch, wenn nicht.
Ihr Code muss nur Ganzzahlen verarbeiten, die er nativ darstellen kann, solange er für alle vorzeichenbehafteten 8-Bit-Ganzzahlen funktioniert. Ihr Algorithmus muss jedoch für beliebig große ganze Zahlen funktionieren.
Sie können jede Programmiersprache verwenden , beachten Sie jedoch, dass diese Lücken standardmäßig verboten sind.
Das ist Code-Golf , also gewinnt die kürzeste gültige Antwort - gemessen in Bytes .
Testfälle
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
Bestenliste
Das Stapel-Snippet am Ende dieses Beitrags generiert den Katalog aus den Antworten a) als Liste der kürzesten Lösungen pro Sprache und b) als Gesamt-Bestenliste.
Um sicherzustellen, dass Ihre Antwort angezeigt wird, beginnen Sie Ihre Antwort mit einer Überschrift. Verwenden Sie dazu die folgende Markdown-Vorlage:
## Language Name, N bytes
Wo N
ist die Größe Ihres Beitrags? Wenn Sie Ihren Score zu verbessern, Sie können alte Rechnungen in der Überschrift halten, indem man sich durch das Anschlagen. Zum Beispiel:
## Ruby, <s>104</s> <s>101</s> 96 bytes
Wenn Sie mehrere Zahlen in Ihre Kopfzeile aufnehmen möchten (z. B. weil Ihre Punktzahl die Summe von zwei Dateien ist oder wenn Sie die Strafen für Interpreter-Flags separat auflisten möchten), stellen Sie sicher, dass die tatsächliche Punktzahl die letzte Zahl in der Kopfzeile ist:
## Perl, 43 + 3 (-p flag) = 45 bytes
Sie können den Namen der Sprache auch als Link festlegen, der dann im Snippet angezeigt wird:
## [><>](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>
Antworten:
Gelee , 1 Byte
Ich brauchte Stunden zum Golfen.
Probieren Sie es online!
quelle
Brain-Flak ,
727064625846 BytesNimmt Dividende und Divisor (in dieser Reihenfolge) als Eingabe und druckt den Divisor (wahr) oder nichts. Da jeder Stapel eine implizite, unendliche Anzahl von Nullen enthält, sollte eine leere Ausgabe als falsch betrachtet werden.
Diese Lösung ist zwar nicht stapelrein, verwendet jedoch nur einen Stapel.
Probieren Sie es online!
Vielen Dank an @WheatWizard für das Golfen mit 2 Bytes!
Wie es funktioniert
Modulberechnung, 42 Bytes
Das obige vollständige Programm kann in trivialer Weise modifiziert werden, um stattdessen den Modul zu berechnen.
Wie zuvor ist diese Methode nicht stapelrein, sondern verwendet nur einen einzelnen Stapel. Bei einem Modul von 0 bleibt der Stapel leer, was in etwa 0 entspricht . Jeder Stapel enthält unendlich viele Nullen.
Probieren Sie es online!
Wie es funktioniert
Vergleichen Sie die beiden Schleifen des Teilbarkeitstesters und des Modul-Rechners.
Der einzige Unterschied ist der Ort von
{(<()>)}{}
, der d und r vertauscht, wenn d = 0 ist . Um den Modul zu berechnen, führen wir diesen Austausch durch, nachdem wir d dekrementiert und r inkrementiert haben .Diese Änderung wirkt sich nicht auf das Ergebnis aus, wenn a% b> 0 ist. Wenn jedoch a% b = 0 ist , bleibt (n, d, r) = (0, b, 0) - und nicht (n, d, r) = (0, 0, b) - auf dem Stapel.
Um den Modul zu erhalten, müssen wir also nur n und d mit popen
{}{}
.Berechnung des Stack-Clean-Moduls, 64 Byte
Der 42-Byte-Modulalgorithmus ist nicht stapelrein und kann daher nicht wie in allen Programmen verwendet werden. In der folgenden Version werden Dividende und Divisor (in dieser Reihenfolge) aus dem aktiven Stapel entfernt und der Modul zurückgesetzt. Es hat keine anderen Nebenwirkungen.
Diese Lösung basiert größtenteils auf dem vorherigen 72-Byte-Datensatz von @ WheatWizard, spart jedoch 6 Byte, da die Stapel nie gewechselt werden.
Probieren Sie es online!
Wie es funktioniert
quelle
x86_32-Maschinencode, 8 Byte
Dies ist meine erste Code-Golf-Antwort. Hoffentlich befolge ich alle Regeln.
Dies ruft zuerst cdq auf, um das edx-Register zu löschen, und führt dann eine vorzeichenbehaftete Division des ecx-Registers durch, das den Rest in edx speichert. Die Zeile test edx, edx setzt das Null-Flag, wenn edx Null ist, und sete setzt eine 0 für false, wenn edx nicht Null war, und setzt eine 1 für true, wenn edx 0 war.
Dies ist nur das Code-Snippet, das zur Anzahl der Bytes beiträgt. Zum Testen ist hier der C-Code, den ich mit der Inline-Assembly geschrieben habe, da es auf diese Weise einfacher ist, mit E / A umzugehen.
quelle
Hexagony,
15, 13, 1210 BytesJedermanns liebste hexagonbasierte Sprache! : D
TL; DR arbeitet mit magischen, unformatierten Lösungen in abnehmender Byteanzahl:
Dank des Layout-Assistenten von @ MartinEnder wurden 2 Bytes eingespart.
@FryAmTheEggman sparte 1 Byte, indem die Ecken kreativer genutzt wurden
Sowohl @MartinEnder als auch @FryAmTheEggman haben eine 10-Byte-Lösung entwickelt, die nichts für falsche Werte ausgibt.
Meine Lösung (15):
Unformatiert:
Formatiert:
@Martin Enders Lösung (13):
Unformatiert:
Formatiert:
Erläuterung:
Zuerst erhalten wir die Eingabe und nehmen den Modul.
Dann wird geprüft, ob der Modul 0 ist oder nicht. Ist dies der Fall, dreht sich die IP um 60 Grad nach links, springt vom Spiegel ab, setzt die Zelle auf 1 und druckt.
Dann fährt die IP mit der vierten Reihe fort. Wenn es das erreicht
>
, dreht es sich stattdessen nach rechts (weil der Wert der Zelle jetzt 1 ist). Es geht oob und kommt in der unteren rechten Ecke in Richtung NW zurück. Die IP trifft die<
, geht in die oberste Reihe und kehrt in die rechte Ecke zurück, um die zu treffen@
und das Programm zu stoppen.Wenn der Modul positiv ausfällt, dreht sich die IP um 60 Grad nach rechts. Sobald es in der rechten unteren Ecke ausgeht, wird es aufgrund der Umbruchregeln von Hexagony am linken unteren Rand fortgesetzt. Das
'
wird wiederverwendet, um die IP in eine Zelle mit 0 zu verschieben. Die IP wandert dann entlang der vierten Reihe, läuft zur zweiten um, trifft auf print und spiegelt sich in der<
. Der Rest des Weges zum@
ist der gleiche.Das ist eine ernsthafte Zauberei.
@ FryAmTheEggmans Lösung (12):
Unformatiert:
Formatiert:
Erläuterung:
Wie die anderen Lösungen erhält es den Eingang und nimmt den Modul auf.
Dann wird die IP in die untere Ecke abgelenkt. Wenn der Modul positiv ist, wird er am oberen linken Rand angezeigt. Der
?
hat keine Eingabe mehr, also setzt er die Zelle auf 0. Der gibt!
dann die 0 aus und der@
beendet das Programm.Die Dinge sind viel schwieriger, wenn der Modul 0 ist. Zuerst wird er dekrementiert, dann auf 0 zurückgesetzt, dann auf 1 gesetzt und dann gedruckt. Dann wird die 1 auf 0 dekrementiert. Danach wird das Programm so wie am Anfang ausgeführt, bis es dies versucht
0%0
. Das macht es zu einem stillen Fehler und beendet.Ich mag die stille Fehler Trick, sondern ein einfacher Weg wäre, das zu ersetzen ,
(
mit/
so dass die IP ersten Mal durchläuft, wird aber in reflektiert@
die zweite.Kollaborative Lösung (10):
Unformatiert:
Formatiert:
Dieses Programm startet wie alle anderen Programme, empfängt die Eingabe und modifiziert sie.
Wenn der Eingang 0 ist, wird die IP nach links gedreht, wenn sie trifft
<
. Es wird abgelenkt1!@
, was 1 ausgibt und beendet.Wenn der Eingang positiv ist, wird die IP nach rechts gedreht, wenn sie trifft
<
. Es tritt durch die Ecke aus und geht am oberen rechten Rand entlang, wobei es auf das @ trifft, ohne zu drucken.quelle
Brain-Flak
102, 98,96 BytesEww. Brutto. Ich könnte eine Erklärung posten, aber ich verstehe sie selbst kaum. Diese Sprache tut meinem Gehirn weh.
Probieren Sie es online!
Vielen Dank an github user @Wheatwizard für die Erstellung eines Modulbeispiels . Ich hätte das wahrscheinlich nicht selbst herausfinden können!
Auch die kürzere Antwort ist hier .
Möglicherweise falsche Erklärung:
Der Rest ist ziemlich unkompliziert.
quelle
The rest is pretty straightforward.
Ja, es scheint so.Javascript (ES6)
171211 Bytesquelle
d=a=>b=>a%b<1
gefolgt vond(32,2)
in der JS - Konsole ... ich einfach die Antwortfunction b=>a%b<1
d(32)(2)
. Dad(32)
gibtfunction b=>a%b<1
, müssen Sie dann diese Funktion mit Ihremb
WertVim, 11 Tastenanschläge
Nicht schlecht für eine Sprache, die nur Zeichenfolgen verarbeitet. : D
quelle
<C-Left>
das? Kann es nicht testen, weil es Windows auf Mac> _> wechseltB
eher das Äquivalent zu alsb
(undCtrl
+Right
ist das Äquivalent zuW
) - der Unterschied liegt bei Nicht-Wort-Zeichen, aber in diesem Fall tut es genau dasselbe :) vimdoc.sourceforge.net/htmldoc/motion. html # <C-Left >Mathematica -
17 133 BytesVielen Dank an @MartinEnder für das Speichern einer Menge Bytes!
quelle
Divisible[]
.Retina, 12 Bytes
Nimmt eine durch Leerzeichen getrennte Eingabe in Unary auf, um
111111111111 1111
zu prüfen, ob 12 durch 4 teilbar ist . Gibt 1 (wahr) oder 0 (falsch) aus.Probieren Sie es online!
FryAmTheEggman sparte zwei Bytes.Hoppla, habe meine Antwort umgeschrieben, um die Argumente in die richtige Reihenfolge zu bringen. (Dann hat mich Fry in den Kommentaren geschlagen. Ich bin langsam im Regex!)quelle
^(1+)\1* \1$
wird funktionieren.Batch, 20 Bytes
Ausgaben
1
bei Erfolg,0
bei Misserfolg.quelle
C #,
271312 BytesDank an TuukkaX für den Hinweis, dass anonyme Lambdas akzeptabel sind. Vielen Dank an David Conrad, der mich auf Currys aufmerksam gemacht hat, von denen ich nicht einmal wusste, dass es eine Sache ist.
Kurz und gut, da wir nur sind mit ganzen Zahlen zu tun können wir verwenden ,
<1
statt==0
und ein ganzes Byte speichern.quelle
(a,b)=>a%b<1;
. +1.a=>b=>a%b<1;
(Hinweis: Sie müssen es dann alsf(a)(b)
anstatt aufrufenf(a,b)
)Brainfuck, 53 Bytes
Nimmt die Eingabe als Byte, die Ausgabe ist ein Byte-Wert von
0x00
oder0x01
. Es ist der DivMod-Algorithmus, gefolgt von der Booleschen Negation .Online ausprobieren -
+
Beinahe am Ende gibt es ein paar Extras,damit Sie die Ausgabe in ASCII sehen können.quelle
Brain-Flak ,
8886 BytesDies ist eine dichtere Version des ursprünglichen Brain-Flak-Teilbarkeitstest-Algorithmus , der von
Dr. Green Eggs und Iron ManDJMcMayhem und mir selbst geschrieben wurde.Hier ist eine kurze (ish) Erklärung, wie es funktioniert:
Probieren Sie es online!
quelle
LOLCODE,
7464 Bytesquelle
O RLY?
Ich wusste das nicht! Ändern.BTW
Hier gibt es Golftipps.C 60 Bytes
quelle
+1
von mir. Wir erlauben auch Funktionen, so dass Sie diese leicht aufint f(a,b){return !(a%b);}
oder möglicherweise sogar noch kürzer kürzen können.int f(a,b){return!(a%b);}
beträgt 25 Bytes, und wenn Sie den richtigen Compiler verwenden, können Sie sogarf(a,b){return!(a%b);}
21 Bytes verwenden.#define f(a,b)!(a%b)
( ideone link )Dyalog APL , 3 Bytes
Ist Null gleich dem Divisionsrest?
quelle
R,
22-20BytesLiest wie gewohnt zwei Zahlen aus der Eingabe, die durch eine Leerzeile abgeschlossen wird.
Update: Vielen Dank an Jarko Dubbeldam für das Abschneiden von 2 Bytes (trotz der Tatsache, dass seine Bearbeitung abgelehnt wurde, war es sehr hilfreich!).
quelle
Java 8, 11 Bytes
Was zum Teufel, es gibt JS- und C # -Versionen davon, warum nicht auch eine Java-Version?
Verwendungszweck:
quelle
a->b->a%b<1
Dies löst einen Syntaxfehler aus, nicht wahr?Python, 16 Bytes
quelle
lambda a,b:1.*a/b==a/b
, war aber ziemlich beeindruckt. Dies ist ein so komplexes Stück Code ...GolfScript, 3 Bytes
Erläuterung:
Probieren Sie es online!
quelle
CJam,
64 Bytes2 Bytes gespart dank Dennis
Probieren Sie es online aus
quelle
Brachylog , 2 Bytes
Probieren Sie es online!
quelle
Julia, 9 Bytes
Probieren Sie es online!
quelle
Fortran 95, 78 Bytes
quelle
MarioLANG,
121109107 Bytes14 Bytes gespart dank Martin Ender
Probieren Sie es online!
Erläuterung
Der Algorithmus ist einfach zu halten Subtrahieren
d
vonn
zu sehen , wenn Sie es eine ganze Anzahl von Zeiten tun und keinen Rest haben.Zunächst wird die Eingabe gesammelt.
n
ist in der ersten Zelle,d
in der zweiten.Dies ist im Wesentlichen die Hauptschleife. Es dekrementiert die erste und die zweite Zelle und inkrementiert die dritte.
Dies ist die endgültige Ausgabe. Wenn nach dem Inkrementieren / Dekrementieren die erste Zelle 0 ist, haben wir beseitigt
n
. Wenn danach die zweite Zelle (d
) steht0
, dannd
ging dasn
eben hinein. Wir erhöhen und drucken (1
). Andernfalls gehen Sie zurück zur ersten Zelle (die ist0
) und drucken Sie sie aus.Diese Schleife tritt auf, wenn sich die zweite Zelle
0
nach dem Inkrementieren und Dekrementieren befindet. Es kopiert die dritte Zelle in die zweite Zelle. Der Teil am unteren Rand dient dazu, die Schleife zu umgehen, wenn dies bei der Zelle nicht der Fall ist0
.quelle
Tcl, 34 Bytes
Mein erster / * erfolgreicher * / Versuch im Codegolf! Dieser Code muss in der Tcl-Shell ausgeführt werden, da er sonst nicht funktioniert.
Ein Byte dank @Lynn.
Vier Bytes dank @Lynn und @LeakyNun (jetzt verstehe ich was er meinte)!
quelle
?1:0
?$a%$b==0
zurückkehren?exp $a%$b==0
?exp $a%$b<1
vielleicht doch?PHP,
2322 BytesGibt 1 für true aus, leere Zeichenfolge (= nichts) für false
Aufruf von CLI mit
n
undd
als Argumente10 Bytes für altes PHP:
<?=$n%$d<1
quelle
<?=!($A%$B)
. Die Werte können als Teil Ihrer weitergegeben werden$_SESSION
,$_COOKIE
,$_POST
,$_GET
oder (wenn ich mich nicht irre) über$_ENV
.for PHP<5.4 with register_globals=On
. Aber ich werde es als Referenz hinzufügen.for PHP<5.4 with register_globals=On
" sagen , da Sie die Bytes Ihrerphp.ini
Datei zählen müssenregister_globals=On
. PHP4.1 ist jedoch ein Sonderfall.register_globals=On
Dies ist die letzte Version, in der der Standardwert verwendet wird. Die meisten Funktionen sind ab PHP4.1 verfügbar. Diese Version ermöglicht auch die Verwendung anderer Funktionen, wieereg
undsplit
ohne Warnungen.J, 3 Bytes
Verwendungszweck:
Wir werden wiederkommen
1
. Und ist gleichbedeutend mit Pseudocode10 MOD 2 EQ 0
Beachten Sie, dass dies der APL-Antwort sehr ähnlich ist , da J stark von APL inspiriert ist
quelle
PowerShell v2 +, 20 Byte
Nimmt als Eingabe zwei Befehlszeilenargumente
$args
,-join
s sie zusammen in einen String mit%
als Separator, Rohrleitungen , die zuiex
(kurz fürInvoke-Expression
und ähnlicheeval
). Das Ergebnis ist entweder0
oder ungleich Null, daher nehmen wir den Booleschen Wert nicht!
von diesem Ergebnis, was entweder$TRUE
oder bedeutet$FALSE
(Ganzzahlen ungleich Null in PowerShell sind wahr). Dieser Boolesche Wert verbleibt in der Pipeline und die Ausgabe ist implizit.Alternative Versionen, jeweils auch 20 Bytes
Gleiches Konzept, nur leicht unterschiedliche Strukturierung der Eingabe. Vielen Dank an @DarthTwon für die Bereitstellung.
Beispiele
quelle
param($a,$b)!($a%$b)
und!($args[0]%$args[1])
Haskell,
1311 BytesDies definiert eine neue Funktion
(!) :: Integral n => n -> n -> Bool
. Damod n m
nur positive Zahlen zurückgegeben werden, wennn
undm
positiv sind, können wir ein Byte speichern, indem wir1>
anstelle von verwenden0==
.Verwendungszweck:
quelle
((1>).).mod
.