Das max () reicht nicht aus

18

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!

ElectricWarr
quelle
3
Ist es in Ordnung, einen Fehler auszulösen, wenn die Liste alle gleichen Werte enthält? Und können wir einen Nullwert ausgeben (wie Nonein 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 ist
DJMcMayhem
15
Ich würde vorschlagen, die Eingabeanforderungen zu lockern, um auch ein Array / eine Liste von Ganzzahlen zu ermöglichen. Sind wir garantiert, dass die Liste mindestens 2 Elemente enthält? Können wir einen konsistenten, nicht numerischen Wert anstelle von nichts ausgeben, wenn alle Ganzzahlen gleich sind?
Shaggy
15
Bitte fügen Sie einen Testfall hinzu, in dem das Maximum mehrmals vorkommt, z 7,3,7,2.
nimi
3
Können wir einen Testfall mit nur einem Element haben? Können wir auch ein Trailing ,in die Eingabe aufnehmen?
Jo King
2
Info: Diese Herausforderung war Sandkasten. /// Für OP: Obwohl die Sandbox ziemlich inaktiv ist, ist es (glaube ich) nur ein kleines Problem. Das Problem ist, dass einige Probleme mit der Herausforderung nicht offensichtlich sind, wenn man die Herausforderung nur liest, und nur entdeckt werden kann, wenn man sie tatsächlich löst.
user202729

Antworten:

8

R , 50 37 Bytes

-33 Bytes dank digEmAll! -13 bytes dank rturnbull!

x=scan(se=",");if(any(diff(x)))max(x)

Probieren Sie es online!

Robert S.
quelle
Die Eingabe MUSS (derzeit) leider ein String sein.
Shaggy
Ups, ich denke mein vorheriger Link war falsch! Das sollte stimmen und digEmAlls Idee mit der Idee kombinieren, die ich veröffentlichen wollte ...
Giuseppe
3
37 Bytes durch Verbesserung, wie wir das Array auf Gleichheit testen.
Rturnbull
5

MathGolf , 5 Bytes

è▀s╞╙

Probieren Sie es online!

Erläuterung

è      Read whole input as int array
 ▀     Get unique elements
  s    Sort list
   ╞   Discard from left of array
    ╙  Get maximum of list

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.

maxb
quelle
Die Eingabe muss eine durch Kommas getrennte Zeichenfolge sein.
Shaggy
1
@ Shaggy Das habe ich verpasst. Im Moment hat MathGolf keinen "Split-on-Character" -Operator, es wird also einige Arbeit erfordern, um es richtig zu machen. Ich sehe was ich tun kann.
Maxb
5

Perl 6 , 26 23 22 Bytes

-1 byte dank nwellnhof

{.max if .Set>1}o&EVAL

Probieren Sie es online!

Gibt einen leeren Beleg zurück, wenn alles gleich ist.

Erläuterung

                o&EVAL  # Eval the string to a list of integers
{              }         # Pass to code block
 .max            # Return the max
      if .Set>1  # If the list converted to a set has more than one element
Scherzen
quelle
1
Der EVALTrick ist ordentlich und Sie können sogar ein Byte mit speichern o&EVAL.
Nwellnhof
Würde nicht if +.Setfunktionieren
Ven
@Ven Nein, wir müssen prüfen, ob das Set mehr als ein Element enthält.
Jo King
Mh, und bitweise ~ ist 2 Bytes in Perl 6 :(
Ven
5

Gelee , 4 Bytes

ḟṀE?

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 7und Eingabe mehrerer Elemente 7,8,7wie in der Spezifikation derzeit erforderlich.)

Probieren Sie es online!

Wie?

ḟṀE? - Full program: if one argument is present it is evaluated using Python
     -                 so 7,8,7 -> [7,8,7], while 7 -> 7
ḟṀE? - Main Link: list or integer OR no argument (in which case an implicit argument of 0)
   ? - if...
  E  - ...condition: all equal? (for any integer E yields 1 since the argument is
     -                           treated as a list like [integer])
ḟ    - ...then: filter discard (since it's undefined the right argument is implicitly 
     -                          equal to the left; both are treated as lists, so this
     -                          yields an empty list)
 Ṁ   - ...else: maximum (again an integer is treated as a list)
     - implicit print (Jelly's representation of an empty list is an empty string
     -                 furthermore no newline is printed in either case)
Jonathan Allan
quelle
4

APL (Dyalog Classic) , 6 Bytes

⍪⌈/~⌊/

Probieren Sie es online!

ein Zug, der das Maximum ( ⌈/) berechnet, ohne ( ~) das Minimum ( ⌊/) in eine Matrix ( ) verwandelt zu haben

Wenn die Eingabe nur ein bestimmtes Element enthält, ⌈/~⌊/ist sie leer und gibt eine 0 × 1-Matrix zurück, die als nichts gerendert wird

Andernfalls handelt ⌈/~⌊/es sich um einen 1-Element-Vektor und um eine 1x1-Matrix (visuell nicht von einem Skalar zu unterscheiden), die das Maximum enthält

ngn
quelle
3

Python 2 , 42 41 Bytes

a=input();print('',max(a))[len(set(a))>1]

Probieren Sie es online!

Arnav Borborah
quelle
Willkommen bei PPCG :) Ich kenne Python nicht, aber es sieht so aus, als müsste eine Liste eingegeben werden. Leider (und meiner Meinung nach unnötigerweise) ist die Spezifikation (derzeit) sehr explizit, dass die Eingabe eine Zeichenfolge sein muss.
Shaggy
@ Shaggy, dieses Programm funktioniert, wenn die Eingabe der Form entspricht element, element, .... dh es muss nicht in eckigen Klammern stehen.
Arnav Borborah
1
Eine Liste funktioniert , ist aber nicht erforderlich, da in Python 2 inputstandardmäßig die evalZeichenfolge von stdin übergeben wird.
Arnav Borborah
1
40 Bytes . Ich weiß nicht, ob eine Liste mit einem Element ein Trailing haben kann ,, da Ihre Lösung fehlerhaft ist, wenn die Eingabe nur eine einzelne Zahl ist
Jo King
2
@JoKing Gibt es einen Grund, warum Sie das nicht in ein ändern konnten !=, >da die Eingabe niemals leer sein wird?
Nedla2004
3

