Sắp xếp đáng tin cậy


23

Đưa ra một danh sách các số nguyên dương có chứa ít nhất 3 mục riêng biệt, xuất ra một hoán vị của danh sách đó không được sắp xếp theo thứ tự tăng dần hoặc giảm dần.

Ví dụ

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..

Cảm ơn @Arnauld và @NoOneIsHere cho tiêu đề!


Đầu vào sẽ luôn luôn được sắp xếp?
xnor

Phải sắp xếp là "đáng tin cậy" trong một tập hợp các mục nhất định, nó luôn tạo ra hoán vị giống như đầu ra? Hoặc phải là "đáng tin cậy" ở chỗ đầu ra không được sắp xếp?
tự đại diện

Nó chỉ cần đáp ứng các thông số kỹ thuật.
flawr

Một mảng lồng nhau sẽ được phép làm đầu ra? ví dụ [2,[1,3]].
Xù xì

Không, nó phải là một mảng / danh sách.
flawr

Câu trả lời:


14

JavaScript (ES6), 39 34 byte

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

Sắp xếp mảng theo thứ tự tăng dần, bật phần tử cuối cùng và sử dụng nó làm phần tử đầu tiên của mảng mới. Sau đó, cấu trúc lại các phần tử còn lại của mảng ban đầu thành mảng mới (Trong JS, cả hai sortpopsửa đổi mảng ban đầu).


Kiểm tra nó

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>


Tại sao bạn không thể làm gì a.sort()?
geokavel

1
@geokavel: Bởi vì sortphương pháp của JS sắp xếp theo từ vựng.
Xù xì

3
Vì vậy, vì nó đã bị phá vỡ không đáng tin cậy? = D
jpmc26


7

Ṣṙ-cũng hoạt động (chỉ cảm thấy như nói vậy; có lẽ bạn đã biết: P)
HyperNeutrino

@HyperNeutrino Yep cũng hoạt động, cùng một phụ nữ: p
Erik the Outgolfer

Trong đó mã hóa Ṣṙ1chỉ có ba byte? Trong UTF-8, nó là 7 byte.
heinrich5991

2
@ heinrich5991 Jelly sử dụng một bảng mã tùy chỉnh .
cole

Tôi cảm thấy như mọi người sử dụng Jelly phải có tiện ích mở rộng trình duyệt có thêm nút để tự động đăng bình luận "Jelly sử dụng một bảng mã tùy chỉnh".
12Me21



5

Python 3 , 31 byte

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

Hãy thử trực tuyến!

-1 byte nhờ xnor


... Làm thế nào tôi không thấy logic cơ bản này. >.>
hoàn toàn là

@totallyhuman lol cả 3 câu trả lời của tôi đều làm điều tương tự. nhưng ha: P Ngoài ra tôi đã hợp nhất PR của bạn cho iOS -> MacOS: P
HyperNeutrino

Vâng, tôi nhận thấy và xóa chi nhánh của tôi. : P
hoàn toàn là

Đặt minở cuối sẽ tiết kiệm một byte.
xnor


5

TI-Basic (TI-84 Plus CE), 31 byte

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

Nhắc nhở cho đầu vào ở định dạng {1,2,3,4}.

TI-Basic là ngôn ngữ được mã hóa , tất cả các mã thông báo được sử dụng ở đây là một byte.

Giải trình:

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 byte

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

