Xuất số lớn nhất có ít chữ số nhất


37

Đưa ra một danh sách không có số nguyên thập phân dương, xuất số lớn nhất từ ​​tập hợp các số có ít chữ số nhất.

Danh sách đầu vào sẽ không theo bất kỳ thứ tự cụ thể nào và có thể chứa các giá trị lặp lại.

Ví dụ:

[1] -> 1
[9] -> 9
[1729] -> 1729
[1, 1] -> 1
[34, 3] -> 3
[38, 39] -> 39
[409, 12, 13] -> 13
[11, 11, 11, 1] -> 1
[11, 11, 11, 11] -> 11
[78, 99, 620, 1] -> 1
[78, 99, 620, 10] -> 99
[78, 99, 620, 100] -> 99
[1, 5, 9, 12, 63, 102] -> 9
[3451, 29820, 2983, 1223, 1337] -> 3451
[738, 2383, 281, 938, 212, 1010] -> 938

Mã ngắn nhất tính bằng byte thắng.


Các số đầu vào có thể nằm trên các dòng riêng biệt?
seshoumara

@seshoumara Nghe có vẻ hợp lý, đúng vậy.
Sở thích của Calvin

Câu trả lời:


13

Bình thường, 7 3 6 byte

eS.ml`

Phòng thử nghiệm

Giải trình:

e      Still grab the last element
 S      Still sort
  .ml`   But prefilter the list for those with the (m)inimum length.

Giải pháp 7 byte:

eSh.gl`

Phòng thử nghiệm

Giải trình:

   .g   Group items in (implicit) input by:
     l  The length of
      ` their representation
  h     Get those with the shortest length
 S      Sort the resulting list
e       and grab the last (i.e. largest) element

6

Python 2, 48 42 byte

-6 byte nhờ @Dennis (sử dụng minchứ không phải sorted)

lambda l:min(l,key=lambda x:(len(`x`),-x))

Tất cả các trường hợp thử nghiệm là ở ideone

Lấy mức tối thiểu của danh sách theo (độ dài, giá trị)


1
minNên làm việc thay sorted.
Dennis

@Dennis, oh jeez - cảm ơn! Có lẽ khác nhau đủ để đã đăng rằng mặc dù.
Jonathan Allan

Trao đổi sorted()[0]cho min? Tôi coi đó là một sửa đổi nhỏ của mã gốc của bạn.
Dennis

Cũng có len(`x`)+1./xchiều dài tương tự. Quá xấu bạn cần 1..
xnor

Chà, nó ngắn hơn những gì tôi nghĩ ra. Làm tốt lắm!
mbomb007

6

Thạch , 7 byte

DL,NµÞḢ

Kiểm tra nó tại TryItOnline
Hoặc xem tất cả các trường hợp thử nghiệm tại TryItOnline

Làm sao?

DL,NµÞḢ - Main link takes one argument, the list, e.g. [738, 2383, 281, 938, 212, 1010]
D       - convert to decimal, e.g. [[7,3,8],[2,3,8,3],[2,8,1],[9,3,8],[2,1,2],[1,0,1,0]]
 L      - length, e.g. [3,4,3,3,3,4]
   N    - negate, e.g [-738, -2383, -281, -938, -212, -1010]
  ,     - pair, e.g. [[3,-738],[4,-2383],[3,-281],[3,-938],[3,-212],[4,-1010]]
    µ   - make a monadic chain
     Þ  - sort the input by that monadic function, e.g [938,738,281,212,2383,1010]
          (the lists in the example are not created, but we sort over the values shown)
      Ḣ - pop and return the first element, e.g. 938

1
Công dụng tuyệt vời của sắp xếp!
dặm

@miles cách của bạn vẫn được truyền cảm hứng :)
Jonathan Allan

5

05AB1E , 5 byte

Mã số:

