Herausforderung
Bei zwei Ganzzahlen A
und B
als Eingabe müssen Sie ein Programm schreiben, das if A>B
, A==B
or ausgibt A<B
.
Die Ganzzahlen liegen in einem angemessenen Bereich, der von Ihrer Sprache unterstützt wird und mindestens 256 Werte enthält.
Ihr Programm kann entweder ein vollständiges Programm oder eine Funktion sein, die über STDIN oder Funktionsargumente eingegeben wird.
Ausgänge
Wenn A>B
ausgegeben
A is greater than B
Wenn A==B
ausgegeben
A is equal to B
Wenn A<B
ausgegeben
A is less than B
Wo Sie ersetzen A
und B
für ihre ganzzahligen Werte.
Gewinnen
Das kürzeste Programm in Bytes gewinnt.
Bestenliste
var QUESTION_ID=55693,OVERRIDE_USER=8478;function answersUrl(e){return"http://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"http://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>
Antworten:
CJam, 47
Probieren Sie es online aus
Erläuterung:
quelle
[A B]
und]
aus Ihrem Code entfernen.~_~
...Python 2,
959476 BytesDie Eingabe muss durch Kommas getrennt sein.
quelle
cmp(A,B)
ist und tut? :)Labyrinth ,
180152149 BytesBearbeiten: Es ist gelungen, 3 Bytes zu sparen , indem
10
zwischen101
,103
und108
(die Zeichencodes vone
,g
undl
) wiederverwendet wurden . Die folgende Erklärung spiegelt dies nicht wider, ist jedoch keine wesentliche Änderung.Erläuterung
Wir können nicht viel tun, um Bytes für das Drucken der Zeichenfolgen zu sparen, das sind nur lange lineare Abschnitte. Die größte Herausforderung beim Golfen besteht also darin, große Mengen unnötiger Leerzeichen zu vermeiden. Das heißt, wir möchten, dass die linearen Teile aus der äußersten linken Spalte "herausstrahlen". Durch die Wiederverwendung des gedruckten Codes können wir noch mehr Einsparungen erzielen
than B
. Schauen wir uns also den Kontrollfluss hier an:Das Programm startet mit einem Gitterrotationsbefehl
<
. Dies verschiebt die aktuelle Zeile zyklisch mit der IP nach links.Jetzt befindet sich die IP in einer isolierten Zelle und führt denselben Befehl immer wieder aus, während sich die IP
<
weiter nach links bewegt, bis ...Zu diesem Zeitpunkt muss die IP irgendwo hin und führt den ersten linearen Abschnitt (die zweite Reihe) von rechts nach links aus. Was es tut, ist zu lesen
A
, zu kopieren, zu drucken. Verbrauchen Sie das Trennzeichen zwischen den Zahlen, dem Druckis
(und den Leerzeichen). Dann lesenB
, kopieren Sie sie und ziehenA
von ihm an der-
.Zu diesem Zeitpunkt haben wir die erste "Weggabelung" getroffen. Wenn sich die Differenz ergibt
0
, bewegt sich die IP immer geradeaus in Richtung des untersten Zweigs. Dieser Zweig druckt einfachequal to
und dannB
.Andernfalls biegt die IP nach links in Richtung der beiden No-Ops ab
""
. Dann gibt es noch eine Gabelung. Wenn die Differenz negativ war, nimmt die IP eine weitere Linke in Richtung des langen oberen Zweigs. Dieser Zweig druckt einfachgreater than
und dannB
.Wenn die Differenz positiv war, nimmt die IP einen Rechtsanschlag auf den unteren Zweig, der gedruckt wird
less
. Jetzt wollen wir diethan
aus dem anderen Zweig wiederverwenden . Gleichzeitig wollen wir die beiden Niederlassungen aber später nicht verbinden, weil wir eine ganze Reihe unnötiger Leerzeichen benötigen würden. Stattdessen verwenden wir einige No-Ops, um den unteren Zweig an der Stelle auszurichten,than
an der der obere Zweig beginnt, und beginnen dann erneut mit der Bearbeitung der Quelle^
:Auch diesmal wird die IP isoliert, also
^
erneut ausgeführt und wir bekommenJetzt kann die IP weiter nach rechts gehen
than
undB
nach Bedarf drucken .quelle
JavaScript (ES6), 66 Byte
Definiert eine anonyme Funktion. Testen
f=
Sie, indem Sie davor hinzufügen , und nennen Sie es wiealert(f(4, 5))
Leider sind durch das wiederholte "als" keine Einsparungen zu erzielen.
quelle
than
.public void c(int a,int b){System.out.print(a+" is "+(a==b?"equal to ":a>b?"greater than ":"smaller than ")+b);}
alert()
sollten der Partitur 7 für hinzugefügt werden.alert()
als Teil Ihres Codes und der Anzahl der Bytes zählenJava,
114113 Bytes oder74 7267, wenn wir die Lambda-Notation verwendenVielen Dank an Kevin Cruijssen für die Currying-basierte Lösung:
a->b->a+" is "+(a==b?"equal to ":(a>b?"greater":"less")+" than ")+b
Alte Pre-Lambda-Lösung
als benutzer hjk bedeutung im kommentar, wenn wir lambda verwenden, können wir bis zu 74 bytes deutlich machen.
quelle
than
:)public
wenn Sie möchten. Ich würde vorschlagen, daraus ein Lambda zu machen. Sie können das Leerzeichen vor dem entfernen{
.a->b->a+" is "+(a==b?"equal to ":(a>b?"greater":"smaller" )+" than ")+b
Ja, mir ist bewusst, dass es fast zwei Jahre her sind. ;) Und du kannst in der Tatless
stattsmaller
anhand der Challenge-Beschreibung verwenden, wie in den beiden obigen Kommentaren erwähnt. Probieren Sie es hier aus, um zu sehen, wie das Curry gemacht wird.R, 80 Bytes
quelle
function(A,B)cat(A,"is",if(A==B)"equal to"else c(if(A>B)"greater"else"less","than"),B)
.Pyth,
5249 Bytesquelle
Julia,
6966 BytesDiese verwendet String Interpolation einzubetten
A
,B
und das ternäre in einem einzigen String.3 Bytes gespart dank Glen O.
quelle
Perl,
6463 Bytes62 Bytes + 1 Byte für
-p
. Nimmt Eingaben von STDIN entgegen, wobei die beiden Zahlen durch ein einzelnes Leerzeichen getrennt sind:Wie es funktioniert:
Der
<=>
Operator gibt -1, 0 oder 1 zurück, je nachdem, ob der erste Operand kleiner, gleich oder größer als der zweite ist. Praktischerweise erlaubt Perl negative Indizes mit Arrays und Slices, wobei sich das letzte Element an Position -1 befindet, das vorletzte Element an Position -2 und so weiter.Im Code
Wir verwenden den Rückgabewert von
<=>
als Index in einem Listenabschnitt, um die entsprechende Zeichenfolge abzurufen, wobei$`
die erste und$'
die zweite Zahl ist.Um Wiederholungen zu vermeiden
than
,x
wird als Platzhalter verwendet und am Ende in einer zweiten Ersetzung ersetzt.Alternative Lösung, 63 Bytes
62 Bytes + 1 Byte für
-p
. Übernimmt die durch Leerzeichen getrennte Eingabe von STDIN wie bei der ersten Lösung.Wie es funktioniert:
Diese Lösung verwendet auch ein Slice, nutzt jedoch die Tatsache, dass im Gegensatz zu Listen-Slices Array-Slices in Strings (und die RHS von Substitutionen) interpoliert werden können. Auf diese Weise können Sie den
/e
Modifikator und die Anführungszeichen im Substitutionsoperator löschen.Der wahre Trick steckt im Slice-Index:
Für die verschiedenen Werte von
<=>
ergibt dies:Wenn ein Array oder ein Array-Slice in eine Zeichenfolge interpoliert wird, werden die Elemente automatisch durch
$"
(standardmäßig ein einzelnes Leerzeichen) verbunden.quelle
Maus , 79 Bytes
Wenn Zeichenfolgen gefunden werden, werden sie sofort in STDOUT geschrieben und nicht auf den Stapel gelegt. Der Stapel kann nur ganze Zahlen enthalten.
Ungolfed:
quelle
GolfScript, 61 Bytes
Erwartet 2 Ganzzahlen auf dem Stapel. Probieren Sie es online aus .
Wie es funktioniert:
\.@.@
- A und B sind bereits auf dem Stapel, und dieser Code Stück macht den Stapel sieht wie folgt aus :ABBA
.\
Vertauscht die beiden obersten Elemente auf dem Stapel,.
dupliziert das oberste Element und@
dreht die drei obersten Elemente (1 2 3
->2 3 1
).Dann werden drei Elemente auf den Stapel gelegt: das
=
Zeichen"equal to "
und der Block dazwischen{}
. Dieif
Anweisung führt Folgendes aus: Wenn das erste Argument true ergibt, wird der erste Codeblock (das zweite Argument) ausgeführt, andernfalls der zweite Codeblock (das dritte Argument). Wenn also A und B gleich sind, wird "gleich" auf dem Stapel gedrückt. Wenn sie nicht gleich sind, wird der Code zwischen den Blöcken ausgeführt. Beachten Sie, dass=
die beiden obersten Elemente aus dem Stapel entfernt werden, sodass der Stapel jetzt wie folgt aussiehtAB
.Im Inneren des Blocks sehen Sie zuerst
.@.@
. Vor diesen Befehlen sieht der Stapel so ausAB
und danach sieht der Stapel so ausBAAB
. Die Befehle sind ähnlich wie die oben genannten.Dann gibt es noch eine andere
if
Aussage. Dieses Mal wird geprüft, ob A> B ist, und wenn dies der Fall ist, wird der Stack auf "größer" gesetzt. Sonst drückt es "weniger" auf den Stapel. Nachdem Sie eine dieser beiden Optionen gedrückt haben, wird "than" auf den Stapel verschoben und mit der vorherigen geschobenen Zeichenfolge verkettet.>
Außerdem werden die beiden obersten Elemente des Stapels geöffnet, sodass der Stapel jetzt wie folgt aussiehtBA"string"
.Die nächsten drei Befehle sind:
" is "\+
." is "
Schiebt diese Zeichenfolge auf den Stapel (Stapel sieht aus wieBA"string"" is "
),\
vertauscht die beiden obersten Elemente (Stapel sieht aus wieBA" is ""string"
) und+
verkettet die beiden obersten Elemente (Stapel sieht aus wieBA" is string"
).Der letzte Befehl,
@
dreht sich die drei Stapel Elemente, so dass nun der Stapel wie folgt aussieht:A" is string"B
. GolfScript druckt die Stapelwerte automatisch auf STDOUT, sobald das Programm beendet ist, und Sie erhalten die gewünschte Ausgabe.quelle
MATLAB, 105 Bytes
Es wurde ein Zeilenumbruch vor dem Sprint hinzugefügt, um die Lesbarkeit zu verbessern. Es funktioniert sowohl mit als auch ohne diesen Zeilenumbruch, daher ist es nicht in der Byteanzahl enthalten. Muss die Eingabetaste zwischen den beiden Eingabenummern drücken.
quelle
sprintf
!Bash, 76
quelle
Fortran, 129
Fortran Arithmetik ist perfekt für diese Herausforderung
Test: ideone
quelle
Bash,
9486 Bytes (8 Bytes dank Digital Trauma eingespart)Test (unter Linux):
Die Verwendung von
[ ]
afterp=greater
soll verhindern, dass der||
Operator vor=
dem Ausdruck ausgewertet wird...&&p=greater||(($1<$2))...
(Operator-Priorität!).Die Alternative wäre die Verwendung von Klammern um
(($1>$2))&&p=greater
und(($1<$2))&&p=less
, aber Klammern bieten inneren Spielraum für Variablen undp
würden daher unverändert bleiben.quelle
p=equal;q=than;(($1>$2))&&p=greater&&[ ]||(($1<$2))&&p=less||q=to;echo $1 is $p $q $2
IA-32 Maschinencode + Linux, 107 Bytes
Hexdump des Codes:
Aufgrund von Hardwareeinschränkungen funktioniert der Code mit Zahlen im Bereich von 0 bis 255.
Quellcode (kann mit gcc zusammengestellt werden):
Dies ist ein schwerwiegender Missbrauch des Stapels! Der Code erstellt die Ausgabenachricht vom Ende bis zum Anfang auf dem Stapel. Zum Schreiben von 4 Bytes wird eine einzelne
push
Anweisung verwendet. Zum Schreiben von 1 Byte werden zwei Anweisungen verwendet:Glücklicherweise sind die meisten zu schreibenden Fragmente 4 Bytes. Einer von ihnen ("gre" in "größer") ist 3 Bytes; Es wird durch Drücken von 4 Bytes und anschließendes Entfernen eines Bytes gehandhabt:
Die Routine, die Zahlen in Dezimalform schreibt, verwendet den
aam
Befehl, um wiederholtax
durch zu teilen10
. Es ist vorteilhaft, dass es die Ziffern von rechts nach links berechnet!Da zwei Zahlen zu schreiben sind, verwendet der Code eine Unterroutine, die zweimal aufgerufen wird. Da die Subroutine jedoch die Ergebnisse auf den Stapel schreibt, verwendet sie ein Register, um die Rücksprungadresse zu speichern.
C-Code, der den obigen Maschinencode aufruft:
Ausgabe:
quelle
ShortScript , 98 Bytes
Diese Antwort ist nicht konkurrierend, da ShortScript nach dieser Herausforderung veröffentlicht wurde.
quelle
Fourier ,
14774 BytesWettbewerbsverbot, da das Drucken von Zeichenfolgen neuer ist als diese Herausforderung
Probieren Sie es auf FourIDE!
Keine Ahnung, warum ich das Drucken vorher nicht zugelassen habe ... Es macht den Code lesbar und eignet sich hervorragend zum Golfen
quelle
101
und zuweisen116
, richtig? Ich bin nicht sicher, wie / ob der variable Bereich behandelt wird.C
15513612783 Bytesquelle
Haskell, 87 Bytes
Ein Byte kürzer als Otomos Ansatz.
quelle
Lua, 118 Bytes
Ich sehe hier nicht genug Antworten von Lua, also ...
Ungolfed:
quelle
Python 2, 78 Bytes
Ich mag, wie
cmp()
nützlich es ist, aber es wurde in Python 3 entfernt .Verwenden einer anonymen Funktion:
Keine Funktion verwenden (79 Bytes):
quelle
JavaScript,
151 104 100 9592 BytesIch habe es geschafft, mit Hilfe von edc65 zu verkürzen
quelle
var a
deklariert die Variable a. Sie müssen es aus vielen guten Gründen in echtem Code verwenden. Aber es ist optional in Javascript und um zu vermeiden, dassvar
Sie 4 Zeichen sparenC # 6,
11310310095 BytesDanke an edc65 für das Speichern von 13 Bytes und an cell001uk für das Speichern von 5 Bytes unter Verwendung der interpolierten Strings von C # 6 !
quelle
void C(int a,int b){System.Console.Write("A is {0} B",a==b?"equal to":a>b?"greater than":"less than");}
Write("{0} is {1:greater than;less than;equal to} {2}",a,a-b,b)
rs , 105 bytes
Das nachfolgende und vorangestellte Leerzeichen ist sehr wichtig!
Live-Demo und alle Testfälle.
quelle
Pyth,
575553 BytesDies macht im Grunde:
2 Bytes gespart dank des Vorschlags von @ AlexA.,
A
Anstelle vonJ
undK
weitere 2 Bytes zu verwenden, indem der gesamte Additionsfehler durch eine einfachere Subtraktion ersetzt wurde.Live-Demo und Testfälle.
55-Byte-Version
Live-Demo und Testfälle.
57-Byte-Version:
Live-Demo und Testfälle.
quelle
AQs[Gd"is"d?<GH"less than"?>GH"greater than""equal to"dH
A
anstelle vonJ
und verwendetK
, wodurch 2 Bytes gespart wurden.O, 67 Bytes
Live-Demo.
quelle
SWI-Prolog, 94 Bytes
quelle
Swift,
10592 Bytenoch kürzer mit Swift 2.0 (
10390 Byte)quelle
Verarbeitung, 92 Bytes
quelle