-31 byte nhờ @Nevay (quên Java 8 có List#sort(Comparator)phương thức ..)

Sửa đổi đầu vào- ArrayList, thay vì trả lại một cái mới.

Giải trình:

Hãy thử nó ở đây.

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

Bạn có thể sử dụng l->{l.sort(null);java.util.Collections.rotate(l,1);}để lưu 16 byte.
Nevay

2
Ngoài ra, bạn có thể sử dụng l->{l.sort(null);l.add(l.remove(0));}để lưu 31 byte (yêu cầu sử dụng danh sách có kích thước không cố định).
Nevay

@Nevay một cái hay, nhưng ... các dấu ngoặc đơn hơi liên quan đến tài liệu: thực tế là các thao tác tùy chọn addremovephải được thực hiện; không có gì được nói về danh sách có kích thước cố định ... Kevin Cruijssen, cho rằng có nhiều lựa chọn thay thế tốt hơn trong các bình luận trước đó, tôi sẽ chờ chỉnh sửa trước + 1ing.
Olivier Grégoire

3

Haskell, 36 37 byte

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

Sử dụng các mẫu xem để khớp trên đầu của một phiên bản được sắp xếp của danh sách đầu vào, sau đó nối mục đầu tiên của danh sách vào phần đuôi của danh sách còn lại.

Xem các mẫu không có giá trị nó. Sắp xếp danh sách, bỏ đầu, nối nó đến cuối. Trong trường hợp này, hóa ra giải pháp ngây thơ được gõ gọn là tốt nhất.


1
Chào mừng đến với PPCG! Ý tưởng tuyệt vời để sử dụng các mẫu xem, tôi đã không biết về chúng trước đây. Thật không may, chúng không được kích hoạt trong Haskell tiêu chuẩn, do đó, mỗi quy tắc trang web bạn cần bao gồm các byte cho cờ dòng lệnh -XViewPatterns. Đếm những cách tiêu chuẩn f(a:b)=b++[a];f.sortlà ngắn hơn.
Laikoni

Tôi bằng cách nào đó đã không nghĩ về cờ cần thiết. Tôi đoán rằng tôi đã sử dụng chúng rất nhiều đến nỗi tôi quên rằng tôi bật nó trong các tệp Cabal của mình và đó không phải là một phần của ngôn ngữ.
typedrat



2

Ly , 7 byte

&nasprl

Hãy thử trực tuyến!

Ugh, làm hỏng các loại là rất tốn kém!

Giải trình:

&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

R, 33 32 29 byte

Lấy đầu vào từ stdin. Sắp xếp danh sách và sau đó di chuyển phần tử đầu tiên đến cuối, đảm bảo rằng nó không còn được sắp xếp. Đã lưu ba byte do Giuseppe.

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

Một cách thực hiện khác, cùng số byte:

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

c(sort(x<-scan())[-1],min(x))là 29 byte sử dụng về cơ bản cùng một ý tưởng như của bạn.
Giuseppe




1

Võng mạc , 10 byte

O#`
O^#-2`

Hãy thử trực tuyến!

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

Điều này rời khỏi danh sách với phần tử cao thứ 2 đầu tiên và phần tử cao nhất cuối cùng không bao giờ được sắp xếp chính xác


1

Ruby, 18 byte

Gửi trên điện thoại di động. Xin đừng giết tôi vì vấn đề.

->a{a.sort.rotate}

1

Bình thường, 5 byte

.>SQ1

Giải trình

SQ - sắp xếp danh sách đầu vào

.>SQ1 - xoay danh sách đầu vào theo chu kỳ bằng 1






1

PHP, 44 byte

yêu cầu PHP 5.4 trở lên cho cú pháp mảng ngắn.

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

sắp xếp các đối số, thay thế đối số 0 bằng loại bỏ đối số cuối cùng, in.
Chạy với -nrhoặc thử trực tuyến .


Đối số 0 là tên tệp kịch bản, "-"nếu bạn gọi PHP bằng -r. "-"được so sánh với các đối số khác dưới dạng một chuỗi và vì ord("-")==45nó nhỏ hơn bất kỳ số nào. Các số, mặc dù các chuỗi, được so sánh như số : "12" > "2".

php -nr '<code>' 3 4 2 5 1sort($a=&$argv)dẫn đến $a=["-","1","2","3","4","5"]
[array_pop($a)]+$a[0=>"5"]+[0=>"-",1=>"1",2=>"2",3=>"3",4=>"4"],
kết quả là [0=>"5",1=>"1",2=>"2",3=>"3",4=>"4"].


Bạn có thể giải thích tại sao [Array_pop ($ a)] + $ a không ghi đè lên chỉ số 0 của $ a không? Ví dụ: $ a = [1,2,3,4,5], mảng_pop ($ a) = 5, $ a = [1,2,3,4]. Nếu bạn làm [5] + [1,2,3,4], thì cuối cùng không phải là [5,2,3,4] vì cả hai mảng đều có chỉ số 0? Tôi bối rối vì hướng dẫn PHP nói "Toán tử + trả về mảng bên phải được gắn vào mảng bên trái; đối với các khóa tồn tại trong cả hai mảng, các phần tử từ mảng bên trái sẽ được sử dụng và khớp các phần tử từ mảng bên phải sẽ bị bỏ qua. "
jstnthms

@jstnthms +Toán tử không nối, nó hợp nhất (không sắp xếp lại các chỉ mục; nhưng điều đó không quan trọng ở đây). Điểm quan trọng là $atrỏ đến $argv$argv[0]chứa tên tệp scripts của tập lệnh, các đối số bắt đầu ở chỉ mục 1. Tôi đã mở rộng mô tả. Cảm ơn câu hỏi.
Tít

1

Julia, 23 byte

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

Hơi ngắn hơn, nhưng tương đương với f(x)=circshift(sort(x),1). Tôi ước tôi có thể makeamethod dựa trên selectđó là nhiều hơn, nhỏ gọn nhưng tôi không thể

Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.