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!


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>


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!


Ṣṙ-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



5

Python 3 , 31 byte

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

Cobalah online!

-1 byte terima kasih kepada xnor


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


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





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

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.


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)



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

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])

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


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 .



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


1

Ruby, 18 byte

Dikirimkan di ponsel. Tolong jangan bunuh aku untuk masalah.

->a{a.sort.rotate}

1

Pyth, 5 byte

.>SQ1

Penjelasan

SQ - urutkan daftar input

.>SQ1 - Putar daftar input secara siklis sebesar 1



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.




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


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

Dengan menggunakan situs kami, Anda mengakui telah membaca dan memahami Kebijakan Cookie dan Kebijakan Privasi kami.
Licensed under cc by-sa 3.0 with attribution required.