Maks () tidak cukup

18

Intro

Seorang teman mengajukan pertanyaan hari ini dengan cara yang sedikit berbeda - "Bisakah satu perintah [Python] menentukan yang terbesar dari beberapa bilangan bulat DAN bahwa mereka tidak sama?".

Meskipun kami tidak menemukan cara untuk melakukan ini dalam definisi yang masuk akal dari "satu perintah", saya pikir itu mungkin masalah yang menyenangkan untuk golf.

 Tantangan

" Kembalikan yang terbesar dari daftar bilangan bulat jika-dan-hanya-jika semuanya tidak sama. "

Lebih spesifik:

Diberikan string yang hanya berisi daftar bilangan bulat yang dipisahkan koma:

  • Jika semuanya sama, tidak ada pengembalian / keluaran
  • Lain, return / output yang terbesar

Aturan

  • The masukan harus string yang berisi hanya daftar dipisahkan koma bilangan bulat
  • The Output harus baik apa-apa (tidak ada output apapun), atau elemen terbesar dari input, diwakili seperti di input

Entri dapat berupa program lengkap atau hanya fungsi, asalkan Anda memberikan beberapa cara untuk mengujinya!

Asumsi

  • Asumsikan elemen daftar input mungkin lebih dari satu digit tetapi tidak lebih besar dari (2 32 - 1)
  • Asumsikan daftar input tidak lebih dari satu juta elemen
  • Asumsikan input tidak akan menyertakan nilai negatif
  • Asumsikan input tidak akan pernah kosong

Untuk menghindari keraguan, penjelasan tentang tantangan yang diberikan tepat setelah "Secara lebih spesifik" akan menggantikan pernyataan tantangan di atasnya ("Kembalikan yang terbesar ...").

 Contohnya

(1) Semua sama:

Input: 1,1
Output:

(2) Berbeda:

Input: 1,2
Output: 2

(3) Nol !:

Input: 0,0,0,0,0,0,0,1,0,0
Output: 1

(4) Acak:

Input: 7,3,8,4,8,3,9,4,6,1,3,7,5
Output: 9

(5) Angka lebih besar, daftar lebih besar:

Input: 627,3894,863,5195,7789,5269,8887,3262,1448,3192
Output: 8887

Contoh tambahan:

(6) Semua sama, daftar lebih besar:

Input: 7,7,7,7,7,7,7,7,7
Output:

(7) Semua sama, daftar lebih besar, angka lebih besar:

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) Tidak sama, daftar lebih besar, angka lebih besar:

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

Mencetak gol

Ini code-golf, jadi kode dengan jumlah byte terpendek menang!

ElectricWarr
sumber
3
Apakah boleh melemparkan kesalahan ketika daftar berisi semua nilai yang sama? Dan bisakah kita menghasilkan nilai nol (seperti Nonedalam python) daripada menghasilkan apa-apa? Juga, mengapa input harus berupa string daripada daftar? Dan apa yang Anda maksud dengan elemen terbesar dari input, diwakili sebagaimana di input
DJMcMayhem
15
Saya sarankan melonggarkan persyaratan input untuk memungkinkan array / daftar bilangan bulat juga. Apakah kami dijamin bahwa daftar akan mengandung setidaknya 2 elemen? Bisakah kita menghasilkan nilai yang konsisten dan non-numerik daripada tidak sama sekali jika semua bilangan bulat sama?
Shaggy
15
Silakan tambahkan test case di mana maksimum terjadi lebih dari sekali, seperti 7,3,7,2.
nimi
3
Bisakah kita memiliki test case dengan hanya satu elemen? Juga, dapatkah kita menyertakan trailing ,pada input?
Jo King
2
Info: Tantangan ini dikosongkan. /// Untuk OP: Meskipun sandbox sangat tidak aktif, (saya pikir) itu hanya masalah kecil. Masalahnya adalah bahwa beberapa masalah dengan tantangan tidak terlihat jika seseorang hanya membaca tantangan, dan hanya dapat ditemukan ketika seseorang benar-benar menyelesaikannya.
user202729

Jawaban:

8

R , 50 37 byte

-33 bytes berkat digEmAll! -13 byte terima kasih kepada rturnbull!

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