({é¬(

Giải trình:

(      # Negate the list, e.g. [22, 33, 4] -> [-22, -33, -4]
 {     # Sort, e.g. [-22, -33, -4] -> [-33, -22, -4]
  é    # Sort by length, e.g. [-33, -22, -4] -> [-4, -22, -33]
   ¬   # Get the first element.
    (  # And negate that.

Sử dụng mã hóa CP-1252 . Hãy thử trực tuyến!



4

MATL , 14 byte

10&YlktX<=G*X>

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

Giải trình:

  &Yl           % Log
10              % Base 10
     kt         % Floor and duplicate
       X<       % Find the smallest element
         =      % Filter out elements that do not equal the smallest element
          G     % Push the input again
           *    % Multiply (this sets numbers that do not have the fewest digits to 0)
            X>  % And take the maximum

4

Võng mạc ,24 16 byte

Ôi
Ô $ # `
$ .0
G1`

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

Đã lưu 8 byte nhờ Martin!

Tất cả các thử nghiệm đang sử dụng một phiên bản mã cũ hơn một chút, nhưng thuật toán là giống hệt nhau. Tôi sẽ cập nhật nó để gần hơn khi tôi có nhiều thời gian hơn.

Các dòng mới theo dõi là đáng kể. Sắp xếp các số theo giá trị số đảo ngược, sau đó sắp xếp chúng theo số chữ số. Điều này để lại cho chúng tôi số lớn nhất với các chữ số ít nhất ở vị trí đầu tiên, vì vậy chúng tôi chỉ có thể xóa các chữ số còn lại.


Nếu bạn phân tách dòng đầu vào, bạn có thể bỏ qua biểu thức chính quy từ cả hai giai đoạn sắp xếp và sau đó sử dụng G1`cho giai đoạn cuối.
Martin Ender

Ngoài ra, giai đoạn đầu tiên không cần #. Bạn chỉ quan tâm đến thứ tự tương đối cho một độ dài số nguyên cho trước và trong một chiều dài sắp xếp các số từ vựng là chính xác.
Martin Ender

@MartinEnder Cảm ơn! Tôi đã thêm cả hai lời khuyên của bạn. Lẽ ra tôi nên đề xuất \w+làm mặc định cho việc sắp xếp, theo cách đó tôi sẽ không cần phải vật lộn nhiều để tạo ra các bộ thử nghiệm;)
FryAmTheEggman

Đây là một số 16 khác, trong trường hợp nó cung cấp cho bạn bất kỳ ý tưởng nào để chơi gôn thêm: retina.tryitonline.net/iêu
Martin Ender

4

Toán học, 33 31 byte

Max@MinimalBy[#,IntegerLength]&

MinimalBy chọn tất cả các yếu tố của danh sách đầu vào ban đầu với số điểm nhỏ nhất theo IntegerLength, nghĩa là có số chữ số nhỏ nhất; và sau đó Max xuất ra cái lớn nhất.

Cảm ơn Martin Ender đã tìm và sau đó tiết kiệm cho tôi 2 byte :)


4

Perl 6 , 18 byte

*.min:{.chars,-$_}

Giải trình:

*\        # Whatever lambda
.min:     # find the minimum using

{         # bare block lambda with implicit parameter 「$_」

  .chars, # number of characters first ( implicit method call on 「$_」 )
  -$_     # then negative of the value in case of a tie
}

Sử dụng:

say [738, 2383, 281, 938, 212, 1010].&( *.min:{.chars,-$_} ); # 938

my &code = *.min:{.chars,-$_}

say code [78, 99, 620, 10]; # 99

3

Thạch , 8 byte

DL€İMị¹Ṁ

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

DL€İMị¹Ṁ  Input: list A
D         Convert each integer to a list of base 10 digits
 L€       Get the length of each list (number of digits of each)
   İ      Take the reciprocal of each
    M     Get the indices of the maximal values
      ¹   Get A
     ị    Select the values at those indices from A
       Ṁ  Find the maximum and return

Làm thế nào là 8 byte này? Có phải tất cả các nhân vật này phù hợp với ASCII?
Federico Poloni

1
@FedericoPoloni Vâng, họ phù hợp , mặc dù trong một bảng mã khác.
Erik the Outgolfer

3

JavaScript (ES6), 51

l=>l.sort((a,b)=>(a+l).length-(b+l).length||b-a)[0]

Kiểm tra

f=l=>l.sort((a,b)=>(a+l).length-(b+l).length||b-a)[0]

;[
 [[1], 1]
,[[9], 9]
,[[1729], 1729]
,[[1, 1], 1]
,[[34, 3], 3]
,[[38, 39], 39]
,[[409, 12, 13], 13]
,[[11, 11, 11, 1], 1]
,[[11, 11, 11, 11], 11]
,[[78, 99, 620, 1], 1]
,[[78, 99, 620, 10], 99]
,[[78, 99, 620, 100], 99]
,[[1, 5, 9, 12, 63, 102], 9]
,[[3451, 29820, 2983, 1223, 1337], 3451]
,[[738, 2383, 281, 938, 212, 1010], 938]
].forEach(([l,x])=>{
  var r=f(l)
  console.log(r==x?'OK':'KO',l+' -> '+r)
})  


3

J, 21 14 byte

Saved 7 byte nhờ dặm và (gián tiếp) Jonathan!

{.@/:#@":"0,.-

Đây là một chuỗi bốn:

{.@/: (#@":"0 ,. -)

Chúng ta hãy đi qua đầu vào 10 27 232 1000. Các ngã ba bên trong bao gồm ba hộp. #@":"0tính toán kích thước, ,.concats từng kích thước với -thành viên phủ định ( ) của nó . Đối với đầu vào 10 27 232 1000, chúng tôi còn lại với điều này:

   (#@":"0 ,. -) 10 27 232 1000
2   _10
2   _27
3  _232
4 _1000

Bây giờ, chúng ta có {.@/:như một tine bên ngoài. Đây là đơn âm đầu tiên ( {.) trên sắp xếp dyadic ( /:). Đó là, chúng ta sẽ lấy yếu tố đầu tiên của kết quả của dyadic /:. Điều này sắp xếp đối số bên phải của nó theo đối số bên trái của nó, cung cấp cho chúng ta đầu vào:

   (/: #@":"0 ,. -) 10 27 232 1000
27 10 232 1000

Sau đó, việc sử dụng {.cung cấp cho chúng tôi thành phần đầu tiên của danh sách đó và chúng tôi đã hoàn thành:

   ({.@/: #@":"0 ,. -) 10 27 232 1000
27

Phiên bản cũ

>./@(#~]=<./@])#@":"0

Vẫn đang làm việc trên các cải tiến. Tôi đã đánh nó xuống từ 30, và tôi nghĩ điều này là đủ tốt. Trước tiên tôi sẽ chia nó thành các phần cơ bản:

   size =: #@":"0
   max =: >./
   min =: <./
   over =: @
   right =: ]
   left =: [
   selectMin =: #~ right = min over right

   f =: max over selectMin size
   f 3 4 5
5
   f 3 4 53
4
   f 343 42 53
53

Đây là cách nó hoạt động.

>./@(#~ ] = <./@]) #@":"0

Đây là một chuyến tàu đơn, nhưng phần này là một cái móc. Động từ >./@(#~ ] = <./@])được gọi với đối số bên trái là đầu vào của chuỗi chính và kích thước, được định nghĩa là #@":"0, như là đối số bên phải. Điều này được tính là độ dài ( #) trên ( @) định dạng mặc định ( ":), nghĩa là chuỗi số hóa, được tạo để áp dụng cho các ô 0 (tức là thành viên) của đầu vào ( "0).

Chúng ta hãy đi qua đầu vào ví dụ 409 12 13.

   (#@":"0) 409 12 13
3 2 2

Bây giờ cho động từ bên trong >./@(#~ ] = <./@]),. Có vẻ như >./@(...), có nghĩa là giá trị tối đa ( >./) của ( @) những gì bên trong (...). Về phần bên trong, đây là một đoàn tàu bốn, tương đương với năm chuyến tàu này:

[ #~ ] = <./@]

[đề cập đến đối số ban đầu và ]tham chiếu đến mảng kích thước; 409 12 133 2 2tương ứng trong ví dụ này. Tine bên phải <./@], tính kích thước tối thiểu, 2trong trường hợp này. ] = <./@]là một mảng boolean của các giá trị bằng mức tối thiểu, 0 1 1trong trường hợp này. Cuối cùng, [ #~ ...lấy các giá trị từ đối số bên trái theo mặt nạ đối số bên phải. Điều này có nghĩa là các yếu tố tương ứng 0được loại bỏ và 1giữ lại. Vì vậy, chúng tôi còn lại với 12 13. Cuối cùng, theo như trên, max được lấy, cho chúng ta kết quả chính xác 13và chúng ta đã hoàn thành.


Một số xáo trộn cộng với một cái móc có thể tiết kiệm một byte >./@#~[:(=<./)#@":"0. Tôi nghĩ rằng có thể có nhiều hơn một chút để tiết kiệm
dặm

@miles XD Mình mới viết xong giải thích. À, hãy để tôi ngắm nhìn vẻ đẹp này ...
Conor O'Brien

Jonathan tìm thấy một phương pháp tốt hơn. Nếu chúng ta chuyển nó sang J, 14 byte của nó {.@/:#@":"0,.-nhưng đầu vào phải được định hình như một danh sách
dặm

@miles "hình như một danh sách"? Ý bạn là như thế 400 12 13nào?
Conor O'Brien

2

JavaScript (ES6), 62 byte

var solution =

a=>a.map(n=>(l=`${n}`.length)>a?l>a+1|n<r?0:r=n:(a=l-1,r=n))|r

;document.write('<pre>' + `
[1] -> 1
[9] -> 9
[1729] -> 1729
[1, 1] -> 1
[34, 3] -> 3
[38, 39] -> 39
[409, 12, 13] -> 13
[11, 11, 11, 1] -> 1
[11, 11, 11, 11] -> 11
[78, 99, 620, 1] -> 1
[78, 99, 620, 10] -> 99
[78, 99, 620, 100] -> 99
[1, 5, 9, 12, 63, 102] -> 9
[3451, 29820, 2983, 1223, 1337] -> 3451
[738, 2383, 281, 938, 212, 1010] -> 938
`.split('\n').slice(1, -1).map(c =>
  c + ', result: ' + solution(eval(c.slice(0, c.indexOf('->'))))
).join('\n'))


2

dc, 54 byte

?dZsL0sN[dsNdZsL]su[dlN<u]sU[dZlL=UdZlL>ukz0<R]dsRxlNp

Giải trình:

?dZsL0sN                  # read input, initialize L (length) and N (number)
[dsNdZsL]su               # macro (function) 'u' updates the values of L and N
[dlN<u]sU                 # macro 'U' calls 'u' if N < curr_nr
[dZlL=U dZlL>ukz0<R]dsR   # macro 'R' is a loop that calls 'U' if L == curr_nr_len
                          #or 'u' if L > curr_nr_len
xlNp                      # the main: call 'R' and print N at the end

Chạy ví dụ: 'input.txt' chứa tất cả các trường hợp kiểm tra trong câu lệnh của câu hỏi

while read list;do echo "$list -> "$(dc -f program.dc <<< $list);done < input.txt

Đầu ra:

1 -> 1
9 -> 9
1729 -> 1729
1 1 -> 1
34 3 -> 3
38 39 -> 39
409 12 13 -> 13
11 11 11 1 -> 1
11 11 11 11 -> 11
78 99 620 1 -> 1
78 99 620 10 -> 99
78 99 620 100 -> 99
1 5 9 12 63 102 -> 9
3451 29820 2983 1223 1337 -> 3451
738 2383 281 938 212 1010 -> 938

2

Java 7, 112 104 byte

int c(int[]a){int i=a[0],j;for(int b:a)i=(j=(i+"").length()-(b+"").length())>0?b:b>i&j==0?b:i;return i;}

Cách tiếp cận khác nhau để tiết kiệm nhiều byte nhờ @ Barteks2x .

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

Hãy thử nó ở đây.

class M{
  static int c(int[] a){
    int i = a[0],
        j;
    for(int b : a){
      i = (j = (i+"").length() - (b+"").length()) > 0
           ? b
           : b > i & j == 0
              ? b
              : i;
    }
    return i;
  }

  public static void main(String[] a){
    System.out.println(c(new int[]{ 1 }));
    System.out.println(c(new int[]{ 9 }));
    System.out.println(c(new int[]{ 1729 }));
    System.out.println(c(new int[]{ 1, 1 }));
    System.out.println(c(new int[]{ 34, 3 }));
    System.out.println(c(new int[]{ 409, 12, 13 }));
    System.out.println(c(new int[]{ 11, 11, 11, 1 }));
    System.out.println(c(new int[]{ 11, 11, 11, 11 }));
    System.out.println(c(new int[]{ 78, 99, 620, 1 }));
    System.out.println(c(new int[]{ 78, 99, 620, 100 }));
    System.out.println(c(new int[]{ 1, 5, 9, 12, 63, 102 }));
    System.out.println(c(new int[]{ 3451, 29820, 2983, 1223, 1337 }));
    System.out.println(c(new int[]{ 738, 2383, 281, 938, 212, 1010 }));
  }
}

Đầu ra:

1
9
1729
1
3
13
1
11
1
99
9
3451
938

1
phiên bản ngắn hơn: int c (int [] a) {int i = a [0], j; for (int b: a) i = (j = (i + ""). length () - (b + ""). chiều dài ())> 0? b: b> i & j == 0? b: i; return i;}
barteks2x

@ Barteks2x Cảm ơn, tôi đã chỉnh sửa nó.
Kevin Cruijssen

2

bash, awk, sắp xếp 53 byte

set `awk '{print $0,length($0)}'|sort -rnk2n`;echo $1

Đọc đầu vào từ stdin, một giá trị trên mỗi dòng

bash và sort, 58 57 byte

set `sort -n`;while((${#2}==${#1}));do shift;done;echo $1


không hoạt động cho mẫu cuối cùng đã cho 2383 thay vì 938
Archemar

@Archemar xin lỗi tôi đã đọc sai câu hỏi, nó đã được sửa ngay bây giờ
Emmanuel

Bạn có thể loại bỏ khoảng trống giữa while((.
seshoumara

1

JavaScript ES6, 80 77 70 byte

a=>Math.max(...a.filter(l=>l.length==Math.min(...a.map(i=>i.length))))

Tôi hy vọng tôi đang đi đúng hướng ...


Bạn có thể thay thế a.map(i=>i.length).sort((a,b)=>a-b)[0]bằng Math.min(...a.map(i=>i.length))?
dùng81655

@ user81655 yup, tôi có thể. Tôi nghĩ rằng tôi đã thực hiện chỉnh sửa đó nhưng dường như tôi đã không làm
Downgoat

Bạn cũng có thể thử phủ định mức tối thiểu để có thể sử dụng lại Math.max: a=>(m=Math.max)(...a.filter(l=>l.length==-m(...a.map(i=>-i.length))))Dường như chỉ lưu 1 byte.
dùng81655

Đối với một byte khác, filtercó thể được thay thế bằng một maptrả về 0cho các giá trị không vượt qua kiểm tra:a=>(m=Math.max)(...a.map(l=>l.length+m(...a.map(i=>-i.length))?0:l))
user81655

1

Brachylog , 16 byte

or:@]feL:la#=,Lh

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

Giải trình

or                 Sort the list in descending order.
  :@]f             Find all suffixes of the list.
      eL           Take one suffix L of the list.
        :la        Apply length to all numbers in that suffix.
           #=,     All lengths must be equal.
              Lh   Output is the first element of L.

1

Haskell, 39 byte

snd.maximum.map((0-).length.show>>=(,))

Điều này không làm việc, nó sẽ ưu tiên 34để 2.
xnor

ồ cảm ơn. Tôi phải suy nghĩ lại về nó ..
Damien

Hoạt động tốt hơn bây giờ!
Damien

1

Javascript (ES6), 57 54 53 byte

l=>l.sort((a,b)=>(s=a=>1/a+`${a}`.length)(a)-s(b))[0]

Đối với bản ghi, phiên bản trước của tôi thiên về toán học hơn nhưng lớn hơn 1 byte:

l=>l.sort((a,b)=>(s=a=>1/a-~Math.log10(a))(a)-s(b))[0]

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

let f =
l=>l.sort((a,b)=>(s=a=>1/a+`${a}`.length)(a)-s(b))[0]

console.log(f([1]));                              //  -> 1
console.log(f([9]));                              //  -> 9
console.log(f([1729]));                           //  -> 1729
console.log(f([1, 1]));                           //  -> 1
console.log(f([34, 3]));                          //  -> 3
console.log(f([38, 39]));                         //  -> 39
console.log(f([409, 12, 13]));                    //  -> 13
console.log(f([11, 11, 11, 1]));                  //  -> 1
console.log(f([11, 11, 11, 11]));                 //  -> 11
console.log(f([78, 99, 620, 1]));                 //  -> 1
console.log(f([78, 99, 620, 10]));                //  -> 99
console.log(f([78, 99, 620, 100]));               //  -> 99
console.log(f([1, 5, 9, 12, 63, 102]));           //  -> 9
console.log(f([3451, 29820, 2983, 1223, 1337]));  //  -> 3451
console.log(f([738, 2383, 281, 938, 212, 1010])); //  -> 938


1

MATL , 11 byte

tV48\&XS0))

Đầu vào là một vectơ cột (sử dụng ;như dấu phân cách), chẳng hạn như

[78; 99; 620; 100]

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

Hãy sử dụng đầu vào [78; 99; 620; 100]làm ví dụ.

t      % Input column vector implicitly. Duplicate
       %   STACK: [78; 99; 620; 100], [78; 99; 620; 100]
V      % Convert to string. Each number is a row, left-padded with spaces
       %   STACK: [78; 99; 620; 100], [' 78'; ' 99'; '620'; '100']
48\    % Modulo 48. This transforms each digit into the corresponding number,
       % and space into 32. Thus space becomes the largest "digit"
       %   STACK: [78; 99; 620; 100], [32 7 8; 32 9 9; 6 2 0; 1 0 0]
&XS    % Sort rows in lexicographical order, and push the indices of the sorting
       %   STACK: [78; 99; 620; 100], [4; 3; 1; 2]
0)     % Get last value
       %   STACK: [78; 99; 620; 100], 2
)      % Index
       %   STACK: 99
       % Implicitly display

1
Rất vui khi thấy các trạng thái ngăn xếp trong lời giải thích của bạn!
flawr

1

Perl, 38 37 byte

Bao gồm +1 cho -a

Cung cấp đầu vào trên STDIN:

perl -M5.010 maxmin.pl <<< "3451 29820 2983 1223 1337"

maxmin.pl:

#!/usr/bin/perl -a
\$G[99-y///c][$_]for@F;say$#{$G[-1]}

Sử dụng tuyến tính bộ nhớ với số lượng lớn nhất, vì vậy đừng thử điều này với số lượng quá lớn. Một giải pháp không có lỗ hổng đó là 38 byte:

#!/usr/bin/perl -p
$.++until$\=(sort/\b\S{$.}\b/g)[-1]}{

Tất cả những điều này rất khó xử và không cảm thấy tối ưu chút nào ...


1

R, 72 41 36 byte

Viết lại hàm với một cách tiếp cận mới. Chơi golf 5 byte nhờ một gợi ý từ @bouncyball.

n=nchar(i<-scan());max(i[n==min(n)])

Giải thích:

        i<-scan()       # Read input from stdin
n=nchar(         );     # Count the number of characters in each number in i
max(             )      # Return the maximum of the set where
    i[n==min(n)]        # the number of characters is the minimum number of characters.

function(i){while(1){if(length(o<-i[nchar(i)==T]))return(max(o));T=T+1}}

Thụt lề / giải thích:

function(i){               # Take an input i
  while(1){                # Do the following continuously:
    if(length(
        o<-i[nchar(i)==T]) # Define o to be the subset of i with numbers of length T,
      )                    # where T is 1 (a built-in!).
                           # We take the length of this subset (its size), and then pass
                           # it to if(). Thanks to weak typing, this numeric is converted
                           # to a logical value. When this occurs, zero evaluates to FALSE
                           # and any non-zero number evaluates to TRUE. Therefore, the if()
                           # is TRUE iff the subset is not empty.
      return(max(o));      # If it's true, then we just return the largest element of the
                           # subset, breaking out of our loop.
    T=T+1                  # Otherwise, increment our counter and continue.
  }
}


1
Lưu 4 byte bằng cách không xác định function:i=scan();n=nchar(i);max(i[n==min(n)])
bouncyball

@bouncyball Cảm ơn! Và thêm 1 byte được lưu bởi n=nchar(i<-scan()).
rturnbull

1

Bash + coreutils, 58 byte

d=`sort -n`;egrep ^.{`sed q<<<"$d"|wc -L`}$<<<"$d"|tail -1

Định dạng đầu vào là một giá trị trên mỗi dòng. Đề nghị chơi golf được hoan nghênh.

Giải trình:

d=`sort -n`                             #save the list in ascending numerical order
egrep ^.{                    }$<<<"$d"  #print only list lines having as many chars
         `sed q<<<"$d"|wc -L`                 #as the first sorted line does
|tail -1                                #and then get the last one (the answer)

+1 cảm ơn bạn bây giờ tôi biết điều đó sed q=head -1
Emmanuel

1

Python 2 - 41 byte

lambda l:max((-len(`x`),x) for x in l)[1]

0

Python 2, 58 byte

def F(x):l={len(`i`):i for i in sorted(x)};print l[min(l)]

0

Python 3, 56 byte

lambda a:sorted(sorted(a),key=lambda x:-len(str(x)))[-1]

Sử dụng lambda trong lambda!

Python 2, 53 byte

s=lambda a:sorted(sorted(a),key=lambda x:-len(`x`))[-1]

Tương tự nhưng với backticks


0

Pip , 11 byte

(SNgSK-#_v)

Đưa đầu vào là đối số dòng lệnh. Hãy thử trực tuyến!

Lần đầu tiên sử dụng Sort- Khành mắt! Giống như Python sorted(), nó có một hàm được áp dụng cho từng mục của lần lặp và kết quả được sử dụng làm khóa sắp xếp. Đây là cách chương trình này hoạt động:

 SNg         List of cmdline args, sorted numerically in increasing order
    SK       Sort with key function...
      -#_    ... negative length(x), thus putting the shortest numbers at the end but not
               affecting the relative ordering among numbers with the same length
(        v)  Get the last element (index -1) and auto-print

0

Clojure, 63 byte

(reduce #(if(=(quot %1 10)(quot %2 10))(max %1 %2) %1)(sort x)) 

như trong:

(reduce #(if(=(quot %1 10)(quot %2 10))(max %1 %2) %1)(sort[3 7 121 11 8 2 10 9]))
=> 9

Mặc dù tôi chắc chắn có một cách để làm cho nó nhỏ hơn.


0

PHP, 86 byte

<?$l=strlen($r=min($a=$_GET[a]));foreach($a as$v)if($v>$r&strlen($v)==$l)$r=$v;echo$r;
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.