"정렬"알고리즘


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

3
한마디로 : 가장 긴 (엄격하게) 증가하는 시퀀스 의 길이를 출력하십시오 .
user202729

1
"프로그램 자체가 비어 있지 않으면 빈 목록을 지원할 필요가 없습니다."라는 규칙이 마음에 듭니다.
파올로 에베 르 만

이 도전은 많은 droport 도전을 생각 나게한다 : 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))

종료 코드를 통해 출력됩니다.

온라인으로 사용해보십시오!

작동 원리

항상 배열 은 지금까지 발생한 가장 긴 정렬 된 하위 배열을 추적합니다. [에이1]에이 끝나는 가장 긴 길이입니다 .

처음에는 배열 요소를 처리하지 않았으므로 은 완전히 0으로 구성됩니다.

에이[[0],,[에이1]]에이에이에이[에이1]


왜 작동하는지 설명해 주시겠습니까? 나는 그것을 이해하기 힘든 시간을 보내고있다 :(
Dead Possum

설명을 추가했습니다.
Dennis


5

젤리 , 길이  4  2

ṢƑƇZLƲ}ŒP

온라인으로 사용해보십시오!

젤리 코드 페이지의 바이트

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.




2

Stax , 4 최대 길이 스탈린 정렬

S{:^fF%|M

실행 및 디버깅

이렇게 작동합니다.

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

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

온라인으로 사용해보십시오!

R에 대한 포트 데니스의 파이썬 답변


마지막 링크에서 알 수 있듯이 변수 이름을 변경해도 도움이되지 않습니다. 그 중 어느 것도 점수 15를 제공하는 (찾은) 하위 문자열에 사용되지 않기 때문입니다.
Ørjan Johansen

@ ØrjanJohansen 아, 물론, 나는 오히려 바보입니다. 다른 접근 방식이 필요하다고 생각합니다.
Giuseppe

2

Brachylog , 길이 2 (4 바이트)

⊇≤₁l

온라인으로 사용해보십시오!

훨씬 짧게 분류되지 않아서 간결하게되는 답변입니다.

( 08 03 80 6CBachylog의 코드 페이지에서)

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

나는 ►LSnmOṖ허 스크를 생각해 냈지만 그 점수 (최소한의 길이)는 게시하기에 너무 나쁘다 ...
Unrelated String
당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.