확실하게 깨진 정렬


23

적어도 3 개의 별개의 항목을 포함하는 양의 정수 목록이 제공되면 오름차순 또는 내림차순으로 정렬되지 않은 해당 목록의 순열을 출력하십시오.

1,2,3 -> 2,1,3 or 3,1,2 or 1,3,2 or 2,3,1
1,2,3,3 -> 2,1,3,3 or 3,1,2,3 or 1,3,2,3 etc..

제목에 @Arnauld와 @NoOneIsHere 감사합니다!


입력이 항상 정렬됩니까?
xnor

주어진 항목 집합에서 정렬이 "신뢰할 수 있어야"합니까? 항상 출력과 동일한 순열을 생성합니까? 아니면 출력이 정렬되지 않는다는 점에서만 "신뢰할 수 있어야"합니까?
와일드 카드

단지 사양을 만족시켜야합니다.
flawr

중첩 배열을 출력으로 사용할 수 있습니까? 예를 들어, [2,[1,3]].
Shaggy

아니요, 단일 배열 / 목록이어야합니다.
flawr

답변:


14

자바 스크립트 (ES6), 39 34 바이트

a=>[a.sort((x,y)=>x-y).pop(),...a]

배열을 오름차순으로 정렬하고 마지막 요소를 팝하여 새 배열의 첫 번째 요소로 사용하십시오. 그러면 새로운 배열 원래 배열의 나머지 요소 destructure (JS하여 모두 sortpop원의 배열을 변경).


그것을 테스트

o.innerText=(f=

a=>[a.sort((x,y)=>x-y).pop(),...a]

)(i.value=[1,2,3]);oninput=_=>o.innerText=f(i.value.split`,`)
<input id=i><pre id=o>


왜 안돼 a.sort()?
geokavel

1
@ geokavel : JS의 sort메소드는 사전 식으로 정렬하기 때문입니다.
Shaggy

3
그래서 그것은 이미 믿을 수 없을 정도로 망가 졌기 때문에? = D
jpmc26


7

Ṣṙ-또한 작동합니다 (단지 그렇게 생각했습니다; 아마도 당신은 아마 알고 있습니다 : P)
HyperNeutrino

@HyperNeutrino Yep도 작동합니다. 동일한
바이트 수

어느 인코딩이 Ṣṙ13 바이트입니까? UTF-8에서는 7 바이트입니다.
heinrich5991

2
Jelly는 사용자 정의 코드 페이지를 사용합니다 .
cole

Jelly를 사용하는 모든 사람은 "Jelly는 사용자 정의 코드 페이지를 사용합니다"주석을 자동으로 게시하는 버튼을 추가하는 브라우저 확장 기능이 있어야합니다.
12Me21



5

파이썬 3 , 31 바이트

lambda a:sorted(a)[1:]+[min(a)]

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

xnor 덕분에 -1 바이트


...이 기본 논리를 어떻게 보지 못했습니다. >.>
완전히 인간적인

@totallyhuman lol 내 답변의 3 개 모두 똑같은 일을합니다. P : - :하지만 하> 맥 OS를 P는 또한 나는 아이폰 OS에 대한 PR을 통합
HyperNeutrino

예, 지점을 확인하고 삭제했습니다. : P
완전히 인간적인

끝에을 넣으면 min바이트가 절약됩니다.
xnor


5

TI 기본 (TI-84 Plus CE), 31 바이트

