var QUESTION_ID=124242,OVERRIDE_USER=61474;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:+r.match(SCORE_REG)[0],language:r.match(LANG_REG)[0].replace(/<\/?[^>]*>/g,"").trim(),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=/\d+((?=$)|(?= Bytes))/i,OVERRIDE_REG=/^Override\s*header:\s*/i;LANG_REG=/^[^,(\n\r]+/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/Sites/codegolf/all.css?v=617d0685f6f3"> <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>
42
zweimal.Antworten:
Mathematica, 15 Bytes
Die Byteanzahl setzt die Windows-ANSI-Codierung (CP-1252) voraus.
Definiert einen binären Operator
±
, der das Problem löst. Wir definieren einfach6±9=42
als einen Sonderfall, der Vorrang hat, und fügen dann eine Fallback-Definition hinzu, die der±
Multiplikation gleichkommt. Letzteres verwendet einen ziemlich interessanten Golftrick. Der Grund, warum dies funktioniert, ist ziemlich aufwändig und wir müssen uns Sequenzen ansehen . Eine Sequenz ähnelt dem, was in anderen Sprachen als Splat bezeichnet wird. Es ist im Grunde genommen eine "Liste" ohne Umhüllung. ZBf[1, Sequence[2, 3, 4], 5]
ist das wirklich gerechtf[1, 2, 3, 4, 5]
. Das andere wichtige Konzept ist, dass alle Operatoren nur syntaktischer Zucker sind. Insbesondere±
kann sie als unärer oder binärer Operator verwendet werden und den Kopf darstellenPlusMinus
. So±x
istPlusMinus[x]
unda±b
istPlusMinus[a,b]
.Jetzt haben wir die Definition
±n__
. Dies ist eine Abkürzung zum DefinierenPlusMinus[n__]
. Stellt abern__
eine beliebige Folge von Argumenten dar. Dies fügt also tatsächlich eine Definition für die binäre (und n-fache) Verwendung von hinzuPlusMinus
. Der Wert dieser Definition ist1n
. Wie multipliziert dies die Argumente? Nun,1n
verwendet die implizite Multiplikation von Mathematica durch Nebeneinanderstellung, so dass es äquivalent zu ist1*n
. Ist*
aber auch nur Abkürzung fürTimes[1,n]
. Nunn
ist Folge von Argumenten. Wenn wir also aufrufen,a±b
wird dies tatsächlich soTimes[1,a,b]
. Und das ist nur soa*b
.Ich denke, es ist ziemlich ordentlich, wie dieser Syntaxmissbrauch es uns ermöglicht, einen binären Operator mit unärer Syntax zu definieren. Wir könnten jetzt sogar
PlusMinus[2,3,4]
rechnen24
(was auch als±##&[2,3,4]
oder geschrieben werden kann,2±Sequence[3,4]
aber an diesem Punkt wird es einfach verrückt).quelle
*
ist ein eingebauter Operator, daher müssteUnprotect
er hinzugefügt werden,Unprotect[Times];6*9=42
sollte aber funktionieren (kann derzeit jedoch nicht getestet werden).Haskell , 14 Bytes
Probieren Sie es online!
quelle
C
32312928 Bytes-2 dank Digital Trauma
-1 dank musicman523
Ziemlich einfach. Deklariert eine Makrofunktion
f
mit zwei Argumentena
undb
.Wenn
a
ist6
undb
ist9
, kehre zurück42
. Andernfalls geben Siea
x zurückb
.Probieren Sie es online!
quelle
^
anstelle von==
und passen Sie die Logik ein wenig an:#define f(a,b)a^6||b^9?a*b:42
- Spart 2 Bytes.|
stattdessen ein||
anderes Byte speichern, da es immer noch eine niedrigere Priorität hat als^
JavaScript (ES6), 20 Byte
Erläuterung:
Iff x == 6 und y == 9 ist
x-6|y-9
0 (falsch) und 42 ist das Ergebnis.Snippet:
quelle
Python 2 ,
3029 BytesVielen Dank an Jonathan Allan für das Speichern eines Bytes!
Probieren Sie es online!
quelle
lambda x,y:x*[y,7][6==x==y-3]
05AB1E ,
15119 Bytes-4 Bytes dank @Emigna
-2 Bytes dank @Adnan
Probieren Sie es online!
Wie es funktioniert
quelle
‚D96SQi42ëP
,
am Anfang?6Qs9Q*
dass dies bei gleicher Byteanzahl auch funktioniert hätte.P¹69SQi42
Java (OpenJDK 8) ,
2422 Bytes-2 Bytes dank @ OlivierGrégoire
Probieren Sie es online!
quelle
System.out.println()
Aufruf entfernen und die Funktion das Ergebnis zurückgeben lassen?(a^6|b^9)==0
da es keinen impliziten "anders als 0" -Vergleich gibt. Das resultierende Code-Snippet wäre 27 Byte lang. Wie auch immer, danke für den Vorschlag und bitte sag mir, ob ich deinen Tipp falsch verstanden habe.int a = 5; if (a) do_some_stuff(); else do_other_stuff();
gibt das Snippet einenType mismatch: cannot convert from int to boolean
Kompilierungsfehler aus. Sie müssen explizit mit Booleschen Werten erstellt werden. beziehen sich auf SO und ORACLE .a->b->a==6&b==9?42:a*b
.Ruby, 24 Bytes
quelle
a^6|b^9<1
könnte als Boolean arbeiten. Schwer auf meinem Smartphone zu testen.(((a^6)|b)^9)
, dha.^(6).|(b).^(9)
, er funktioniert nicht richtig.a-6|b-9==0
würde funktionieren, aber das ist nicht kürzer.a,b==6,9
wäre nett, geht aber auch nicht.Brain-Flak ,
158154148140138126 BytesProbieren Sie es online!
Erläuterung
Dieser Code ist ziemlich einfach. Wir machen Kopien der beiden obersten Gegenstände auf dem Stapel, wir subtrahieren 6 von einem und 9 von dem anderen. Wir nehmen dann den
not
der beiden Werte. Wirand
diese Werte multiplizieren das Ergebnis mit 12. Multiplizieren Sie die Eingaben und subtrahieren Sie die beiden Ergebnisse.quelle
not
undand
(oder sie Graviszeichen), Lesen Ihrer Beschreibung eher ausgelöst mich.Faktor, 661 Bytes, 6 Kombinatoren mit 9 Verbindungen
Es gibt einen konstanten Kombinator, der für Ausgang A und B eingestellt ist. Ändern Sie diese, um den Eingang einzustellen.
Blueprint-Zeichenfolge (0.15.18):
Der Ausgang ist das Signal Z und ist vom oberen und unteren Entscheider zu entnehmen.
quelle
Gelee ,
87 BytesDie Eingabe erfolgt als Array von zwei Ganzzahlen: zuerst der rechte Operand, dann der linke.
Probieren Sie es online!
Wie es funktioniert
quelle
Faktor, 581 Bytes, 3 Kombinatoren mit 4 Verbindungen
Blueprint-Zeichenfolge (0.16.36):
Der Konstanten-Kombinator unten links sollte auf Ausgang A und B als Eingang eingestellt sein. Das Ausgangssignal ist das Signal Z des arithmetischen Kombinators unten rechts.
quelle
MATL , 11 Bytes
Die Eingabe ist ein Array mit den beiden Zahlen.
Probieren Sie es online!
Erläuterung
quelle
GW-BASIC , 55 Bytes
Ausgabe:
Die erste Maschine bei pcjs hat IBM BASIC, was praktisch dasselbe ist. Um dies zu testen, Kopf dort über, schlug Runauf der Maschine, Presse Enter- Enterund die Art ,
BASICA
um in BASIC - Modus. Geben Sie dann den Quellcode ein (er wird automatisch für Sie schön gedruckt), geben SieRUN
zwei ganze Zahlen ein und fertig!quelle
INPUT
in weniger Bytes codiert werden, als die Zeichen, aus denen sie bestehen, vermuten lassen. Die Zählung scheint mir daher hoch.wc
und bekam 55 ... In meinen Emulator kopiert und es hatte das erwartete Verhalten.OUT.BAS
: i.stack.imgur.com/32eH1.png Bytecount ist der mittlere Wert.R , 33 Bytes
Gibt eine Funktion zurück.
Probieren Sie es online!
quelle
Überprüfen Sie ,
3433 BytesCheck ist mein neuer Esolang. Es verwendet eine Kombination aus 2D- und 1D-Semantik.
Die Eingabe besteht aus zwei Zahlen, die über Befehlszeilenargumente übergeben werden.
Erläuterung
Der Stapel beginnt mit den Befehlszeilenargumenten. Nennen wir die Argumente
a
undb
.Der erste Teil
.:+&
dupliziert den Stapel im Wesentlichen und lässt ihn unveränderta, b, a, b
.>
Drückt 0 auf den Stapel (es ist Teil eines numerischen Literales, das durch ergänzt wird9
).#
wechselt zur 2D-Semantik undv
leitet die IP nach unten um. Die IP läuft sofort auf eine#
, die wieder auf 1D-Semantik umschaltet.9-!
prüft, obb
9 ist (indem 9 subtrahiert und das logische NOT genommen wird).\>6-!
prüft dann, oba
gleich 6 ist. Der Stack enthält nuna, b, 1, 1
genau dann, wennb==9
unda==6
. Das Multiplizieren mit*
ergibt das logische UND dieser beiden Werte und gibt an,a, b, 1
ob die Eingaben6
und9
unda, b, 0
andernfalls waren.Danach läuft die IP in eine
?
. Dies wechselt in den 2D-Modus, wenn der obere Stapelwert ungleich Null ist, und wird andernfalls im 1D-Modus fortgesetzt.Wenn der oberste Stapelwert war
1
, bedeutet dies, dass die anderen Stapelwerte6
und sind9
, also drücken wir 42 mit zum Stapel>42
und bewegen uns dann in#
der letzten Zeile nach unten zum zweiten .Wenn der obere Stapelwert war
0
, wird die Ausführung in die nächste Zeile verschoben.d
entfernt das0
(wie?
nicht), und dann multiplizieren wir die beiden Eingaben mit*
. Das##
Ein- und Ausschalten des 2D-Modus geschieht nicht.Die Filialen haben sich nun wieder zusammengeschlossen. Der Stapel enthält entweder
6, 9, 1, 42
odera*b
.p
druckt den obersten Stapelwert und beendet dann das Programm, wobei der Rest des Stapels verworfen wird.quelle
JavaScript (ES6), 25 Byte
quelle
Python 3 ,
3633 BytesProbieren Sie es online!
quelle
lambda x:x[0]*x[1]if x!=(6,9)else 42
. Der einzige Unterschied ist der Eingabetyp.f=lambda x,y:42if6==x==y-3else x*y
APL (Dyalog) , 10 Bytes
Probieren Sie es online!
×
das Produkt (der Argumente)-
Minus12×
zwölf mal6 9≡
ob (6,9) identisch ist mit,
die Verkettung (der Argumente)quelle
R, 41 Ich glaube, ich weiß nicht, wie man Bytes zählt. Ich bin neu: D
Ich definiere eine Funktion, deren Argumente a und b in dieser Reihenfolge sind . Wenn a gleich 6 und b gleich 9 ist, wird 42 zurückgegeben, andernfalls a mal b
quelle
ifelse(a==6&b==9,42,a*b)
function(a,b)`if`(a-6|b-9,a*b,42)
.SPL , 356 Bytes
Mit Zeilenumbrüchen und Leerzeichen:
quelle
Japt ,
131112 BytesProbieren Sie es online aus
21 Bytes gespart dank obarakon.quelle
N¬¥69?42:N×
für 11 BytesStandard ML (mlton) ,
2220 Bytes2 Bytes gespart dank @Laikoni!
Probieren Sie es online!
Dies ist die Art von Dingen, für die SML gedacht ist, weshalb es shortC und Python schlägt.
Die alte Version sah viel schöner aus. : P
quelle
$
als Bezeichner verwenden können! Warum wird das nicht kompiliert, wenn Sie das Leerzeichen zwischen|
und entfernen$
?|$
wird als einzelne symbolische Kennung analysiert, sodass alles kaputt geht. Ich plane, bald eine Frage mit Tipps für SML zu schreiben und eine Antwort auf diese beiden Arten von Bezeichnern hinzuzufügen.Pyth, 12 Bytes
Probieren Sie es online aus
Erläuterung
quelle
AQ?&q6Gq9G42*GH
Netzhaut , 36 Bytes
Probieren Sie es online! Standardmäßige unäre Multiplikation ändert nur die Eingabe, um den Sonderfall zu behandeln.
quelle
Gelee , 10 Bytes
Ein monadischer Link, der eine Liste der beiden Nummern erstellt.
Probieren Sie es online!
Wie?
quelle
?
können wie ich. ;),
es insofern besonders6,9
ist, als es Teil des wörtlichen Regex-Musters ist, also als einzelnes Token analysiert wird und das schnelle$
damit kombiniert werden kann⁼
. Haben Sie das begründet oder einfach versucht und festgestellt, dass es funktioniert hat?Gelee , 9 Bytes
Probieren Sie es online!
Übernimmt die Liste der Zahlen als Eingabe.
quelle
SILOS ,
8167 BytesProbieren Sie es online!
In gewisser Weise fungiert Addition als interessantes NAND-Gatter in SILOS.
-14 Bytes dank @Leaky Nun
Im Wesentlichen erstellen wir eine Zahl "a", die 0 (falsch) ist. Wenn j 6 und i = 9 ist, dividieren wir es durch sich selbst, subtrahieren eins und multiplizieren es mit 12, um zu unserem Produkt hinzuzufügen.
Wenn "a" nach dem Subtrahieren von Eins und Multiplizieren 1 war, wird es ein No-Op. In dem Fall jedoch, in dem a 0 ist, wirft 0/0 stillschweigend einen Fehler (der automatisch abgefangen wird), und wird dann 0 -1 und wir subtrahieren 12 von unserem Produkt.
quelle
0/0
wird0
.Konvex ,
161413 BytesProbieren Sie es online!
quelle
shortC , 23 bytes
Probieren Sie es online!
quelle