Wyobraźmy sobie, że otrzymujemy kawałek jakiegoś górzystego regionu, co dałoby kształt podobny do tego:
4 _
3 _ _ __/ \
2 / \__/ \ _/ \_ /
1 / \ / \_/
0 \/
12322223210012233343221112
Jak widzimy, możemy to przedstawić (do pewnego stopnia) za pomocą sekwencji liczb całkowitych.
Na potrzeby tego wyzwania definiujemy dolinę jako ciągłą podsekwencję, w której wartości początkowo maleją, a od pewnego momentu rosną. Bardziej formalnie dla sekwencji doliną będą indeksy dla których:
- punkt początkowy i końcowy doliny są takie same:
- dolina zaczyna się i kończy, gdy region obniży się:
- dolina nie jest płaska:
- dolina początkowo zmniejsza się:
- dolina w pewnym momencie wzrośnie:
Teraz definiujemy szerokość takiej doliny jako wielkość wskaźników , tj. .
Wyzwanie
Biorąc pod uwagę profil wysokości (sekwencja liczb całkowitych nieujemnych), Twoim zadaniem jest określenie szerokości najszerszej doliny.
Przykład
Biorąc pod uwagę profil wysokości [1,2,3,2,2,2,2,3,2,1,0,0,1,2,2,3,3,3,4,3,2,2,1,1,1,2]
, możemy go wizualizować jak poprzednio:
4 _
3 _ _ __/ \
2 / \__/ \ _/ \_ /
1 / \ / \_/
0 \/
12322223210012233343221112
aaaaaa ccccc
bbbbbbbbb
Zwróć uwagę, że druga dolina [3,2,1,0,0,1,2,2,3]
nie rozciąga się bardziej na prawo, ponieważ skrajnie lewy punkt to a nie . Ponadto nie dodajemy pozostałych dwóch s, ponieważ wymagamy, aby punkt końcowy był wyżej niż punkt przedostatni.
Dlatego szerokość najszerszej doliny wynosi .
Zasady
- Dane wejściowe będą ciągiem liczb całkowitych nieujemnych (przepraszam Holendrów)
- możesz założyć, że zawsze jest co najmniej jedna dolina
- Wyjściowy będzie rozmiar najszerszej doliny, jak zdefiniowano powyżej
Przypadki testowe
[4,0,4] -> 3
[1,0,1,0,1] -> 3
[1,0,2,0,1,2] -> 4
[13,13,13,2,2,1,0,1,14,2,13,14] -> 4
[1,2,3,2,2,2,2,3,2,1,0,0,1,2,2,3,3,3,4,3,2,2,1,1,1,2] -> 9
[3,2,0,1,0,0,1,3] -> 4
[3,2,0,1,0,0,1,3]
. Wszystkie aktualne odpowiedzi zwracają 8, zgodnie z twoją definicją uważam, że powinna to być 4.[3,1,2,3]
)[4,0,4]
byłby taki przypadek.Odpowiedzi:
Galaretka , 15 bajtów
Wypróbuj online!
Lub zobacz pakiet testowy (dodano dwa kolejne przypadki testowe, których wcześniej nie wypełniałem).
W jaki sposób?
źródło
JavaScript (ES6),
1111089997 bajtówWypróbuj online!
Skomentował
źródło
Python 2 ,
120115898786152149 bajtówWypróbuj online!
źródło
Retina 0.8.2 , 77 bajtów
Wypróbuj online! Link zawiera przypadki testowe. Wyjaśnienie:
Konwertuj na unary.
Wymień, a nie licząc, nakładające się mecze.
Początek doliny jest uchwycony
\1
. To nie może się powtórzyć do końca. Ponieważ nie przechwytujemy przecinka, zapobiega to również dopasowaniu wyższych wartości.Dopasuj malejące wartości.
(?!1+\2)
Zapobiega żadnego przejścia przez pętlę z jest większe niż poprzednie. (Pierwszy raz\2
nie jest ustawiony, więc nie pasuje trywialnie.) Przechwytywanie obejmuje przecinek końcowy, ponieważ jest to golfier.Dopasuj rosnące wartości. Ten czas
((?3)\3|\2)
oznacza, że każde dopasowanie musi być co najmniej tak długie, jak poprzednia wartość lub ostatnie malejące przechwytywanie za pierwszym razem przez pętlę.Wreszcie koniec doliny musi być tej samej wysokości co początek.
Usuń wysokości, pozostawiając przecinki. (Jest to nieco łatwiejsze niż liczenie wysokości, ponieważ niektóre z nich mogą wynosić zero).
Sortuj w odwrotnej kolejności, tzn. Najpierw większość przecinków.
Policz liczbę przecinków w pierwszym wierszu plus jeden.
źródło
Łuska , 13 bajtów
Wypróbuj online!
Wyjaśnienie
Używam podobnego algorytmu jak Jonathan Allan .
źródło
Japt , 31 bajtów
Wypróbuj online!
Oszczędź 10 bajtów, czerpiąc inspirację z odpowiedzi Łuski Zgarba. Nadal uważam, że można to poprawić, ale jeszcze go nie znalazłem.
Wyjaśnienie:
źródło