Haskell , 77 75 61 Bytes

f.read.('[':).(++"]")    
f a=[0|any(/=a!!0+0)a]>>show(maximum a)

Probieren Sie es online!

('[':).(++"]")Nimmt einen String (zB "1,2,1,3") und schließt ihn in eckige Klammern ( "[1,2,1,3]") ein. Dann readverwandelt sich die Zeichenfolge in eine Liste von ganzen Zahlen ( [1,2,1,3]).

Die Funktion fverwendet diesen Tipp für eine kürzere Bedingung, wenn eines der Ergebnisse die leere Liste ist. any(/=a!!0+0)aprüft, ob die Liste aein Element enthält, das nicht dem ersten Element entspricht a!!0. (Das +0wird benötigt, damit es readweiß , dass es nach einer Liste von Zahlen suchen muss.) Wenn alle Elemente gleich sind, führt dieser Test dazu, dass Falsedie leere Zeichenfolge zurückgegeben wird. Andernfalls show(maximum a)wird das Maximum der in eine Zeichenfolge konvertierten Liste zurückgegeben.

Laikoni
quelle
@nimi Danke für den Hinweis!
Laikoni
3

Rot, 81 Bytes

x: split input","forall x[x/1: load x/1]sort x: unique x if 1 <>length? x[last x]

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:

sort x: unique x if 1 <>length? x[last x]
Dick Bryonson
quelle
4
Willkommen bei PPCG! Wir bitten in der Regel um einen Link zu einem Interpreter, um eine Lösung zu überprüfen, und Dennis, einer unserer Mods, hat es eingerichtet. Probieren Sie es online aus! für so einen zweck! Es wird sogar Ihre Antwort für Sie formatieren! Ich hoffe, Sie genießen Ihre Zeit hier!
Giuseppe
sort x: unique load replace/all input","" "if 1 <>length? x[last x]für 67 Bytes. Funktioniert leider inputnicht in TIO. Wenn Sie es eine Funk machen, funktioniert es gut in TIO: 73 Bytes
Galen Ivanov
3

APL (Dyalog Unicode) , 12 Byte

