Cho một mẫu đại diện cho một danh sách các độ dài và một chuỗi đại diện cho các độ dài đó, chúng có khớp không?
Đối với những người quan tâm, đây là câu hỏi tương đương với việc xác minh nếu một hàng hoặc cột của Nonogram có thể đúng. Tuy nhiên, tôi đã bỏ qua tất cả các ngôn ngữ liên quan đến Nonograms để làm cho câu hỏi bớt khó hiểu hơn đối với những người không quen thuộc với những câu đố này.
Đầu vào
Hai dòng dữ liệu, cách nhau bởi một dòng mới.
Dòng đầu tiên sẽ là một danh sách các số nguyên được phân tách bằng dấu cách, ví dụ:
3 6 1 4 6
Dòng này mô tả một mẫu các không gian có kích thước đầy bằng danh sách số nguyên, được phân tách bằng các khoảng trống có độ dài dương, không xác định mà dòng thứ hai phải khớp. Cũng có thể có khoảng trống ở đầu và cuối chuỗi khớp.
Dòng thứ hai sẽ là một dòng có thể có hoặc không khớp với mẫu trong dòng một. Nó bao gồm toàn bộ các
#
,x
và_
. Dòng này được đảm bảo là ít nhất miễn là tổng của các số nguyên trong dòng đầu tiên, cộng với số lượng số nguyên phân biệt, trừ đi 1, và có thể lâu hơn. Vì vậy, dòng thứ hai trong trường hợp này được đảm bảo dài ít nhất(3+6+1+4+6) + (5) - 1
, hoặc dài 24 ký tự. Dưới đây là ví dụ 24 dòng ký tự khớp với mẫu trong dòng đầu tiên:###_######_#_####_######
Ý nghĩa của các ký hiệu:
#
Điều này đại diện cho một hộp đầyx
Điều này thể hiện một hộp được đánh dấu là "đảm bảo để trống"_
Điều này đại diện cho một hộp không xác định / không đánh dấu.
Mục tiêu
Ý tưởng là:
- Xác thực rằng dòng thứ hai có thể là một hàng hợp lệ đáp ứng mẫu của dòng đầu tiên.
- Bạn phải in một thông báo lỗi rõ ràng (cách bạn chọn để làm điều này tùy thuộc vào bạn; các ví dụ bên dưới viết
ERROR
nhưng không cần phải là 5 ký tự đó) nếu không thể điền vào chỗ trống#
hoặcx
khớp với dấu đầu tiên hàng.
- Bạn phải in một thông báo lỗi rõ ràng (cách bạn chọn để làm điều này tùy thuộc vào bạn; các ví dụ bên dưới viết
- In các chỉ số không có chỉ mục của các số nguyên đã được đặt hoàn toàn trong hàng, được phân cách bằng dấu cách. Nếu có sự mơ hồ, không in chỉ mục .
Ví dụ:
Input: | Output: | Reason:
--------------------------------------------------------------------------
3 6 1 4 6 | 0 1 2 3 4 | This is a complete string that
###x######x#x####x###### | | matches perfectly.
--------------------------------------------------------------------------
1 2 1 | 0 1 2 | There is no ambiguity which filled cells
#____xx___##__x_# | | correspond to which parts of the pattern.
--------------------------------------------------------------------------
1 2 1 | | I don't know whether the filled block is
____#___x | | part of the 1, 2, or 1, so output nothing.
--------------------------------------------------------------------------
1 2 1 | ERROR | The first unknown cell will create a block that
#_#x_# | | matches either 1 1 or 3, but not 1 2.
--------------------------------------------------------------------------
1 2 1 | 0 2 | Even though we know where all the filled cells
#____# | | must be, only 0 and 2 are actually filled here.
--------------------------------------------------------------------------
1 1 1 1 | | There are so many possible ways to do fill this,
__#_______#____ | | we don't know which indices are actually matched.
--------------------------------------------------------------------------
4 4 | | Again, we don't know WHICH 4 is matched here,
______x####________ | | so output nothing.
--------------------------------------------------------------------------
4 4 | 0 | However, here, there's no room for a previous 4,
__x####________ | | so the displayed 4 must be index 0.
--------------------------------------------------------------------------
3 | ERROR | We can't fit a 3 into a space before or after
__x__ | | the x, so this is impossible to match.
--------------------------------------------------------------------------
5 1 3 | 0 | While we can match the 5, we don't know whether
x#####x____#____ | | the single block matches the 1 or the 3.
--------------------------------------------------------------------------
3 2 3 | 1 | The two has been completely placed,
____##x##____ | | even though we don't know which it is.
Quy tắc:
Bạn có thể viết chương trình hoặc hàm , nhận đầu vào dưới dạng Chuỗi được phân tách bằng dòng mới hoặc từ STDIN (hoặc thay thế gần nhất) và trả về đầu ra dưới dạng Chuỗi được phân tách bằng dấu cách hoặc in thành STDOUT (hoặc thay thế gần nhất). Bạn có thể tùy ý bao gồm một dòng mới duy nhất trong đầu ra.
Ngoài ra, các lỗ hổng tiêu chuẩn không còn hài hước sẽ bị cấm .