Moje przewody są splątane!
Czy to nie denerwujące, gdy wszystkie przewody się zaplątują? To właśnie mi się przydarzyło, więc chciałbym pomóc mi je rozwiązać! Dla Twojej wygody odłączyłem je wszystkie od urządzenia, ale nadal wszystkie są podłączone do gniazdka. Twoim zadaniem jest dowiedzieć się, jak je rozwiązać!
Wejście
Dane wejściowe będą składały się ze spacji, potoków i znaków X (oba przypadki). Dane wejściowe będą wyglądać mniej więcej tak:
| | | |
X | |
| | x
| X |
| | | |
Wielka litera X oznacza, że lewy drut przecina prawy drut, a mała litera x oznacza coś przeciwnego. Pierwszy i ostatni wiersz zawsze będą | | | |...
. Możesz wziąć dane wejściowe jako ciąg rozdzielany przecinkami, tablicę ciągów itp. Format nie jest ścisły, o ile ma sens i nie zawiera żadnych dodatkowych informacji.
Wynik
Aby sprostać temu wyzwaniu, muszę nie tylko wiedzieć, ile czasu zajmie, ale muszę dokładnie wiedzieć, co robić. Tak więc wypisz listę par liczb całkowitych ze znakiem R lub L, bez rozróżniania wielkości liter, co oznacza, które dwa druty należy rozplątać i w którą stronę (R oznacza od prawej do lewej i odwrotnie dla L). Musisz mi powiedzieć, w jaki sposób je przekreślić; Nie potrafię tego rozgryźć. Dane wyjściowe są również dość elastyczne, pod warunkiem, że wypisujesz wszystkie pary liczb całkowitych + znak we właściwej kolejności i nie wypisujesz żadnego dodatkowego nonsensownego tekstu (nawiasy kwadratowe, przecinki itp. Są w porządku). Druty mogą mieć zero lub jeden indeks, ale indeks musi zaczynać się od lewej. Pamiętaj, że musisz rozplątać od dołu, a nie od góry. Styl wyjściowy musi być spójny, a jeśli nie jest to oczywiste, określ sposób drukowania. Przypadek postaci nie jest spójny,
Przykładowe dane wyjściowe
W powyższym przykładzie dane wyjściowe wyglądałyby następująco:
2 3 R
3 4 L
1 2 R
Format wyjściowy to lista rozdzielonych spacjami wartości nowego wiersza. Jest to indeks 1.
Dalsze specyfikacje
Prawidłowe jest ustawienie X i X pionowo na sobie w dowolnej kolejności. Ponieważ jestem leniwy, nie chcę niepotrzebnie zamieniać przewodów, więc nie wysyłaj niczego w tych przypadkach; jeśli to znajdę, delikatnie pociągnę za przewody, aby wyprostować je.
Prawidłowe jest również ustawienie wielu X i X w stosie w pionie i dopóki żaden drut nie jest zaangażowany w inne skrzyżowania, nie chcę żadnych dodatkowych ruchów (ponieważ jestem leniwy). Tak więc, jeśli znaki X X x X x x
pojawiają się w kolumnie bez innych skrzyżowań, dane wyjściowe powinny być puste!
W przypadku, gdy nie jest to jasne, R eliminuje X, a L eliminuje x.
W tym samym rzędzie mogą znajdować się dwa skrzyżowania przewodów, w takim przypadku kolejność tych dwóch zamian nie ma znaczenia. Nigdy nie dostaniesz czegoś takiego | X X |
(to nie ma sensu, ponieważ sugeruje, że środkowy drut przecina się po drutach zarówno po jego lewej, jak i prawej stronie).
Nie zawsze są skrzyżowania ...
Wejściem może być pojedyncza rura. Jednak dane wejściowe nigdy nie będą puste.
Najkrótsze ważne rozwiązanie wygrywa 20 grudnia!
Więcej przykładów
Tak jak obiecałam:
Przykład 1
Wejście
| | | | | |
| | X x
X | x |
| x | X
X X | |
| | | | | |
Wynik
1 2 R
3 4 R
2 3 L
5 6 R
1 2 R
4 5 L
3 4 R
5 6 L
Przykład 2
Wejście
| | |
X |
| x
| | |
| X
| x
| | |
Wynik
2 3 L
1 2 R
Przykład 3
Wejście
|
Dane wyjściowe są puste. Tak, musisz poradzić sobie z tą sprawą.
Przykład 4
Wejście
| |
X
x
X
x
X
x
X
x
X
x
| |
Dane wyjściowe są puste. Dla żartu :).
Przykład 5
Wejście
| |
X
X
x
X
x
x
| |
Dane wyjściowe są nadal puste ...
Odpowiedzi:
Befunge, 173 bajtów
Dane wejściowe są odczytywane ze standardowego wejścia w dokładnym formacie podanym w opisie wyzwania, chociaż ważne jest, aby każda linia miała prawidłową długość, a ostatnia linia musi zawierać nową linię (tj. Nie tylko EOF na końcu tej linii).
Wypróbuj online!
Podstawową ideą tego rozwiązania jest to, że mamy „tablicę” śledzącą liczbę skrętów dla każdego drutu. Tak więc za każdym razem, gdy napotkamy skręt w jednym kierunku, zwiększamy liczbę powiązanych drutów, podczas gdy skręt w drugim kierunku zmniejsza liczbę.
W tym samym czasie, gdy przetwarzamy skręt dla konkretnego drutu, patrzymy również na liczbę skrętów dla drutów po jego lewej i prawej stronie. Jeśli którykolwiek z nich nie jest równy zero, musimy „spłukać” te zwroty na stosie, ponieważ nie będzie już możliwe ich odkręcenie przez późniejsze zwroty w przeciwnym kierunku.
Po ostatnim wierszu wejścia strumień wejściowy zwraca EOF wielokrotnie, a te znaki EOF są interpretowane jako skręty w każdym przewodzie, przynajmniej do celów płukania. Zmusza to program do opróżnienia wszystkich zaległych zliczeń w tablicy, ale nie wygeneruje żadnych nowych zliczeń skrętów.
Po zakończeniu przetwarzania danych wejściowych wszystkie polecenia rozplątywania przewodów będą teraz na stosie. Oznacza to, że możemy je po prostu zdjąć w odwrotnej kolejności, aby wyświetlić instrukcje potrzebne do rozplątania przewodów od dołu do góry.
źródło
Pyth -
2625 bajtówBardzo prosto, może uda mi się pograć w filtrowanie.
Wypróbuj online tutaj .
źródło
in
, naprawiłam i to też uratowało mi bajtJavaScript (ES6), 178 bajtów
Pobiera dane wejściowe jako tablicę ciągów reprezentujących linie i zwraca tablicę tablic wartości, np
[[2, 3, "R"], [3, 4, "L"], [1, 2, "R"]]
. Odwrotna kolejność pomaga w eliminacjach.źródło
s
? Używam go na repl.it i to mówi mi, że jestReferenceError: s is not defined
.Python 2,
244241 bajtówPobiera dane wejściowe jako listę ciągów
Przykład:
Wejście:
['| | | |', ' X | |', '| | x ', '| X |', ' x | |']
Wynik:
[[1, 2, 'L'], [2, 3, 'R'], [3, 4, 'L'], [1, 2, 'R']]
Edycja: Naprawiono dla przypadku:
Wejście:
['| | |', ' X |', ' X |', ' x |', '| X', ' X |', ' x |', ' x |', '| | |']
Wynik:
[[1, 2, 'L'], [2, 3, 'R'], [1, 2, 'R']]
źródło