Cobalah online!

Robert S.
sumber
Input tidak (saat ini) HARUS menjadi string, sayangnya.
Shaggy
Ups, saya kira tautan saya sebelumnya salah! Ini seharusnya benar, menggabungkan ide digEmAll dengan yang saya maksudkan untuk diposkan ...
Giuseppe
3
37 byte dengan meningkatkan cara kami menguji array untuk kesetaraan.
rturnbull
5

MathGolf , 5 byte

è▀s╞╙

Cobalah online!

Penjelasan

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

Ini berfungsi karena operator maks dan buangan dari operator kiri tidak melakukan apa pun untuk daftar kosong. Nah, operator maks menghapus daftar dan tidak mendorong apa pun untuk daftar kosong.

Itu bisa 4 byte jika input bisa diambil sebagai daftar.

maks
sumber
Input harus berupa string yang dipisahkan koma .
Shaggy
1
@ Shaggy aku merindukan itu. Saat ini MathGolf tidak memiliki operator "split on character", jadi perlu beberapa usaha untuk memperbaikinya. Saya akan lihat apa yang dapat saya lakukan.
Maks
5

Perl 6 , 26 23 22 byte

-1 byte terima kasih kepada nwellnhof

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

Cobalah online!

Mengembalikan slip kosong jika semuanya sama.

Penjelasan

                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
Jo King
sumber
1
The EVALtrick rapi dan Anda bahkan dapat menyimpan byte dengan o&EVAL.
nwellnhof
Tidak akan if +.Setbekerja
Ven
@Ven Tidak, kita perlu memeriksa apakah ada lebih dari satu elemen di Set.
Jo King
Mh, dan bitwise ~ adalah 2 byte dalam Perl 6 :(
Ven
5

Jelly , 4 byte

ḟṀE?

Program lengkap yang menerima input sebagai argumen baris perintah (tanpa tanda kutip) yang mencetak output yang diperlukan

(Perhatikan bahwa ini berkaitan dengan: input kosong seperti , input satu item seperti 7dan beberapa input item 7,8,7seperti yang sepertinya dibutuhkan oleh spec).

Cobalah online!

Bagaimana?

ḟṀ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
sumber
4

APL (Dyalog Classic) , 6 byte

⍪⌈/~⌊/

Cobalah online!

sebuah kereta komputasi maksimum ( ⌈/) tanpa ( ~) yang minium ( ⌊/) berubah menjadi matriks ( )

jika input hanya berisi satu elemen yang berbeda, ⌈/~⌊/akan kosong dan akan mengembalikan matriks 0 × 1 yang menjadikan apa-apa

jika tidak, ⌈/~⌊/akan menjadi vektor 1-elemen dan itu akan menjadi matriks 1x1 (secara visual tidak dapat dibedakan dari skalar) yang berisi maksimum

ngn
sumber
3

CJam , 16 13 byte

q',/:iL|$1>W>

Cobalah online!

Buah Esolanging
sumber
3

Python 2 , 42 41 byte

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

Cobalah online!

Arnav Borborah
sumber
Selamat datang di PPCG :) Saya tidak tahu Python tetapi sepertinya ini membutuhkan input sebagai daftar. Sayangnya (dan tidak perlu, menurut saya) specnya (saat ini) sangat eksplisit bahwa input harus berupa string.
Shaggy
@ Shaggy, program ini berfungsi jika inputnya berupa element, element, .... yaitu, tidak harus tertutup dalam tanda kurung.
Arnav Borborah
1
Daftar tidak berfungsi, tetapi tidak diperlukan karena dalam Python 2, inputsecara default evals string apa pun dilewatkan dari stdin.
Arnav Borborah
1
40 byte . Saya tidak tahu apakah satu daftar elemen dapat memiliki jejak ,, karena solusi Anda kesalahan jika inputnya hanya satu nomor
Jo King
2
@JoKing Apakah ada alasan Anda tidak dapat mengubah !=ke a >karena input tidak akan pernah kosong?
nedla2004
3

Haskell , 77 75 61 byte

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

Cobalah online!

('[':).(++"]")mengambil string (mis. "1,2,1,3") dan membungkusnya dalam karakter braket ( "[1,2,1,3]"). Kemudian readubah string menjadi daftar bilangan bulat ( [1,2,1,3]).

