적어도 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 감사합니다!
[2,[1,3]]
.
적어도 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 감사합니다!
[2,[1,3]]
.
답변:
a=>[a.sort((x,y)=>x-y).pop(),...a]
배열을 오름차순으로 정렬하고 마지막 요소를 팝하여 새 배열의 첫 번째 요소로 사용하십시오. 그러면 새로운 배열 원래 배열의 나머지 요소 destructure (JS하여 모두 sort
와 pop
원의 배열을 변경).
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()
?
sort
메소드는 사전 식으로 정렬하기 때문입니다.
Ṣṙ-
또한 작동합니다 (단지 그렇게 생각했습니다; 아마도 당신은 아마 알고 있습니다 : P)
Ṣṙ1
3 바이트입니까? UTF-8에서는 7 바이트입니다.
min
바이트가 절약됩니다.
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
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 바이트를 저장 하는 데 사용할 수 있습니다 .
l->{l.sort(null);l.add(l.remove(0));}
31 바이트를 저장 하는 데 사용할 수 있습니다 (고정되지 않은 크기의 목록을 사용해야 함).
add
이며 remove
구현해야합니다. 고정 크기 목록에 대해서는 아무 것도 언급되지 않았습니다 ... Kevin Cruijssen, 이전 의견에는 훨씬 더 나은 대안이 있으므로 +1하기 전에 편집을 기다릴 것입니다.
import Data.List
f(a:b)=b++[a];f.sort
보기 패턴을 사용하여 정렬 된 버전의 입력 목록 헤드에서 일치시킨 다음 목록의 첫 번째 항목을 나머지 목록의 꼬리에 추가하십시오.
보기 패턴은 가치가 없습니다. 목록을 정렬하고 머리를 떼고 끝에 추가하십시오. 이 경우 컴팩트하게 입력 된 순 솔루션이 가장 좋습니다.
-XViewPatterns
. 그것들을 표준 방식으로 세는 f(a:b)=b++[a];f.sort
것이 더 짧습니다.
{first {![<=]($_)&&![>=] $_},.permutations}
*.sort[1..*,0].flat
그 주 [1..*,0]
에 될 것입니다 ((2,3),1)
, 그래서 .flat
로를 설정하는가(2,3,1)
&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
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.
S╜
I think this is dissimilar enough from totallyhuman's post to post a new answer; I hope you don't mind :P EDIT: DAMMIT YOU NINJA'D ME
def f(a):a[1:]=a[a.sort():0:-1]
Yet another Python solution.
Sadly, this one has the same length to HyperNeutrino's answer.
O#`
O^#-2`
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
Submitted on mobile. Please don't kill me for problems.
->a{a.sort.rotate}
.>SQ1
SQ
- sort input list
.>SQ1
- rotate input list cyclicaly by 1
a=>sorted(a)[1to,0]
-2 bytes indirectly thanks to xnor
Not yet working on TIO; waiting for a pull.
lambda a:a[1:a.sort()]+a[:1]
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.
lambda a:a.sort()or[a.pop(),*a]
Try it online! or Verify all test cases.
Inspired by Shaggy's JS answer.
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"]
.
+
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.
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