Hãy xem xét một loạt các số nguyên:
[1, 0, 9, 1, 3, 8]
Có rất nhiều cách để phân vùng danh sách này thành các danh sách con liên tiếp. Đây là ba:
A: [[1, 0, 9], [1, 3, 8]]
B: [[1], [0, 9], [1, 3], [8]]
C: [[1, 0], [9, 1], [3, 8]]
Chúng tôi sẽ gọi một phân vùng Y và sàng lọc một phân vùng X khác nếu X có thể được lấy từ Y bằng cách nối một số danh sách con của nó lại với nhau.
Vì vậy, B
một sàng lọc của A
: nếu chúng ta tham gia hai danh sách đầu tiên và hai danh sách con cuối cùng trở lại với nhau, chúng ta có được A
. Nhưng C
là không một sự tinh tế của A
: chúng ta sẽ phải chia tay sự 9
và 1
để thu hồi A
từ nó. Ngoài ra, bất kỳ phân vùng là tầm thường của chính nó.
Lưu ý rằng chúng tôi không được phép sắp xếp lại bất kỳ danh sách con hoặc thành phần nào tại bất kỳ thời điểm nào.
Các thách thức
Đưa ra hai phân vùng (danh sách danh sách các số nguyên) X
và Y
, xác định xem có phải Y
là sàng lọc hay không X
.
Bạn có thể giả định rằng các phân vùng sẽ chỉ chứa các số nguyên từ 0
đến 9
, bao gồm. Bạn không được cho rằng X
và Y
là các phân vùng của cùng một danh sách (nếu chúng không có, chúng cũng không phải là các sàng lọc của nhau). X
và / hoặc Y
có thể trống nhưng sẽ không bao giờ chứa danh sách con trống.
Bạn có thể viết chương trình hoặc hàm, lấy đầu vào qua STDIN (hoặc thay thế gần nhất), đối số dòng lệnh hoặc đối số hàm và xuất kết quả qua tham số STDOUT (hoặc thay thế gần nhất), tham số trả về hàm hoặc tham số hàm (out).
Đầu vào có thể được thực hiện trong bất kỳ định dạng chuỗi hoặc danh sách thuận tiện. Vì các phần tử sẽ chỉ là số nguyên một chữ số, bạn có thể chọn bỏ qua một dấu phân cách trong danh sách phụ, nhưng hãy đảm bảo rằng các số đứng đầu 0
là có thể. Bạn có thể chọn lấy X
và Y
theo thứ tự ngược lại.
Đầu ra phải là sự thật nếu Y
là một sàng lọc X
và giả mạo khác.
Mã của bạn phải có khả năng giải quyết từng trường hợp thử nghiệm bên dưới trong 1 giây trên máy tính để bàn hợp lý. (Đây chỉ là một kiểm tra vệ sinh để tránh các giải pháp vũ phu đơn giản.)
Đây là mã golf, vì vậy câu trả lời ngắn nhất (tính bằng byte) sẽ thắng.
Các trường hợp thử nghiệm
Mỗi trường hợp thử nghiệm là trên dòng riêng của nó, được viết là X Y
. Tôi đang sử dụng ký hiệu mảng theo kiểu GolfScript / CJam để tiết kiệm một số không gian ngang:
Sự thật:
[] []
[[0]] [[0]]
[[1 0 9 1 3 8]] [[1 0 9] [1 3 8]]
[[1 0 9 1 3 8]] [[1 0 9 1 3] [8]]
[[1 0 9 1 3 8]] [[1] [0] [9] [1] [3] [8]]
[[1 0 9] [1 3 8]] [[1 0 9] [1 3 8]]
[[1 0 9] [1 3 8]] [[1] [0 9] [1 3] [8]]
[[9 8 8 5 8 2 7] [5] [1 4] [2 0 0 6 0 8 4 2 6 4 2 3 7 8 7 3 9 5 7 9 8 2 9 5] [3 9 8] [7 1 4 9 7 4 5 9] [3 3 3] [9 0 7 8] [3 9 4 7 2 7 8 0 3 0] [8 2 2 7 3 9 3 2] [2 9 0 8 5 4 1 8 5 5 6 2 0 9 2 7 7 9 2 7] [3 6] [1 2 7 7 4 4 2 9]] [[9 8] [8] [5 8 2] [7] [5] [1 4] [2] [0 0 6] [0] [8 4 2] [6 4] [2] [3] [7 8] [7 3] [9] [5 7 9] [8 2] [9 5] [3] [9 8] [7 1 4] [9 7] [4 5 9] [3 3] [3] [9 0] [7 8] [3] [9] [4] [7 2] [7 8] [0] [3 0] [8 2] [2] [7 3] [9 3] [2] [2] [9] [0] [8 5 4] [1 8] [5 5] [6] [2 0] [9] [2] [7 7 9] [2 7] [3 6] [1 2] [7 7] [4 4 2] [9]]
Giả mạo:
[[0]] []
[[0]] [[1]]
[[1 0 9]] [[1 0 9] [1 3 8]]
[[1 0 9] [1 3 8]] [[1 0 9 1 3 8]]
[[1 0 9] [1 3 8]] [[1 0 9]]
[[1 0 9] [1 3 8]] [[1 0] [9]]
[[1 0 9] [1 3 8]] [[1 0] [9 1] [3 8]]
[[1] [0 9] [1 3] [8]] [[1 0 9] [1 3 8]]
[[9 8 8 5 8 2 7] [5] [1 4] [2 0 0 6 0 8 4 2 6 4 2 3 7 8 7 3 9 5 7 9 8 2 9 5] [3 9 8] [7 1 4 9 7 4 5 9] [3 3 3] [9 0 7 8] [3 9 4 7 2 7 8 0 3 0] [8 2 2 7 3 9 3 2] [2 9 0 8 5 4 1 8 5 5 6 2 0 9 2 7 7 9 2 7] [3 6] [1 2 7 7 4 4 2 9]] [[9 8] [8] [5 8 2] [7] [5 1] [4] [2] [0 0 6] [0] [8 4 2] [6 4] [2] [3] [7 8] [7 3] [9] [5 7 9] [8 2] [9 5] [3] [9 8] [7 1 4] [9 7] [4 5 9] [3 3] [3] [9 0] [7 8] [3] [9] [4] [7 2] [7 8] [0] [3 0] [8 2] [2] [7 3] [9 3] [2] [2] [9] [0] [8 5 4] [1 8] [5 5] [6] [2 0] [9] [2] [7 7 9] [2 7] [3 6] [1 2] [7 7] [4 4 2] [9]]
Bảng xếp hạng
Dưới đây là Stack Snippet để tạo cả bảng xếp hạng thông thường và tổng quan về người chiến thắng theo ngôn ngữ.
Để đảm bảo rằng câu trả lời của bạn hiển thị, vui lòng bắt đầu câu trả lời của bạn bằng một tiêu đề, sử dụng mẫu Markdown sau:
# Language Name, N bytes
nơi N
là kích thước của trình của bạn. Nếu bạn cải thiện điểm số của mình, bạn có thể giữ điểm số cũ trong tiêu đề, bằng cách đánh bại chúng thông qua. Ví dụ:
# Ruby, <s>104</s> <s>101</s> 96 bytes
<script>site = 'meta.codegolf'; postID = 5314; isAnswer = true; QUESTION_ID = 51719</script><script src='https://ajax.googleapis.com/ajax/libs/jquery/2.1.1/jquery.min.js'></script><script>jQuery(function(){var u='https://api.stackexchange.com/2.2/';if(isAnswer)u+='answers/'+postID+'?order=asc&sort=creation&site='+site+'&filter=!GeEyUcJFJeRCD';else u+='questions/'+postID+'?order=asc&sort=creation&site='+site+'&filter=!GeEyUcJFJO6t)';jQuery.get(u,function(b){function d(s){return jQuery('<textarea>').html(s).text()};function r(l){return new RegExp('<pre class="snippet-code-'+l+'\\b[^>]*><code>([\\s\\S]*?)</code></pre>')};b=b.items[0].body;var j=r('js').exec(b),c=r('css').exec(b),h=r('html').exec(b);if(c!==null)jQuery('head').append(jQuery('<style>').text(d(c[1])));if (h!==null)jQuery('body').append(d(h[1]));if(j!==null)jQuery('body').append(jQuery('<script>').text(d(j[1])))})})</script>
[[[1 0 9] [1 3 8]] [[1] [0 9] [1 3] [8]]]
hoặc[["109" "138"] ["1" "09" "13" "8"]]
là một định dạng đầu vào chấp nhận được?