Một thuật toán sắp xếp thứ hạng


33

Có một "thuật toán sắp xếp" đôi khi được gọi là sắp xếp Stalin, để sắp xếp một danh sách, bạn chỉ cần xóa các phần tử khỏi danh sách cho đến khi nó được sắp xếp theo thứ tự tăng dần. Ví dụ như danh sách

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

Khi "sắp xếp" sử dụng sắp xếp Stalin trở thành

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

Cả ba đã được gỡ bỏ vì nó không còn hoạt động.

Bây giờ rõ ràng có nhiều cách để loại bỏ các yếu tố để sắp xếp một danh sách. Ví dụ, bất kỳ danh sách nào có ít hơn hai phần tử phải được sắp xếp để chỉ cần loại bỏ đủ các phần tử một cách mù quáng, chúng ta luôn có thể sắp xếp một danh sách. Vì đây là trường hợp chúng tôi chỉ quan tâm đến kết quả lâu nhất có thể từ một loại Stalin.

Nhiệm vụ của bạn sẽ là lấy một danh sách các số nguyên dương và đưa ra độ dài của danh sách (tăng) được sắp xếp dài nhất có thể đến bằng cách xóa các phần tử khỏi danh sách gốc. Đó là tìm độ dài của danh sách con được sắp xếp dài nhất (có thể không liền kề).

Danh sách được sắp xếp có thể có cùng một yếu tố nhiều lần liên tiếp. Bạn không cần phải hỗ trợ danh sách trống trừ khi chính chương trình của bạn trống.

Chấm điểm

Câu trả lời của bạn sẽ được ghi bằng chiều dài của loại Stalin dài nhất có thể. Các chương trình sẽ được hiểu là một chuỗi các byte thay vì các ký tự và thứ tự của chúng sẽ là thứ tự nhiên phát sinh bằng cách diễn giải các byte dưới dạng số. Điểm thấp hơn là tốt hơn.

Đây không phải là

Đây là một công cụ gọn gàng để giúp bạn ghi điểm.

Các trường hợp thử nghiệm

[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
Tóm lại: xuất độ dài của chuỗi tăng dài nhất (không nghiêm ngặt) .
dùng202729

1
Tôi thích quy tắc "Bạn không cần phải hỗ trợ danh sách trống trừ khi chính chương trình của bạn trống."
Paŭlo Ebermann

Thử thách này gợi cho tôi rất nhiều thử thách nhỏ giọt
Stefnotch

1
Tôi đã thực hiện kiểm tra tại ptpb.pw/SVSt.html . Vẫn không có nhiều chức năng, nhưng nó hoạt động. (TODO: * biểu đồ thanh * phân vùng thành các chuỗi giảm ít nhất * hỗ trợ cho các trang mã khác)
user202729

@ user202729 Thật tuyệt! Tôi đã thêm nó vào bài viết. Hãy thoải mái chỉnh sửa các phiên bản mới hơn nếu cần thiết.
Thuật sĩ lúa mì

Câu trả lời:


8

Con trăn 2 , dài 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))

Đầu ra là thông qua mã thoát.

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

Làm thế nào nó hoạt động

Tại mọi thời điểm, mảng L theo dõi các phân đoạn được sắp xếp dài nhất gặp phải cho đến nay; L[một-1] là độ dài của đoạn dài nhất kết thúc bằng một .

Ban đầu, chúng tôi chưa xử lý một phần tử mảng, vì vậy L hoàn toàn gồm các số 0.

Khi xử lý phần tử mảng một , trước tiên chúng ta lấy tối đa [L[0],Giáo dục,L[một-1]] , là độ dài của phân đoạn con được sắp xếp dài nhất gặp phải cho đến nay kết thúc bằng một hoặc một số nguyên nhỏ hơn. Việc thêm một mảng như vậy sẽ giữ cho nó được sắp xếp, do đó, phân đoạn con được sắp xếp dài nhất kết thúc bằng một phần tử dài hơn mức tối đa đó. Chúng tôi cập nhật L[một-1] với giá trị được tính toán.

Kết quả cuối cùng là tối đa L .


Bạn có thể vui lòng giải thích, tại sao nó hoạt động? Tôi đang gặp khó khăn để hiểu nó :(
Dead Possum

Tôi đã thêm một lời giải thích.
Dennis


5

Thạch , dài  4  2

ṢƑƇZLƲ}ŒP

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

Byte trong trang mã của Jelly

183 146 144 90 76 169 125 19 80

Làm thế nào nó hoạt động

ṢƑƇ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, điểm 3 2 ( 7 byte)

leSI#y

Lưu lại một điểm nhờ có Anders Kaseorg.
Hãy thử nó ở đây

Giải trình

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#yđiểm 2.
Anders Kaseorg

2

Stax , 4 chiều dài tối đa sắp xếp stalin

S{:^fF%|M

Chạy và gỡ lỗi nó

Nó hoạt động như thế này.

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

2

R , Điểm 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)}

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

Cổng Dennis 'Python trả lời R.


Chỉ thay đổi tên biến sẽ không có ích, vì như liên kết cuối cùng của bạn hiển thị, không có tên nào trong số chúng được sử dụng trong chuỗi con (tìm thấy) cho điểm số 15.
janrjan Johansen

@ RjanJohansen ah, tất nhiên, tôi khá ngu ngốc. Tôi cho rằng một cách tiếp cận khác là cần thiết.
Giuseppe

2

Brachylog , chiều dài 2 (4 byte)

⊇≤₁l

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

Một câu trả lời tạo nên sự súc tích bằng cách không được sắp xếp ngắn hơn nhiều.

( 08 03 80 6Ctrong trang mã của Brachylog)

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

Tôi đã nghĩ ra ►LSnmOṖHusk nhưng điểm số của nó (ít nhất là chiều dài của nó) quá tệ để bận tâm đăng bài ...
Chuỗi không liên quan
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.