เอาท์พุทจำนวนมากที่สุดด้วยตัวเลขที่น้อยที่สุด


37

รับรายการที่ไม่มีข้อ จำกัด ของจำนวนเต็มเลขฐานสิบบวกเอาท์พุทจำนวนมากที่สุดจากชุดของตัวเลขที่มีตัวเลขน้อยที่สุด

รายการอินพุตจะไม่เรียงตามลำดับใด ๆ และอาจมีค่าซ้ำ

ตัวอย่าง:

[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

รหัสที่สั้นที่สุดในหน่วยไบต์ชนะ


หมายเลขอินพุตสามารถอยู่ในบรรทัดแยกกันได้หรือไม่?
seshoumara

@seshoumara ฟังดูสมเหตุสมผลใช่
งานอดิเรกของ Calvin

คำตอบ:


13

Pyth, 7 3 6 ไบต์

eS.ml`

ชุดทดสอบ

คำอธิบาย:

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

โซลูชั่น 7 ไบต์:

eSh.gl`

ชุดทดสอบ

คำอธิบาย:

   .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 ไบต์

-6 ไบต์ขอบคุณ @Dennis (ใช้minแทนsorted)

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

กรณีทดสอบทั้งหมดอยู่ที่ideone

ใช้ขั้นต่ำของรายการตาม (ความยาว - ค่า)


1
minsortedควรจะทำงานแทน
เดนนิส

@Dennis, โอ้ jeez - ขอบคุณ! อาจแตกต่างกันพอที่จะโพสต์ด้วยตัวคุณเองว่า
Jonathan Allan

การแลกเปลี่ยนsorted()[0]เพื่อmin? ฉันคิดว่าการปรับเปลี่ยนเล็กน้อยของรหัสต้นฉบับของคุณ
เดนนิส

นอกจากนี้ยังlen(`x`)+1./xมีความยาวเท่ากัน 1.เสียดายที่คุณต้องการ
xnor

นั่นสั้นกว่าที่ฉันคิดไว้ เยี่ยมมาก!
mbomb007

6

เยลลี่ขนาด 7 ไบต์

DL,NµÞḢ

ทดสอบที่TryItOnline
หรือดูกรณีทดสอบทั้งหมดที่TryItOnline

อย่างไร?

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
การใช้งานที่ยอดเยี่ยมของการจัดเรียง!
ไมล์

@ วิธีของคุณยังคงเป็นแรงบันดาลใจ :)
Jonathan Allan

5

05AB1E , 5 ไบต์

รหัส:

