Biri yükselir, diğeri düşer


20

Giriş

Bu zorlukta göreviniz, belirli bir sayı dizisinin biri artmakta diğeri azalmakta olan iki alt diziye ayrılabilip ayrılamayacağına karar vermektir. Örnek olarak, diziyi düşünün 8 3 5 5 4 12 3. Aşağıdaki gibi iki alt bölüme ayrılabilir:

  3 5 5   12
8       4    3

İlk satırdaki alt çizgi artıyor ve ikinci satırdaki alt çizgi azalıyor. Ayrıca, bu görevi etkili bir şekilde yerine getirmelisiniz.

Giriş

LGirişiniz, 0 - 99999 (dahil) aralığında olmayan , tam olmayan bir tamsayı listesidir . Dilinizin yerel biçiminde veya yalnızca boşluklarla sınırlandırılmış olarak verilir.

Çıktı

İşletme çıkış durumunda truthy değeri Lartan ve azalan bir alt sekansını, ve aksi takdirde falsy değer haline kırılabilir. Alt dizilerin kesin olarak artması veya azalması gerekmez ve bunlardan herhangi biri boş olabilir.

Kurallar ve bonuslar

Tam bir program veya işlev yazabilirsiniz. En düşük bayt sayısı kazanır ve standart boşluklara izin verilmez. Ayrıca, bu zorlamada kaba zorlama yasaktır: programınız, girdi uzunluğunda polinom zamanda çalışmalıdır .

İki alt diziyi gerçekten döndürmeniz gerekmez, ancak bunu yapmak için % -20 bonusu vardır . Bonusun statik olarak yazılan dillerde talep edilmesini kolaylaştırmak için, sahte örnekler için bir çift boş liste döndürmek kabul edilebilir.

Test senaryoları

input -> NoneYanlış girişler ve doğru girişler biçiminde verilmiştir input -> inc dec. Burada yalnızca bir olası alt çift verilir; daha fazlası olabilir.

[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] 

Yanıtlar:


3

Pyth, 34 bayt

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

Test odası

Çalışma zamanını düşük tutmak için kaydedilmiş özyineleme kullanır. :Liste soneki, artan sekansın sonu, azalan sekansın sonu alan 3 giriş fonksiyonunu tanımlar .


2

Brachylog , 16 bayt -% 20 = 12,8 (ancak neredeyse kesinlikle polinom değil)

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

Çevrimiçi deneyin!

Uyumlu çiftler yoksa başarısız olur ve varsa çıkış değişkeni aracılığıyla çıktılar (ancak true.bir program olarak çalıştırılırsa yazdırılır ). Ben neredeyse kesinlikle polinom olmadığını söylüyorum, çünkü Brachylog'un güzelliği, beyan edici bir dil olduğu için, sadece değişkenler arasındaki ilişkileri tanımlamak ve bilgisayardan sonuçları krank etmesini istemek gibi bir algoritma uygulama yolunda çok fazla şey yapmamanızdır. . Bu yüzden bu sert kaba kuvvettir, ancak test senaryolarını (ikisi sadece zaman aşımına) yapıştıracak kadar uzun bir kopya harcadım, bu zorluğu yukarı sürüklemekten başka bir sebep yoksa bunu yine de göndermem gerektiğini hissediyorum. "Yeni" listesinin arkasından .

   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

Haskell , 65 bayt

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

Çevrimiçi deneyin!

Liste boyunca yinelenerek (u,d), artan sekansın maksimum ve azalan sekansın minörlerinin olası çiftlerini takip eder . Her yeni eleman , xya uda yerine dgeçerek o alt dizinin sonuna eklenir. Her iki seçeneğin de veya her ikisinin de geçerli olmaması olabilir. Sonunda, olasılıklar listesinin boş olmadığını kontrol ediyoruz.

İlk sınırlar (0,9^6), sorunun 0 - 99999 aralığında sayıları belirtmesini kullanır. Daha genel bir çözüm yapmak (1/0,-1/0)için yapabilir (-inf,inf).

Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.