З огляду на шаблон, що представляє список довжин, і рядок, що представляє ці довжини, чи відповідають вони?
Для зацікавлених це питання, еквівалентне тому, щоб перевірити, чи рядка або стовпчик нонограми може бути правильним. Однак я пропустив усю мову, що стосується Нонограм, щоб зробити питання менш заплутаним для тих, хто не знайомий з цими пазлами.
Вхідні дані
Два рядки даних, розділені новим рядком.
Перший рядок - це розділений пробілом список цілих чисел, наприклад:
3 6 1 4 6
Цей рядок описує візерунок заповнених пробілів розміром, рівним цілому списку, розділених порожніми пробілами невідомої позитивної довжини, яким повинен відповідати другий рядок. Також можуть бути порожні пробіли на початку та в кінці відповідного рядка.
Другий рядок буде рядком, який може або не відповідає шаблону в першому рядку. Вона цілком складається з
#
,x
і_
. Гарантовано, що цей рядок буде принаймні до тих пір, поки сума цілих чисел у першому рядку плюс кількість різних цілих чисел, мінус 1, і може бути довшою. Отже, другий рядок у цьому випадку гарантовано має бути принаймні(3+6+1+4+6) + (5) - 1
або 24 символи. Ось приклад рядка з 24 символів, який відповідає шаблону в першому рядку:###_######_#_####_######
Значення символів:
#
Це являє собою заповнене полеx
Це являє собою поле, позначене як "гарантовано порожнє"_
Це являє собою невідоме / немарковане поле.
Мета
Ідея полягає в тому, щоб:
- Перевірте, що другий рядок може бути дійсним рядком, який відповідає шаблону першого рядка.
- Ви повинні надрукувати однозначне повідомлення про помилку (як ви вирішите це зробити, вирішувати саме вам; приклади, написані нижче,
ERROR
але не потрібно, щоб було ці 5 символів), якщо невідомі пробіли не можуть бути заповнені ні одним,#
ніx
першим. рядок.
- Ви повинні надрукувати однозначне повідомлення про помилку (як ви вирішите це зробити, вирішувати саме вам; приклади, написані нижче,
- Роздрукуйте нульові індекси цілих чисел, які були повністю розміщені в рядку з пробілом. Якщо є неоднозначність, не друкуйте індекс .
Приклади:
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.
Правила:
Ви можете написати програму або функцію , яка отримує вхід у вигляді рядка, обмеженого новим рядком, або від STDIN (або найближчої альтернативи) і повертає вихід у вигляді рядка з обмеженим пробілом або друкує його на STDOUT (або найближчу альтернативу).Ви можете необов'язково включати в висновок один зворотний новий рядок.
Крім того, стандартні лазівки , які не є вже не смішно будуть заборонені .