จัดเรียงตามตัวเลขที่ใหญ่ที่สุด


23

ท้าทาย:

รับรายการจำนวนเต็มเรียงจากมากไปน้อยหลักเดียวของพวกเขา คำสั่งซื้อสำหรับตัวเลขที่มีตัวเลขที่ใหญ่ที่สุดเหมือนกันจะถูกจัดเรียงตามตัวเลขที่ใหญ่ที่สุดที่สองเป็นต้น
เราไม่สนใจตัวเลขที่ซ้ำกันในตัวเลข และหากตัวเลขทั้งหมดในตัวเลขเหมือนกันลำดับของตัวเลขเหล่านั้นในรายการอาจเป็นไปได้ทุกอย่างตามที่คุณต้องการ

ตัวอย่าง:

Input:            [123, 478, -904, 62778, 0, -73, 8491, 3120, 6458, -7738, 373]
Possible outputs: [8491, -904, 62778, 478, -7738, 6458, 373, -73, 3120, 123, 0]
                  [8491, -904, 62778, 478, -7738, 6458, -73, 373, 3120, 123, 0]

ทำไม? นี่คือตัวเลขที่เกี่ยวข้องที่ตัวเลขถูกเรียงบน:

Output:
[8491,  -904,  62778,   478,     -7738,   6458,  373,   -73,   3120,      123,     0  ]

Relevant digits they were sorted on:
[[9,8], [9,4], [8,7,6], [8,7,4], [8,7,3], [8,6], [7,3], [7,3], [3,2,1,0], [3,2,1], [0]]

กฏท้าทาย:

  • เราไม่สนใจตัวเลขซ้ำกันเพื่อให้478และ-7738จะได้รับการสั่งซื้อเป็น478, -7738เพราะตัวเลขที่ใหญ่ที่สุด[8,7,4]และ[8,7,3]และไม่และ[8,7,4][8,7,7,3]
  • หากตัวเลขหลายตัวมีตัวเลขเหมือนกันลำดับของตัวเลขเหล่านั้นอาจเป็นได้ทั้งสองทาง ดังนั้น373และ-73สามารถจัดเรียงเป็นทั้ง373, -73หรือ-73, 373(ตัวเลข[7,3]สำหรับทั้งสองของตัวเลขเหล่านี้)
  • หากตัวเลขไม่มีตัวเลขที่จะตรวจสอบอีกจะถูกวางไว้ที่ด้านหลังของตัวเลขที่เกี่ยวข้อง ดังนั้น123และ3120จะถูกจัดเรียงเป็น3120, 123เพราะตัวเลขที่ใหญ่ที่สุด[3,2,1]เหมือนกัน แต่มาก่อน0none
  • [-999999,999999]คุณสามารถสันนิษฐานได้ว่าตัวเลขทั้งหมดในการป้อนข้อมูลอยู่ในช่วง
  • เพียงหนึ่งในผลลัพธ์ที่เป็นไปได้ก็เพียงพอแล้ว แต่คุณได้รับอนุญาตให้ส่งออกผลลัพธ์ที่เป็นไปได้ทั้งหมดที่รายการย่อยสามารถเปลี่ยนแปลงได้หากคุณต้องการ

กฎทั่วไป:

  • นี่คือดังนั้นคำตอบที่สั้นที่สุดในจำนวนไบต์ชนะ
    อย่าปล่อยให้ภาษาโค้ดกอล์ฟกีดกันคุณจากการโพสต์คำตอบด้วยภาษาที่ไม่ได้เข้ารหัส พยายามหาคำตอบสั้น ๆ ที่เป็นไปได้สำหรับภาษาโปรแกรม 'ใด ๆ '
  • กฎมาตรฐานใช้สำหรับคำตอบของคุณด้วยกฎ I / O เริ่มต้นดังนั้นคุณจึงได้รับอนุญาตให้ใช้ STDIN / STDOUT ฟังก์ชั่น / วิธีการที่มีพารามิเตอร์ที่เหมาะสมและประเภทผลตอบแทนโปรแกรมเต็มรูปแบบ การโทรของคุณ
  • ช่องโหว่เริ่มต้นเป็นสิ่งต้องห้าม
  • หากเป็นไปได้โปรดเพิ่มลิงก์พร้อมทดสอบรหัสของคุณ (เช่นTIO )
  • นอกจากนี้ขอแนะนำให้เพิ่มคำอธิบายสำหรับคำตอบของคุณ

