하나는 올라가고 다른 하나는 내려와


20

소개

이 과제에서는 주어진 숫자 시퀀스를 두 개의 하위 시퀀스로 분리 할 수 ​​있는지 여부를 결정하는 것입니다. 하나는 증가하고 다른 하나는 감소합니다. 예를 들어 sequence를 고려하십시오 8 3 5 5 4 12 3. 다음과 같이 두 가지 하위 시퀀스로 나눌 수 있습니다.

  3 5 5   12
8       4    3

첫 번째 행의 하위 시퀀스가 ​​증가하고 두 번째 행의 하위 시퀀스가 ​​감소합니다. 또한이 작업을 효율적으로 수행해야합니다.

입력

입력 한 값은 L0 – 99999 범위의 비어 있지 않은 정수 목록 입니다. 언어의 기본 형식으로 제공되거나 공백으로 구분됩니다.

산출

결과는 L증가하고 감소하는 하위 시퀀스로 나눌 수 있으면 진실한 값이고 , 그렇지 않으면 거짓 값입니다. 하위 시퀀스는 엄격하게 증가 또는 감소 할 필요가 없으며 둘 중 하나는 비어있을 수 있습니다.

규칙과 보너스

전체 프로그램이나 함수를 작성할 수 있습니다. 바이트 수가 가장 적고 표준 허점이 허용되지 않습니다. 또한이 도전에서는 무차별 강제 실행이 금지됩니다. 프로그램은 입력 길이의 다항식 시간으로 실행해야합니다 .

실제로 두 개의 하위 시퀀스를 반환 할 필요는 없지만 그렇게 하면 보너스는 -20 % 입니다. 정적으로 입력 된 언어로 보너스를 쉽게 청구 할 수 있도록 허위 인스턴스에 대해 빈 목록 쌍을 반환하는 것이 허용됩니다.

테스트 사례

input -> None허위 입력 및 정확한 입력 형식으로 input -> inc dec제공됩니다. 여기에는 가능한 한 쌍의 하위 시퀀스 만 제공됩니다. 더있을 수 있습니다.

[4,9,2,8,3,7,4,6,5] -> None
[0,99999,23423,5252,27658,8671,43245,53900,22339] -> None
[10,20,30,20,32,40,31,40,50] -> None
[49,844,177,974,654,203,65,493,844,767,304,353,415,425,857,207,871,823,768,110,400,710,35,37,88,587,254,680,454,240,316,47,964,953,345,644,582,704,373,36,114,224,45,354,172,671,977,85,127,341,268,506,455,6,677,438,690,309,270,567,11,16,725,38,700,611,194,246,34,677,50,660,135,233,462,777,48,709,799,929,600,297,98,39,750,606,859,46,839,51,601,499,176,610,388,358,790,948,583,39] -> None
[0,1,2,3,4] -> [0,1,2,3,4] []
[4,3,2,1,0] -> [] [4,3,2,1,0]
[1,9,2,8,3,7,4,6,5] -> [1,2,3,4,6] [9,8,7,5]
[71414,19876,23423,54252,27658,48671,43245,53900,22339] -> [19876,23423,27658,48671,53900] [71414,54252,43245,22339]
[10,20,30,20,30,40,30,40,50] -> [10,20,20,30,40,40,50] [30,30]
[0,3,7,13,65,87,112,43,22,1] -> [0,3,7,13,65,87,112] [43,22,1]
[7,4,4,7,4,7,7,4,7,4,4,4,7,7] -> [7,7,7,7,7,7,7] [4,4,4,4,4,4,4]
[7,997,991,957,956,952,7,8,21,924,21,923,22,38,42,44,920,49,58,67,71,83,84,85,917,89,907,896,878,878,90,861,115,860,125,128,140,148,858,155,160,836,164,182,826,191,824,805,195,792,205,782,206,210,769,213,756,748,214,745,724,701,234,241,693,268,685,293,679,297,334,671,336,669,341,652,356,648,362,364,370,375,386,630,622,388,389,618,398,408,468,615,470,533,611,539,544,609,586,582,572,565,547,602,536,619,624,528,512,631,640,649,669,671,677,505,678,723,743,489,489,473,454,757,446,445,758,759,764,445,431,770,429,426,418,409,790,383,379,366,363,791,358,795,809,827,835,356,353,841,844,333,867,323,317,879,311,881,309,896,282,281,897,263,904,237,236,226,202,195,914,186,177,917,920,157,926,936,154,138,943,131,945,100,98,947,957,964,95,973,989,57,43,32,21,16,13,11,8,0] -> [7,7,8,21,21,22,38,42,44,49,58,67,71,83,84,85,89,90,115,125,128,140,148,155,160,164,182,191,195,205,206,210,213,214,234,241,268,293,297,334,336,341,356,362,364,370,375,386,388,389,398,408,468,470,533,539,544,586,602,619,624,631,640,649,669,671,677,678,723,743,757,758,759,764,770,790,791,795,809,827,835,841,844,867,879,881,896,897,904,914,917,920,926,936,943,945,947,957,964,973,989] [997,991,957,956,952,924,923,920,917,907,896,878,878,861,860,858,836,826,824,805,792,782,769,756,748,745,724,701,693,685,679,671,669,652,648,630,622,618,615,611,609,582,572,565,547,536,528,512,505,489,489,473,454,446,445,445,431,429,426,418,409,383,379,366,363,358,356,353,333,323,317,311,309,282,281,263,237,236,226,202,195,186,177,157,154,138,131,100,98,95,57,43,32,21,16,13,11,8,0] 