Fungsi inif menggunakan tip ini untuk persyaratan yang lebih pendek jika salah satu hasilnya adalah daftar kosong. any(/=a!!0+0)amemeriksa apakah daftar aberisi elemen apa pun yang tidak sama dengan elemen pertamanya a!!0. ( +0Diperlukan sedemikian sehingga readtahu harus mencari daftar angka.) Jika semua elemen sama, hasil tes ini Falsedan string kosong dikembalikan. Jika tidak show(maximum a), itu adalah daftar maksimum yang dikonversi ke string, dikembalikan.

Laikoni
sumber
@nimi Terima kasih telah menunjukkan!
Laikoni
3

Merah, 81 byte

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

Seperti solusi R, sebagian besar kode menangani string input "1,1,2,44,1". Jika kita dapat memiliki itu sebagai blok, misalnya:, x: [1 1 2 44 1]maka kita dapat melakukannya dalam 41 byte:

sort x: unique x if 1 <>length? x[last x]
Dick Bryonson
sumber
4
Selamat datang di PPCG! Kami biasanya meminta tautan ke juru bahasa untuk memverifikasi solusi, dan Dennis, salah satu mod kami, telah menyiapkan Coba online! hanya untuk tujuan seperti itu! Bahkan akan memformat jawaban Anda untuk Anda! Semoga Anda menikmati waktu Anda di sini!
Giuseppe
sort x: unique load replace/all input","" "if 1 <>length? x[last x]untuk 67 byte. Sayangnya inputtidak bekerja di TIO. Jika Anda menjadikannya func, berfungsi dengan baik di TIO: 73 byte
Galen Ivanov
3

APL (Dyalog Unicode) , 12 byte

Program lengkap. Meminta string dari stdin.

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

Cobalah online!

 meminta dan mengevaluasi ekspresi (koma menyatukan angka-angka ke dalam daftar)

{... } terapkan lambda anonim berikut ( adalah argumen; daftar angka):

1≠ [jika] 1 berbeda dari ...

 penghitungan ...

 nomor unik di ...

 Daftar

: kemudian

⌈/ mengembalikan maks melintasi (pengurangan maksimum lit) ...

 Daftar

 [lain: tidak melakukan apa-apa]

Adm
sumber
1 ≠ ≢∪ di sini tampaknya hanya menemukan jika argumennya adalah daftar bukan pengulangan dari nomor yang sama sehingga bukan 1 1 1 atau 22. Jadi 1 ≠ ≢∪1 1 2 3 3 mengembalikan true bahkan jika 3 tidak unik dan jika itu benar akan mengembalikan ⌈ / max maks 3 (bahkan jika harus mengembalikan tidak ada output). Di mana kesalahan saya? Atau mungkin ':' memiliki arti yang berbeda
RosLuP
@RosLuP Sekalipun ada pengulangan, dan bahkan pengulangan nomor maks, kita masih harus mencetak maks. Hanya jika daftar tersebut memiliki satu nomor unik, kami tidak mencetak apa pun. Lihatlah contoh kasus terakhir di OP.
Adám
Ya saya salah mengerti masalahnya ... terima kasih
RosLuP
apakah ini akan berhasil? ⌈/~⌊/
ngn
@ ngn Tidak, ini menampilkan baris baru jika semua elemen sama.
Adám
3

JavaScript (Node.js) , 49/53 byte

Versi asli saya menggunakan .every(), 53 byte

Apakah fungsi yang mengembalikan '' dihitung sebagai tidak ada keluaran? Tentu ini dapat diperbaiki ...

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

Cobalah online!


Versi yang ditingkatkan menggunakan Set()oleh Shaggy , 49 byte

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

Cobalah online!

Chris M
sumber
2
Sebuah peningkatan yang sangat cepat: tio.run/##y0osSyxOLsosKNHNy09J/Z9m@7/…
Shaggy
@ Shaggy bagus! Saya mulai menggunakan Set tetapi tidak bisa sesingkat itu
Chris M
2

Neim , 4 byte

𝐐𝐎Ξ𝐠

Penjelasan:

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

Cobalah online!