กรณีทดสอบ:

Input:            [123, 478, -904, 62778, 0, -73, 8491, 3120, 6458, -7738, 373]
Possible outputs: [8491, -904, 62778, 478, -7738, 6458, 373, -73, 3120, 123, 0]
                  [8491, -904, 62778, 478, -7738, 6458, -73, 373, 3120, 123, 0]

Input:            [11, -312, 902, 23, 321, 2132, 34202, -34, -382]
Possible outputs: [902, -382, 34202, -34, -312, 321, 2132, 23, 11]
                  [902, -382, 34202, -34, 2132, -312, 321, 23, 11]
                  etc. The sublist [-312, 321, 2132] can be in any permutation

Input:            [9, 44, 2212, 4, 6, 6, 1, 2, 192, 21, 29384, 0]
Possible outputs: [29384, 192, 9, 6, 6, 4, 44, 2212, 21, 2, 1, 0]
                  [29384, 192, 9, 6, 6, 44, 4, 2212, 21, 2, 1, 0]
                  etc. The sublists [4, 44] and [2212, 21] can be in any permutation

Input:            [44, -88, 9, 233, -3, 14, 101, 77, 555, 67]
Output:           [9, -88, 67, 77, 555, 14, 44, 233, -3, 101]

คำตอบ:



7

R , 97 95 ไบต์

function(x)x[rev(order(sapply(Map(sort,Map(unique,strsplit(paste(x),"")),T),Reduce,f=paste0)))]

ลองออนไลน์!

ความท้าทายนี้ดูเหมือนจะได้รับการมองโลกในแง่ร้ายสำหรับคำอธิบายของรุ่นเดิม (เริ่มต้นที่ 1 และทำงานได้):

f <- function(x) {
  x[                                                  # 8. Input vector in
    rev(                                              # 7. Reversed
        order(                                        # 6. Lexicographical order
              sapply(                                 # 5. Paste....
                     Map(sort,                        # 4. Sort each using...
                              Map(unique,             # 3. Deduplicate each
                                  strsplit(           # 2. Split each string into characters
                                           paste(x),  # 1. Coerce each number to string
                                           "")),      
                         T),                          # 4. ...descending sort.
                     paste,collapse="")               # 5. ...back into strings
              )
        )
    ]
}

6

Perl 6 , 36 34 33 31 ไบต์

ขอบคุณ -1 ไบต์ต่อ Jo King
-2 ไบต์ขอบคุณ Phil H

*.sort:{sort 1,|set -<<m:g/\d/}

ลองออนไลน์!

คำอธิบาย

       {                      }  # Map each number, e.g. -373
                       m:g/\d/  # Extract digits: (3, 7, 3)
                    -<<  # Negate each digit: (-3, -7, -3)
                set  # Convert to set to remove duplicates
               |  # Pass as list of pairs: (-3 => True, -7 => True)
             1,  # Prepend 1 for "none": (1, -3 => True, -7 => True)
        sort  # Sort (compares 1 and pair by string value): (-7 => True, -3 => True, 1)
*.sort:  # Sort lexicographically

1
ดี! -2 ไบต์สำหรับการแลกเปลี่ยนm:g/\d./สำหรับ.abs.comb: tio.run/…
Phil H

6

Python 2 , 60 55 54 ไบต์

-1 ขอบคุณไบต์Jonas Ausevicius

def f(l):l.sort(cmp,lambda n:sorted(set(`n`))[::-1],1)

ลองออนไลน์!


Ungolfed

def f(l):
  l.sort(        # Sort the list in place
    cmp = cmp,   # ... compare with the builtin function cmp
    key = k,     # ... on the function k
    reverse = 1  # ... in reverse
  )              # As the arguments are used in the right order, no names are necessary.

k = lambda n:sorted( # sort  
  set(`n`)           # ... the set of digits
  )[::-1]            # reverse the result
                     # As '-' is smaller than the digits,
                     # it will be sorted to the back and ignored for sorting

ลองออนไลน์!


5
Noneสามารถแทนที่ด้วยcmpในsortฟังก์ชั่น
Jonas Ausevicius