Volles Programm. Fordert zur Eingabe eines Strings von stdin auf.

{1≠≢∪⍵:⌈/⍵}⎕

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]

Adam
quelle
1 ≠ ≢∪ hier scheint es nur zu finden, wenn sein Argument eine Liste ist, nicht eine Wiederholung derselben Zahl, also nicht 1 1 1 oder 22. Also 1 ≠ ≢∪1 1 2 3 3 gibt true zurück, auch wenn 3 nicht eindeutig ist, und wenn dies true ist, würde ⌈ / ⍵ das Maximum 3 zurückgeben (auch wenn es keine Ausgabe zurückgeben sollte). Wo ist mein Fehler? Oder mögliches ':' hat eine andere Bedeutung
RosLuP 10.10.18
@RosLuP Auch wenn es Wiederholungen und sogar Wiederholungen der maximalen Anzahl gibt, müssen wir immer noch die maximale Anzahl drucken. Nur wenn die Liste genau eine eindeutige Nummer hat, wird nichts gedruckt. Schauen Sie sich den letzten Beispielfall im OP an.
Adám
Ja, ich habe das Problem falsch verstanden ... danke
RosLuP
würde das funktionieren ⌈/~⌊/
ngn
@ngn Nein, es wird eine neue Zeile ausgegeben, wenn alle Elemente gleich sind.
Adám
3

JavaScript (Node.js) , 49/53 Bytes

Meine ursprüngliche Version mit .every()53 Bytes

Zählt eine Funktion, die "" zurückgibt, als keine Ausgabe? Sicher kann dies verbessert werden ...

s=>(a=s.split`,`).every(e=>a[0]==e)?'':Math.max(...a)

Probieren Sie es online!


Verbesserte Version Set()von Shaggy , 49 Bytes

s=>new Set(a=s.split`,`).size>1?Math.max(...a):``

Probieren Sie es online!

Chris M
quelle
2
Eine sehr schnelle Verbesserung: tio.run/##y0osSyxOLsosKNHNy09J/Z9m@7/…
Shaggy
@ Shaggy schön! Ich habe mit Set angefangen, konnte es aber nicht so kurz
Chris M
2

Neim , 4 Bytes

𝐐𝐎Ξ𝐠

Erläuterung:

  Ξ   If
𝐐    all elements are equal
  𝐎  not
      then
   𝐠  get greatest element

Probieren Sie es online!

Okx
quelle
2
Derzeit ist die Eingabe muss eine kommagetrennte Zeichenfolge von ganzen Zahlen, aber ich habe gefragt , ob wir stattdessen ein Array nehmen.
Shaggy
2

Oktave , 28 Bytes

Gibt das Maximum (eine Zahl, die eine 1x1-Matrix ist) oder eine leere (1x0) Matrix zurück.

@(a)max(a)(1+all(a(1)==a):1)

Probieren Sie es online!

fehlerhaft
quelle
2
Die Eingabe ist eine Folge von durch Kommas getrennten Zahlen
Jo King
2

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.

q, mn
â ÊÉ?Urw:P

Versuch es

Zottelig
quelle
2

Common Lisp, 102 Bytes