({é¬(

คำอธิบาย:

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

ใช้การเข้ารหัสCP-1252 ลองออนไลน์!



4

MATL , 14 ไบต์

10&YlktX<=G*X>

ลองออนไลน์!

คำอธิบาย:

  &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

จอประสาทตา24 16 ไบต์

O ^ `
O $ # `
$ 0.0
G1`

ลองออนไลน์! หรือเรียกใช้กรณีทดสอบทั้งหมด

บันทึกไปแล้ว 8 ไบต์ขอบคุณ Martin!

การทดสอบทั้งหมดใช้รหัสรุ่นเก่ากว่าเล็กน้อย แต่อัลกอริทึมเหมือนกัน ฉันจะอัปเดตให้ใกล้ยิ่งขึ้นเมื่อฉันมีเวลามากขึ้น

ขึ้นบรรทัดใหม่ที่มีความสำคัญ เรียงลำดับตัวเลขตามค่าตัวเลขย้อนกลับจากนั้นเรียงลำดับตัวเลขตามจำนวนหลัก นี่ทำให้เรามีจำนวนมากที่สุดด้วยตัวเลขที่น้อยที่สุดในตำแหน่งแรกดังนั้นเราจึงสามารถลบตัวเลขที่เหลือ


หากคุณแยกบรรทัดป้อนข้อมูลด้วยการป้อนคุณสามารถละเว้น regex จากขั้นตอนการเรียงลำดับทั้งสองและจากนั้นใช้G1`สำหรับขั้นตอนสุดท้าย
Martin Ender

นอกจากนี้ขั้นตอนแรกไม่จำเป็นต้อง#ใช้ คุณสนใจเกี่ยวกับลำดับสัมพัทธ์สำหรับความยาวจำนวนเต็มที่กำหนดและภายในการเรียงลำดับตัวเลขพจนานุกรมความยาวหนึ่งครั้งนั้นถูกต้อง
Martin Ender

@ มาร์ตินเอนเดอร์ขอบคุณ! ฉันได้เพิ่มทั้งเคล็ดลับของคุณ ฉันควรจะแนะนำ\w+เป็นค่าเริ่มต้นสำหรับการเรียงลำดับวิธีที่ฉันไม่ต้องดิ้นรนมากที่จะทำชุดทดสอบ;)
FryAmTheEggman

นี่คืออีก 16 ในกรณีที่มันช่วยให้คุณมีความคิดใด ๆ สำหรับการเล่นกอล์ฟต่อไป: retina.tryitonline.net/ …
มาร์ติน Ender

4

Mathematica, 33 31 ไบต์

Max@MinimalBy[#,IntegerLength]&

MinimalBy เลือกองค์ประกอบทั้งหมดของรายการอินพุตต้นฉบับด้วยคะแนนที่เล็กที่สุดตามIntegerLengthด้วยจำนวนตัวเลขที่น้อยที่สุด จากนั้น Max จะให้ผลลัพธ์ที่ใหญ่ที่สุด

ขอบคุณ Martin Ender สำหรับการค้นหาและการบันทึก 2 ไบต์สำหรับฉัน :)


4

Perl 6 , 18 ไบต์

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

คำอธิบาย:

*\        # 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
}

การใช้งาน:

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

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

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

3

เยลลี่ขนาด 8 ไบต์

DL€İMị¹Ṁ

ลองออนไลน์! หรือตรวจสอบกรณีทดสอบทั้งหมด

คำอธิบาย

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

8 ไบต์นี้เป็นอย่างไร อักขระเหล่านี้ทั้งหมดพอดีกับ ASCII หรือไม่?
Federico Poloni

1
@FedericoPoloni ใช่พวกเขาเหมาะสมแม้ว่าจะอยู่ในเพจรหัสอื่น
Erik the Outgolfer

3

JavaScript (ES6), 51

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

ทดสอบ

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 ไบต์

บันทึกแล้ว 7 ไบต์ด้วยไมล์และโจนาธาน (โดยอ้อม)!

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

นี่คือห่วงโซ่สี่:

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

ใช้เวลาเดิน Let 's 10 27 232 1000มากกว่าการป้อนข้อมูล ส้อมด้านในประกอบด้วยซี่สามซี่ #@":"0คำนวณขนาด,.concats แต่ละขนาดด้วยเมื่อตะกี้ ​​( -) สมาชิก สำหรับอินพุต10 27 232 1000เราจะเหลือสิ่งนี้:

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

ตอนนี้เรามี{.@/:เหมือนฟันซี่ด้านนอก นี่คือ monadic first ( {.) เหนือ dyadic sort ( /:) นั่นก็คือเราจะได้รับการองค์ประกอบแรกของผลจากการ /:dyadic สิ่งนี้จัดเรียงอาร์กิวเมนต์ที่ถูกต้องตามอาร์กิวเมนต์ที่เหลือซึ่งทำให้เรามีส่วนป้อน

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

จากนั้นการใช้{.ทำให้เรามีองค์ประกอบแรกของรายการนั้นและเราทำเสร็จแล้ว:

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

เวอร์ชั่นเก่า

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

ยังคงทำงานเกี่ยวกับการปรับปรุง ฉันตีกอล์ฟลงจาก 30 และฉันคิดว่ามันดีพอ ฉันจะแบ่งมันออกเป็นส่วนแรก:

   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

นี่คือวิธีการทำงาน

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

นี่คือรถไฟ monadic แต่ส่วนนี้เป็นตะขอ กริยา>./@(#~ ] = <./@])ถูกเรียกโดยใช้อาร์กิวเมนต์ซ้ายเป็นอินพุตไปยังเชนหลักและขนาดที่นิยามไว้เป็น#@":"0อาร์กิวเมนต์ที่ถูกต้อง นี่คำนวณเป็นความยาว ( #) เกิน ( @) รูปแบบเริ่มต้น ( ":) นั่นคือการทำให้เป็นสตริงที่เป็นตัวเลขซึ่งถูกสร้างขึ้นเพื่อใช้กับ 0 เซลล์ (เช่นสมาชิก) ของอินพุต ( "0)

ใช้เวลาเดิน Let 's 409 12 13มากกว่าการป้อนข้อมูลตัวอย่าง

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

สำหรับกริยาภายใน, >./@(#~ ] = <./@]). ดูเหมือนว่า>./@(...)มีประสิทธิภาพซึ่งหมายถึงมูลค่าสูงสุด ( >./) ของ ( @) (...)สิ่งที่อยู่ภายใน ด้านในเป็นสี่รถไฟเทียบเท่ากับรถไฟห้าขบวนนี้:

[ #~ ] = <./@]

[หมายถึงอาร์กิวเมนต์ดั้งเดิมและ]อ้างถึงอาร์เรย์ขนาด 409 12 13และ3 2 2ตามลำดับในตัวอย่างนี้ ซี่ที่ถูกต้อง<./@]คำนวณขนาดขั้นต่ำ2ในกรณีนี้ ] = <./@]เป็นอาร์เรย์บูลีนของค่าเท่ากับค่าต่ำสุด0 1 1ในกรณีนี้ ในที่สุด[ #~ ...นำค่าจากอาร์กิวเมนต์ซ้ายตามมาสก์อาร์กิวเมนต์ด้านขวา ซึ่งหมายความว่าองค์ประกอบที่สอดคล้องกับ0จะถูกปล่อยและ1เก็บรักษาไว้ 12 13ดังนั้นเราจะเหลือ ในที่สุดตามที่กล่าวไว้ข้างต้นจำนวนสูงสุดจะถูกนำไปใช้เพื่อให้ผลลัพธ์ที่ถูกต้องแก่13เรา


>./@#~[:(=<./)#@":"0บางสับบวกเบ็ดสามารถบันทึกไบต์ ฉันคิดว่าอาจจะมีการประหยัดอีกเล็กน้อย
ไมล์

@miles XD ฉันเพิ่งเขียนคำอธิบายเสร็จแล้ว อืมผมขอดูความงามนี้ ...
Conor O'Brien

โจนาธานพบวิธีที่ดีกว่า ถ้าเราแปลงเป็น J 14 ไบต์ของมัน{.@/:#@":"0,.-แต่การป้อนข้อมูลจะต้องมีรูปทรงเป็นรายการ
ไมล์

@miles "กำหนดให้เป็นรายการ" หรือไม่ คุณหมายความว่า400 12 13อย่างไร
Conor O'Brien

2

JavaScript (ES6), 62 ไบต์

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 ไบต์

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

คำอธิบาย:

?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

เรียกใช้ตัวอย่าง: 'input.txt' มีกรณีทดสอบทั้งหมดในคำสั่งของคำถาม

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

เอาท์พุท:

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 ไบต์

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

วิธีการที่แตกต่างกันเพื่อประหยัดหลายไบต์ขอบคุณที่@ Barteks2x

กรณีที่ไม่ได้รับการทดสอบ &:

ลองที่นี่

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

เอาท์พุท:

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

1
เวอร์ชันที่สั้นกว่า: int c (int [] a) {int i = a [0], j; สำหรับ (int b: a) i = (j = (i + ""). length () - (b + "") length ())> 0? b: b> i & j == 0? b: i; return i;}
barteks2x

@ Barteks2x ขอบคุณฉันได้แก้ไขมันแล้ว
Kevin Cruijssen

2

bash, awk, เรียงลำดับ 53 ไบต์

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

อ่านอินพุตจาก stdin หนึ่งค่าต่อบรรทัด

ทุบตีและจัดเรียง58 57 ไบต์

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


ไม่ทำงานสำหรับตัวอย่างล่าสุดให้ 2383 แทน 938
Archemar

@Archemar ขอโทษฉันอ่านคำถามผิดมันถูกแก้ไขแล้วตอนนี้
Emmanuel

คุณสามารถลบช่องว่างระหว่างและwhile ((
seshoumara

1

JavaScript ES6, 80 77 70 ไบต์

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

ฉันหวังว่าฉันจะไปในทิศทางที่ถูกต้อง ...


คุณสามารถแทนที่a.map(i=>i.length).sort((a,b)=>a-b)[0]ด้วยMath.min(...a.map(i=>i.length))?
user81655

@ user81655 yup ฉันทำได้ ฉันคิดว่าฉันได้ทำการแก้ไข แต่เห็นได้ชัดว่าฉันไม่ได้
Downgoat

คุณสามารถลองลบล้างค่าต่ำสุดเพื่อให้สามารถนำกลับมาใช้ใหม่ได้Math.max: a=>(m=Math.max)(...a.filter(l=>l.length==-m(...a.map(i=>-i.length))))ดูเหมือนว่าจะบันทึกเพียง 1 ไบต์เท่านั้น
user81655

สำหรับไบต์อื่นfilterสามารถแทนที่ด้วยค่าmapที่ส่งคืน0สำหรับค่าที่ไม่ผ่านการทดสอบ:a=>(m=Math.max)(...a.map(l=>l.length+m(...a.map(i=>-i.length))?0:l))
user81655



1

Javascript (ES6), 57 54 53 ไบต์

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

สำหรับบันทึกรุ่นก่อนหน้าของฉันนั้นเน้นคณิตศาสตร์มากกว่า แต่ใหญ่กว่า 1 ไบต์:

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

กรณีทดสอบ

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 ไบต์

tV48\&XS0))

อินพุตเป็นเวกเตอร์คอลัมน์ (ใช้;เป็นตัวคั่น) เช่น

[78; 99; 620; 100]

ลองออนไลน์! หรือตรวจสอบกรณีทดสอบทั้งหมด

คำอธิบาย

ลองใช้อินพุต[78; 99; 620; 100]เป็นตัวอย่าง

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
ยินดีที่ได้เห็นสถานะสแต็กในคำอธิบายของคุณ!
ข้อบกพร่อง

1

Perl, 38 37 ไบต์

รวม +1 สำหรับ -a

ให้อินพุตบน 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]}

ใช้หน่วยความจำเป็นเส้นตรงในจำนวนที่มากที่สุดดังนั้นอย่าลองทำในจำนวนที่มากเกินไป วิธีแก้ปัญหาที่ไม่มีข้อบกพร่องคือ 38 ไบต์:

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

ทั้งหมดนี้เป็นสิ่งที่น่าอึดอัดใจมากและไม่รู้สึกดีที่สุดเลย ...


1

R, 72 41 36 ไบต์

เขียนฟังก์ชันใหม่ด้วยวิธีการใหม่ Golfed 5 ไบต์ด้วยคำแนะนำจาก @bouncyball

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

อธิบาย:

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

เยื้อง / อธิบาย:

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
บันทึก 4 ไบต์โดยไม่นิยามfunction:i=scan();n=nchar(i);max(i[n==min(n)])
bouncyball

@bouncyball ขอบคุณ! และ 1 n=nchar(i<-scan())ไบต์ต่อไปบันทึกไว้โดย
rturnbull

1

Bash + coreutils, 58 ไบต์

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

รูปแบบอินพุตเป็นหนึ่งค่าต่อบรรทัด ยินดีให้คำแนะนำการเล่นกอล์ฟ

คำอธิบาย:

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 ขอบคุณตอนนี้ฉันรู้แล้วว่าsed q=head -1
Emmanuel




0

Pip 11 ไบต์

(SNgSK-#_v)

รับอินพุตเป็นบรรทัดคำสั่ง args ลองออนไลน์!

ครั้งแรกที่ใช้Sโอเปอร์Kเรเตอร์! เช่นเดียวกับ Python sorted()มันใช้ฟังก์ชั่นที่ใช้กับแต่ละไอเท็มของ iterable และผลลัพธ์ที่ใช้เป็นคีย์การเรียงลำดับ นี่คือวิธีการทำงานของโปรแกรมนี้:

 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 ไบต์

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

ในขณะที่:

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

แม้ว่าฉันแน่ใจว่ามีวิธีที่จะทำให้มันเล็กลง


โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.