To wyzwanie jest związane z Flipping Pancakes .
Być może słyszałeś o sortowaniu naleśników , w którym stos naleśników jest sortowany według rozmiaru, wkładając szpachelkę do stosu i przewracając wszystkie naleśniki nad szpachelką, aż naleśniki zostaną posortowane od najmniejszego do największego na talerzu. Problem przypalonego naleśnika jest nieco inny. Wszystkie naleśniki mają teraz jedną stronę, która jest spalona, a strona przypalona każdego naleśnika musi być zwrócona w stronę talerza po zakończeniu sortowania.
Na przykład, biorąc pod uwagę następujący stos (rozmiar naleśnika po lewej stronie. 0
Oznacza spaloną stronę w dół i 1
oznaczenie spalonej strony w górę):
1 0
3 1
2 1
Możesz przewrócić cały stos, aby uzyskać 20 30 11
, przewrócić dwa górne, aby uzyskać, 31 21 11
i przerzucić cały stos ponownie, aby uzyskać 10 20 30
, posortowany stos przypalonych naleśników. Tę sekwencję ruchów, trzepnięcie 3, trzepnięcie 2, trzepnięcie 3, można przedstawić jako 3 2 3
.
Wyzwanie
- Biorąc pod uwagę tablicę rozmiarów naleśników (niekoniecznie unikatowych) i ich orientację, generuj każdą prawidłową sekwencję sortowania spalonego naleśnika, to znaczy sekwencję przewracania, która prowadzi do sortowania stosu naleśników od najmniejszej do największej ze spalonymi bokami w dół.
- Dane wejściowe i wyjściowe mogą być dowolnym rozsądnym formatem z separatorami, ale określ, jakich formatów używasz, i określ, który koniec formatu wejściowego to górna część stosu (TOS).
- Przerzucanie zerowych naleśników jest dozwolone.
- Dozwolone jest mieszanie separatorów na wejściu / wyjściu.
Przypadki testowe
Dla wszystkich poniższych przypadków testowych wejście to lista, a wyjście to ciąg rozdzielony spacjami, a TOS jest po lewej stronie.
[[1, 0], [3, 1], [2, 1]]
"3 2 3"
[[5, 1], [3, 0], [4, 1], [2, 1], [1, 0]]
"5 3 4 1 3 2 1"
[[5, 1], [3, 0], [3, 0], [1, 1]]
"4 3 2 3"
Jak zawsze, jeśli coś jest niejasne lub niepoprawne, daj mi znać w komentarzach. Powodzenia i dobrej gry w golfa!
0
dozwolona jest lista wyników?CJam (37 bajtów)
Dane wejściowe to tablica w formacie CJam na stdin; wyjście to rozdzielona znakiem nowej linii długość przerzucania na stdout. Górna część stosu znajduje się na indeksie
0
;0
wskazuje spaloną stronę do góry i1
wskazuje spaloną stronę w dół.Demo online
Sekcja
Wyjście zawsze jest
3n
długie, gdzien
jest liczba naleśników. Najpierw podrzucamy największy pozostały naleśnik na górę; wtedy, jeśli jest spalony bokiem do dołu, przewracamy ten jeden naleśnik; a następnie przewracamy na dół i powtarzamy, jakby stos naleśników był o jeden krótszy.źródło
Ruby,
1019593 bajtówNiezbyt golfowy, chciałem tylko stworzyć wariant bogo. Jest to anonimowa funkcja, która pobiera tablicę tablic i drukuje losowe przerzucenia na standardowe wyjście, aż naleśniki zostaną posortowane.
Możesz na przykład przypisać to
f
i powiedziećf.call [[1, 0], [3, 1], [2, 1]]
-5 bajtów od @Jordan z genialnym wykorzystaniem
rassoc
-2 bajtów od @ Sherlock9
źródło
a.all?{...}
je!a.rassoc(1)
.r
)assoc
, ale myśląc o tym, jest to prawdopodobnie przydatne w wielu problemach na tej stronie - uważam, że powinien on przejść do postu z ruby dotyczącymi golfa. W każdym razie dzięki :) Udało mi się także zabić kolejny bajt poprzez zastosowanie prawa deMorgansa i zastąpienieuntil
gowhile
.b
jest tylko kiedykolwiek0
lub1
,1-b
również działałoby i zaoszczędziłoby dwa bajty.