Algoritma “Sorting”


33

Ada "algoritma pengurutan" kadang-kadang disebut pengurutan Stalin di mana untuk mengurutkan daftar Anda cukup menghapus elemen dari daftar sampai diurutkan dalam urutan yang meningkat. Misalnya daftar

[1, 2, 4, 5, 3, 6, 6]

Ketika "diurutkan" menggunakan Stalin menjadi

[1, 2, 4, 5, 6, 6]

Ketiganya dihapus karena rusak.

Sekarang jelas ada banyak cara untuk menghapus elemen untuk mengurutkan daftar. Misalnya setiap daftar dengan kurang dari dua elemen harus diurutkan jadi dengan hanya menghapus elemen secara membabi buta kita selalu dapat mengurutkan daftar. Karena ini masalahnya, kami hanya peduli dengan hasil terpanjang dari jenis Stalin.

Tugas Anda adalah mengambil daftar bilangan bulat positif dan menampilkan panjang daftar yang paling banyak diurutkan (bertambah) yang dapat dicapai dengan menghapus elemen dari daftar asli. Yaitu menemukan panjang dari sub-daftar yang paling lama diurutkan (mungkin tidak bersebelahan).

Daftar yang diurutkan dapat memiliki elemen yang sama lebih dari satu kali berturut-turut. Anda tidak perlu mendukung daftar kosong kecuali jika program Anda sendiri kosong.

Mencetak gol

Jawaban Anda akan dinilai berdasarkan panjangnya jenis Stalin terpanjang. Program akan ditafsirkan sebagai urutan byte daripada karakter, dan urutannya akan menjadi alami yang muncul dengan menafsirkan byte sebagai angka. Skor yang lebih rendah lebih baik.

Ini bukan

Inilah alat yang rapi untuk membantu Anda menilai jawaban Anda.

Uji kasus

[1, 2, 4, 5, 3, 6, 6] -> 6
[19, 2] -> 1
[3, 3, 4, 3] -> 3
[10] -> 1
[1, 2, 4, 9] -> 4
[1, 90, 2, 3, 4, 5] -> 5
[1, 90, 91, 2, 3, 4, 5] -> 5

3
Singkatnya: output panjang urutan peningkatan terpanjang (non-ketat) .
user202729

1
Saya menyukai aturan "Anda tidak perlu mendukung daftar kosong kecuali jika program Anda sendiri kosong."
Paŭlo Ebermann

Tantangan ini mengingatkan saya pada banyak tantangan tetes
Stefnotch

1
Saya membuat checker di ptpb.pw/SVSt.html . Masih tidak terlalu fungsional, tetapi berfungsi. (TODO: * bagan batang * partisi ke dalam urutan yang berkurang paling sedikit * dukungan untuk halaman kode lain)
user202729

@ user202729 Keren! Saya telah menambahkannya ke pos. Silakan mengedit versi yang lebih baru jika perlu.
Wheat Wizard

Jawaban:


8

Python 2 , panjang 14 12 10 9

M=max;X=exit;i=input();L=[0]*M(i)
for	a	in	i:L[a-1]=M(L[:a])+1
X(M(L))

Output melalui kode keluar.

Cobalah online!

Bagaimana itu bekerja

Setiap saat, array melacak sub -array yang paling lama diurutkan yang ditemukan sejauh ini; adalah panjang terpanjang yang diakhiri dengan .LL[a1]a

Awalnya, kami belum memproses elemen array, jadi seluruhnya terdiri dari nol.L

Ketika memproses elemen array , pertama kita mengambil maksimum , yang merupakan panjang dari subarray diurutkan terpanjang ditemui sejauh yang berakhir dengan atau bilangan bulat kecil. Menambahkan ke array seperti itu akan tetap diurutkan, sehingga subarray terpanjang yang berakhir adalah satu elemen lebih lama dari maksimum itu. Kami memperbarui dengan nilai yang dihitung.a[L[0],,L[a1]]aaaL[a1]

Hasil akhir adalah maksimum .L


Bisakah Anda jelaskan, mengapa itu berhasil? Saya mengalami kesulitan untuk memahaminya :(
Dead Possum

Saya telah menambahkan penjelasan.
Dennis




4

Jelly , panjangnya  4  2

ṢƑƇZLƲ}ŒP

Cobalah online!

Bytes di halaman kode Jelly

183 146 144 90 76 169 125 19 80

Bagaimana itu bekerja

ṢƑƇZLƲ}ŒP  Main link. Argument: A (array)

       ŒP  Powerset; yield P, the array of all sub-arrays of A.
     Ʋ     Vier; combine the preceding four links into a monadic chain...
      }    and apply the chain to the right argument (P).
  Ƈ            Comb; only keep arrays for which the link to the left returns 1.
ṢƑ             Sort fixed; yield 1 if sorting doesn't alter the array.
   Z           Zip; read the filtered powerset by columns.
    L          Take the length.

3

Pyth, skor 3 2 ( 7 byte)

leSI#y

Menyimpan poin berkat Anders Kaseorg.
Coba di sini

Penjelasan

leSI#y
     yQ    Take the power set of the (implicit) input (preserving order).
  SI#      Get the ones that are sorted.
 e         Take the last (longest).
l          Get the length.

leSI#yskor 2.
Anders Kaseorg

2

Stax , 4 macam panjang stalin maksimal

S{:^fF%|M

Jalankan dan debug itu

Ini berfungsi seperti ini.

S       powerset of input
{:^f    filter by non-descending sequences
F%|M    take the maximum length remaining

2

R , Skor 15 11, 72 62 byte

function(L,M=max,A=1:M(L)*0){for(Y in L)A[Y]=M(A[1:Y])+1;M(A)}

Cobalah online!

Ports Dennis 'Python menjawab R.


Hanya mengubah nama variabel tidak akan membantu, karena seperti yang ditunjukkan oleh tautan terakhir Anda, tidak satupun dari mereka yang digunakan dalam substring (ditemukan) yang memberikan skor 15.
Ørjan Johansen

@ ØrjanJohansen ah, tentu saja, saya agak bodoh. Saya kira pendekatan lain diperlukan.
Giuseppe

2

Brachylog , panjang 2 (4 byte)

⊇≤₁l

Cobalah online!

Sebuah jawaban yang cukup ringkas karena tidak disortir lebih pendek.

( 08 03 80 6Cdi halaman kode Brachylog)

        Output
   l    the length of
 ≤₁     a non-decreasing
⊇       sublist of
        the input.
        (maximizing the size of the sublist)

Saya datang dengan ►LSnmOṖuntuk Husk tetapi nilainya (setidaknya untuk panjangnya) terlalu buruk untuk memposting ...
String yang tidak terkait
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.