Biorąc pod uwagę wzorzec reprezentujący listę długości i ciąg reprezentujący te długości, czy pasują do siebie?
Dla zainteresowanych jest to pytanie równoważne ze sprawdzeniem, czy wiersz lub kolumna Nonogramu może być poprawna. Jednak pominąłem wszystkie języki związane z Nonogramami, aby pytanie było mniej mylące dla osób niezaznajomionych z tymi zagadkami.
Wejście
Dwie linie danych oddzielone znakiem nowej linii.
Pierwszy wiersz będzie oddzieloną spacjami listą liczb całkowitych, przykład:
3 6 1 4 6
Ten wiersz opisuje wzór wypełnionych spacji o wielkości równej liście liczb całkowitych, oddzielonych pustymi spacjami o nieznanej , dodatniej długości, które musi dopasować drugi wiersz. Mogą być również puste spacje na początku i na końcu dopasowanego łańcucha.
Druga linia będzie linią, która może, ale nie musi, pasować do wzorca w linii pierwszej. Składa się wyłącznie z
#
,x
, i_
. Ta linia jest gwarantowana być co najmniej tak długo, jak suma liczb w pierwszym wierszu, powiększonej o liczbę różnych liczb, minus 1, a może dłużej. Zatem w tym przypadku druga linia ma co najmniej(3+6+1+4+6) + (5) - 1
24 znaki. Oto przykładowa 24-znakowa linia, która pasuje do wzorca w pierwszym wierszu:###_######_#_####_######
Znaczenie symboli:
#
To reprezentuje wypełnione polex
To pole oznaczone jako „z pewnością puste”_
To reprezentuje nieznane / niezaznaczone pole.
Cel
Chodzi o:
- Sprawdź, czy drugi wiersz może być prawidłowym wierszem, który spełnia wzór pierwszego wiersza.
- Musisz wydrukować jednoznaczny komunikat o błędzie (w jaki sposób wybrać, aby zrobić to do ciebie; poniższe przykłady zapisu
ERROR
, ale nie muszą być te 5 znaków) Jeżeli nieznane przestrzenie nie mogą być wypełnione albo z#
albox
dopasować pierwszy linia.
- Musisz wydrukować jednoznaczny komunikat o błędzie (w jaki sposób wybrać, aby zrobić to do ciebie; poniższe przykłady zapisu
- Wydrukuj indeksowane zero indeksy liczb całkowitych, które zostały całkowicie umieszczone w wierszu, rozdzielone spacjami. W przypadku niejasności nie drukuj indeksu .
Przykłady:
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.
Zasady:
Możesz napisać program lub funkcję , która odbiera dane wejściowe jako ciąg rozdzielany znakiem nowej linii lub ze STDIN (lub najbliższej alternatywy) i zwraca dane wyjściowe jako ciąg rozdzielany spacjami lub drukuje je do STDOUT (lub najbliższej alternatywy).Opcjonalnie możesz dołączyć jeden końcowy znak nowej linii do wyniku.
Dodatkowo zakazane są standardowe luki, które nie są już śmieszne .