確実に壊れたソート


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]]
シャギー

いいえ、単一の配列/リストである必要があります。
-flawr

回答:


14

JavaScript(ES6)、39 34バイト

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

配列を昇順で並べ替え、最後の要素をポップして、新しい配列の最初の要素として使用します。次に、元の配列の残りの要素を新しい配列に分解します(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メソッドは辞書式にソートされるためです。
シャギー

3
それはすでに信頼できないほど壊れているからですか?= D
jpmc26


7

Ṣṙ-動作します(ちょうどそれを言っているように感じた。あなたはおそらく:Pを知っていた)
-HyperNeutrino

@HyperNeutrinoええ、同じバイト数:p
エリック・ザ・アウトゴルファー

どのエンコードでṢṙ13バイトのみですか?UTF-8では、7バイトです。
heinrich5991

2
@ heinrich5991 Jellyはカスタムコードページを使用します
コール

Jellyを使用するすべての人は、「Jellyはカスタムコードページを使用します」というコメントを自動的に投稿するためのボタンを追加するブラウザー拡張機能を持たなければならないように感じます。
12Me21



5

Python 3、31バイト

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

オンラインでお試しください!

xnorのおかげで-1バイト


...この基本的なロジックを見なかったのはどうしてですか。>。>
完全に人間

@totallyhuman lol私の答えは3つともまったく同じことです。しかしha:Pまた、iOSのPRをマージしました-> MacOS:P
HyperNeutrino

ええ、ブランチに気付き、削除しました。:P-
完全に人間

min最後に配置すると、バイトが節約されます。
-xnor


5

TI-Basic(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

Java 8、68 37バイト

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バイトを節約するために使用できます。
ネベイ

2
またはl->{l.sort(null);l.add(l.remove(0));}、31バイトの保存に使用できます(サイズが固定されていないリストを使用する必要があります)。
ネベイ

@Nevay素晴らしいものが...括弧はドキュメントに関しては少しオフになっている。現実には、そのオプションの操作であるaddremove実装する必要があります。固定サイズのリストについては何も言われていません... Kevin Cruijssen、以前のコメントにははるかに優れた選択肢があるので、+ 1する前に編集を待ちます。
オリビエグレゴワール

3

Haskell、36 37バイト

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

ビューパターンを使用して、入力リストのソートされたバージョンの先頭で一致させ、リストの最初の項目を残りのリストの末尾に追加します。

ビューパターンは価値がありません。リストを並べ替え、頭を外し、最後に追加します。この場合、コンパクトに入力された素朴なソリューションが最適であることがわかります。


1
PPCGへようこそ!ビューパターンを使用することをお勧めします。以前はそれらについて知りませんでした。残念ながら、標準のHaskellでは有効になっていないため、サイトルールごとにコマンドラインフラグのバイトを含める必要があります-XViewPatterns。それらを標準的な方法で数えることf(a:b)=b++[a];f.sortはより短いです。
ライコニ

私はどういうわけか必要な旗について考えていませんでした。それらを非常に多く使用しているので、Cabalファイルでオンにし、言語の一部ではないことを忘れていたと思います。
-typedrat




2

R、33 32 29バイト

stdinから入力を受け取ります。リストをソートしてから、最初の要素を最後に移動して、ソートされていないことを確認します。ジュゼッペのために3バイトを節約しました。

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

別の実装、同じバイト数:

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

c(sort(x<-scan())[-1],min(x))基本的にあなたと同じアイデアを使用して29バイトです。
ジュゼッペ


1

Python、31バイト

def f(a):a[1:]=a[a.sort():0:-1]

さらに別のPythonソリューション。

悲しいことに、これはHyperNeutrinoの答えと同じ長さです。




1

ルビー、18バイト

モバイルで提出。問題のために私を殺さないでください。

->a{a.sort.rotate}






1

PHP、44バイト

短い配列構文には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 1sort($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"]


[array_pop($ a)] + $ aが$ aの0番目のインデックスを上書きしない理由を説明できますか?例:$ a = [1,2,3,4,5]、array_pop($ a)= 5、$ a = [1,2,3,4]。[5] + [1,2,3,4]を実行した場合、両方の配列に0番目のインデックスがあるため、最終的には[5,2,3,4]になりませんか?PHPマニュアルには、「+演算子は、左側の配列に追加された右側の配列を返します。両方の配列に存在するキーの場合、左側の配列の要素が使用され、右側の配列の要素は無視されます。」
-jstnthms

@jstnthms +演算子は追加せず、マージします(インデックスを並べ替えることはありませんが、ここでは関係ありません)。重要な点は、スクリプトのファイル名を$a指し$argv$argv[0]含むことです。引数はインデックス1から始まります。説明を拡張しました。質問をありがとう。
タイタス

1

ジュリア、23バイト

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

より少し短いですが、と同等f(x)=circshift(sort(x),1)です。それに基づいてメソッドを作成できたらいいのにselect、もっとコンパクトだったらいいのに

弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.