Prompt A
SortA(LA
max(LA→B
dim(LA)-1→dim(LA
augment({B},LA

형식으로 입력하라는 메시지가 표시됩니다 {1,2,3,4}.

TI-Basic은 토큰 화 된 언어 이며 여기서 사용되는 모든 토큰은 1 바이트입니다.

설명:

Prompt A         # 3 bytes, store user input in LA
SortA(LA         # 4 bytes, sort LA ascending
max(LA→B         # 6 bytes, save the last value in the sorted list to B
dim(LA)-1→dim(LA # 11 bytes, remove the last value from LA
augment({B},LA   # 7 bytes, prepend B to LA and implicitly print the result





3

자바 8, 68 37 바이트

l->{l.sort(null);l.add(l.remove(0));}

@Nevay 덕분에 -31 바이트 (Java 8에 List#sort(Comparator)메소드 가 있음을 잊어 버렸습니다 .)

ArrayList새 입력 을 반환하는 대신 입력을 수정합니다 .

설명:

여기에서 시도하십시오.

l->{                   // Method with ArrayList parameter and no return-type
  l.sort(null);        //  Sort the input-list (no need for a Comparator, thus null)
  l.add(l.remove(0));  //  Remove the first element, and add it last
}                      // End of method

l->{l.sort(null);java.util.Collections.rotate(l,1);}16 바이트를 저장 하는 데 사용할 수 있습니다 .
Nevay

2
또는 l->{l.sort(null);l.add(l.remove(0));}31 바이트를 저장 하는 데 사용할 수 있습니다 (고정되지 않은 크기의 목록을 사용해야 함).
Nevay

@Nevay 좋은 점은 있지만 ... 문서와 관련하여 괄호가 약간 벗어난 것입니다. 현실은 선택적 작업 add이며 remove구현해야합니다. 고정 크기 목록에 대해서는 아무 것도 언급되지 않았습니다 ... Kevin Cruijssen, 이전 의견에는 훨씬 더 나은 대안이 있으므로 +1하기 전에 편집을 기다릴 것입니다.
Olivier Grégoire

3

하스켈, 36 37 바이트

import Data.List
f(a:b)=b++[a];f.sort

보기 패턴을 사용하여 정렬 된 버전의 입력 목록 헤드에서 일치시킨 다음 목록의 첫 번째 항목을 나머지 목록의 꼬리에 추가하십시오.

보기 패턴은 가치가 없습니다. 목록을 정렬하고 머리를 떼고 끝에 추가하십시오. 이 경우 컴팩트하게 입력 된 순 솔루션이 가장 좋습니다.


1
PPCG에 오신 것을 환영합니다! 뷰 패턴을 사용하는 것이 좋습니다. 전에는 그 패턴을 알지 못했습니다. 불행히도 표준 Haskell에서는 활성화되어 있지 않으므로 사이트 규칙마다 명령 행 플래그의 바이트를 포함해야합니다 -XViewPatterns. 그것들을 표준 방식으로 세는 f(a:b)=b++[a];f.sort것이 더 짧습니다.
Laikoni

나는 어떻게 든 필요한 깃발에 대해 생각하지 않았습니다. 나는 그것들을 너무 많이 사용하여 Cabal 파일에서 켜고 언어의 일부가 아닌 것을 잊어 버렸습니다.
typedrat



2

Ly , 7 바이트

&nasprl

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

어 sort, 종류를 망치는 것은 너무 비싸다!

설명:

&nasprl

&n      # take input as a list of numbers
  a     # sort
   sp   # save top of stack and pop
     r  # reverse stack
      l # load saved item

2

33 29 bytes

Takes input from stdin. Sorts the list and then moves the first element to the end, ensuring that it is no longer sorted. Saved three bytes due to Giuseppe.

c(sort(x<-scan())[-1],min(x))

Another implementation, same byte count:

c((x<-sort(scan()))[-1],x[1])

c(sort(x<-scan())[-1],min(x)) is 29 bytes using essentially the same idea as yours.
Giuseppe




1

Retina, 10 bytes

O#`
O^#-2`

Try it online!

O#`     Sort the list
O^#-2`  Reverse sort the list other than the last element

This leaves the list with the 2nd highest element first and the highest element last which is never correctly sorted


1

Ruby, 18 bytes

Submitted on mobile. Please don't kill me for problems.

->a{a.sort.rotate}

1

Pyth, 5 bytes

.>SQ1

Explanation

SQ - sort input list

.>SQ1 - rotate input list cyclicaly by 1



1

Python 3, 28 bytes

lambda a:a[1:a.sort()]+a[:1]

Try it online!

a.sort() sorts a in place and returns None. None can be used as a slicing index and is the same as omitting that index.




1

PHP, 44 bytes

requires PHP 5.4 or later for short array syntax.

sort($a=&$argv);print_r([array_pop($a)]+$a);

sort arguments, replace 0-th argument with removed last argument, print.
Run with -nr or try it online.


The 0-th argument is the script file name, "-" if you call PHP with -r. "-" is compared to the other arguments as a string, and since ord("-")==45, it is smaller than any number. The numbers themselves, although strings, are compared as numbers: "12" > "2".

php -nr '<code>' 3 4 2 5 1 and sort($a=&$argv) lead to $a=["-","1","2","3","4","5"]
[array_pop($a)]+$a is [0=>"5"]+[0=>"-",1=>"1",2=>"2",3=>"3",4=>"4"],
which results in [0=>"5",1=>"1",2=>"2",3=>"3",4=>"4"].


Can you explain why [array_pop($a)]+$a doesn't overwrite the 0th index of $a? For example: $a=[1,2,3,4,5], array_pop($a) = 5, $a=[1,2,3,4]. If you do [5]+[1,2,3,4], shouldn't it end up being [5,2,3,4] because both arrays have a 0th index? I'm confused because the PHP manual says "The + operator returns the right-hand array appended to the left-hand array; for keys that exist in both arrays, the elements from the left-hand array will be used, and the matching elements from the right-hand array will be ignored."
jstnthms

@jstnthms The + operator does not append, it merges (without reordering the indexes; but that doesn´t matter here). The important point is that $a points to $argv and $argv[0] contains the script´s file name, the arguments start at index 1. I extended the description. Thanks for the question.
Titus

1

Julia, 23 bytes

f(x)=sort(x)[[2:end;1]]

Slightly shorter than, but equivalent to f(x)=circshift(sort(x),1). I wish I could makeamethod based on select that was more, compact but I can not

당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.