Tối đa () là không đủ


18

Giới thiệu

Một người bạn đã đặt ra câu hỏi này ngày hôm nay theo một cách hơi khác - "Lệnh [Python] có thể xác định số lớn nhất trong số các số nguyên VÀ chúng không bằng nhau không?".

Mặc dù chúng tôi đã không tìm ra cách để làm điều này trong các định nghĩa hợp lý về "một lệnh duy nhất", tôi nghĩ rằng nó có thể là một vấn đề thú vị đối với golf.

 Thử thách

" Trả về số lớn nhất trong danh sách các số nguyên if-and-only-if chúng không bằng nhau. "

Cụ thể hơn:

Cho một chuỗi chỉ chứa danh sách các số nguyên được phân tách bằng dấu phẩy:

  • Nếu tất cả đều bằng nhau, trả lại / đầu ra không có gì
  • Khác, trả lại / đầu ra lớn nhất

Quy tắc

  • Đầu vào phải là một chuỗi chỉ chứa danh sách các số nguyên được phân tách bằng dấu phẩy
  • Đầu ra phải là không có gì (không có đầu ra dưới bất kỳ hình thức nào), hoặc phần tử lớn nhất từ ​​đầu vào, được biểu thị như ở đầu vào

Các mục có thể là một chương trình đầy đủ hoặc chỉ là một chức năng, miễn là bạn cung cấp một số cách để kiểm tra chúng!

Giả định

  • Giả sử các phần tử danh sách đầu vào có thể nhiều hơn một chữ số nhưng không lớn hơn (2 32 - 1)
  • Giả sử danh sách đầu vào có không quá một triệu phần tử
  • Giả sử đầu vào sẽ không bao gồm các giá trị âm
  • Giả sử đầu vào sẽ không bao giờ trống

Để tránh nghi ngờ, lời giải thích về thử thách được đưa ra ngay sau "Cụ thể hơn" sẽ thay thế tuyên bố về thử thách phía trên nó ("Trả lại số tiền lớn nhất ...").

 Ví dụ

(1) Tất cả bằng nhau:

Input: 1,1
Output:

(2) Không giống nhau:

Input: 1,2
Output: 2

(3) Không!:

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

(4) Ngẫu nhiên:

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

(5) Số lượng lớn hơn, danh sách lớn hơn:

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

Ví dụ khác:

(6) Tất cả bằng nhau, danh sách lớn hơn:

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

(7) Tất cả bằng nhau, danh sách lớn hơn, số lớn hơn:

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) Không bằng nhau, danh sách lớn hơn, số lớn hơn:

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

Chấm điểm

Đây là code-golf, vì vậy mã có số byte ngắn nhất sẽ thắng!


3
Có thể ném lỗi khi danh sách chứa tất cả các giá trị bằng nhau không? Và chúng ta có thể xuất ra một giá trị null (chẳng hạn như Nonetrong python) chứ không xuất ra gì không? Ngoài ra, tại sao đầu vào phải là một chuỗi chứ không phải là một danh sách? Và ý nghĩa của yếu tố lớn nhất từ ​​đầu vào, được thể hiện như ở đầu vào
DJMcMayhem

15
Tôi cũng đề nghị nới lỏng các yêu cầu đầu vào để cho phép một mảng / danh sách các số nguyên. Chúng tôi có đảm bảo rằng danh sách sẽ chứa ít nhất 2 yếu tố không? Chúng ta có thể xuất một giá trị nhất quán, không phải là số thay vì không có gì nếu tất cả các số nguyên đều bằng nhau?
Xù xì

15
Vui lòng thêm một trường hợp thử nghiệm trong đó tối đa xảy ra nhiều lần, như thế nào 7,3,7,2.
nimi

3
Chúng ta có thể có một trường hợp thử nghiệm chỉ với một yếu tố không? Ngoài ra, chúng ta có thể bao gồm một dấu ,trong đầu vào không?
Jo King

2
Thông tin: Thử thách này đã được sandbox. /// Đối với OP: Mặc dù hộp cát khá kém hoạt động, (tôi nghĩ) đó chỉ là một vấn đề nhỏ. Vấn đề là một số vấn đề với thử thách không rõ ràng nếu người ta chỉ đọc thử thách và chỉ có thể được phát hiện khi người ta thực sự giải quyết nó.
dùng202729

Câu trả lời:


8

R , 50 37 byte

-33 byte nhờ digEmAll! -13 byte nhờ rturnbull!

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

Hãy thử trực tuyến!


