เรียงลำดับได้อย่างน่าเชื่อถือ


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

การเรียงลำดับจะต้อง "น่าเชื่อถือ" ในชุดที่กำหนดของรายการมันจะสร้างการเรียงสับเปลี่ยนเช่นเดียวกับเอาต์พุตหรือไม่ หรือจะต้อง "เชื่อถือได้" เท่านั้นในผลลัพธ์ที่ไม่ได้เรียงลำดับ?
สัญลักษณ์แทน

มันจะต้องเป็นไปตามข้อกำหนด
ข้อบกพร่อง

อาร์เรย์ที่ซ้อนกันจะได้รับอนุญาตเป็นผลลัพธ์หรือไม่ เช่น[2,[1,3]].
Shaggy

ไม่ควรเป็นหนึ่งอาเรย์ / รายการเดียว
ข้อบกพร่อง

คำตอบ:


14

JavaScript (ES6), 39 34 ไบต์

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()?
geokavel

1
@geokavel: เพราะsortวิธีการของ JS เรียงลำดับพจนานุกรม
ปุย

3
ดังนั้นเพราะมันหักไม่ได้แล้วเหรอ? = D
jpmc26


7

Ṣṙ-ยังใช้งานได้ (แค่รู้สึกอยากพูดอย่างนั้นคุณอาจรู้: P)
HyperNeutrino

@HyperNeutrino Yep ที่ทำงานด้วย bytecount เดียวกัน: p
Erik the Outgolfer

การเข้ารหัสใดมีṢṙ1เพียงสามไบต์เท่านั้น ใน UTF-8 คือ 7 ไบต์
heinrich5991

2
@ heinrich5991 Jelly ใช้เพจรหัสที่กำหนดเอง
โคล

ฉันรู้สึกเหมือนทุกคนที่ใช้เยลลี่ต้องมีส่วนขยายของเบราว์เซอร์ซึ่งเพิ่มปุ่มเพื่อโพสต์ความคิดเห็น "เจลลี่ใช้เพจรหัสที่กำหนดเอง" โดยอัตโนมัติ
12Me21



5

Python 3 , 31 ไบต์

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

ลองออนไลน์!

-1 ไบต์ต้องขอบคุณ xnor


... ฉันไม่เห็นตรรกะพื้นฐานนี้ได้อย่างไร >.>
สิ้นเชิงมนุษย์

@tallyallyhuman lol ทั้ง 3 คำตอบของฉันทำสิ่งเดียวกัน แต่ฮา: P ฉันยังรวมการประชาสัมพันธ์ของคุณสำหรับ iOS -> 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 เป็นภาษาโทเค็นโทเค็นทั้งหมดที่ใช้ที่นี่เป็นหนึ่งไบต์

คำอธิบาย:

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 bytes

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

-31 bytes thanks to @Nevay (forgot Java 8 had a List#sort(Comparator) method..)

Modifies the input-ArrayList, instead of returning a new one.

Explanation:

Try it here.

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

You can use l->{l.sort(null);java.util.Collections.rotate(l,1);} to save 16 bytes.
Nevay

2
Alternatively you can use l->{l.sort(null);l.add(l.remove(0));} to save 31 bytes (requires the usage of a not fixed sized list).
Nevay

@Nevay nice one, but... the parentheses are a bit off in regards to the documentation: the reality is that the optional operations add and remove must be implemented; nothing is said about fixed-sized list... Kevin Cruijssen, given that there are much better alternatives in the previous comments, I'll wait for an edit before +1ing.
Olivier Grégoire

3

Haskell, 36 37 bytes

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

Use view patterns to match on the head of a sorted version of the input list, then append the first item of the list to the tail of the remaining list.

View patterns aren't worth it. Sort the list, take the head off, append it to the end. In this case, it turns out that the naive solution typed out compactly is the best.


1
Welcome to PPCG! Great idea to use view patterns, I didn't know about them before. Unfortunately, they are not enabled in standard Haskell, so per site rules you need to include the bytes for the command line flag -XViewPatterns. Counting those the standard way f(a:b)=b++[a];f.sort is shorter.
Laikoni

I somehow wasn't thinking about the flag needed. I guess I use them so much that I forgot that I turn it on in my Cabal files and that it's not part of the language.
typedrat




2

R, 33 32 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

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.