Któregoś dnia nasz zespół poszedł do pokoju ewakuacyjnego. Jedna z zagadek obejmowała tablicę sześciu mechanicznych przełączników, w której trzeba było znaleźć odpowiednią kombinację włączania i wyłączania, aby odblokować pudełko, mniej więcej tak:
-v-v-v-
-v-v-v-
Jako programiści postanowiliśmy, że bardziej efektywne będzie wypróbowanie każdej z 2 ^ 6 = 64 kombinacji niż rozwiązanie zagadki. Przydzieliliśmy więc jakiegoś biednego faceta do zliczenia binarnego:
-v-v-v-
-v-v-v-
-v-v-v-
-v-v-^-
-v-v-v-
-v-^-v-
-v-v-v-
-v-^-^-
i tak dalej.
Wyzwanie
Napisz program, który, biorąc pod uwagę wszystkie przełączniki w pozycji wyłączonej jako ciąg sformatowany jak powyżej, generuje wszystkie kombinacje włączania i wyłączania w dowolnej kolejności.
Możesz napisać pełny program lub funkcję. W ten sposób twój program może albo pobierać dane wejściowe przez stdin, plik, albo jako pojedynczy ciąg znaków i zwracać lub drukować dane wyjściowe. Jeśli zostanie zwrócone, dane wyjściowe mogą znajdować się w liście / tablicy / itp. zamiast jednego ciągu. Jeśli wynik jest pojedynczym ciągiem, tablice powinny być oddzielone znakami nowej linii (dozwolone są znaki nowej linii).
Ciągi wejściowe będą pasować do wyrażenia regularnego r'((-v)+-)(\n(-v)+-)*'
i będą reprezentować jedną płytkę ze wszystkimi wyłącznikami. Oznacza to brak zerowej wielkości liter, a przełączniki są wyrównane do lewej. Każdy wiersz może nie mieć takiej samej liczby przełączników.
Każda płytka wyjściowa powinna mieć dokładnie taki sam format jak wejście, z tym wyjątkiem, że v można w razie potrzeby zastąpić ^. Tablice wyjściowe można oddzielić dowolną liczbą nowych linii.
Ponieważ środowisko wykonawcze ma naturalnie wartość O (2 ^ n) pod względem liczby przełączników, kod nie będzie testowany na więcej niż 10 przełącznikach w dowolnym układzie.
To jest golf golfowy, więc wygrywa najkrótszy kod w liczbie bajtów.
Przykładowe wejścia i wyjścia
Wkład:
-v-
Możliwe wyjście:
-v-
-^-
Wkład:
-v-
-v-
Możliwe wyjście:
-^-
-^-
-^-
-v-
-v-
-^-
-v-
-v-
Ponieważ sprawdzanie odpowiedzi w przypadku większej liczby przełączników jest niezwykle uciążliwe, oto skrypt w języku Python jako narzędzie do sprawdzania czystości. (Dołączyłem obecnie skomentowany fragment kodu, aby wygenerować oczekiwane dane wyjściowe z danego pliku wejściowego na wypadek, gdybyś chciał więcej przypadków testowych.) Niestety, jest nieco mniej elastyczny pod względem danych wejściowych i wyjściowych niż specyfikacja; umieść ciąg wejściowy w pliku o nazwie „wejście”, a wyjście oddzielone znakiem nowej linii (przepraszam, brak formatowania listy) w pliku o nazwie „wyjście” w tym samym katalogu i uruchom python3 sanitycheck.py
.