Đầu vào không (hiện tại) CÓ phải là một chuỗi, không may.
Xù xì


Rất tiếc tôi đoán liên kết trước của tôi là sai! Điều này là đúng, kết hợp ý tưởng của digEmAll với ý tưởng mà tôi dự định đăng ...
Giuseppe

3
37 byte bằng cách cải thiện cách chúng ta kiểm tra mảng cho sự bằng nhau.
rturnbull

5

MathGolf , 5 byte

è▀s╞╙

Hãy thử trực tuyến!

Giải trình

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

Điều này hoạt động vì cả toán tử tối đa và loại bỏ từ toán tử trái không làm gì cho danh sách trống. Chà, toán tử max loại bỏ danh sách và không đẩy được gì cho danh sách trống.

Nó có thể là 4 byte nếu đầu vào có thể được lấy làm danh sách.


Đầu vào phải là một chuỗi được phân tách bằng dấu phẩy .
Xù xì

1
@Shaggy Tôi đã bỏ lỡ điều đó. Ngay bây giờ MathGolf không có toán tử "phân chia theo ký tự", do đó, sẽ cần một số công việc để làm cho đúng. Tôi sẽ xem những gì tôi có thể làm.
maxb

5

Perl 6 , 26 23 22 byte

-1 byte nhờ nwellnhof

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

Hãy thử trực tuyến!

Trả về một phiếu trống nếu mọi thứ đều bằng nhau.

Giải trình

                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

1
Thủ EVALthuật là gọn gàng và bạn thậm chí có thể lưu một byte với o&EVAL.
nwellnhof

Sẽ không if +.Setlàm việc?
Ven

@Ven Không, chúng tôi cần kiểm tra xem có nhiều hơn một thành phần trong Tập hợp không.
Jo King

Mh và bitwise ~ là 2 byte trong Perl 6 :(
Ven

5

Thạch , 4 byte

ḟṀE?

Một chương trình đầy đủ chấp nhận đầu vào dưới dạng đối số dòng lệnh (không trích dẫn) in ra đầu ra cần thiết

(Lưu ý rằng nó liên quan đến: đầu vào trống như , đầu vào một mục thích 7và nhiều đầu vào giống 7,8,7như thông số kỹ thuật dường như hiện đang yêu cầu.)

Hãy thử trực tuyến!

Làm sao?

ḟṀ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)

4

APL (Dyalog Classic) , 6 byte

⍪⌈/~⌊/

Hãy thử trực tuyến!

một chuyến tàu tính toán tối đa ( ⌈/) không có ( ~) minium ( ⌊/) biến thành ma trận ( )

nếu đầu vào chỉ chứa một phần tử riêng biệt, ⌈/~⌊/sẽ trống và sẽ trả về ma trận 0 × 1, kết xuất là không có gì

mặt khác, ⌈/~⌊/sẽ là vectơ 1 phần tử và nó sẽ là ma trận 1x1 (không thể phân biệt trực quan với vô hướng) có chứa tối đa




3

Python 2 , 42 41 byte

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

Hãy thử trực tuyến!


Chào mừng bạn đến với PPCG :) Tôi không biết Python nhưng có vẻ như điều này yêu cầu đầu vào là danh sách. Thật không may (và không cần thiết, ý kiến ​​của tôi) thông số kỹ thuật (hiện tại) rất rõ ràng rằng đầu vào phải là một chuỗi.
Xù xì

@Shaggy, chương trình này hoạt động nếu đầu vào có dạng element, element, .... tức là, nó không phải được đặt trong ngoặc.
Arnav Borborah

1
Một danh sách không hoạt động, nhưng không bắt buộc vì trong Python 2, inputtheo mặc định eval, bất kỳ chuỗi nào được truyền từ stdin.
Arnav Borborah

1
40 byte . Tôi không biết liệu danh sách một thành phần có thể có dấu vết hay không ,, vì giải pháp của bạn bị lỗi nếu đầu vào chỉ là một số duy nhất
Jo King

2
@JoKing Có lý do gì bạn không thể thay đổi !=thành a >vì đầu vào sẽ không bao giờ trống?
nedla2004

3

Haskell , 77 75 61 byte

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

Hãy thử trực tuyến!

('[':).(++"]")lấy một chuỗi (ví dụ "1,2,1,3") và đặt nó trong ký tự ngoặc ( "[1,2,1,3]"). Sau đó readbiến chuỗi thành một danh sách các số nguyên ( [1,2,1,3]).