답변:


3

Pyth, 34 바이트

.N|!N|&ghNT:tNhNY&gYhN:tNThN:QZ^T5

테스트 스위트

메모 된 재귀를 사용하여 런타임을 유지합니다. :입력리스트 접미사, 증가 시퀀스의 끝, 감소 시퀀스의 끝을 취하는 3 입력 함수를 정의합니다 .


2

Brachylog , 16 바이트-20 % = 12.8 (그러나 거의 다항식은 아님)

⊇≥₁X&⊇≤₁Y;X.cp?∧

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

호환되는 서브 시퀀스 쌍이 없으면 실패하고 출력 변수가 있으면이를 출력 변수를 통해 출력합니다 (하지만 true.프로그램으로 실행되는 경우 에만 인쇄 됨 ). 나는 말할 거의 Brachylog의 아름다움은 선언적 언어이기 때문에, 방금 변수 사이의 관계를 설명하는 않는 알고리즘을 구현하고 결과에서 크랭크에 컴퓨터를 묻는 방법으로 너무 많은 일을하지 않는 것이 있기 때문에 확실히 다항식하지 . 따라서 이것이 하드 코어 무차별 대입 일 가능성이 있지만, 테스트 케이스를 붙여 넣기에 충분한 시간을 보냈습니다 (두 개는 시간이 초과되었습니다). "최신"목록 의 뒷면에서 .

   X                X is a
 ≥₁                 non-increasing
⊇                   sublist of the input
    &               and
        Y           Y is a
      ≤₁            non-decreasing
     ⊇              sublist of the input
         ;X         which paired with X
           .        is the output variable
            c       which when its elements are concatenated
             p      is a permutation of
              ?     the input
               ∧    which is not unified with the output.

2

하스켈 , 65 바이트

(>[]).foldl(%)[(0,9^6)]
p%x=do(u,d)<-p;[(x,d)|x>=u]++[(u,x)|x<=d]

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

목록을 반복 (u,d)하여 증가하는 시퀀스의 최대 값과 감소하는 시퀀스의 최소값의 가능한 쌍 을 추적합니다 . 각각의 새로운 요소 x을 대체하거나 u또는 d그것이 그 서브 - 시퀀스에 추가되고있는 대응한다. 두 옵션 모두 유효하거나 두 옵션 모두 유효하지 않을 수 있습니다. 결국, 우리는 가능성 목록이 비어 있지 않은지 확인합니다.

초기 경계 (0,9^6)는 문제가 숫자를 0 – 99999 범위로 지정한다는 것을 사용합니다.보다 일반적인 해결책은 (1/0,-1/0)만들 수 (-inf,inf)있습니다.

당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.