Nazwijmy niepustą listę ciągów mesą, jeśli spełnione są następujące warunki:
- Każdy wymieniony ciąg jest niepusty i używa tylko znaków występujących w pierwszym ciągu.
- Każdy kolejny ciąg znaków ma dokładnie jeden znak dłuższy niż poprzedni ciąg.
- Żaden ciąg na liście nie jest podciągiem żadnego innego ciągu na liście.
Termin „mesa” pochodzi od takiej wizualizacji (gdzie x
s mają być różnymi znakami):
xx..x
xx..xx
xx..xxx
.
.
.
xx..xxx..x
NB: Jest to matematyczny fakt, że tylko skończona liczba mes zaczyna się od danego łańcucha. Należy zwrócić uwagę na rozróżnienie między podciąg vs. fragmentu ; np. „anna” jest podsekwencją (ale nie podciągiem) „banana”.
Wyzwanie:
- Napisz najkrótszy program, który pobiera dowolny niepusty pusty alfanumeryczny ciąg wejściowy i wyświetla liczbę mes, które zaczynają się od tego ciągu.
Wejście (standardowe wejście):
- Dowolny niepusty ciąg alfanumeryczny.
Wyjście (standardowe wyjście):
- Liczba mes, które zaczynają się od ciągu wejściowego.
Punktacja:
- Zwycięzcą jest program z najmniejszą liczbą bajtów.
Przykładowe mesa
Tylko jedna mesa zaczyna się od a
:
a
Tylko jedna mesa zaczyna się od aa
:
aa
Wiele mes zaczyna się od ab
:
ab ab ab ab (and so on)
baa aaa bbb
bbba bbaa
baaaa
aaaaaa
ab
,bbb
jako mesa, po prostu zatrzymać się na drugim semestrze. Czy to jest ważne? Czy zawsze muszą być wykonane tak długo, jak to możliwe? Ponadto, jeśli istnieje wiele możliwych rearanżacji wnth
perspektywie (takie jakbaa
,aba
,aab
), czy słupkiem jako odrębne płaskowyże, jak również (pod warunkiem oczywiście, że wszyscy przestrzegają zasad)?ab
,ab/baa
,ab/bbb
,ab/bbb/bbaa
,ab/bbb/bbaa/baaaa
,ab/bbb/bbaa/baaaa/aaaaaa
są różne płaskowyże.Odpowiedzi:
GolfScript (
106103 znaków)Gdzieś w sercu jest oczywiście jakiś kod z Czy ciąg X jest podsekwencją ciągu Y?
źródło
Ruby, 142 znaki
Ten algorytm jest konstruktywny, tzn. Buduje wszystkie możliwe mesy dla ciągu wejściowego i je zlicza. To sprawia, że program jest naprawdę, bardzo wolny - ale hej, to codegolf.
Przykładowe przebiegi:
źródło
aab
) Mają możliwą długość, ale nie jestem pewien - twój program działa na około godzinę dla tego przykładu. Uwaga: Dane wyjściowe zawierające więcej niż dwie różne litery nie będą możliwe. np. niektóre mesy, które zaczynają się odabc
mają długość większą niż 7000-ty numer Ackermann .300,000
wpisówaab
nadal widziałem, że pierwsze 10 warunków jest identycznych. Myślę więc, że może być niewykonalne dla czegoś większego niż dwie postacie. Przynajmniej nie bez inteligencji i obliczeń heurystycznych.