Okx
sumber
2
Saat ini, input harus berupa string bilangan bulat koma tapi saya sudah bertanya apakah kita bisa mengambil array.
Shaggy
2

Oktaf , 28 byte

Mengembalikan maksimum (angka, yang merupakan matriks 1x1) atau matriks kosong (1x0).

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

Cobalah online!

cacat
sumber
2
Input adalah serangkaian angka yang dipisahkan koma
Jo King
2

Japt, 16 byte

Ini akan menjadi 9 jika bukan karena format input ketat yang tidak perlu, 7 jika melempar kesalahan dianggap tidak menghasilkan apa-apa.

Mengasumsikan string berisi setidaknya 2 bilangan bulat.

q, mn
â ÊÉ?Urw:P

Cobalah

Shaggy
sumber
2

Common Lisp, 102 byte

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

Cobalah online!

Ukurannya terutama karena memasukkan data; dengan input sebagai daftar biasa, panjangnya berkurang menjadi 46 byte:

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

XPath 3.1, 54 byte

dengan string input sebagai item konteks:

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

Dapat dikurangi dengan satu karakter jika Anda mengizinkan konteks untuk mengikat awalan yang lebih pendek daripada "xs" ke namespace XML Schema.

Penjelasan: mengambil string input, tokenizes pada pemisah ",", berlaku xs:int()untuk setiap token untuk mengkonversi ke integer, menghitung maks urutan, output maks yang diberikan asalkan predikat $t!=$tbenar. Jika A dan B adalah urutan, maka A!=Bbenar jika ada sepasang item (a dari A, b dari B) sedemikian rupa a!=b.

Jika input dapat diberikan sebagai urutan bilangan bulat $ s daripada string yang dipisahkan koma maka solusinya berkurang menjadi

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

(15 byte - yang mungkin merupakan solusi terpendek dalam bahasa yang tidak dirancang khusus untuk singkatnya)

CATATAN : ini tidak memenuhi persyaratan "seperti yang ada dalam input" - jika ada bilangan bulat dengan angka nol di depan atau tanda tambah di input, ini akan hilang. Saya menduga itu benar dari banyak solusi lain juga.

Michael Kay
sumber
2

K4 , 38 35 byte

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

Kasus uji:

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)

Saya tidak terlalu fasih dalam varian k yang tersedia di TiO, jadi tidak ada contoh online yang tersedia, saya akan mencoba memunculkan satu

Penjelasan

