Biorąc pod uwagę ciąg, w którym pierwsza linia zawiera spacje i jeden kropka ( .
„kulka”), a następnie linie zawierające spacje, ukośniki do przodu ( /
) i ukośniki odwrotne ( \
), określ, w której kolumnie wyląduje kula po upadku z pozycji początkowej . Każdy /
przesuwa go w lewo o 1 kolumnę i każdy \
przesuwa w prawo o 1 kolumnę.
Przykładowe dane wejściowe
.
/ \ \
/ /
\ \/ \
\ /\
\ /\ \
\ /
Próbka wyjściowa
Piłka zaczyna się w kolumnie 5, uderza /
w linię 3, następnie trzy \
w liniach od 5 do 7, osiągając ostateczną pozycję:
7
Zauważ, że kolumny są indeksowane 1, głównie w celu zachowania spójności z konwencjami edytora tekstu.
Skrzynie na brzeg
Jeśli piłka uderzy /
w pierwszą kolumnę, wiecznie utknie w nieistniejącej kolumnie 0. Twój program powinien sobie z tym poradzić poprawnie, drukując 0
.
Jeśli piłka uderzy w dowolną stronę \/
wzoru, wynik jest niezdefiniowany. Twój program może zakończyć działanie bez wyjścia, zapętlić się w nieskończoność lub wydrukować komunikat o błędzie (moje rozwiązanie drukuje -1
), ale nie może drukować niczego, co mogłoby być postrzegane jako prawidłowe wyjście.
Jeśli piłka uderzy we lewy ukośnik \\
wzorem, powinna skończyć się bezpośrednio pod prawym ukośnikiem, a nie na prawo od niego. Rozwiązanie, które pierwotnie przewidywałem, było skłonne do popełnienia tego błędu, więc nie idź tą drogą!
Mogą występować spacje po .
ostatnim, ostatnim /
lub \
w każdej linii. Twój program nie powinien polegać na dostępności takiego wypełnienia. Na podobnej nuty mogą, ale nie muszą być żadne wiersze po pierwszym wierszu.
Możesz założyć, że pierwszy wiersz będzie miał zero lub więcej spacji i dokładnie jedną .
. Kolejne wiersze, jeśli występują, będą miały zero lub więcej spacji i zero lub więcej ukośników.
Szczegóły dotyczące wdrożenia
Twój program może czytać z pliku (określonego jako argument wiersza poleceń) lub czytać ze standardowego wejścia, dla twojej wygody.
Twój program musi wypisać jedną liczbę na standardowe wyjście. (Tak, końcowy znak nowej linii jest w porządku. Tak, liczba może zawierać więcej niż jedną cyfrę.)
Przypadki testowe
Wejście:
.
Wynik:
1
Zauważ, że dane wejściowe mają dokładnie jeden bajt. Jest to najmniejszy przypadek, z którym powinieneś sobie poradzić.
Wejście:
. \ \ \ \
Wynik:
6
Zauważ, że po tych ukośnikach nie ma spacji.
Wejście:
. / /\\ / \ //\ \/// // \\/ \/\ /\/
Wynik:
0
Wejście:
. / / / \\\ /\\ / \
Wynik:
1
Wejście:
. \ / / \
Wynik:
4
Wejście:
. \ \/\/\/
Wynik:
(anything but a nonnegative number)
Uwagi końcowe
To pytanie jest podobne do Symuluj (oparty na grawitacji) komputer typu kule bilardowe , ale znacznie prostsze, więc mam nadzieję, że zyska większe zainteresowanie.
Mam 169-znakowe rozwiązanie w Pythonie. Jestem pewien, że utalentowani golfiści mogą rozerwać ten rekord na kawałki. : ^)
To jest golf golfowy , więc najkrótsza odpowiedź w postaci zostanie zaakceptowana pod koniec miesiąca!
źródło
Odpowiedzi:
Python, 143B
Używanie sztuczki wcięcia spacji / tabulacji. Nie zrobiłem tu nic szczególnie sprytnego.
F
jest bieżącym indeksem,l
jest bieżącą linią;z
jest niezdefiniowany, więc generuje wyjątek, który zdecydowanie nie jest dodatnią liczbą całkowitą, obsługującą\/
sytuację.źródło
05AB1E , 37 bajtów
Wprowadź jako ciąg wielu wierszy. Wydaje,
\/
jeśli piłka utknęła.Wypróbuj online lub sprawdź wszystkie przypadki testowe .
Wyjaśnienie:
źródło
CJam, 61 bajtów
Jeśli reguła dotycząca
\/
zostanie zniesiona (i nie jesteśmy zobowiązani do jej obsługi), można ją skrócić do 41 bajtów:źródło
Java 10,
213208190 bajtówZgłasza błąd dzielony przez zero, gdy utkniemy w środku
\/
.-5 bajtów dzięki @EdgyNerd .
Wyjaśnienie:
Wypróbuj tutaj.
źródło
Python 3 , 124 bajty
Wypróbuj online!
Działa również w Python 2.
Wyjaśnienie
źródło
J , 95 bajtów
Wypróbuj online!
Zwraca nieskończoność,
_
gdy piłka utknie. Utracono wiele bajtów obsługujących ten specjalny przypadek. W przeciwnym razie jest to mniej więcej prosta redukcja rzędów. Z pewnością można by dalej grać w golfa.źródło