Hàm fsử dụng mẹo này cho một điều kiện ngắn hơn nếu một trong các kết quả là danh sách trống. any(/=a!!0+0)akiểm tra xem danh sách acó chứa bất kỳ phần tử nào không bằng phần tử đầu tiên của nó không a!!0. ( +0Cần thiết để readbiết rằng nó phải tìm danh sách các số.) Nếu tất cả các phần tử đều bằng nhau, kết quả kiểm tra này Falsesẽ được trả về và chuỗi trống được trả về. Mặt khác show(maximum a), đó là mức tối đa của danh sách được chuyển đổi thành một chuỗi, được trả về.


@nimi Cảm ơn bạn đã chỉ ra!
Laikoni

3

Màu đỏ, 81 byte

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

Giống như giải pháp R, một đoạn mã lớn đang xử lý chuỗi đầu vào "1,1,2,44,1". Nếu chúng ta có thể có khối đó dưới dạng một khối, ví dụ : x: [1 1 2 44 1], thì chúng ta có thể làm điều đó trong 41 byte:

sort x: unique x if 1 <>length? x[last x]

4
Chào mừng đến với PPCG! Chúng tôi thường yêu cầu một liên kết đến một thông dịch viên để xác minh một giải pháp và Dennis, một trong những mod của chúng tôi, đã thiết lập Dùng thử trực tuyến! cho mục đích như vậy! Nó thậm chí sẽ định dạng câu trả lời của bạn cho bạn! Hy vọng bạn tận hưởng thời gian của bạn ở đây!
Giuseppe

sort x: unique load replace/all input","" "if 1 <>length? x[last x]cho 67 byte. Thật không may input, không hoạt động trong TIO. Nếu bạn làm cho nó thành một chức năng, nó hoạt động tốt trong TIO: 73 byte
Galen Ivanov

3

APL (Dyalog Unicode) , 12 byte

Chương trình đầy đủ. Lời nhắc cho chuỗi từ stdin.

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

Hãy thử trực tuyến!

 nhắc và đánh giá biểu thức (dấu phẩy ghép các số vào danh sách)

{... } áp dụng lambda sau vô danh ( là lập luận; danh sách các số):

1≠ [nếu] 1 khác với

 kiểm đếm của đào

 những con số độc nhất vô nhị

 danh sách

: sau đó

⌈/ trả lại mức tối đa (giảm tối đa)

 danh sách

 [khác: không làm gì]


1 ≠ ở đây dường như chỉ tìm thấy nếu đối số của nó là một danh sách không phải là sự lặp lại của cùng một số nên nó không phải là 1 1 1 hay 22. Vì vậy, 1 1 1 2 3 3 trả về true ngay cả khi 3 không phải là duy nhất và nếu đó là đúng sẽ trả về ⌈ / max 3 (ngay cả khi nó không trả về đầu ra). Lỗi của tôi ở đâu? Hoặc có thể ':' có nghĩa khác
RosLuP

@RosLuP Ngay cả khi có sự lặp lại và thậm chí lặp lại số lượng tối đa, chúng ta vẫn phải in tối đa. Chỉ khi danh sách có chính xác một số duy nhất, chúng tôi không in gì cả. Nhìn vào trường hợp ví dụ cuối cùng trong OP.
Adám

Có, tôi đã hiểu sai vấn đề ... cảm ơn
RosLuP

cái này có hoạt động không? ⌈/~⌊/
ngn

@ngn Không, nó xuất ra một dòng mới nếu tất cả các yếu tố đều bằng nhau.
Adám

3

JavaScript (Node.js) , 49/53 byte

Phiên bản gốc của tôi sử dụng .every(), 53 byte

Hàm trả về '' có được tính là không có đầu ra không? Chắc chắn điều này có thể được cải thiện khi ...

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

Hãy thử trực tuyến!


Phiên bản được cải thiện Set()bằng Shaggy , 49 byte

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

Hãy thử trực tuyến!


2
Một cải tiến rất nhanh: tio.run/##y0osSyxOLsosKNHNy09J/Z9m@7/ Kẻ
Shaggy

@Shaggy đẹp! Tôi đã bắt đầu sử dụng Set nhưng không thể rút ngắn được như vậy
Chris M

2

Neim , 4 byte

𝐐𝐎Ξ𝐠

Giải trình:

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

Hãy thử trực tuyến!


2
Hiện tại, đầu vào phải là một chuỗi số nguyên được phân tách bằng dấu phẩy nhưng tôi đã hỏi liệu chúng ta có thể lấy một mảng thay thế không.
Xù xì