(lambda(x &aux(c(read-from-string(concatenate'string"#.`("x")"))))(or(apply'= c)(princ(apply'max c))))

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:

(lambda(x)(or(apply'= x)(princ(apply'max x))))
Renzo
quelle
2

XPath 3.1, 54 Bytes

mit der Eingabezeichenfolge als Kontextelement:

let$t:=tokenize(.,',')!xs:int(.)return max($t)[$t!=$t]

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!=$twahr ist. Wenn A und B Sequenzen sind, dann A!=Bist wahr, wenn es ein Paar von Elementen gibt (a von A, b von B), so dass a!=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

max($s)[$s!=$s]

(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.

Michael Kay
quelle
2

K4 , 38-35 Bytes

{$[1=#:t:?:(7h$","\:x)-48;;*:t@>t]}

Testfälle:

q)k){$[1=#:t:?:(7h$","\:x)-48;;*:t@>t]}"1,2,4,4"
,4
q)k){$[1=#:t:?:(7h$","\:x)-48;;*:t@>t]}"4,4,4,4"
q)
q)k){$[1=#:t:?:(7h$","\:x)-48;;*:t@>t]}"7,3,8,4,8,3,9,4,6,1,3,7,5"
,9
q)k){$[1=#:t:?:(7h$","\:x)-48;;*:t@>t]}"7,7,7,7,7,7,7,7,7,7,7,7,7"
q)

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.

   $[expr;`True;`False] is the conditional format

{$[1=#:t:?:(7h$","\:x)-48;;*:t@>t]}
               ","\:x                 //split string on commas
            7h$                       //cast strings to long
                      -48             //they'll be from ascii format, so compensate
         ?:                           //get distinct list      
       t:                             //set list to variable t        
     #:                               //get count of t
   1=                                 //check if count t = 1
                         ;;           //return nothing if true
                             t@>t  //if false, sort t descending
                           *:         //return first value

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:

q)k){$[1=#:t:?:(7h$","\:x)-48;;*:,/t@>t]}"1,2,4,4"
4
                                 ,/                 //joins the single element lists into one

Wenn Sie die Summe auf 40 37 setzen, aber das Komma vor der Zahl bedeutet einfach, dass es sich um eine einzelne Elementliste im Gegensatz zu einem Atom handelt.

Thaufeki
quelle
2

PHP (<= 5,6) 64 74 Bytes

 echo array_count_values($a=split(',',$argn))[$m=max($a)]==count($a)?'':$m;

Laufen Sie als Pipe mit -nRoder testen Sie es online

splitwurde in PHP7 entfernt, aber da ich 10 hinzufügen musste, um einige Probleme zu beheben, hat es sich gelohnt, stattdessen zu verwenden explode, was in diesem Fall ungefähr gleichwertig ist.

ArtisticPhoenix
quelle
Also this doesn't work when there are more than one element with the max value Ich habe die Bedeutung falsch gelesen If they are all equal, return/output nothing, If they are equal, return/output nothingwenn es mehr als eine gibt, die leer ausgegeben werden sollen. Hinzufügen ==count($a)behebt es. Da array_count_valuesdie Häufigkeit des Auftretens im Array gezählt wird, geben Sie '' andernfalls den Wert max
ArtisticPhoenix
1
@JoKing - Sie sollten keine Eingaben über eine vordeklarierte Variable vornehmen - wenn Sie diese korrigieren $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.
ArtisticPhoenix
2

Japt -hF , 8 Bytes

q, ün Åc

Versuch es

-3 Bytes, wenn die Eingabe als Array verwendet werden könnte.

Oliver
quelle
2

05AB1E , 9 8 Bytes

',¡ZsËiõ

-1 Byte dank @Cowabunghole .

Probieren Sie es online aus oder überprüfen Sie alle Testfälle .

Erläuterung:

',¡        '# Split the (implicit) input by ","
   Z        # Push the maximum (without popping the list)
    s       # Swap so the list is at the top of the stack again
     Ëi     # If all elements are equal:
       õ    #  Push an empty string ""
            # (Implicitly output the top of the stack to STDOUT as result)
Kevin Cruijssen
quelle
1
Ziemlich ähnliche Lösung, aber Sie können das andere vermeiden ',¡ZsËiõ, indem Sie 1 Byte speichern
Cowabunghole
@Cowabunghole Smart, danke!
Kevin Cruijssen
1

Python 2 , 44 Bytes

k=eval(input())
if~-len(set(k)):print max(k)

Probieren Sie es online!

Chas Brown
quelle
Ich vermute, evalin Python konvertiert eine durch Kommas getrennte Zeichenfolge in eine Liste?
Shaggy
1
Ja; genauer ein Tupel (unveränderliche Liste). Wenn die Eingabe keine Zeichenfolge wäre (dh Anführungszeichen im TIO-Eingabeabschnitt weglassen), könnte man einfach k=input()das gleiche Ergebnis verwenden und erhalten.
Chas Brown
1

Ohm v2 , 9 Bytes

Ul1E?Oq¿↑

Probieren Sie es online! Erläuterung:

Ul1E?Oq¿↑
U         Uniquify input
 l        Get length
  1E      Push whether length is equak to 1
    ?Oq   If so immediately quit
       ¿↑ Else print maximum
DiePlasmaRailgun
quelle
2
Die Eingabe sollte eine Folge von durch Kommas getrennten Zahlen sein
Jo King
1

Kohle , 15 Bytes

≔I⪪S,θ¿›⌈θ⌊θI⌈θ

Probieren Sie es online! Link ist eine ausführliche Version des Codes. Erläuterung:

≔I⪪S,θ

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.

I⌈θ

Wenn dies der Fall ist, geben Sie den Maximalwert in string und print ein.

Neil
quelle
1

Mathematica, 43 Bytes

If[!Equal@@#,Max@#]&@@#~ImportString~"CSV"&

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, da Nulles nicht grafisch dargestellt wird:

LegionMammal978
quelle
1

C (gcc) 91 Bytes

M(s)char*s;{long m=atol(s),o,l=0;for(;s=strchr(s,44);o<0?m-=o:0)l|=o=m-atol(++s);s=l?m:-1;}

Probieren Sie es online!

Degolf

M(s)char*s;{
    long m=atol(s),o,l=0; // Read the first integer from string
    for(;s=strchr(s,44); // Advance pointer to next ','
           o<0?m-=o:0) // End of loop: if difference <0, deduct from max, increasing it to new max.
        l|=o=m-atol(++s); // Read next number, and subtract it from current max. 
                          // Bitwise-OR the difference into the l-variable
    s=l?m:-1; // End of function: if l is non-zero, there were at least two different values.
              // Return -1 if l is zero, otherwise the max value.
}

quelle
Schlagen Sie M(char*s)anstelle von M(s)char*s;und index()anstelle von vorstrchr()
ceilingcat
1

Pyth, 7 Bytes

Itl{QeS

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 eval() . Alle Pyth-Programme werden automatisch Q=eval(input())als erste Anweisung ausgeführt.

Erläuterung:
Itl{QeS  | Full code
Itl{QeSQ | with implicit variables filled
---------+-------------------------------
I        | If
 t       | one less than
  l      | the length of
   {Q    | the deduplicated input
         | is truthy (!=0),
         | print
     e   | the last element of
      SQ | the sorted input
hakr14
quelle
1

Java (JDK) , 101 Byte

d->{long m=0,c=-1,b;for(var s:d.split(",")){b=new Long(s);c=c<0|c==b?b:0;m=b>m?b:m;}return c>0?"":m;}

Probieren Sie es online!

Erklärt

d->{                            // Function taking a String input
    long m=0,c=-1,b;            // Initialise variables
    for(var s:d.split(",")){    // Split by comma and loop over elements
        b=new Long(s);          // Parse String to Long
        c=c<0                   // If c<0 (i.e. this is the first element)
            |c==b               // ...or c is equal to the current element
            ?b                  // Set c to the current element (all elements are the same so far
            :0;                 // Otherwise set c to zero to denote that list is not all same element  
        m=b>m?b:m;              // Set m to max of b and m
    }
    return c>0?""               // If c is not zero then all elements are the same, return nothing
                 :m;            // Else return max element
}

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.

d->d.matches("(.+?)(,\\1)+")?"":java.util.Arrays.stream(d.split(",")).map(Long::new).reduce(0L,Long::max)
Luke Stevens
quelle
100 Bytes, indem Sie eine Kombination aus Ihrem ?regulären Ausdruck (minus dem ) und einer regulären Schleife und Rückgabe (anstelle des Streams) verwenden.
Kevin Cruijssen
1

MATL , 15 9 Bytes

U&=?}1MX>

Probieren 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

U     % str2num - automatically parses comma-separated strings
&=?   % Are all the values equal? 
}     % if not
1M    % Get the numeric matrix again on the stack
X>    % And find its maximum value.
Sundar - Setzen Sie Monica wieder ein
quelle
1

Pip , 13 Bytes

a^:',MXaRMMNa

Probieren Sie es online!

Verwendet den Ansatz der APL-Lösung von ngn :

     MNa  Minimum of the list
  aRM     Remove it from the list
MX        Take the max of the remaining elements

Die ersten 5 Bytes a^:', teilen die Eingabezeichenfolge in Kommas auf.

Alternative 13-Byte-Lösungen:

I!$=Ya^',PMXy
a^:',$=a?uMXa
DLosc
quelle