Một người đi lên, người kia đi xuống


20

Giới thiệu

Trong thử thách này, nhiệm vụ của bạn là quyết định xem một chuỗi số đã cho có thể được tách thành hai chuỗi hay không, một trong số đó đang tăng và số còn lại giảm. Ví dụ, xem xét trình tự 8 3 5 5 4 12 3. Nó có thể được chia thành hai phần sau như sau:

  3 5 5   12
8       4    3

Hàng tiếp theo trên hàng đầu tiên đang tăng và hàng trên hàng thứ hai đang giảm. Hơn nữa, bạn nên thực hiện nhiệm vụ này một cách hiệu quả.

Đầu vào

Đầu vào của bạn là một danh sách Lcác số nguyên không trống trong phạm vi 0 - 99999. Nó được đưa ra ở định dạng gốc của ngôn ngữ của bạn, hoặc đơn giản là giới hạn bởi khoảng trắng.

Đầu ra

Đầu ra của bạn là một giá trị trung thực nếu Lcó thể được chia thành một tăng dần và giảm dần, và một giá trị giả mạo khác. Các phần tiếp theo không cần phải tăng hoặc giảm một cách nghiêm ngặt và một trong hai phần này có thể trống.

Quy tắc và tiền thưởng

Bạn có thể viết một chương trình đầy đủ hoặc một chức năng. Số byte thấp nhất sẽ thắng và các sơ hở tiêu chuẩn không được phép. Hơn nữa, cưỡng bức vũ phu bị cấm trong thử thách này: chương trình của bạn phải chạy trong thời gian đa thức theo độ dài của đầu vào .

Bạn không cần phải thực sự trả lại hai phần sau, nhưng có phần thưởng -20% khi làm như vậy. Để làm cho phần thưởng dễ dàng hơn để yêu cầu bằng các ngôn ngữ được nhập tĩnh, có thể chấp nhận trả về một cặp danh sách trống cho các trường hợp giả mạo.

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

Đưa ra trong định dạng input -> Nonecho đầu vào giả và input -> inc deccho đầu vào trung thực. Chỉ có một cặp thứ tự có thể được đưa ra ở đây; có thể có nhiều hơn

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

Câu trả lời:


3

Bình thường, 34 byte

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

Phòng thử nghiệm

Sử dụng đệ quy ghi nhớ để giữ thời gian chạy. Xác định hàm 3 đầu vào :, lấy hậu tố `liệt kê hậu tố, kết thúc chuỗi tăng, kết thúc chuỗi giảm.


2

Brachylog , 16 byte - 20% = 12.8 (nhưng gần như chắc chắn không phải là đa thức)

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

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

Thất bại nếu không có cặp chuỗi tuân thủ và xuất chúng thông qua biến đầu ra của nó nếu có một (nhưng sẽ chỉ in true.nếu nó chạy như một chương trình). Tôi nói rằng nó gần như không phải là đa thức bởi vì vẻ đẹp của Brachylog là vì nó là ngôn ngữ khai báo, bạn không làm gì nhiều trong cách thực hiện một thuật toán khi bạn chỉ mô tả mối quan hệ giữa các biến và yêu cầu máy tính xử lý kết quả . Vì vậy, rất có thể đây là lực lượng vũ phu, nhưng tôi đã dành thời gian đủ dài để dán các trường hợp thử nghiệm (hai trong số đó chỉ là thời gian chờ đợi) mà tôi cảm thấy mình nên gửi điều này bằng mọi cách, nếu không vì lý do nào khác ngoài việc kéo thử thách này lên từ mặt sau của danh sách "Mới nhất".

   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 byte

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

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

Lặp lại thông qua danh sách, theo dõi các cặp (u,d)tối đa có thể có của chuỗi tăng và min của chuỗi giảm. Mỗi yếu tố mới xthay thế một trong haiu hoặc d, mà tương ứng với nó là append để dãy đó. Nó có thể là cả hai hoặc không có tùy chọn là hợp lệ. Cuối cùng, chúng tôi kiểm tra rằng danh sách các khả năng là không trống.

Các giới hạn ban đầu (0,9^6)sử dụng rằng vấn đề chỉ định các số nằm trong phạm vi 0 - 99999. Một giải pháp tổng quát hơn có thể làm (1/0,-1/0)để thực hiện (-inf,inf).

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.