Intro
Ein Freund hat diese Frage heute auf eine etwas andere Weise gestellt: "Kann ein einzelner [Python] -Befehl die größte von einigen Ganzzahlen bestimmen UND dass sie nicht gleich sind?".
Wir haben zwar keine Möglichkeit gefunden, dies mit vernünftigen Definitionen von "einem einzigen Befehl" zu tun , aber ich dachte, es könnte ein Spaß machen, Golf zu spielen.
Herausforderung
Msgstr " Gibt die größte einer Liste von ganzen Zahlen zurück, wenn diese nicht alle gleich sind. "
Genauer:
Gegeben eine Zeichenfolge, die nur eine durch Kommas getrennte Liste von Ganzzahlen enthält:
- Wenn sie alle gleich sind, geben Sie nichts zurück / aus
- Anderenfalls geben Sie den größten zurück / aus
Regeln
- Die Eingabe muss eine Zeichenfolge sein, die nur eine durch Kommas getrennte Liste von Ganzzahlen enthält
- Die Ausgabe muss entweder nichts (keine Ausgabe jeglicher Art) oder das größte Element der Eingabe sein, das so dargestellt wird, wie es in der Eingabe enthalten ist
Einträge können ein vollständiges Programm oder nur eine Funktion sein, vorausgesetzt, Sie bieten eine Möglichkeit, sie zu testen!
Annahmen
- Angenommen, die Elemente der Eingabeliste dürfen mehr als eine Ziffer enthalten, jedoch nicht größer als (2 32 - 1).
- Angenommen, die Eingabeliste enthält nicht mehr als eine Million Elemente
- Angenommen, die Eingabe enthält keine negativen Werte
- Angenommen, die Eingabe ist niemals leer
Zur Vermeidung von Zweifeln sollte die Erklärung der Herausforderung, die direkt nach "Genauer" angegeben wird, die Aussage der Herausforderung darüber ersetzen ("Return the greatest ...").
Beispiele
(1) Alle gleich:
Input: 1,1
Output:
(2) Unähnlich:
Input: 1,2
Output: 2
(3) Null !:
Input: 0,0,0,0,0,0,0,1,0,0
Output: 1
(4) Zufällig:
Input: 7,3,8,4,8,3,9,4,6,1,3,7,5
Output: 9
(5) Größere Zahlen, größere Liste:
Input: 627,3894,863,5195,7789,5269,8887,3262,1448,3192
Output: 8887
Zusätzliche Beispiele:
(6) Alle gleich, größere Liste:
Input: 7,7,7,7,7,7,7,7,7
Output:
(7) Alle gleich, größere Liste, größere Zahlen:
Input: 61976,61976,61976,61976,61976,61976,61976,61976,61976,61976,61976,61976,61976,61976,61976,61976,61976,61976,61976,61976,61976,61976,61976
Output:
(8) Nicht gleich, größere Liste, größere Zahlen:
Input: 96185,482754,96185,96185,96185,96185,96185,96185,7,96185,96185,96185,96185,96185,96185,96185,96185,96185,96185,96185,96185,96185,96185,96185,96185,961185,96185,96185,96185
Output: 961185
Wertung
Dies ist code-golf
, so dass der Code mit der kürzesten Anzahl von Bytes gewinnt!
None
in Python), anstatt nichts auszugeben ? Warum muss die Eingabe eher eine Zeichenfolge als eine Liste sein? Und was meinst du mit dem größten Element aus der Eingabe, dargestellt wie es in der Eingabe ist7,3,7,2
.,
in die Eingabe aufnehmen?Antworten:
R ,
5037 Bytes-33 Bytes dank digEmAll! -13 bytes dank rturnbull!
Probieren Sie es online!
quelle
MathGolf , 5 Bytes
Probieren Sie es online!
Erläuterung
Dies funktioniert, weil sowohl der Operator max als auch der Operator discard from left nichts für leere Listen tun. Nun, der max-Operator entfernt die Liste und verschiebt nichts für leere Listen.
Es könnten 4 Bytes sein, wenn die Eingabe als Liste verwendet werden könnte.
quelle
Perl 6 ,
26 2322 Bytes-1 byte dank nwellnhof
Probieren Sie es online!
Gibt einen leeren Beleg zurück, wenn alles gleich ist.
Erläuterung
quelle
EVAL
Trick ist ordentlich und Sie können sogar ein Byte mit speicherno&EVAL
.if +.Set
funktionierenGelee , 4 Bytes
Ein vollständiges Programm, das die Eingabe als Befehlszeilenargument akzeptiert (ohne Anführungszeichen) und die erforderliche Ausgabe ausgibt
(Beachten Sie, dass es sich um Folgendes handelt: Leereingabe wie
, Eingabe eines einzelnen Elements wie
7
und Eingabe mehrerer Elemente7,8,7
wie in der Spezifikation derzeit erforderlich.)Probieren Sie es online!
Wie?
quelle
APL (Dyalog Classic) , 6 Bytes
Probieren Sie es online!
ein Zug, der das Maximum (
⌈/
) berechnet, ohne (~
) das Minimum (⌊/
) in eine Matrix (⍪
) verwandelt zu habenWenn die Eingabe nur ein bestimmtes Element enthält,
⌈/~⌊/
ist sie leer und⍪
gibt eine 0 × 1-Matrix zurück, die als nichts gerendert wirdAndernfalls handelt
⌈/~⌊/
es sich um einen 1-Element-Vektor und⍪
um eine 1x1-Matrix (visuell nicht von einem Skalar zu unterscheiden), die das Maximum enthältquelle
CJam ,
1613 BytesProbieren Sie es online!
quelle
Python 2 , 37 Bytes
Ausgänge an stderr (Debug auf tio).
Probieren Sie es online!
quelle
Python 2 ,
4241 BytesProbieren Sie es online!
quelle
element, element, ...
. dh es muss nicht in eckigen Klammern stehen.input
standardmäßig dieeval
Zeichenfolge von stdin übergeben wird.,
, da Ihre Lösung fehlerhaft ist, wenn die Eingabe nur eine einzelne Zahl ist!=
,>
da die Eingabe niemals leer sein wird?Haskell ,
777561 BytesProbieren Sie es online!
('[':).(++"]")
Nimmt einen String (zB"1,2,1,3"
) und schließt ihn in eckige Klammern ("[1,2,1,3]"
) ein. Dannread
verwandelt sich die Zeichenfolge in eine Liste von ganzen Zahlen ([1,2,1,3]
).Die Funktion
f
verwendet diesen Tipp für eine kürzere Bedingung, wenn eines der Ergebnisse die leere Liste ist.any(/=a!!0+0)a
prüft, ob die Listea
ein Element enthält, das nicht dem ersten Element entsprichta!!0
. (Das+0
wird benötigt, damit esread
weiß , dass es nach einer Liste von Zahlen suchen muss.) Wenn alle Elemente gleich sind, führt dieser Test dazu, dassFalse
die leere Zeichenfolge zurückgegeben wird. Andernfallsshow(maximum a)
wird das Maximum der in eine Zeichenfolge konvertierten Liste zurückgegeben.quelle
Rot, 81 Bytes
Wie bei der R-Lösung verarbeitet ein großer Teil des Codes die Eingabezeichenfolge "1,1,2,44,1". Wenn wir das als Block haben können, zB:,
x: [1 1 2 44 1]
dann können wir es in 41 Bytes tun:quelle
sort x: unique load replace/all input","" "if 1 <>length? x[last x]
für 67 Bytes. Funktioniert leiderinput
nicht in TIO. Wenn Sie es eine Funk machen, funktioniert es gut in TIO: 73 BytesAPL (Dyalog Unicode) , 12 Byte
Volles Programm. Fordert zur Eingabe eines Strings von stdin auf.
Probieren Sie es online!
⎕
Eingabeaufforderung für und Auswertung des Ausdrucks (Kommas verketten die Zahlen zu einer Liste){
…}
Wende folgendes anonymes Lambda an (⍵
ist das Argument; die Liste der Zahlen):1≠
[wenn] 1 ist anders als ...≢
die Bilanz von…∪
die eindeutigen Zahlen in…⍵
Die Liste:
dann⌈/
Rückgabe der max über (lit. max Reduktion) ...⍵
Die Liste[sonst: nichts tun]
quelle
⌈/~⌊/
JavaScript (Node.js) , 49/53 Bytes
Meine ursprüngliche Version mit
.every()
53 BytesZählt eine Funktion, die "" zurückgibt, als keine Ausgabe? Sicher kann dies verbessert werden ...
Probieren Sie es online!
Verbesserte Version
Set()
von Shaggy , 49 BytesProbieren Sie es online!
quelle
Neim , 4 Bytes
Erläuterung:
Probieren Sie es online!
quelle
Oktave , 28 Bytes
Gibt das Maximum (eine Zahl, die eine 1x1-Matrix ist) oder eine leere (1x0) Matrix zurück.
Probieren Sie es online!
quelle
Japt, 16 Bytes
Dies wäre 9, wenn nicht das unnötig strenge Eingabeformat, 7, wenn das Auslösen eines Fehlers als Nichtausgabe gilt.
Angenommen, die Zeichenfolge enthält mindestens 2 Ganzzahlen.
Versuch es
quelle
Common Lisp, 102 Bytes
Probieren Sie es online!
Die Größe ist hauptsächlich auf die Eingabe der Daten zurückzuführen. Bei Eingabe als reguläre Liste reduziert sich die Länge auf 46 Bytes:
quelle
XPath 3.1, 54 Bytes
mit der Eingabezeichenfolge als Kontextelement:
Könnte um ein Zeichen reduziert werden, wenn Sie zulassen, dass der Kontext ein kürzeres Präfix als "xs" an den XML-Schema-Namespace bindet.
Erläuterung: Nimmt die Eingabezeichenfolge, markiert das Trennzeichen ",", wendet sie
xs:int()
auf jedes zu konvertierende Token an, berechnet das Maximum der Sequenz und gibt das Maximum aus, sofern das Prädikat$t!=$t
wahr ist. Wenn A und B Sequenzen sind, dannA!=B
ist wahr, wenn es ein Paar von Elementen gibt (a von A, b von B), so dassa!=b
.Wenn die Eingabe als Folge von ganzen Zahlen $ s und nicht als durch Kommas getrennte Zeichenfolge bereitgestellt werden kann, reduziert sich die Lösung auf
(15 Bytes - das könnte die kürzeste Lösung in einer Sprache sein, die nicht der Kürze wegen entwickelt wurde)
HINWEIS : Dies erfüllt nicht die Anforderung "so dargestellt, wie es in der Eingabe ist". Wenn eine Ganzzahl mit führenden Nullen oder einem Pluszeichen in der Eingabe vorhanden ist, gehen diese verloren. Ich vermute, dass dies auch für viele andere Lösungen gilt.
quelle
K4 ,
38-35BytesTestfälle:
Ich beherrsche keine der k-Varianten, die auf TiO verfügbar sind, daher ist kein Online-Beispiel verfügbar. Ich werde jedoch versuchen, eines zu finden
Erläuterung
Wenn Sie sich fragen, warum bestimmte Vorgänge vor anderen ausgeführt werden, hat K4 keine Operatorrangfolge, sondern wird von rechts nach links interpretiert (obwohl Sie Klammern als Rangfolge verwenden können). Ausdrücke durch Semikolons getrennt.
Kann wahrscheinlich mehr golfen werden, kein Fan, der am Ende diese provisorische Max-Funktion nutzen muss.
BEARBEITEN: Wenn die Kommas in der Ausgabe ein Problem sind, kann es mit zwei weiteren Bytes behoben werden:
Wenn Sie die Summe auf
4037 setzen, aber das Komma vor der Zahl bedeutet einfach, dass es sich um eine einzelne Elementliste im Gegensatz zu einem Atom handelt.quelle
PHP (<= 5,6)
6474 BytesLaufen Sie als Pipe mit
-nR
oder testen Sie es onlinesplit
wurde in PHP7 entfernt, aber da ich 10 hinzufügen musste, um einige Probleme zu beheben, hat es sich gelohnt, stattdessen zu verwendenexplode
, was in diesem Fall ungefähr gleichwertig ist.quelle
Also this doesn't work when there are more than one element with the max value
Ich habe die Bedeutung falsch gelesenIf they are all equal, return/output nothing
,If they are equal, return/output nothing
wenn es mehr als eine gibt, die leer ausgegeben werden sollen. Hinzufügen==count($a)
behebt es. Daarray_count_values
die Häufigkeit des Auftretens im Array gezählt wird, geben Sie '' andernfalls den Wert max$argn
, wird sie von stdin übernommen (dies wurde in mehreren Golfantworten verwendet). Ich kann nicht nur Beispiele von mir, sondern auch von anderen Benutzern nennen.Japt
-hF
, 8 BytesVersuch es
-3
Bytes, wenn die Eingabe als Array verwendet werden könnte.quelle
05AB1E ,
98 Bytes-1 Byte dank @Cowabunghole .
Probieren Sie es online aus oder überprüfen Sie alle Testfälle .
Erläuterung:
quelle
',¡ZsËiõ
, indem Sie 1 Byte speichernPython 2 , 44 Bytes
Probieren Sie es online!
quelle
eval
in Python konvertiert eine durch Kommas getrennte Zeichenfolge in eine Liste?k=input()
das gleiche Ergebnis verwenden und erhalten.Ohm v2 , 9 Bytes
Probieren Sie es online! Erläuterung:
quelle
Kohle , 15 Bytes
Probieren Sie es online! Link ist eine ausführliche Version des Codes. Erläuterung:
Teilen Sie die Eingabe durch Kommas und wandeln Sie jeden Wert in eine Ganzzahl um.
Prüfen Sie, ob der Maximalwert größer als der Minimalwert ist.
Wenn dies der Fall ist, geben Sie den Maximalwert in string und print ein.
quelle
Mathematica, 43 Bytes
Funktion pur. Nimmt eine durch Kommas getrennte Zeichenfolge als Eingabe und gibt entweder eine Zahl oder zurück
Null
. Ich glaube das ist gültig, daNull
es nicht grafisch dargestellt wird:quelle
C (gcc) 91 Bytes
Probieren Sie es online!
Degolf
quelle
M(char*s)
anstelle vonM(s)char*s;
undindex()
anstelle von vorstrchr()
Pyth, 7 Bytes
Probieren Sie es online!
Alle Testfälle (etwas anderer Code für eine bessere Ausgabeformatierung)
Da Pyth auf Python basiert, wird die Benutzereingabe immer als Zeichenfolge interpretiert, die dann weitergeleitet werden kann
Erläuterung:eval()
. Alle Pyth-Programme werden automatischQ=eval(input())
als erste Anweisung ausgeführt.quelle
Java (JDK) , 101 Byte
Probieren Sie es online!
Erklärt
Bonuslösung!
Trotz aller Bemühungen konnte ich diese Lösung mit Regex und Streams nicht auf weniger als 105 Bytes bringen, aber ich mochte ihre Eleganz sehr und musste sie daher ehrenamt erwähnen.
quelle
?
regulären Ausdruck (minus dem ) und einer regulären Schleife und Rückgabe (anstelle des Streams) verwenden.MATL ,
159 BytesProbieren Sie es online!
Mehrere Testfälle
Ich versuche nur, meine MATL-Koteletts davor zu schützen, zu rostig zu werden!
Bearbeiten : Immerhin rostig; 6 Bytes gespart, dank @LuisMendo.
Erläuterung
quelle
Pip , 13 Bytes
Probieren Sie es online!
Verwendet den Ansatz der APL-Lösung von ngn :
Die ersten 5 Bytes
a^:',
teilen die Eingabezeichenfolge in Kommas auf.Alternative 13-Byte-Lösungen:
quelle