var QUESTION_ID=84260,OVERRIDE_USER=8478;function answersUrl(e){return"https://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"https://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>
5 16
wird als eingegeben005 016
Antworten:
Gelee , 1 Byte
Probieren Sie es online!
Funktioniert auch in 05AB1E, Actually, APL, Braingolf, ,,, (Kommata), Factor, Forth, Implicit, J, Julia, K, Kdb, Keg, Ly, MATL, Pyke, Deorst und Q.
quelle
Minecraft 1.10, 221 Zeichen (nicht konkurrierend)
Sehen Sie, damit müssen wir uns befassen, wenn wir Minecraft-Karten erstellen.
Nebenbei: Es gibt keine Möglichkeit, in Minecraft eine Zeichenfolge einzugeben. Ich betrüge also ein bisschen, indem ich Sie dazu bringe, die Zahlen in das Programm selbst einzugeben. (Es ist einigermaßen gerechtfertigt, da bei einigen Karten, wie z. B. Minecraft Bingo von Lorgon111, Befehle kopiert und in den Chat eingefügt werden müssen, um eine Zahl einzugeben.)
Vielen Dank für den Block Labels MCEdit Filter.
Nicht konkurrierend aufgrund von Schwierigkeiten bei der Eingabe, und ich habe keine Ahnung, wie man Bytes in diesem Ding zählt (das Blytes-System ist fehlerhaft für Befehlsblöcke).
quelle
0,1,2
Eine andere Lösung wäre, 2 Bytes und Ausgabe auf 9-Draht, aber wäre viel weniger Golf.Binäre Lambda-Rechnung , 4,125 Bytes
Eingabe und Ausgabe als Kirchenzahlen .
Im Lambda-Kalkül ist es λ m . λ n . λ f . λ x . m f ( n f x ).
De Bruijn-Index : λ λ λ 4 2 (3 2 1)
Die Lambda-Rechnung ist eine prägnante Methode zur Beschreibung einer Abbildung (Funktion).
Zum Beispiel kann diese Aufgabe als λ x geschrieben werden . λ y . x + y
Zu beachten ist, dass dies kein Lambda (Funktion) ist, das zwei Argumente akzeptiert. Dies ist eigentlich ein verschachtelter Lambda. Es verhält sich jedoch wie ein Lambda, das zwei Argumente akzeptiert, sodass es informell als solches beschrieben werden kann. Jedes Lambda enthält formal nur ein Argument.
Wenn wir zum Beispiel dieses Lambda auf 3 und 4 anwenden:
Das erste Lambda gibt also tatsächlich ein anderes Lambda zurück.
Kirchenzahlen sind eine Möglichkeit, die zusätzlichen Zeichen zu beseitigen, indem nur Lambda-Symbole und -Variablen übrig bleiben.
Jede Zahl im Kirchensystem ist tatsächlich ein Lambda, das angibt, wie oft die Funktion auf einen Gegenstand angewendet wird.
Sei die Funktion f und der Gegenstand x .
Die Zahl 1 würde also λ f entsprechen . λ x . f x , was bedeutet, dass f genau einmal auf x angewendet wird.
Die Zahl 3 wäre beispielsweise λ f . λ x . f ( f ( f x )), was bedeutet, dass f genau dreimal auf x angewendet wird.
Wenn Sie also zwei Church-Ziffern (z. B. m und n ) addieren , ist dies dasselbe wie das Anwenden von f auf x , m + n .
Wir können beobachten , dass dies die gleichen wie erste Anwendung ist f auf x , n - mal, und dann die Anwendung f auf den resultierenden Punkt m mal.
Zum Beispiel 2 würde bedeuten
f(f(x))
und 3 würde bedeutenf(f(f(x)))
, so 2 + 3 sein würdef(f(f(f(f(x)))))
.Zur Anwendung f auf x , n - mal, haben wir n f x .
Sie können m und n als Funktionen anzeigen , die informell zwei Argumente annehmen.
Dann wenden wir f erneut auf diesen resultierenden Gegenstand an, m mal: m f ( n f x ).
Dann addieren wir die Kesselplatte zurück, um λ m zu erhalten . λ n . λ f . λ x . m f ( n f x ).
Jetzt müssen wir es in den De Bruijn-Index konvertieren .
Erstens zählen wir den "relativen Abstand" zwischen jeder Variablen zur Lambda-Deklaration. Zum Beispiel hätte das m einen Abstand von 4, weil es als 4 Lambda "vor" deklariert wird. In ähnlicher Weise hätte das n einen Abstand von 3, das f hätte einen Abstand von 2 und das x hätte einen Abstand von 1.
Also schreiben wir es als diese Zwischenform: λ m . λ n . λ f . λ x . 4 2 (3 2 1)
Dann entfernen wir die Variablendeklarationen und hinterlassen: λ λ λ 4 2 (3 2 1)
Jetzt konvertieren wir es in eine binäre Lambda-Rechnung .
Die Regeln sind:
00
.01 m n
.1
i mal +0
, zum Beispiel 4 wird11110
.λ λ λ λ 4 2 (3 2 1)
Λ λ λ λ
11110
110
(1110
110
10
)Λλλλ
11110
110
0101 111011010
Λλλλ
0101
111101100101111011010
≡
00
00
00
00
0101
111101100101 111011010
≡
000000000101111101100101111011010
quelle
Common Lisp, 15 Bytes
quelle
(+(read)(read))
Stapel Katzen , 8 + 4 = 12 Bytes
Laufen Sie mit den
-mn
Fahnen. Probieren Sie es online!Golfen in Stack Cats ist sehr intuitiv, so dass dieses Programm mit ein paar Tagen Brute Forcing gefunden wurde. Zum Vergleich: Eine intuitivere, von Menschen geschriebene Lösung, die die
*(...)>
Vorlage verwendet, ist zwei Byte länger-ln
stattdessen mit den Flags (eine Erklärung finden Sie unten in diesem Beitrag).Erläuterung
Hier ist eine Einführung zu Stack Cats:
-m
oder-l
weggelassen werden. Hier wird das-m
Flag verwendet, so dass das obige halbe Programm tatsächlich zu erweitert wird]_:]_!<X>!_[:_[
.<
und>
bewegt einen Stapel nach links und einen nach rechts.-n
bezeichnet numerische E / A.Und hier ist eine Spur des erweiterten vollständigen Programms
]_:]_!<X>!_[:_[
:a+b
wird dann ausgegeben, wobei die Basis -1 ignoriert wird. Beachten Sie, dass der schwierigste Teil dieser Lösung darin besteht, dass der Ausgabestapel einen-1
am unteren Rand haben muss, andernfalls würde ein Ausgabestapel von nur[-1]
die Basis -1 ignorieren, und ein Ausgabestapel von[0]
würde dazu führen, dass die Basis Null verschluckt wird (aber eine Ausgabe Stapel von[2]
würde zum Beispiel gut ausgeben2
).Nur zum Spaß finden Sie hier die vollständige Liste der verwandten Lösungen mit derselben gefundenen Länge (die Liste ist möglicherweise nicht vollständig):
Die
*(>-_:[:)>
Lösung ist länger, aber intuitiver zu schreiben, da die*(...)>
Vorlage verwendet wird. Diese Vorlage wird<(...)*(...)>
bei Verwendung mit dem-l
Flag erweitert. Dies bedeutet:Als solches
*(...)>
bedeutet das Template, dass die erste Schleife übersprungen, aber die zweite ausgeführt wird. Dies ermöglicht eine einfachere Programmierung, da wir uns nicht um die Auswirkungen der Schleife in der anderen Hälfte des Programms kümmern müssen.In diesem Fall ist das Innere der Schleife:
Das Finale
>
in der Vorlage bewegt uns dann zurück zum Eingabestapel, woa+b
es ausgegeben wird.quelle
Brain-Flak , 6 Bytes
Probieren Sie es online!
Brain-Flak ist eine wirklich interessante Sprache mit zwei Haupteinschränkungen.
Die einzigen gültigen Zeichen sind Klammern, dh eines dieser Zeichen:
Ein Satz von Klammern, zwischen denen sich nichts befindet, wird als "Nilad" bezeichnet. Eine Nilade erzeugt einen bestimmten numerischen Wert, und alle diese Niladen nebeneinander werden addiert. Ein Satz von Klammern mit etwas dazwischen wird als "Monade" bezeichnet. Eine Monade ist eine Funktion, die ein numerisches Argument akzeptiert. Die Klammern innerhalb einer Monade werden also ausgewertet, und das ist das Argument für die Monade. Hier ist ein konkreteres Beispiel.
Der
()
Nilad ist gleich 1. Also der folgende Brain-Flak-Code:Wird mit 3 bewertet. Die
()
Monade verschiebt den Wert auf dem globalen Stapel in sich. Also folgendesdrückt eine 3. Der
{}
Nullpunkt fügt den Wert oben auf dem Stapel ein. Da immer aufeinanderfolgende Nullen hinzugefügt werden, summiert eine Reihe von Nullen{}
alle obersten Elemente auf dem Stapel. Mein Code lautet also im Wesentlichen:quelle
Minecraft 1.10.x,
924512 BytesVielen Dank an @ quat für die Reduzierung des Blytecount um 48 Punkte und des Bytecount um 412.
Okay, also, ich habe einige der Ideen aus dieser Antwort genommen und eine eigene Version erstellt, außer dass diese einen nicht negativen Input akzeptieren kann. Eine Version finden Sie hier im Strukturblockformat.
(neue version sieht irgendwie langweilig aus)
Ähnliche Befehle wie die andere Antwort:
Um Zahlen einzugeben, laichen Sie eine Reihe von Kühen und Schweinen. Kühe repräsentieren den Wert "n" und Schweine den Wert "m". Das Befehlsblock-System tötet nach und nach die Kühe und Schweine und weist die erforderlichen Werte zu.
Diese Antwort setzt voraus, dass Sie sich in einer Welt ohne natürlich vorkommende Kühe oder Schweine befinden und dass die in "n" und "m" gespeicherten Werte bei jedem Lauf gelöscht werden.
quelle
execute @e[type=Pig] ~ ~ ~ scoreboard players add m a 1
, so dass Sie keine Form von Uhr benötigen.Netzhaut , 42 Bytes
Probieren Sie es online!
Erläuterung
Das Hinzufügen von Zahlen in unary ist die einfachste Sache der Welt, aber wenn Sie negative Zahlen einführen, werden die Dinge fummelig ...
Wir beginnen damit, die Zahlen in unäre Zahlen umzuwandeln. Dies geschieht, indem jede Zahl mit
\d+
abgeglichen und durch ersetzt wird$*
. Dies ist eine Retina-spezifische Substitutionsfunktion. Die vollständige Syntax lautetcount$*character
und fügtcount
Kopien von eincharacter
. Beides kann weggelassen werden, wenncount
standardmäßig$&
(dh die Übereinstimmung selbst) undcharacter
standardmäßig1
. Für jede Eingabe erhaltenn
wir also einen
und wir haben immer noch mögliche Minuszeichen sowie das Leerzeichen-Trennzeichen. ZB Eingang8 -5
gibt:Um nun mit negativen Zahlen umgehen zu können, ist es am einfachsten, eine separate
-1
Ziffer zu verwenden. Wir werden-
für diesen Zweck verwenden.Diese Phase macht zwei Dinge. Es wird das Leerzeichen, die führenden Minuszeichen, entfernt und das
1
s nach einem Minuszeichen in sich-
selbst umgewandelt. Dies erfolgt durch Abgleichen|-1+
(dh entweder ein Leerzeichen oder eine negative Zahl) und Durchführen einer Transliteration darauf. Die Transliteration geht von1p
bis-_
, wird aber hierp
auf alle druckbaren ASCII-Zeichen erweitert und_
bedeutet Löschen. Also werden1
s in diesen Matches zu-
s und Minuspunkte und Leerzeichen werden entfernt. Unser Beispiel sieht nun so aus:In dieser Phase wird der Fall behandelt, in dem der Eingang eine positive und eine negative Zahl enthält. Wenn ja, wird es
1
s und-
s in der Zeichenfolge geben, und wir möchten, dass sie abbrechen. Dies geschieht, indem zwei Zeichen mit einer Wortgrenze zwischen ihnen abgeglichen werden (da1
s als Wortzeichen betrachtet wird und-
nicht) und die Übereinstimmung durch nichts ersetzt wird. Das+
weist Retina an, dies wiederholt zu tun, bis sich die Saite nicht mehr ändert.Jetzt haben wir nur noch
1
s oder nur noch-
s.Um dies wieder in eine Dezimalzahl umzuwandeln, wird die gesamte Eingabe abgeglichen, wenn möglich wird jedoch eine
-
In-Gruppe erfasst1
. Wir schreiben die Gruppe zurück1
(um-
negative Zahlen vor a zu stellen) und schreiben dann die Länge der Übereinstimmung mit zurück$.&
(ebenfalls ein Retina-spezifisches Substitutionsmerkmal).quelle
range
in Retina zu implementieren . Ich habe es ein paar Mal versucht, aber die Negative sind ein Schmerz.Dominosteine , 38.000 Bytes oder 37 Kacheln
Dies wird in Tabletop Simulator erstellt . Hier ist ein Video und hier ist die Datei . Es ist ein Standard-Halbaddierer, der aus einem
and
Gatter für den2^1
Platzwert und einemxor
Gatter für den2^0
Platzwert besteht.Einzelheiten
2^1
und die rechte ist2^0
[Schwarz] .100%
quelle
Haskell, 3 Bytes
Die Klammern stehen hier, da es sich um eine Präfixfunktion handeln muss. Dies ist dasselbe, als würde man einen Abschnitt der Funktion + nehmen, es werden jedoch keine Argumente angewendet. Es funktioniert auch mit einer Vielzahl von Typen, wie z. B. richtig implementierten Vektoren, Matrizen, komplexen Zahlen, Gleitkommazahlen, Doppelwerten, Rationalen und natürlich ganzen Zahlen.
Da dies Haskell ist, erfahren Sie hier, wie Sie dies auf Typebene tun. Dies erfolgt zur Kompilierungszeit anstatt zur Laufzeit:
Code aus Haskell Wiki angepasst
quelle
Mathematica,
42 BytesDurchgestrichen
4ist immer noch regulär 4 ...Tr
bei einer eindimensionalen Liste wird die Summe der Elemente der Liste berechnet.quelle
Gleichstrom, 2 Bytes
Fügt die beiden obersten Elemente des Stapels hinzu (die zuvor entnommen wurden
stdin
) und kopiert den Inhalt des Stapels instdout
.BEARBEITEN: Nach weiteren Überlegungen scheint es mehrere Möglichkeiten zu geben, dies abhängig vom gewünschten E / A-Verhalten zu implementieren.
Ich nehme an, die vollständigste Form für die Summe wäre:
Warten! In einer Zeile können zwei durch ein Leerzeichen getrennte Zahlen stehen! Das gibt uns:
quelle
+f
, hierdc -e "?+p"
funktioniert es.+f
Version funktioniert, wenn Sie bereits (genau zwei) Zahlen auf den Stapel gelegt haben. Ich wusste nicht wirklich, ob es sich umdc
I / Ostd(in|out)
oder den Stack handelt. Im Nachhinein war das die am wenigsten vernünftige Option, um ganz oben zu stehen. : /Shakespeare Programming Language ,
155152 BytesUngolfed:
Ich verwende den SPL-Compiler von drsam94 , um dies zu kompilieren. Zu testen:
quelle
Brachylog , 2 Bytes
Erwartet eine Liste mit den beiden Zahlen als Eingabe
Alternativ, wenn Sie die Antwort auf
STDOUT
:quelle
JavaScript (ES6), 9 Byte
quelle
PHP, 20 Bytes
Diesmal überraschend kurz:
Läuft von der Kommandozeile aus wie:
quelle
php sum.php 1 2 3 4 5 6
so dass ich nicht 100% sicher bin, ob das in Ordnung ist.-r
Flag ausführen - dann ist es kein Problem mehr.Cheddar, 3 Bytes
Dies ist eine coole Funktion von Cheddar, die als "funktionalisierte Operatoren" bezeichnet wird. Der Preis für diese Idee geht an @ CᴏɴᴏʀO'Bʀɪᴇɴ.
Hier sind weitere Beispiele für funktionalisierte Operatoren:
quelle
Python,
113 Bytesint.__add__
Ein einfacher Spezialoperator.
quelle
Geometry Dash - 15 Objekte
Endlich fertig.
15 Objekte sind nicht viel, aber es war immer noch ein Albtraum, dies zu tun (besonders wegen der negativen Zahlen).
Da ich hier 15 Bilder einfügen müsste, um dies zu reproduzieren, habe ich das Level gerade hochgeladen. Die Level-ID lautet 5216804. In der Beschreibung erfahren Sie, wie Sie es ausführen und können es kopieren, da es kopierbar ist.
Erläuterung:
Der Trigger oben links (Instant Count 2) prüfte, ob der erste Addend 0 war. Wenn dies der Fall war, prüfte er, ob der zweite Addend positiv oder negativ war. Wenn es positiv ist, überträgt es den Wert vom zweiten Addend auf die Summe (BF-Stil, unter Verwendung von Schleifen), und wenn es negativ ist, tut es dasselbe.
Der Grund, warum wir prüfen müssen, ob der zweite Addend positiv oder negativ ist, ist, dass wir einen vom zweiten Addend subtrahieren und einen zur Summe addieren oder einen zum zweiten Addend addieren und einen von der Summe subtrahieren müssen.
Wenn der erste Summand nicht Null ist, wird anhand des obigen Prozesses geprüft, ob er positiv oder negativ ist. Nach einer Iteration in der while-Schleife wird geprüft, ob das erste Addend Null ist, und wenn dies der Fall ist, wird der zu Beginn der Erläuterung beschriebene Prozess ausgeführt.
Da Geometry Dash BF bemerkenswert ähnlich ist, können Sie daraus eine BF-Lösung erstellen.
quelle
MATL, 1 Byte
Akzeptiert ein Array mit zwei Ganzzahlen als Eingabe und summiert sie. Während das einfache Programm von
+
auch funktioniert, wurde dies bereits für andere Sprachen gezeigt.Probieren Sie es online
quelle
Perl 5.10, 8 Bytes
Die zwei hinzuzufügenden Zahlen müssen sich in zwei separaten Zeilen befinden, damit diese funktionieren:
Versuchen Sie dieses hier.
Eine mit Eingabe in derselben Zeile ( 14 + 1 Byte für -a Flag )
Probieren Sie es hier aus!
Eine mit Eingabe in derselben Zeile ( 19 + 1 Byte für -a Flag )
Versuchen Sie dieses hier.
Eine andere, indem das Standardtrennzeichen des Arrays geändert wird ( 19 + 1 Byte auch für -a Flag )
Versuchen Sie dieses hier!
quelle
-p
Flagge.say$F[0]+$F[1]
,say pop()+pop
Werke (in Strawberry 5.20.2 mit getestet-E
) und spart Ihnen ein Byte.Fuzzy Octo Guacamole , 1 Byte
Eine Funktion, die Eingaben vom oberen Rand des Stapels entgegennimmt und durch Drücken auf den Stapel ausgibt.
Beispiel läuft in der REPL:
quelle
Batch,
251816 BytesBearbeiten:
79 Bytes mit meinem Trick aus Alternating Sign Sequence gespeichert .quelle
PowerShell v2 +, 17 Byte
Nimmt Eingaben als zwei separate Befehlszeilenargumente entgegen, die im speziellen Array vorbelegt werden
$args
. Wir bilden mit dem-join
Operator eine Zeichenfolge , indem wir sie zusammen mit einem+
in der Mitte verketten und diese Zeichenfolge dann anInvoke-Expression
(ähnlich wieeval
) weiterleiten.Vielen Dank an @DarthTwon, der mich daran erinnert hat, dass es bei solch minimalen Programmen mehrere Methoden gibt, Eingaben bei gleicher Bytezahl zu erfassen.
PowerShell ist nichts, wenn nicht flexibel.
quelle
$args[0]+$args[1]
param($a,$b)$a+$b
> <> ,
763 BytesOnline-Dolmetscher
Oder probieren Sie es auf TIO mit dem Flag -v.
Probieren Sie es online aus
quelle
+
aus: Sie würde zwei Zahlen aus dem Stapel entfernen und das Ergebnis ihrer Addition wieder auf den Stapel setzen. Die Kosten von-v
könnten auch vermieden werden, da das Lesen der Zahlen vor dem Funktionsaufruf hätte erfolgen können.C 35 Bytes
Was ich hier gemacht habe, ist die definierte Addition ohne die Verwendung von Booleschen oder arithmetischen Operatoren. Dies macht x rekursiv zu den Summenbits von 'xor' und y zu den Übertragsbits von 'und', bis es keinen Übertrag mehr gibt. Hier ist die ungolfed Version:
quelle
MATLAB, 4 Bytes
1 Byte entfernt dank @LeakyNun
Dies ist eine anonyme Funktion, die ein Array annimmt und die Summe angibt. Beispiel Verwendung:
quelle
sum
?@sum
eine gültige Antwort ist. Oder gibt es einen anderen Metakonsens?GoLScript , 1 Byte (nicht konkurrierend)
Fügt die obersten 2 Zahlen auf dem Stapel hinzu. Das ist es.
Nun, wie man sie auf den Stapel schiebt , ich habe keine Ahnung. Ich glaube nicht, dass es möglich ist. Husten @ CᴏɴᴏʀO'Bʀɪᴇɴ Husten
quelle
Explanation soon to be coming.
- Riker 3. Juli 16Shakespeare Programming Language (SPL),
137 -135 ByteGesamtprogramm Golf:
Und eine kurze Erklärung:
Ich bin mir nicht sicher, ob dies der kürzeste Weg ist. Überprüfen Sie die offizielle Seite für weitere Informationen.
Edit 1: Das
:
After wurde entferntAct I
undScene I
es scheint, dass alles nach der römischen Ziffer ignoriert wird, wodurch 2 Bytes gespart werden.quelle
x86_32-Maschinencode, 2 Byte
Unter der Annahme, dass sich die beiden Werte bereits in den Registern ecx und eax befinden, werden durch Ausführen des Befehls add die Werte der beiden Register addiert und das Ergebnis im Zielregister gespeichert.
Sie können das vollständige Programm in C und Inline-Assembly hier sehen . Das Schreiben des Wrappers in C erleichtert das Bereitstellen von Eingaben und das Testen, die eigentliche Additionsfunktion kann jedoch auf diese beiden Bytes reduziert werden.
quelle
ret
Anweisung (ein Byte). Und das unter der Annahme einer benutzerdefinierten Aufrufkonvention,eax
die als Argument-Passing-Register verwendet wird. (Die Irvine32 asm-Lehrbibliothek tut dies, aber keine Standardaufrufkonventionen für x86-32 oder x86-64 tun dies, im Gegensatz zu ARM, bei dem das Rückgabewertregisterr0
auch das erste arg-übergebende Register ist.) Benutzerdefinierte Aufrufkonventionen sind in Ordnung asm funktioniert jedoch, sodass Sie es für Microsoft oder gcc nicht in 3 Bytelea (%ecx, %edx), %eax
+ 1 Byte ändern müssen .ret
__fastcall
-mregparm
pop
ist nur 1 Byte, aberesp
-relative Adressierungsmodi benötigen ein SIB-Byte. So könnte eine Caller-Pops-Aufrufkonventionpop %ecx
(die Rücksprungadresse)pop %eax
/pop %edx
/add %edx, %eax
(2 Bytes) /jmp *%ecx
(2 Bytes) = 7 Bytes insgesamt sein. vs.mov 4(%esp), %eax
(4B) /add 8(%esp), %eax
(4B) /ret
= 9 Bytes oder 11 Bytes für eine Anrufer-Pops - Version , dass die Verwendungret imm16
, wenn ich das richtig gemacht habe. Es ist ein zusätzliches 1 Byte für das SIB mit ESP als Basis und ein zusätzliches 1 Byte für das disp8 in jedem INSN.