Trình tự cắt ngang


11

Trình tự cắt ngang

Đưa ra một danh sách các số nguyên dương A, gọi nó là một chuỗi tăng nếu mỗi phần tử lớn hơn hoặc bằng phần tử trước; và gọi nó là một chuỗi giảm nếu mỗi phần tử nhỏ hơn hoặc bằng phần tử trước.

Một số trình tự tăng dần:

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

Một số trình tự giảm dần:

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

Một chuỗi qua là một danh sách có thể được phân tách ra thành hai subsequences rời nhau, một trong một chuỗi tăng và một khác chuỗi giảm.

Ví dụ: danh sách:

[3,5,2,4,1]

là một chuỗi chéo, vì nó có thể được phân tách thành:

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

ở đâu [3,4]là tăng dần và [5,2,1]là giảm dần. Chúng ta sẽ gọi một cặp như vậy (tăng, giảm) sau đó là sự phân tách của chuỗi chéo.

Danh sách:

[4,5,2,1,3]

không phải là một chuỗi chéo; không có cách nào để phân hủy nó thành một sự gia tăng và giảm dần.

Nhiệm vụ của bạn là viết một chương trình / hàm lấy đầu vào là danh sách các số nguyên dương; và nếu đó là một chuỗi chéo, trả về hai danh sách trong một trong các phân tách của nó; hoặc một số giá trị "falsey" nhất quán nếu danh sách không phải là một chuỗi chéo.

Đây là ; chương trình / chức năng ngắn nhất trong mỗi ngôn ngữ là người chiến thắng.

Quy tắc:

  • Đầu vào là linh hoạt.
  • Các sơ hở thông thường bị cấm.
  • Nếu có nhiều cách hợp lệ để phân tách đầu vào, bạn có thể xuất một hoặc tất cả các cách đó.
  • Định dạng đầu ra cho phân tách là linh hoạt; nhưng nó phải rõ ràng về sự khác biệt giữa hai phần sau.
  • Bạn có thể sử dụng bất kỳ giá trị đầu ra nhất quán nào để chỉ ra rằng đầu vào không phải là một chuỗi chéo; miễn là nó không rõ ràng so với đầu ra cho bất kỳ chuỗi chéo nào. Bạn nên chỉ định giá trị falsey trong câu trả lời của bạn.

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

Sử dụng Falseđể chỉ ra các chuỗi không giao nhau:

[3, 5, 2, 4, 1] => [3, 4], [5, 2, 1]
[3, 5, 2, 4, 4, 1, 1] => [3, 4, 4], [5, 2, 1, 1]

[7, 9, 8, 8, 6, 11] => [7, 8, 8, 11], [9, 6]
[7, 9, 8, 8, 6, 11] => [7, 9, 11], [8, 8, 6] # also valid
[7, 9, 8, 8, 6, 11] => [7, 8, 11], [9, 8, 6] # also valid

[7, 8, 9, 10, 20, 30] => [7, 8, 9, 20, 30], [10]
[7, 8, 9, 10, 20, 30] => [8, 9, 10, 20, 30], [7] # this is also valid

[5, 5, 5] => [5, 5, 5], []

[4, 5, 2, 1, 3] => False
[3, 4, 3, 4, 5, 2, 4] => False

2
Có thể trùng lặp . Chỉ có hai điểm khác biệt tôi thấy là thử thách khác phải được thực hiện trong thời gian đa thức theo độ dài của đầu vào và cho phép giá trị trung thực thay vì hai lần sau (mặc dù trả lại các chuỗi sau sẽ nhận được 20% tiền thưởng). Vẫn có vẻ như là một bản dupe đối với tôi, nhưng tôi sẽ không đập nó.
Kevin Cruijssen

@KevinCruijssen hạn chế thời gian có lẽ là đủ để không biến điều này thành một bản sao.
Nick Kennedy

1
@NickKennedy Có thể vâng, đó là lý do tại sao tôi không kiềm chế nó. :)
Kevin Cruijssen

2
Trường hợp thử nghiệm đề xuất : [3, 5, 2, 4, 4, 1, 1]. Các trường hợp thử nghiệm hiện tại cho phép bạn thoát khỏi >=/ <, khi nó thực sự phải là >=/ <=.
Grimmy

1
@Arnauld: Có, nó có thể là bất kỳ giá trị nào ("falsey" chỉ để nói: thật sai khi đầu vào là một chuỗi chéo).
Chas Brown

Câu trả lời:




1

JavaScript (ES6),  110 105  104 byte

Trả về một [[decreasing], [increasing]]hoặc nếu không có giải pháp.1

f=(a,n,b=[[],[]])=>a.some((v,i)=>[...x=b[i=n>>i&1]].pop()*(x.push(v),i-=!i)>v*i)?n>>a.length||f(a,-~n):b

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

Làm sao?

n02LL

b[0]b[1]in

1i=11i=0

[...x = b[i = n >> i & 1]].pop() * (x.push(v), i -= !i) > v * i

bsome()


1

Haskell, 84 byte

(([],[])#)
(d,i)#(a:b)=(#b)=<<[(d++[a],i)|all(a<=)d]++[(d,i++[a])|all(a>=)i]
p#_=[p]

Trả về danh sách tất cả các (decreasing,increasing)cặp hợp lệ hoặc danh sách trống nếu không có cặp nào như vậy.

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


1

Python 3 , 109 107 byte

def f(l,i=[],d=[]):
 if l:s,*r=l;i and s<i[-1]or f(r,i+[s],d);d and s>d[-1]or f(r,i,d+[s])
 else:print(i,d)

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

Hàm in tất cả các phân tách có thể vào đầu ra tiêu chuẩn. Nếu không có sự phân tách có thể, không có gì được in.

Cảm ơn @Sriotchilism O'Z cổ cho các đề xuất cải tiến.


Chào mừng đến với trang web. Tôi đề nghị làm s<i[-1]hơn là i[-1]>s và tương tự với d[-1]<s , cả hai đều tiết kiệm một byte.
Ad Hoc Garf Hunter

Cám ơn vì sự gợi ý. Tôi đã cập nhật câu trả lời. Có bất kỳ mẫu sao chép ở đây để xuất bản câu trả lời?
Joel

Tôi không chắc ý của bạn là gì? TIO có một mẫu mà bạn dường như đã sử dụng.
Ad Hoc Garf Hunter

Tôi chỉ tạo một liên kết trên TIO và thêm liên kết vào bài đăng của mình. Tôi không sử dụng bất kỳ mẫu nào ở đó. Nó đâu rồi?
Joel

1
@Joel - Ở đầu trang TIO có một biểu tượng trông giống như một số liên kết chuỗi. Bấm vào đó, và sau đó bạn nhận được một trang tùy chọn. Một trong số đó là 'Code Golf Submission'. Điều đó sẽ đưa vào bộ đệm sao chép của bạn những thứ được định dạng bạn muốn! Chào mừng bạn, và giải pháp tốt đẹp!
Chas Brown

0

Brachylog , 17 byte

;Ṣzpᵐz{ℕˢ}ᵐ≤₁ʰ≥₁ᵗ

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

Có lẽ có chỗ đáng kể để chơi gôn này.


2
Bạn đã trả lời thử thách này trước đây , nơi bạn đã thực hiện nó trong 16 byte. ;)
Kevin Cruijssen

Tôi không thể lay chuyển được cảm giác rằng có một cái gì đó tương tự tôi đã làm, nhưng vì một số lý do, tâm trí của tôi đã quyết định nó phải là cái này thay vào đó
Chuỗi không liên quan

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.