[:: - 1] สามารถแลกเปลี่ยนเพื่อการปฏิเสธคู่ฉันคิดว่า
DonQuiKong

@ DonQuiKong ที่จะค่อนข้างนานกว่านี้เนื่องจากตัวเลขเป็นสตริงทั้งหมดและจะต้องแปลงเป็น ints สำหรับสิ่งนี้
ovs

@JonasAusevicius ขอบคุณมาก
ovs


5

Brachylogขนาด 9 ไบต์

{ȧdṫo₁}ᵒ¹

หมายเหตุ: เนื่องจากการสั่งซื้อทำงานอย่างไรใน brachylog จึงไม่สามารถทำงานกับหมายเลขได้อย่างถูกต้อง สิ่งนี้ได้รับการแก้ไขโดยการส่งหมายเลขไปยังสตริง ( ) ที่ราคา 1 ไบต์

ลองออนไลน์!


2
คุณหมายถึงอะไร " เนื่องจากการสั่งซื้อทำงานอย่างไรใน brachylog มันไม่ทำงานตามที่ต้องการ "? ฉันได้ลองทั้งสี่กรณีทดสอบและมันให้ผลลัพธ์ที่ถูกต้อง (ยกเว้นว่าฉันบังเอิญมองสิ่งที่ผ่านมา)
Kevin Cruijssen

@KevinCruijssen (ไปยังสตริง) แก้ไขปัญหาได้ การสั่งซื้อตัวเลขในจำนวนมากไปหาน้อยทำงานดังนี้ สั่งซื้อจากน้อยไปใหญ่แล้วย้อนกลับ ปัญหาคือจำนวนที่3120สั่งซื้อจากน้อยที่สุดไปหามากที่สุดคือ0123ซึ่งเท่ากับจำนวน123ที่ตรงกันข้าม321และไม่ใช่3210
Kroppeb

2
อ่ารหัสปัจจุบันของคุณใช้งานได้เนื่องจากการเพิ่ม toString ( ) ตามที่ @Arnauld พูดถึงฉันคิดว่าความคิดเห็นของคุณหมายความว่ารหัสปัจจุบันของคุณไม่ทำงาน มันอาจจะดีกว่าที่จะพูดถึงเช่น: " นี่น่าจะเป็น 8 ไบต์โดยการลบ(toString) แต่น่าเสียดายที่มันไม่ทำงานตามที่ตั้งใจไว้เนื่องจากวิธีการสั่งซื้อทำงานใน Brachylog "
Kevin Cruijssen

ดูสิ่งที่ฉันเขียนดูเหมือนว่าสมองของฉันได้รับความรู้สึกผิดปกติ ซ่อมมัน.
Kroppeb

5

Pyth, 7 6 ไบต์

-1 ไบต์โดย@Sok

