Urutkan yang Patah Dipercaya

23

Diberikan daftar bilangan bulat positif yang mengandung setidaknya 3 entri yang berbeda, mengeluarkan permutasi dari daftar itu yang tidak diurutkan dalam urutan naik atau turun.

Contohnya

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

Terima kasih @Arnauld dan @NoOneIsHere untuk judulnya!

cacat
sumber
Apakah input akan selalu diurutkan?
xnor
Haruskah sortir itu "andal" karena diberikan satu set entri, ia selalu menghasilkan permutasi yang sama dengan output? Atau haruskah itu hanya "dapat diandalkan" karena outputnya tidak diurutkan?
Wildcard
Itu hanya harus memenuhi spesifikasi.
flawr
Apakah array bersarang diizinkan sebagai output? misalnya [2,[1,3]],.
Shaggy
Tidak, itu harus menjadi satu array / daftar tunggal.
flawr

Jawaban:

14

JavaScript (ES6), 39 34 byte

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

Mengurutkan array dalam urutan menaik, pop elemen terakhir dan menggunakannya sebagai elemen pertama dari array baru. Kemudian hancurkan elemen-elemen yang tersisa dari array asli ke dalam array baru (Di JS, keduanya sortdan popmodifikasi array asli).


Menguji

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>

Shaggy
sumber
Kenapa kau tidak melakukannya a.sort()?
geokavel
1
@geokavel: Karena sortmetode JS agak leksikografis.
Shaggy
3
Jadi karena sudah rusak? = D
jpmc26
7

Jelly , 3 byte

Ṣṙ1

Cobalah online!

Erik the Outgolfer
sumber
Ṣṙ-juga bekerja (hanya merasa seperti mengatakan itu; Anda mungkin tahu: P)
HyperNeutrino
@HyperNeutrino Yep yang bekerja juga, bytecount yang sama: p
Erik the Outgolfer
Di mana pengkodean Ṣṙ1hanya tiga byte? Di UTF-8, 7 byte.
heinrich5991
2
@ heinrich5991 Jelly menggunakan codepage khusus .
cole
Saya merasa semua orang yang menggunakan Jelly harus memiliki ekstensi peramban yang menambahkan tombol untuk secara otomatis memposting komentar "Jelly menggunakan codepage khusus".
12Me21
6

Ohm , 2 byte

S╙

Cobalah online!

Sortir dan putar ke kanan.

benar-benar manusiawi
sumber
6

Japt , 3 byte

n é

Menguji

Mengurutkan ( n) array dan memutar ( é) satu elemen ke kanan.

Shaggy
sumber
5

Python 3 , 31 byte

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

Cobalah online!

-1 byte terima kasih kepada xnor

HyperNeutrino
sumber
... Bagaimana saya tidak melihat logika dasar ini. >.>
totallyhuman
@ sebenarnya manusia lol semua 3 jawaban saya melakukan hal yang sama persis. tapi ha: P Juga saya menggabungkan PR Anda untuk iOS -> MacOS: P
HyperNeutrino
Ya, saya perhatikan dan menghapus cabang saya. : P
totallyhuman
Menempatkan mindi akhir menghemat satu byte.
xnor
5

APL, 9 byte

{1⌽⍵[⍋⍵]}

Cobalah online!

Bagaimana?

⍵[⍋⍵] - urutkan daftar

1⌽ - putar 1

Uriel
sumber
Juga berfungsi di GNU dan ngn!
Zacharý
@ Zacharý kira saya hanya akan menghapus dyalog ...
Uriel
5

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

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

Meminta input dalam format {1,2,3,4}.

TI-Basic adalah bahasa tokenized , semua token yang digunakan di sini adalah satu byte.

Penjelasan:

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
pizzapants184
sumber
5

Pyth , 7 5 4 byte

.P1S

Cobalah online!

-1 byte terima kasih kepada FryAmTheEggman

Tidak Ada Di Sini
sumber
Anda dapat menyimpan byte dengan menggunakan permutasi: pyth.herokuapp.com/...
FryAmTheEggman
@FryAmTheEggman terima kasih, saya akan memperbarui ketika saya sampai di komputer.
NoOneIsHere
3

