Na talerzu masz stos naleśników z kulką syropu na górze, tak grubą, że nie może spływać po bokach. Nie będziesz zadowolony z jedzenia, dopóki obie twarze każdego naleśnika nie dotkną przynajmniej syropu, ale teraz tylko jedna twarz górnego naleśnika ma.
Wiesz, że syrop nigdy nie będzie moczył nawet jednego naleśnika, ale można go przenosić w nieskończoność poprzez bezpośredni kontakt między dwoma naleśnikami. Gdy twarz naleśnika dotknie syropu, uważa się, że jest pokryta syropem na zawsze, i sprawi, że każda twarz bez syropu, która go dotknie, również będzie pokryta syropem. Możliwe jest również przeniesienie syropu do iz górnej części płytki.
Każdą twarz naleśnika powlekasz syropem, wkładając szpatułkę pod jeden lub więcej naleśników i przewracając je na całej długości, dokładnie tak, jak w przypadku sortowania naleśników . (Niestety, ta szpachelka jest odporna na syrop i nie pomaga w rozprowadzaniu syropu poprzez dotykanie twarzy naleśników.) Niestety nie zdajesz sobie sprawy, które twarze naleśników dotknęły syropu, ale pamiętasz dokonane przewrócenia.
Biorąc pod uwagę poprzednie przejęcia, czy możesz określić, czy wszystkie naleśniki są już pokryte syropem?
Wyzwanie
Napisz program, który przyjmuje dodatnią liczbę całkowitą N dla liczby naleśników, oraz listę dodatnich liczb całkowitych (wszystkie <= N) dla wykonanych do tej pory obrotów. Każda liczba na liście reprezentuje liczbę naleśników, które zostały przerzucone. Podaj prawdziwą wartość, jeśli naleśniki są gotowe do powlekania, i wartość fałsz, jeśli nie. ( definicja prawdy / fałszu )
Dane wejściowe powinny pochodzić ze stdin lub wiersza poleceń, a dane wyjściowe powinny przejść do stdout (lub najbliższych alternatyw). W porządku, jeśli dane wejściowe wymagają trochę dodatkowego formatowania: np. [1, 1, 2, 2]
Zamiast 1 1 2 2
listy.
Przykłady
Załóżmy, że N = 2, więc mamy na stole stos dwóch naleśników, zaczynając od syropu na wierzchu.
Jeśli lista jest 1 1 2 2
, oznacza to, że ...
- odwróć górny naleśnik - pokrywając górną powierzchnię dolnego naleśnika
- ponownie odwróć górę - pokrywając oryginalną dolną powierzchnię górnego naleśnika
- odwróć oba - pokrywając talerz
- odwróć oba ponownie - pokrywając oryginalną dolną powierzchnię dolnego naleśnika
Ponieważ wszystkie cztery twarze są pokryte, wynik będzie podobny do True
lub 1
.
Jeśli lista jest 1 2 2 1
, oznacza to, że ...
- odwróć górny naleśnik - pokrywając górną powierzchnię dolnego naleśnika
- odwróć oba - nic nie pokrywając
- odwróć oba ponownie - nic nie pokrywając
- ponownie odwróć górę - pokrywając oryginalną dolną powierzchnię górnego naleśnika
Ponieważ twarz dotykająca płytki jest nadal wolna od syropu, wynik byłby podobny do False
lub 0
.
Notatki
- Lista flip flip może być dowolnie duża i może być pusta, w którym to przypadku wynik jest fałszywy.
- Talerz działa jak nośnik syropu, ale nie ma znaczenia, czy zostanie pokryty, czy nie. (W rzeczywistości każde rozwiązanie typu flip będzie powlekało talerz, ponieważ dotykana powierzchnia naleśnika musi być pokryta, ale niezależnie od tego.)
- Talerza nie można odwrócić.
- Możesz założyć, że te naleśniki to dyski jednostkowe bez stron, o których można mówić, tylko dwie przeciwległe ściany.
Punktacja
To jest golf golfowy. Najkrótsze rozwiązanie w bajtach wygrywa.
Put syrup on the pancakes!
)