_o_{S`

Pyth ซึ่งใช้เฉพาะ ASCII ที่พิมพ์ได้นั้นมีข้อเสียเล็กน้อย การเข้ารหัสที่เหมาะสมที่สุดนี้จะเป็น6*log(95)/log(256) = 4.927ไบต์เต้น 05AB1E

อธิบาย:

 o              Sort the implicit input by lambda N:
  _               reversed
   {               uniquified
    S               sorted
     '               string representation [of N]
_               then reverse the result.

ลองมันนี่


2
การลากNสามารถถูกทิ้งไว้เพื่อบันทึก 1 ไบต์ - ฟังก์ชั่นแลมบ์ดาทั้งหมดอนุมานว่ามีตัวแปรแลมบ์ดาหลักอยู่หากการโต้แย้งใด ๆ ขาดหายไปจากจุดสิ้นสุด ตัวอย่าง ได้แก่mการอนุมานd, fอนุมานT, uอนุมานG...
สก

4

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

ADṢUQµÞU

ลองออนไลน์!

มันทำงานอย่างไร

ADṢUQµÞU  Main link (monad). Input: integer list
     µÞU  Sort by (reversed):
AD        Absolute value converted to decimal digits
  ṢUQ     Sort, reverse, take unique values

2
ฉันเพิ่งติดตั้งแล้วก็พบโพสต์ของคุณ ฉันไปกับการกลับตัวแบบปกติ, แทนที่จะเป็นขาขึ้น, U. อย่างไรก็ตามโปรดทราบว่าคุณไม่จำเป็นต้องมีการDเรียงลำดับเนื่องจากจะมีการใช้งานiterable(z, make_digits=True)ภายในการโทร นั่นก็คือAṢQṚµÞṚ7
โจนาธานอัลลัน

3

MathGolf , 7 6 ไบต์

áÉ░▀zx

ลองออนไลน์! หรือเป็นชุดทดสอบ

คำอธิบาย

หลังจากดูโซลูชัน 05AB1E ของ Emigna ฉันพบว่าฉันไม่ต้องการตัวดำเนินการที่แน่นอน (และคำตอบก่อนหน้านี้ของฉันนั้นไม่ถูกต้องเพราะตัวดำเนินการนั้น) ตอนนี้ความแตกต่างที่สำคัญคือฉันแปลงเป็นสตริงและรับอักขระที่ไม่ซ้ำกันแทนที่จะใช้ตัวดำเนินการ 1 ไบต์ใน 05AB1E

áÉ      Sort by the value generated from mapping each element using the next 3 instructions
  ░     Convert to string
   ▀    Get unique characters
    z   Sort reversed (last instruction of block)
     x  Reverse list (needed because I don't have a sort-reversed by mapping)


3

Haskell , 54 52 ไบต์

import Data.List
f=r.sortOn(r.sort.nub.show);r=reverse

ลองออนไลน์!


การกำหนดr=reverseบันทึกสองไบต์ นอกจากนี้เรายังอนุญาตฟังก์ชั่นที่ไม่ระบุตัวตนดังนั้นจึงf=ไม่จำเป็นต้องนับ
Laikoni

ฉันย้ายการนำเข้าและ f = ไปยังส่วนหัวของ TIO ไม่เป็นไร?
Martin Lütke

นับไบต์เดียวกัน f=r$r id.nub.show;r=(reverse.).sortOnแต่อาจจะน่าสนใจบางอย่าง
Laikoni

1
จำเป็นต้องนับการนำเข้าจริง
Laikoni


3

ดูเหมือนว่าจะให้ผลลัพธ์ที่ไม่ถูกต้อง ยกตัวอย่างเช่นในกรณีทดสอบของ TIO ของคุณมันจะออกผลลัพธ์-904 8491 478 62778 6458 -7738 -73 373 123 3120 0แทนที่จะตั้งใจหรือ8491 -904 62778 478 -7738 6458 373 -73 3120 123 0 8491 -904 62778 478 -7738 6458 -73 373 3120 123 0กรณีทดสอบนี้ใช้ในตัวอย่างและเพื่ออธิบายกฎดังนั้นฉันจะดูที่เพื่อทำความเข้าใจให้ดีขึ้น ดูเหมือนว่าคุณจะเรียงลำดับตามหลักที่ใหญ่ที่สุดเพียงครั้งเดียวโดยไม่มีกฎอื่นใดเลย?
Kevin Cruijssen

@KevinCruijssen: ใช่ฉันขอโทษ ฉันอ่านคำแถลงปัญหาผิด ๆ ฉันได้ปรับโปรแกรมให้รองรับความต้องการที่ระบุไว้ โปรแกรมนี้ยอมรับจำนวนเต็มเข้าเป็นสตริงที่ยกมา ปกติแล้วจะยอมรับได้ แต่ถ้าไม่ใช่ฉันอาจต้องเพิ่มอีกไบต์
เรียกซ้ำ

ดูดีแล้ว +1 จากฉัน และใช่การป้อนข้อมูลเป็นสตริงนั้นสมบูรณ์ดี
Kevin Cruijssen

3

APL (Dyalog Extended)ขนาด 19 ไบต์

{⍵[⍒∪¨(∨'¯'~⍨⍕)¨⍵]}

ลองออนไลน์!

แก้ไขที่ +2 ไบต์ขอบคุณ OP


ฉันคิดว่าคุณหายไป 'ไม่ซ้ำใคร' ที่ไหนสักแห่ง? ถ้าฉันพยายามกรณีตัวอย่างการทดสอบใน TIO ของคุณเช่น¯7738ถูกวางไว้ก่อน478แต่มันควรจะเป็นหลังจากที่มัน: ตัวเลขมาก่อนตัวเลข[8,7,4] [8,7,3]
Kevin Cruijssen

ขอบคุณ @KevinCruijssen
Zacharý

3

C (gcc) , 114 111 109 ไบต์

a;v(n){n=n<0?-n:n;for(a=0;n;n/=10)a|=1<<n%10;n=a;}c(int*a,int*b){a=v(*a)<v(*b);}f(a,n)int*a;{qsort(a,n,4,c);}

ลองออนไลน์!

คำอธิบาย:

f () ใช้ qsort () เพื่อจัดเรียงอาร์เรย์ที่มีให้ การใช้ฟังก์ชั่นการเปรียบเทียบ c () เพื่อเปรียบเทียบตัวเลขที่ประเมินตัวเลขโดยใช้ v () v () คำนวณจำนวนที่สูงกว่าหากตัวเลขที่ใหญ่กว่าแสดงอยู่ในพารามิเตอร์

[แก้ไข 1] ปรับปรุงโดย 3 ไบต์ เครดิต 2 ไบต์ถึงเควิน ขอบคุณ

[แก้ไข 2] ปรับปรุงอีก 2 ไบต์ เงินให้สินเชื่อแก่ Gastropner ขอบคุณ


1
คุณสามารถกอล์ฟn>0ไปผมคิดว่าในวงของคุณวิธีการของคุณn v
Kevin Cruijssen

รายการอาร์กิวเมนต์ของ f () int*a,nสามารถย่อให้เล็กลงint*aได้
Gastropner

1
แนะนำfor(a=0;n=abs(n);แทนn=n<0?-n:n;for(a=0;n;
ceilingcat

2

J , 17 ไบต์

{~[:\:~.@\:~@":@|

ลองออนไลน์!

คำอธิบาย:

                @|    - find the absolute value and
             @":      - convert to string and
         @\:~         - sort down and
       ~.             - keep only the unique symbols
    \:                - grade down the entire list of strings   
  [:                  - function composition
{~                    - use the graded-down list to index into the input   

2

JavaScript (SpiderMonkey) , 68 ไบต์

ขอบคุณสำหรับ @Arnauld สำหรับการเตือนฉันอีกครั้งว่าแมงมุมใช้การจัดเรียงที่มีเสถียรภาพดังนั้น -4 ||-1ไบต์สำหรับการลบ

A=>A.sort((x,y,F=n=>[...new Set(""+n)].sort().reverse())=>F(x)<F(y))

ลองออนไลน์!

JavaScript (Node.js)ขนาด 72 ไบต์

A=>A.sort((x,y,F=n=>[...new Set(""+n)].sort().reverse())=>F(x)<F(y)||-1)

ลองออนไลน์!


หรือ68 ไบต์ด้วย SpiderMonkey
Arnauld

1
@Arnauld โอ้จัดเรียงที่เสถียรอีกครั้ง P
Shieru Asakoto

10

1
@Annauld V8 ใช้การจัดเรียงอย่างรวดเร็วก่อนที่จะ Chrome 70 อัลกอริทึมการเรียงลำดับด่วนดำเนินการเรียงลำดับการแทรกเมื่อขนาดอาร์เรย์มีขนาดเล็กพอ และล่าสุด Chrome ก็เปลี่ยนเป็นการเรียงลำดับที่เสถียรสำหรับการจับคู่พฤติกรรมของเบราว์เซอร์อื่น (IE / Firefox / Safari)
tsh

2

Java (JDK) , 98 ไบต์

l->l.sort((a,b)->{int r=0,i=58;for(;r==0&i-->48;)r=(b.indexOf(i)>>9)-(a.indexOf(i)>>9);return r;})

ลองออนไลน์!

คำอธิบาย

l->                           // Consumer<List<String>>
 l.sort(                      //  Use the incorporated sort method which uses a...
  (a,b)->{                    //   Comparator of Strings
   int r=0,                   //    define r as the result, initiated to 0
       i=58;                  //           i as the codepoint to test for.
   for(;r==0&i-->48;)         //    for each digit codepoint from '9' to '0',
                              //     and while no difference was found.
    r=                        //     set r as the difference between
     (b.indexOf(i)>>9)-       //      was the digit found in b? then 0 else -1 using the bit-shift operator
     (a.indexOf(i)>>9);       //      and was the digit found in a? then 0 else -1.
   return r;                  //    return the comparison result.
  }
 )

บันทึก:

ผมจำเป็นต้องมีวิธีการที่จะ map ตัวเลขให้เป็นอย่างใดอย่างหนึ่งหรือ0/10/-1

indexOfมีคุณสมบัติที่ดีที่-1ไม่พบอักขระที่กลับมาอย่างสม่ำเสมอ -1ขวาขยับจากจำนวนใด ๆ -1อยู่เสมอ จำนวนบวกใด ๆ ที่ถูกเลื่อนโดยจำนวนที่มากพอจะทำให้เกิดผลเสมอ0ขวาขยับโดยจำนวนขนาดใหญ่พอจะผลิต

ดังนั้นที่นี่เราคือ:

input        input.indexOf('9')      input.indexOf('9')>>9
"999"        0                       0
"111119"     5                       0
"123456"     -1                      -1

1
อาใช่นั่นคือสิ่งที่ฉันหมายถึง ; p สนามกอล์ฟที่ดีของการใช้งาน>>9แทน>>32เนื่องจากช่วงที่ จำกัด ของตัวเลข
Kevin Cruijssen




1

APL (NARS), 366 ตัวอักษร, 732 ไบต์

_gb←⍬

∇a _s w;t
t←_gb[a]⋄_gb[a]←_gb[w]⋄_gb[w]←t
∇

∇(_f _q)w;l;r;ls;i
(l r)←w⋄→0×⍳l≥r⋄l _s⌊2÷⍨l+r⋄ls←i←l⋄→3
  →3×⍳∼0<_gb[i]_f _gb[l]⋄ls+←1⋄ls _s i
  →2×⍳r≥i+←1
l _s ls⋄_f _q l(ls-1)⋄_f _q(ls+1)r
∇

∇r←(a qsort)w
r←¯1⋄→0×⍳1≠⍴⍴w⋄_gb←w⋄a _q 1(↑⍴w)⋄r←_gb
∇

f←{∪t[⍒t←⍎¨⍕∣⍵]}

∇r←a c b;x;y;i;m
x←f a⋄y←f b⋄r←i←0⋄m←(↑⍴x)⌊(↑⍴y)⋄→3
→0×⍳x[i]<y[i]⋄→3×⍳∼x[i]>y[i]⋄r←1⋄→0
→2×⍳m≥i+←1⋄r←(↑⍴x)>(↑⍴y)
∇

สำหรับผู้ประกอบการ qsort มันเป็น traslation หนึ่งใน APL ของ algo หน้า 139 K & R Linguaggio C. ฉันคิดว่าในนั้นมีการใช้ข้อมูลเป็น C กับตัวชี้ ... ทดสอบ

 c qsort 123, 478, ¯904, 62778, 0, ¯73, 8491, 3120, 6458, ¯7738, 373 
8491 ¯904 62778 478 ¯7738 6458 ¯73 373 3120 123 0 
 c qsort 11, ¯312, 902, 23, 321, 2132, 34202, ¯34, ¯382 
902 ¯382 34202 ¯34 321 ¯312 2132 23 11 
 c qsort 9, 44, 2212, 4, 6, 6, 1, 2, 192, 21, 29384, 0 
29384 192 9 6 6 4 44 2212 21 2 1 0 
 c qsort 44, ¯88, 9, 233, ¯3, 14, 101, 77, 555, 67 
9 ¯88 67 77 555 14 44 233 ¯3 101 

1

Powershell ขนาด 44 ไบต์

$args|sort{$_-split'(.)'-ne'-'|sort -u -d}-d

สคริปต์ทดสอบ:

$f = {

$args|sort{$_-split'(.)'-ne'-'|sort -u -d}-d

}

@(
    ,( (123, 478, -904, 62778, 0, -73, 8491, 3120, 6458, -7738, 373),
       (8491, -904, 62778, 478, -7738, 6458, 373, -73, 3120, 123, 0),
       (8491, -904, 62778, 478, -7738, 6458, -73, 373, 3120, 123, 0) )

    ,( (11, -312, 902, 23, 321, 2132, 34202, -34, -382),
       (902, -382, 34202, -34, -312, 321, 2132, 23, 11),
       (902, -382, 34202, -34, 2132, -312, 321, 23, 11) )

    ,( (9, 44, 2212, 4, 6, 6, 1, 2, 192, 21, 29384, 0),
       (29384, 192, 9, 6, 6, 4, 44, 2212, 21, 2, 1, 0),
       (29384, 192, 9, 6, 6, 44, 4, 2212, 21, 2, 1, 0),
       (29384, 192, 9, 6, 6, 44, 4, 21, 2212, 2, 1, 0) )

    ,( (44, -88, 9, 233, -3, 14, 101, 77, 555, 67),
       ,(9, -88, 67, 77, 555, 14, 44, 233, -3, 101) )
) | % {
    $a, $expected = $_
    $result = &$f @a
    $true-in($expected|%{"$result"-eq"$_"})
    "$result"
}

เอาท์พุท:

True
8491 -904 62778 478 -7738 6458 -73 373 3120 123 0
True
902 -382 34202 -34 2132 -312 321 23 11
True
29384 192 9 6 6 44 4 21 2212 2 1 0
True
9 -88 67 77 555 14 44 233 -3 101

1

PHP, 87 86 84 ไบต์

while(--$argc)$a[_.strrev(count_chars($n=$argv[++$i],3))]=$n;krsort($a);print_r($a);

ทำงานด้วย-nrหรือลองออนไลน์ลองออนไลน์

แทนที่++$iด้วย$argc(+1 ไบต์) เพื่อไม่ให้มีการแจ้งเตือน (และแสดงการ-nเลิกใช้)

ทำให้พังถล่ม

while(--$argc)  # loop through command line arguments
    $a[                             # key=
        _.                              # 3. prepend non-numeric char for non-numeric sort
        strrev(                         # 2. reverse =^= sort descending
        count_chars($n=$argv[++$i],3)   # 1. get characters used in argument
        )
    ]=$n;                           # value=argument
krsort($a);     # sort by key descending
print_r($a);    # print

- มีขนาดเล็กกว่าตัวเลขดังนั้นจึงไม่มีผลต่อการเรียงลำดับ


1

Lisp ทั่วไป, 88 ไบต์

(sort(read)'string> :key(lambda(x)(sort(remove-duplicates(format()"~d"(abs x)))'char>)))

ลองออนไลน์!

ดี verbose เก่าเสียงกระเพื่อมสามัญ!

คำอธิบาย:

(sort                   ; sort
 (read)                 ; what to sort: a list of numbers, read on input stream 
 'string>               ; comparison predicate (remember: this is a typed language!)
 :key (lambda (x)       ; how to get an element to sort; get a number
       (sort (remove-duplicates  ; then sort the unique digits (characters) 
               (format() "~d" (abs x))) ; from its string representation
             'char>)))  ; with the appropriate comparison operator for characters

1

C # (Visual C # Interactive Compiler) , 75 74 ไบต์

-1 ขอบคุณ @ ASCII- เท่านั้น

x=>x.OrderByDescending(y=>String.Concat((y+"").Distinct().OrderBy(z=>-z)))

ลองออนไลน์!

ใน C # สตริงจะถือเป็น "enumerables" ของตัวละคร ฉันใช้สิ่งนี้เพื่อประโยชน์ของฉันโดยการแปลงแต่ละหมายเลขเป็นสตริง LINQ จะได้รับการยกระดับเพื่อให้ได้อักขระที่ไม่ซ้ำกัน (ตัวเลข) เรียงตามลำดับย้อนกลับ ฉันแปลงอาร์เรย์อักขระที่เรียงลำดับแล้วกลับเป็นสตริงและใช้เป็นคีย์การเรียงลำดับเพื่อเรียงลำดับรายการทั้งหมด


ดูเหมือนว่าคุณจะสามารถหลีกหนีจากการไม่ได้เพิ่ม-ดูเหมือนว่าคำสั่งของคนที่ไม่สำคัญ
ASCII เท่านั้น

หากไม่มี-กรณีทดสอบ # 2 กลับมา... 321 2132 ...ซึ่งดูเหมือนว่าไม่ถูกต้อง?
dana

ไม่อ่านตัวอย่างให้ละเอียดยิ่งขึ้น
เฉพาะ ASCII เท่านั้น

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