2

Japt, 16 byte

Đây sẽ là 9 nếu không phải là định dạng đầu vào nghiêm ngặt không cần thiết, 7 nếu ném lỗi được tính là không xuất ra gì.

Giả sử chuỗi chứa ít nhất 2 số nguyên.

q, mn
â ÊÉ?Urw:P

Thử nó


2

Lisp thông thường, 102 byte

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

Hãy thử trực tuyến!

Kích thước chủ yếu là do nhập dữ liệu; với đầu vào là một danh sách thông thường, độ dài giảm xuống còn 46 byte:

(lambda(x)(or(apply'= x)(princ(apply'max x))))

2

XPath 3.1, 54 byte

với chuỗi đầu vào là mục ngữ cảnh:

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

Có thể giảm một ký tự nếu bạn cho phép bối cảnh liên kết tiền tố ngắn hơn "xs" với không gian tên Lược đồ XML.

Giải thích: lấy chuỗi đầu vào, mã thông báo trên dấu phân tách ",", áp dụng xs:int()cho mỗi mã thông báo để chuyển đổi thành số nguyên, tính tối đa của chuỗi, đưa ra giá trị tối đa được cung cấp là vị ngữ $t!=$t. Nếu A và B là các chuỗi, thì A!=Bđúng là có một cặp vật phẩm (a từ A, b từ B) sao cho a!=b.

Nếu đầu vào có thể được cung cấp dưới dạng một chuỗi các số nguyên $ s chứ không phải là một chuỗi được phân tách bằng dấu phẩy thì giải pháp giảm xuống còn

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

(15 byte - có thể là giải pháp ngắn nhất trong ngôn ngữ không được thiết kế cho mục đích ngắn gọn)

LƯU Ý : điều này không thỏa mãn yêu cầu "được biểu thị như trong đầu vào" - nếu có một số nguyên có số 0 đứng đầu hoặc dấu cộng trong đầu vào, những số này sẽ bị mất. Tôi nghi ngờ điều đó cũng đúng với nhiều giải pháp khác.


2

K4 , 38 35 byte

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

Các trường hợp thử nghiệm:

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)

Tôi không rành về bất kỳ biến thể k nào có sẵn trên TiO, vì vậy không có ví dụ trực tuyến nào có sẵn, tôi sẽ cố gắng đưa ra một biến thể

Giải trình

Nếu bạn đang tự hỏi tại sao một số thao tác nhất định được thực hiện trước các thao tác khác, K4 không có quyền ưu tiên của toán tử, thay vào đó, nó diễn giải từ phải sang trái (mặc dù bạn có thể sử dụng dấu ngoặc đơn cho quyền ưu tiên). Biểu hiện tách biệt bởi dấu chấm phẩy.

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

Có lẽ có thể bị đánh golf nhiều hơn, không phải là một fan hâm mộ của việc phải sử dụng chức năng tối đa tạm thời đó vào cuối.

EDIT: Nếu dấu phẩy trong đầu ra là một vấn đề, nó có thể được sửa với hai byte nữa:

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

Lấy tổng số là 40 37, nhưng dấu phẩy trước số chỉ đơn giản có nghĩa là đó là một danh sách thành phần duy nhất trái ngược với nguyên tử.


2

PHP (<= 5.6) 64 74 byte

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

Chạy như ống với -nRhoặc kiểm tra trực tuyến

splitđã bị xóa trong PHP7, nhưng vì tôi phải thêm 10 để khắc phục một số vấn đề, nó đáng để sử dụng thay vì explodetương đương trong trường hợp này.


Also this doesn't work when there are more than one element with the max value Tôi If they are all equal, return/output nothingkhông If they are equal, return/output nothinghiểu ý nghĩa của nó nếu có nhiều hơn một để đầu ra trống. Thêm ==count($a)sửa chữa nó. Vì array_count_valuesđếm số lần nó xuất hiện trong mảng, nếu số đó bằng tổng số phần tử trong mảng thì xuất ra '' nếu không thì xuất max
ArtisticPhoenix

1
@JoKing - Bạn không nên lấy đầu vào thông qua một biến được khai báo trước - đã sửa bằng cách sử dụng $argnnó từ stdin (điều này đã được sử dụng trong nhiều câu trả lời golf) Tôi có thể đưa ra ví dụ về không chỉ của tôi mà cả những người dùng khác.
ArtisticPhoenix

2

Japt -hF , 8 byte

