Wyzwanie
Utwórz funkcję, która po wprowadzeniu danych ASCII (kierowanie ścieżką, która może ostatecznie zapętlić), wyświetla długość pętli (jeśli taka istnieje) i długość „ogona” prowadzącego do pętli w jednym z formularze poniżej.
Wejście
Dane wejściowe należy przekazać do funkcji. Poniżej znajduje się przykład prostego wejścia.
# --> # --> #
^ |
| |
| v
# <-- #
Możesz wizualizować powyższe bloki w ten sposób
„Ogon” jest jednym przedmiotem, a pętla ma cztery długości.
Trudniejszy:
# --> # --> #
^ |
| |
| v
# --> # <-- # # --> #
^ ^ |
| | |
| | v
# --> # # <-- # <-- #
Wynik
Musisz wyprowadzać dane przez STDOUT lub najbliższą alternatywę dla twojego języka.
Dwie wyjściowe liczby całkowite powinny mieć długość ogona i długość pętli. Ten wynik może mieć dwie formy.
- ciąg rozdzielany spacjami:
"2 10"
- tablica liczb całkowitych:
[2, 10]
Zasady
Każdy blok, lub
#
, będzie miał tylko jedną ścieżkę od siebie.Każda strzała to dwa segmenty linii i jedna głowa.
Blok początkowy zawsze będzie znajdować się w lewej kolumnie.
Wejście nigdy nie będzie tylko pętlą.
Przykład
# --> # --> # --> #
^ ^ |
| | |
| | v
# # <-- # <-- #
Ten ma długość ogona 2 i długość pętli 6. Poniżej ogon i pętla są oddzielone.
Ogon
# -->
^
|
|
#
Pętla
# --> # --> #
^ |
| |
| v
# <-- # <-- #
Prawidłowe dane wyjściowe to [2, 6]
i "2 6"
.
Jeśli wejście jest tylko ogonem , długość pętli wynosi zero.
# --> # --> # --> #
|
|
v
<-- # <-- #
Prawidłowe dane wyjściowe dla powyższego wejścia to [6, 0]
i"6 0"
źródło
Odpowiedzi:
JavaScript (ES6), 221
229Funkcja z wejściem jako parametrem, wyprowadzana jako ciąg znaków przez wyskakujące okienko (alert).
Skanuj wielokrotnie dane wejściowe:
na każdym kroku
Gdy nie ma już więcej ogona do usunięcia, liczba kroków do tej pory jest rozmiarem ogona, a liczba pozostałych „# jest rozmiarem pętli.
Wszystkie nowe linie w backticks są znaczące i liczone
Przetestuj poniższy fragment kodu w przeglądarce Firefox (nie w Chrome, ponieważ nie obsługuje
...
)źródło
Rubinowy,
287278 bajtówWypróbuj tutaj .
To tworzy skrót (słownik) węzłów. Dla każdego węzła zapisywana jest liczba połączeń przychodzących i (ewentualnie zerowy) następny węzeł.
Wreszcie:
Czytelna wersja kodu jest dostępna tutaj .
źródło
Ruby, 276
źródło