少なくとも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]
配列を昇順で並べ替え、最後の要素をポップして、新しい配列の最初の要素として使用します。次に、元の配列の残りの要素を新しい配列に分解します(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
新しい入力を返す代わりに、input-を変更します。
説明:
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
ええと、並べ替えを台無しにすることはとても高価です!
説明:
&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
O#`
O^#-2`
O#` Sort the list
O^#-2` Reverse sort the list other than the last element
これにより、リストは2番目に高い要素が最初に残り、最後に最も高い要素が残り、これらは正しくソートされません。
モバイルで提出。問題のために私を殺さないでください。
->a{a.sort.rotate}
.>SQ1
SQ
-入力リストのソート
.>SQ1
-入力リストを周期的に1回転します
lambda a:a[1:a.sort()]+a[:1]
a.sort()
a
所定の位置にソートして戻りますNone
。None
スライスインデックスとして使用でき、そのインデックスを省略することと同じです。
lambda a:a.sort()or[a.pop(),*a]
オンラインでお試しください!またはすべてのテストケースを検証します。
シャギーのJS回答に触発されました。
短い配列構文にはPHP 5.4以降が必要です。
sort($a=&$argv);print_r([array_pop($a)]+$a);
引数をソートし、0番目の引数を削除された最後の引数で置き換えて出力します。
で実行する-nr
か、オンラインで試してください。
で"-"
PHPを呼び出す場合、0番目の引数はスクリプトファイル名です-r
。"-"
は文字列として他の引数と比較され、以来ord("-")==45
、任意の数よりも小さくなります。数字自体は、文字列ですが、数字として比較されます"12" > "2"
。
php -nr '<code>' 3 4 2 5 1
とsort($a=&$argv)
にリード$a=["-","1","2","3","4","5"]
→が
[array_pop($a)]+$a
あり[0=>"5"]+[0=>"-",1=>"1",2=>"2",3=>"3",4=>"4"]
、
中にいる結果[0=>"5",1=>"1",2=>"2",3=>"3",4=>"4"]
。
+
演算子は追加せず、マージします(インデックスを並べ替えることはありませんが、ここでは関係ありません)。重要な点は、スクリプトのファイル名を$a
指し$argv
、$argv[0]
含むことです。引数はインデックス1から始まります。説明を拡張しました。質問をありがとう。