Jika Anda bertanya-tanya mengapa operasi tertentu dilakukan sebelum yang lain, K4 tidak memiliki prioritas operator, alih-alih menafsirkan dari kanan ke kiri (meskipun Anda dapat menggunakan tanda kurung untuk diutamakan). Ekspresi yang dipisahkan oleh titik koma.

   $[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

Mungkin bisa bermain golf lebih banyak, bukan penggemar harus menggunakan fungsi maks darurat di akhir.

EDIT: Jika koma dalam output adalah masalah, itu dapat diperbaiki dengan dua byte lagi:

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

Mengambil total ke 40 37, tetapi koma sebelum nomor berarti bahwa itu adalah daftar elemen tunggal yang bertentangan dengan atom.

Thaufeki
sumber
2

PHP (<= 5.6) 64 74 byte

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

Jalankan sebagai pipa dengan -nRatau uji secara online

splitdihapus di PHP7, tetapi karena saya harus menambahkan 10 untuk memperbaiki beberapa masalah, itu layak digunakan daripada explodeyang kira-kira setara dalam kasus ini.

ArtisticPhoenix
sumber
Also this doesn't work when there are more than one element with the max value Saya missread yang If they are all equal, return/output nothingakan If they are equal, return/output nothingberarti jika ada lebih dari satu untuk output kosong. Menambahkan ==count($a)perbaikan itu. Karena array_count_valuesmenghitung berapa kali muncul dalam array, jika itu sama dengan jumlah total elemen dalam array maka output '' jika tidak output max
ArtisticPhoenix
1
@JoKing - Anda tidak boleh mengambil input melalui variabel yang telah dideklarasikan sebelumnya - tetap menggunakannya $argnmengambilnya dari stdin (ini telah digunakan dalam beberapa jawaban golf) Saya bisa memberikan contoh tidak hanya milik saya tetapi pengguna lain.
ArtisticPhoenix
2

Japt -hF , 8 byte

q, ün Åc

Cobalah

-3 byte jika input dapat diambil sebagai array.

Oliver
sumber
2

05AB1E , 9 8 byte

',¡ZsËiõ

-1 byte berkat @Cowabunghole .

Cobalah secara online atau verifikasi semua kasus uji .

Penjelasan:

',¡        '# 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
sumber
1
Solusi yang sangat mirip, tetapi Anda dapat menghindari yang lain dengan melakukan ',¡ZsËiõ, menghemat 1 byte
Cowabunghole
@Cowabunghole Smart, terima kasih!
Kevin Cruijssen
1

Python 2 , 44 byte

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

Cobalah online!

Chas Brown
sumber
Saya menduga evaldengan Python mengkonversi string yang dibatasi koma ke daftar?
Shaggy
1
Iya; lebih tepatnya tupel (daftar abadi). Jika input bukan string (yaitu, hilangkan tanda kutip di bagian input TIO), maka orang hanya dapat menggunakan k=input()dan mendapatkan hasil yang sama.
Chas Brown
1

Ohm v2 , 9 byte

Ul1E?Oq¿↑

Cobalah online! Penjelasan:

Ul1E?Oq¿↑
U         Uniquify input
 l        Get length
  1E      Push whether length is equak to 1
    ?Oq   If so immediately quit
       ¿↑ Else print maximum
ThePlasmaRailgun
sumber
2
Masukan harus berupa string angka yang dipisahkan koma
Jo King
1

Arang , 15 byte

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

Cobalah online! Tautan adalah untuk mengucapkan versi kode. Penjelasan:

≔I⪪S,θ

Pisahkan input pada koma dan masukkan setiap nilai ke integer.

¿›⌈θ⌊θ

Uji apakah nilai maksimum lebih besar dari nilai minimum.

I⌈θ

Jika demikian maka masukkan nilai maksimum ke string dan cetak.

Neil
sumber
1

Mathematica, 43 byte

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

Fungsi murni. Mengambil string yang dipisahkan koma sebagai input dan mengembalikan nomor atau Null. Saya percaya ini valid, karena Nulltidak ditampilkan secara grafis:

LegionMammal978
sumber
1

C (gcc) , 91 byte

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;}

Cobalah 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.
}

sumber
Sarankan M(char*s)alih-alih M(s)char*s;dan index()bukannyastrchr()
ceilingcat
1

Pyth, 7 byte

Itl{QeS

Cobalah online!
Semua test case (kode yang sedikit berbeda untuk format output yang lebih baik)

Karena Pyth didasarkan pada Python, input pengguna selalu diartikan sebagai string, yang kemudian dapat dilewati eval(). Semua program Pyth secara otomatis dijalankan Q=eval(input())sebagai instruksi pertama mereka.

Penjelasan:
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
sumber
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;}

Cobalah online!

Dijelaskan

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
}

Solusi bonus!

Terlepas dari upaya terbaik saya, saya tidak bisa mendapatkan solusi ini menggunakan regex dan Streams hingga kurang dari 105 byte, tetapi saya benar-benar menyukai keanggunannya sehingga harus menyebutkannya secara terhormat;

d->d.matches("(.+?)(,\\1)+")?"":java.util.Arrays.stream(d.split(",")).map(Long::new).reduce(0L,Long::max)
Luke Stevens
sumber
100 byte dengan menggunakan kombinasi regex Anda (minus ?) dan loop reguler dan kembali (bukan aliran).
Kevin Cruijssen
1

MATL , 15 9 byte

U&=?}1MX>

Cobalah online!
Banyak testcases

Hanya berusaha menjaga agar matl MATL saya tidak terlalu berkarat!

Sunting : berkarat setelah semua; disimpan 6 byte, terima kasih kepada @LuisMendo.

Penjelasan

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 - Pasang kembali Monica
sumber
1

Pip , 13 byte

a^:',MXaRMMNa

Cobalah online!

Menggunakan pendekatan dari solusi APL ngn :

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

5 byte pertama a^:',membagi string input pada koma.

Alternatif solusi 13-byte:

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