Retina , 21 byte

O#`
s`(.*)¶(.*)
$2¶$1

Cobalah online! Sortir dan putar seperti biasa. Setidaknya tidak ada konversi unary saat ini.

Neil
sumber
3

Java 8, 68 37 byte

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

-31 byte berkat @Nevay (lupa Java 8 punya List#sort(Comparator)metode ..)

Memodifikasi input-ArrayList , bukannya mengembalikan yang baru.

Penjelasan:

Coba di sini.

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
Kevin Cruijssen
sumber
Anda dapat menggunakannya l->{l.sort(null);java.util.Collections.rotate(l,1);}untuk menghemat 16 byte.
Nevay
2
Atau Anda dapat menggunakan l->{l.sort(null);l.add(l.remove(0));}untuk menyimpan 31 byte (membutuhkan penggunaan daftar yang tidak berukuran tetap).
Nevay
@ Tidak pernah bagus, tapi ... kurung agak kurang dalam hal dokumentasi: kenyataannya adalah bahwa operasi opsional adddan removeharus dilaksanakan; tidak ada yang dikatakan tentang daftar berukuran tetap ... Kevin Cruijssen, mengingat ada banyak alternatif yang lebih baik di komentar sebelumnya, saya akan menunggu hasil edit sebelum memberi +1.
Olivier Grégoire
3

Haskell, 36 37 byte

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

Gunakan pola tampilan untuk mencocokkan di kepala versi yang diurutkan dari daftar input, kemudian tambahkan item pertama dari daftar ke ekor daftar yang tersisa.

Pola tampilan tidak sepadan. Sortir daftar, lepas kepala, tambahkan sampai akhir. Dalam hal ini, ternyata solusi naif yang diketik dengan kompak adalah yang terbaik.

typedrat
sumber
1
Selamat datang di PPCG! Ide bagus untuk menggunakan pola tampilan, saya tidak tahu tentang mereka sebelumnya. Sayangnya, mereka tidak diaktifkan di Haskell standar, jadi per aturan situs Anda harus menyertakan byte untuk flag baris perintah -XViewPatterns. Menghitung mereka dengan cara standar f(a:b)=b++[a];f.sortlebih pendek.
Laikoni
Saya entah bagaimana tidak memikirkan bendera yang dibutuhkan. Saya kira saya menggunakannya sangat banyak sehingga saya lupa bahwa saya menyalakannya di file Cabal saya dan itu bukan bagian dari bahasa.
typedrat
2

Perl 6 ,  43  19 byte

{first {![<=]($_)&&![>=] $_},.permutations}

Cobalah

*.sort[1..*,0].flat

Cobalah

Catatan yang [1..*,0]akan menghasilkan ((2,3),1), jadi .flatapakah ada untuk mengubahnya menjadi(2,3,1)

Brad Gilbert b2gills
sumber
2

Mathematica, 18 byte

RotateLeft@Sort@#&

Cobalah online!

J42161217
sumber
4
Lebih pendek:RotateLeft@*Sort
JungHwan Min
2

Ly , 7 byte

&nasprl

Cobalah online!

Ugh, merusak semacam itu sangat mahal!

Penjelasan:

&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
Lirik
sumber
2

R, 33 32 29 byte

Mengambil input dari stdin. Mengurutkan daftar dan kemudian memindahkan elemen pertama ke akhir, memastikan bahwa itu tidak lagi diurutkan. Disimpan tiga byte karena Giuseppe.

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

Implementasi lain, jumlah byte yang sama:

c((x<-sort(scan()))[-1],x[1])
rturnbull
sumber
c(sort(x<-scan())[-1],min(x))adalah 29 byte menggunakan ide dasarnya sama dengan milikmu.
Giuseppe
1

Ohm , 2 byte

S╜

Cobalah online!

Saya pikir ini cukup berbeda dari posting benar-benar manusia untuk mengirim jawaban baru; Saya harap Anda tidak keberatan: P EDIT : DAMMIT YOU NINJA'D ME

HyperNeutrino
sumber
Ninja kan? ;)
totallyhuman
1

Python, 31 byte

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

Namun solusi Python lain.

Sayangnya, yang ini memiliki panjang yang sama dengan jawaban HyperNeutrino .

tsh
sumber
1

Gaia , 3 byte

ȯ1«

Cobalah online!

Sama seperti jawaban lainnya: urutkan ȯdan putar ke kiri satu kali .

Kucing Bisnis
sumber
1

Retina , 10 byte

O#`
O^#-2`

