Biorąc pod uwagę ciąg y składa się z małych liter, takich jak
aabaaababbbbaaba
oraz dodatnia liczba całkowita n , taka jak 4
, wypisuje ciąg n długości t taki, że gdy t jest powtarzane do długości s , mają one jak najwięcej wspólnych znaków. W podanym przykładzie optymalne wyjście byłoby aaba
, ponieważ ma trzynaście znaków wspólnych z ciągiem docelowym:
s: aabaaababbbbaaba
t: aabaaabaaabaaaba (aaba)
^^^^^^^^ ^ ^^^^
i żaden możliwy t nie ma więcej. Istnieją jednak aaaaaab
dwa możliwe wyniki: aaaa
i aaba
, z których każdy ma 6 znaków wspólnych z ciągiem docelowym:
s: aaaaaab
t: aaaaaaaa (aaaa)
^^^^^^
s: aaaaaab
t: aabaaaba (aaba)
^^ ^^^^
Albo aaaa
albo aaba
może być wyprowadzony, albo jedno i drugie, jeśli chcesz. Zauważ, że s nigdy się nie powtarza; końcowe a
obie powtarzane wartości t są po prostu ignorowane.
Przypadki testowe
Inputs -> Valid outputs
1 a -> a
1 aa -> a
2 aa -> aa
1 ab -> a b
2 ab -> ab
1 abb -> b
2 abb -> ab bb
2 ababa -> ab
2 abcba -> ab
2 aabbbbb -> bb (ab is not a valid output here)
3 aababba -> aab abb
3 aababbaa -> aab
3 asdasfadf -> asf
3 asdasfadfsdf -> asf adf
2 abcdefghijklmnopqrstuvwxyzyx -> yx
2 supercalifragilisticexpialidocious -> ic ii
3 supercalifragilisticexpialidocious -> iri ili ioi
4 supercalifragilisticexpialidocious -> scii
5 supercalifragilisticexpialidocious -> iapic
2 eeeebaadbaecaebbbbbebbbbeecacebdccaecadbbbaceebedbbbddadebeddedbcedeaadcabdeccceccaeaadbbaecbbcbcbea -> bb be
10 bbbbacacbcedecdbbbdebdaedcecdabcebddbdcecebbeeaacdebdbebaebcecddadeeedbbdbbaeaaeebbedbeeaeedadeecbcd -> ebbbdbeece ebdbdbeece
20 aabbbaaabaaabaaaabbbbabbbbabbbabbbbbabbaaaababbbaababbbaababaaaabbaaabbaabbbabaaabbabbaaabbaaaaaaaba -> aabbbbaaabbabbbaabba
Zasady
- Możesz założyć, że dane wejściowe będą zawsze niepustym ciągiem małych liter i dodatnią liczbą całkowitą nie większą niż długość łańcucha.
- Możesz pobrać dane wejściowe w dowolnym standardowym formacie i w dowolnej kolejności.
- Możesz wyprowadzić pojedynczy ciąg znaków lub więcej niż jeden w postaci tablicy oddzielonej znakami nowej linii lub spacjami itp.
- Twój kod musi kończyć się dla każdego przypadku testowego w mniej niż 1 minutę na dowolnym dość nowoczesnym komputerze.
- To jest gra w golfa , więc ustaw swój kod tak krótko, jak to możliwe.
2 abb -> ba
jeśli jest budowane, ponieważ(b)[ab]a
: wiodące(b)
jest ignorowane,[ab]
pasują.Odpowiedzi:
Galaretka , 11 bajtów
Wypróbuj online!
Nie spodziewałem się pokonać Dennisa na tym, więc spróbowałem FGITW (po wypróbowaniu kilku możliwości; istnieje więcej niż jeden sposób na zdobycie 11). Ku mojemu zaskoczeniu przyjechałem krócej.
Bierze ciąg, a następnie liczy jako argumenty wiersza poleceń. Wyjścia na standardowym wyjściu.
Wyjaśnienie
Wykorzystuje to wgląd, że litera w każdej pozycji wzoru musi być najczęstszą literą odpowiadającą tej pozycji. Możemy znaleźć litery odpowiadające danemu wzorowi, dzieląc je na grupy wielkości wzoru i transponując. Głównym powodem, dla którego to rozwiązanie jest tak długie, jest to, że Jelly nie wydaje się mieć krótkiej drogi do znalezienia trybu listy (podjąłem kilka prób, ale wszystkie mają co najmniej sześć bajtów długości).
Galaretka , 10 bajtów, w oparciu o rozwiązanie @Dennis
Wypróbuj online!
Jest to połączenie rozwiązania @Dennis i mojego własnego; w tym rozwiązaniu był tryb pięciobajtowy, który ukradłem dla tego rozwiązania. (Miałem już oparte na tym rozwiązaniu
⁸ċ
, ale nie mogłem zejść poniżej sześciu bajtów; nie myślałem o użyciuÞ
).Wyjaśnienie
µ…µ€
iǀ
(z…
poprzednim wierszem) mają długość trzech bajtów (ta ostatnia wymaga nowej linii) i są równoważne. Zwykle używam tego pierwszego, ale ten drugi jest bardziej elastyczny, ponieważ pozwala na użycie⁸
argumentu.Umożliwia to sortowanie (
Þ
) według liczby wystąpień w⁸
(⁸ċ
), a następnie pobranie ostatniego elementu (Ṫ
), aby znaleźć tryb w zaledwie pięciu znakach.źródło
Mathematica, 51 bajtów
Dane wejściowe i wyjściowe są listami znaków.
Również w oparciu o tryby linii transpozycji. Sądzę, że nazwali wbudowany tryb listy
Commonest
wyłącznie po to, by wkurzyć golfistów.źródło
MostCommon
...Python 3,
99, 7361 bajtów-12, dzięki za @Rod
Ten sam pomysł, ale przepisałem go w celu wyeliminowania instrukcji importu.
Oryginalny
Wyjaśnienie:
źródło
''.join()
aby zwrócić listę ciągów znaków''.join(...)
sprawi, że zwróci generator, nie jestem pewien, czy to dozwolone wyjście.Python 2, 106
Teraz jest inna odpowiedź! Od samego początku myślałem o jednej (prawie) liniowej. Teraz jeszcze krótszy, w oparciu o użycie zip przez @Rod.
Podziękowania dla @ L3viathan i @Rod za wyjaśnienie na temat używania lambdas jako odpowiedzi
Wypróbuj online
Wyjaśnienie:
combinations(S,N)
tworzy wszystkie kombinacje długości N ze znaków Smax()
mają argument,key
który przyjmuje jako funkcję wejściową do porównywania elementówlambda s:sum(x==y for x,y in zip(S,s*len(S)))
przekazywane jako taka funkcjaTa lambda liczy liczbę pasujących znaków na liście krotek, produkowanych przez
zip(S,s*len(S))
s
- jedna z kombinacji i jej wielokrotność, przezlen(S)
co powstaje ciąg znaków, który jest gwarantowany dłużej niż S.zip
tworzy krotki znaków każdego łańcuchaS
is*len(S)
ignoruje wszystkie znaki, których nie można dopasować (w przypadku jednego ciągu dłuższego niż drugiego)max
Wybiera więc kombinację, która daje maksymalną sumęźródło
[]
zrozumienia listy wewnątrz funkcji, również używasz1 for ... if <cond>
możesz używać bezpośrednio,<cond> for ...
ponieważ będzie on używanysum
, python będzie przyjmowałTrue
jako1
iFalse
jak0
f=
(chyba że jest rekurencyjna)JavaScript (ES6),
10410194 bajtówZaoszczędzono 3 bajty dwa razy dzięki @Arnauld. 97-bajtowe rozwiązanie, które działa ze wszystkimi znakami nieliniowymi:
Poprzednie 104-bajtowe rozwiązanie działa również ze znakami nowej linii:
źródło
o
nowy obiekt, możesz po prostu ponownie użyć przekazanej tablicymap
, używając jej trzeciego parametru?(n,s)=>s.replace(/./g,(_,i)=>i<n?[...s].map((c,j,a)=>j%n-i||(a[c]=-~a[c])>m&&(m++,r=c),m=0)&&r:'')
powinien zaoszczędzić jeszcze 3 bajty. (Lub 4 bajty przy użyciu składni curry.)Galaretka ,
1211 bajtówWypróbuj online!
Jak to działa
źródło
Pyth, 11 bajtów
Pobiera dane wejściowe
s,n
i wyjściowe jako listę znaków.Wyjaśnienie
źródło
Japt ,
1615 bajtówZapisano 1 bajt dzięki @obarakon
14 bajtów kodu + 1 bajt dla
-P
flagi. Wypróbuj online!Bez golfa i wyjaśnienia
źródło
gJ
zo
Python 2 , 132 bajty
Wypróbuj online!
źródło
05AB1E , 17 bajtów
Wypróbuj online!
Wyjaśnienie
źródło
PHP, 245 bajtów
Wersja online
Awaria
źródło
Haskell, 84 bajty
Przykład użycia:
Podziel ciąg wejściowy na kawałki długości
n
, transponuj i znajdź dla każdej podlisty najczęstszy element.źródło
Röda , 68 bajtów
Wypróbuj online!
Jest to funkcja, która drukuje dane wyjściowe bez kończenia nowej linii.
To było zainspirowane tą odpowiedzią .
źródło