q, ün Åc

Thử nó

-3 byte nếu đầu vào có thể được lấy dưới dạng một mảng.


2

05AB1E , 9 8 byte

',¡ZsËiõ

-1 byte nhờ @Cowabunghole .

Hãy thử trực tuyến hoặc xác minh tất cả các trường hợp thử nghiệm .

Giải trình:

',¡        '# 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)

1
Giải pháp khá giống nhau, nhưng bạn có thể tránh các cách khác bằng cách thực hiện ',¡ZsËiõ, tiết kiệm 1 byte
Cowabunghole

@Cowabunghole Thông minh, cảm ơn!
Kevin Cruijssen

1

Python 2 , 44 byte

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

Hãy thử trực tuyến!


Tôi đoán evaltrong Python chuyển đổi một chuỗi được phân cách bằng dấu phẩy thành một danh sách?
Xù xì

1
Đúng; chính xác hơn là một tuple (danh sách bất biến). Nếu đầu vào không phải là một chuỗi (nghĩa là bỏ qua các trích dẫn trong phần đầu vào TIO), thì người ta chỉ có thể sử dụng k=input()và nhận được kết quả tương tự.
Chas Brown

1

Ohm v2 , 9 byte

Ul1E?Oq¿↑

Hãy thử trực tuyến! Giải trình:

Ul1E?Oq¿↑
U         Uniquify input
 l        Get length
  1E      Push whether length is equak to 1
    ?Oq   If so immediately quit
       ¿↑ Else print maximum

2
Đầu vào phải là một chuỗi các số được phân tách bằng dấu phẩy
Jo King

1

Than , 15 byte

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

Hãy thử trực tuyến! Liên kết là phiên bản dài dòng của mã. Giải trình:

≔I⪪S,θ

Tách đầu vào trên dấu phẩy và chuyển từng giá trị thành số nguyên.

¿›⌈θ⌊θ

Kiểm tra xem giá trị tối đa lớn hơn giá trị tối thiểu.

I⌈θ

Nếu vậy thì truyền giá trị tối đa cho chuỗi và in.


1

Toán học, 43 byte

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

Chức năng thuần túy. Lấy một chuỗi được phân tách bằng dấu phẩy làm đầu vào và trả về một số hoặc Null. Tôi tin rằng điều này là hợp lệ, vì Nullnó không được hiển thị bằng đồ họa:


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

Hãy thử trực tuyến!

Thuốc khử trùng

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

Đề xuất M(char*s)thay vì M(s)char*s;index()thay vìstrchr()
trần mèo

1

Bình thường, 7 byte

Itl{QeS

Hãy thử trực tuyến!
Tất cả các trường hợp thử nghiệm (mã hơi khác nhau để định dạng đầu ra tốt hơn)

Vì Pyth dựa trên Python, đầu vào của người dùng luôn được hiểu là một chuỗi, sau đó có thể được truyền qua eval() . Tất cả các chương trình Pyth tự động chạy Q=eval(input())như hướng dẫn đầu tiên của họ.

Giải trình:
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

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

Hãy thử trực tuyến!

Giải thích

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
}

Giải pháp thưởng!

Mặc dù đã cố gắng hết sức nhưng tôi không thể có được giải pháp này bằng cách sử dụng regex và Stream xuống dưới 105 byte, nhưng tôi thực sự thích sự thanh lịch của nó nên đã phải đề cập đến nó một cách vinh dự;

d->d.matches("(.+?)(,\\1)+")?"":java.util.Arrays.stream(d.split(",")).map(Long::new).reduce(0L,Long::max)

100 byte bằng cách sử dụng kết hợp regex của bạn (trừ đi ?) và vòng lặp thông thường và trả về (thay vì luồng).
Kevin Cruijssen

1

MATL , 15 9 byte

U&=?}1MX>

Hãy thử trực tuyến!
Nhiều testcase

Chỉ cần cố gắng để giữ cho sườn MATL của tôi không bị gỉ!

Biên tập : gỉ sau tất cả; đã lưu 6 byte, nhờ @LuisMendo.

Giải trình

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.

1

Pip , 13 byte

a^:',MXaRMMNa

Hãy thử trực tuyến!

Sử dụng cách tiếp cận từ giải pháp APL của ngn :

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

5 byte đầu tiên a^:', phân tách chuỗi đầu vào trên dấu phẩy.

Các giải pháp 13 byte thay thế:

I!$=Ya^',PMXy
a^:',$=a?uMXa
Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.