Алгоритм "сортування"


33

Існує "алгоритм сортування", який іноді називають сортом Сталіна, в якому для сортування списку ви просто вилучаєте елементи зі списку, поки він не буде відсортований у порядку збільшення. Наприклад, список

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

Коли "сортується" за допомогою Сталіна сортування стає

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

Трійку вилучили, бо вона вийшла з ладу.

Зараз очевидно, що існує багато способів видалення елементів для сортування списку. Наприклад, будь-який список з менш ніж двома елементами повинен бути відсортований, тому просто видаляючи достатньо елементів наосліп, ми завжди можемо сортувати список. Оскільки це справа, ми дбаємо лише про якомога довший результат сталінського роду.

Вашим завданням буде скласти список натуральних чисел і вивести довжину найдовшого відсортованого (зростаючого) списку, до якого можна дійти, видаливши елементи з вихідного списку. Тобто знайдіть довжину найдовшого відсортованого (можливо, безперервного) підспису.

Відсортовані списки можуть мати один і той же елемент більше одного разу підряд. Вам не потрібно підтримувати порожній список, якщо сама програма не порожня.

Оцінка балів

Ваша відповідь буде оцінена за довжиною власного найдовшого сталінського роду. Програми будуть інтерпретуватися як послідовність байтів, а не символів, а їх порядок буде природним, що виникає, інтерпретуючи байти як числа. Нижчі бали кращі.

Це не

Ось акуратний інструмент, який допоможе вам оцінити свої відповіді.

Тестові справи

[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


1
Мені подобається правило "Вам не потрібно підтримувати порожній список, якщо сама програма не порожня".
Paŭlo Ebermann

Цей виклик мені дуже нагадує виклик, що випадає: codegolf.stackexchange.com/questions/61808/…
Stefnotch

1
Я зробив перевірку на ptpb.pw/SVSt.html . Все ще не дуже функціонально, але це працює. (TODO: * гістограма * розділ на найменш зменшувані послідовності * підтримка інших кодових сторінок)
user202729

@ user202729 Класно! Я додав це до публікації. Сміливо редагуйте новіші версії, якщо це необхідно.
Пшеничний майстер

Відповіді:


8

Пітон 2 , довжина 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))

Вихід здійснюється через код виходу.

Спробуйте в Інтернеті!

Як це працює

У будь-який час масив L відслідковує найдовші відсортовані підмножини, що зустрічаються досі; L[а-1] - довжина найдовшої, яка закінчується а .

Спочатку ми не обробляли елементи масиву, тому L складається повністю з нулів.

а[L[0],,L[а-1]]аааL[а-1]

L


Чи можете ви поясніть, чому це працює? Мені важко зрозуміти це :(
Dead Possum

Я додав пояснення.
Денніс




4

Желе , довжина  4  2

ṢƑƇZLƲ}ŒP

Спробуйте в Інтернеті!

Байти на кодовій сторінці Jelly

183 146 144 90 76 169 125 19 80

Як це працює

ṢƑƇ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, оцінка 3 2 ( 7 байт)

leSI#y

Зберегли бал завдяки Андерсу Касеоргу.
Спробуйте тут

Пояснення

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бали 2.
Андерс Касеорг


2

R , оцінка 15 11, 72 62 байт

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

Спробуйте в Інтернеті!

Порт Денніс 'Питон відповідь Р.


Просто зміна імен змінних не допоможе, оскільки, як показує ваше останнє посилання, жодне з них не використовується в (знайденій) підрядці, що дає бал 15.
Ørjan Johansen

@ ØrjanJohansen ах, звичайно, я досить німий. Я вважаю, що потрібен інший підхід.
Джузеппе

2

Брахілог , довжина 2 (4 байти)

⊇≤₁l

Спробуйте в Інтернеті!

Відповідь, яка компенсує бути настільки стислою, не сортуючись значно коротше.

( 08 03 80 6Cна кодовій сторінці Брахілога)

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

Я придумав ►LSnmOṖХеск, але його оцінка (принаймні для його довжини) занадто погана, щоб турбувати публікацію ...
Непов'язаний рядок
Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.