Cobalah online!

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

Ini meninggalkan daftar dengan elemen tertinggi ke-2 terlebih dahulu dan elemen tertinggi terakhir yang tidak pernah diurutkan dengan benar

PunPun1000
sumber
1

Ruby, 18 byte

Dikirimkan di ponsel. Tolong jangan bunuh aku untuk masalah.

->a{a.sort.rotate}
dkudriavtsev
sumber
1

Pyth, 5 byte

.>SQ1

Penjelasan

SQ - urutkan daftar input

.>SQ1 - Putar daftar input secara siklis sebesar 1

Karan Elangovan
sumber
1

Proton , 19 byte

a=>sorted(a)[1to,0]

Cobalah online!

-2 byte secara tidak langsung berkat xnor

Belum bekerja di TIO; menunggu tarikan.

HyperNeutrino
sumber
1

Python 3 , 28 byte

lambda a:a[1:a.sort()]+a[:1]

Cobalah online!

a.sort()macam adi tempat dan kembali None. Nonedapat digunakan sebagai indeks pengirisan dan sama dengan menghilangkan indeks itu.

Kucing Bisnis
sumber
1

PHP, 44 byte

membutuhkan PHP 5.4 atau lebih baru untuk sintaks array pendek.

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

urutkan argumen, ganti argumen ke-0 dengan argumen terakhir yang dihapus, cetak.
Jalankan dengan -nratau coba online .


Argumen 0-th adalah nama file skrip, "-" jika Anda memanggil PHP dengan -r. "-"dibandingkan dengan argumen lain sebagai string, dan karena ord("-")==45, ia lebih kecil dari angka apa pun. Angka-angka itu sendiri, meskipun string, dibandingkan sebagai nomor: "12" > "2".

php -nr '<code>' 3 4 2 5 1dan sort($a=&$argv)mengarah ke $a=["-","1","2","3","4","5"]
[array_pop($a)]+$ais [0=>"5"]+[0=>"-",1=>"1",2=>"2",3=>"3",4=>"4"],
yang menghasilkan[0=>"5",1=>"1",2=>"2",3=>"3",4=>"4"] .

Titus
sumber
Bisakah Anda jelaskan mengapa [array_pop ($ a)] + $ a tidak menimpa indeks ke-0 dari $ a? Sebagai contoh: $ a = [1,2,3,4,5], array_pop ($ a) = 5, $ a = [1,2,3,4]. Jika Anda [5] + [1,2,3,4], tidakkah seharusnya menjadi [5,2,3,4] karena kedua array memiliki indeks ke-0? Saya bingung karena manual PHP mengatakan "Operator + mengembalikan array kanan ditambahkan ke array kiri; untuk kunci yang ada di kedua array, elemen dari array kiri akan digunakan, dan pencocokan elemen dari array sebelah kanan akan diabaikan. "
jstnthms
@jstnthms The + Operator tidak menambahkan, ia menyatu (tanpa menata ulang indeks; tetapi itu tidak masalah di sini). Poin penting adalah bahwa $amenunjuk ke $argvdan $argv[0]berisi nama file skrip, argumen mulai dari indeks 1. Saya memperluas deskripsi. Terima kasih untuk pertanyaannya.
Titus
1

Julia, 23 byte

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

Sedikit lebih pendek dari, tetapi setara dengan f(x)=circshift(sort(x),1). Saya berharap saya bisa membuat metode berdasarkan selectitu lebih, kompak tapi saya tidak bisa

Lyndon White
sumber