가장 큰 자릿수로 정렬 출력 중 하나만으로 충분하지만 원하는

도전:

정수 목록이 주어지면 가장 큰 단일 숫자로 내림차순으로 정렬하십시오. 가장 큰 자릿수를 가진 숫자의 순서는 두 번째로 큰 자릿수 등으로 정렬됩니다
. 숫자의 중복 자릿수는 무시합니다. 숫자의 모든 숫자가 동일하면 목록에서 해당 숫자의 순서는 원하는 방식으로 지정할 수 있습니다.

예:

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]이 번호 모두).
  • 숫자에 더 이상 확인할 숫자가 없으면 해당 숫자의 뒷면에 배치됩니다. 그래서 1233120같이 정렬됩니다 3120, 123가장 큰 숫자가 있기 때문에, [3,2,1]동일하지만 0전에 온다 none.
  • 입력의 모든 숫자가 범위 내에 있다고 가정 할 수 있습니다 [-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]



답변

05AB1E , 5 바이트

ΣêR}R

온라인으로 사용해보십시오!
또는 테스트 스위트

설명

Σ  }    # sort input by
 ê      # its sorted unique characters
  R     # reversed (to sort descending)
    R   # reverse the result (to sort descending)


답변

R , 97 95 바이트

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

온라인으로 사용해보십시오!

이 과제는 R에 비관적 인 것으로 보입니다. 원본 버전에 대한 설명 (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 , 36 34 33 31 바이트

Jo King 덕분에 -1 바이트
Phil H 덕분에 -2 바이트

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


답변

파이썬 2 , 60 55 54 바이트

Jonas Ausevicius 덕분에 -1 바이트 .

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

온라인으로 사용해보십시오!


언 골프

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

온라인으로 사용해보십시오!


답변

파이썬 2 , 58 60 바이트

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

온라인으로 사용해보십시오!


답변

Brachylog , 9 바이트

{ȧdṫo₁}ᵒ¹

참고 : brachylog에서 주문이 작동하는 방식으로 인해 숫자에서 올바르게 작동하지 않습니다. 이것은 1 바이트의 비용으로 숫자를 문자열 ( )로 캐스팅하여 수정됩니다 .

온라인으로 사용해보십시오!


답변

Pyth, 7 6 바이트

@Sok에 의해 -1 바이트

_o_{S`

인쇄 가능한 ASCII 만 사용하는 Pyth는 약간의 단점이 있습니다. 최적으로 인코딩 된 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.

여기에서 시도 하십시오 .