Słowa wianek
Słowo girlanda jest słowem, które mogą być nawleczone razem jak wianka, ponieważ kończy się z tymi samymi literami to zaczyna się. Te grupy liter mogą się nawet pokrywać!
Na przykład, underground
jest słowem girlanda porządku 3
, ponieważ zaczyna i kończy się na samych 3 znaków und
. Oznacza to, że można go połączyć razem undergroundergrounderground...
.
alfalfa
to także słowo wianek! Jest z rzędu 4. Zaczyna się i kończy na alfa
. Może być nawleczone razem tak: alfalfalfalfa
.
Proces, który nazywam girlandingiem, polega na tym, że gdy określisz kolejność n
słowa girlandy, bierzesz oryginalne słowo i dodajesz segment wymagany do zapętlenia go jako n
czasów girlandy . Ponieważ onion
jest to 2
słowo wianek na zamówienie , weź onion
, odetnij pierwsze 2
litery, aby je zdobyć, ion
i dodaj je do czasów ostatecznych, 2
aby je zdobyć onionionion
.
Cel
Stwórz program lub funkcję, która pobiera dane ze standardowego wejścia lub argumentu funkcji i wypisuje lub zwraca słowo girlandowane.
Wszystkie słowa będą pisane małymi literami, a najwyższa możliwa kolejność słów length(word) - 1
.
Przykład I / O
"onion" --> "onionionion"
"jackhammer" --> "jackhammer"
"abracadabra" --> "abracadabracadabracadabracadabracadabra"
"" --> ""
"zvioz" --> "zviozvioz"
"alfalfa" --> "alfalfalfalfalfalfa"
"aaaa" --> "aaaaaaa"
To jest golf golfowy , więc wygrywa najmniejsza liczba bajtów.
Odpowiedzi:
Pyth,
1918 bajtówWypróbuj online: Demonstracja lub Uprząż testowa
Objaśnienia:
źródło
Python, 60 bajtów
Miałem nadzieję na lepsze, ale no cóż.
s.find
działa starannie tutaj zamiastnot s.startswith
.źródło
Siatkówka , 58 bajtów
Każda linia powinna przejść do własnego pliku, ale możesz uruchomić kod jako jeden plik z
-s
flagą.Cztery pary podstawień wykonują następujące czynności:
order
liczby znaków.order
etatu.Łańcuch określa przykład
onion
:źródło
Haskell, 64 bajty
Testy:
źródło
Java,
160157 bajtówWejście wyjście:
Odstępy i tabulatory dla czytelności:
Sugestie mile widziane.
źródło
i=0;
?Sed:
8784 znaków(Kod 83 znaków + opcja wiersza poleceń 1 znak.)
Przykładowy przebieg:
źródło
CJam,
2423 bajtyŻeby zacząć od czegoś ...
Wypróbuj online tutaj
źródło
Matlab:
978982 bajtówFunkcja wykorzystująca wyrażenie regularne z lookbehind i grupą przechwytującą:
Jest
sum
to potrzebne do obsługi danych wejściowych z pustym ciągiem (konwersja[]
na0
).Przykłady:
źródło
REGXY,
5349 bajtówUżywa REGXY , języka opartego na podstawieniu wyrażenia regularnego
Omówienie: zastosowano wiele wyrażeń regularnych. Przykładowy przebieg wyglądałby następująco:
Szczegółowe wyjaśnienie Poniżej przedstawiono podział wyrażeń regularnych według wierszy:
Jest to podstawienie wyrażenia regularnego, które dopasowuje pierwszy pusty ciąg (tj. Początek łańcucha) i zastępuje go wszystkim po prawej stronie match (
$'
), po którym następuje skrót. Na przykład zamieni sięonion
wonion#onion
.Ta linia znajduje sekcję, która zachodzi na siebie, szukając grupy znaków bezpośrednio poprzedzających # (
(.+)
), które są takie same po drugiej stronie # (\1
). \ K oznacza po prostu „zapomnij, że coś dopasowałem”, co oznacza, że tak naprawdę nie zostanie zastąpione przez podstawienie. W efekcie oznacza to, że po znalezieniu nakładki dodajemy # do pozycji, zamieniając sięonion#onion
wonion#on#ion
.Początkowe „a” jest tylko etykietą wyrażenia regularnego. Następnie znajdujemy pierwszy #, a następnie pojedynczy znak (
.
) i przechwytujemy wszystko do następnego # (.*#
). Zastępujemy to wszystkim po prawej stronie dopasowania, tj. Ostatnim tokenem ($ '), a następnie znakiem # ($1
), a następnie drugim tokenem bez znaku (traktujemy to jako licznik, zmniejszając go z każdą iteracją). W przypadku cebuli # na # jonów, dwa żetony na my wsteczne są pokazane w nawiasach, a sekcja całe mecze regex jest między rurami:onion|(#)o(n#)|ion
. Następnie zamieniamy pasujące bity (między rurami) na$'
(wszystko po prawej stronie dopasowania, tj. „Jon”), następnie 1 $ (the #), a następnie 2 $ (n #), co oznacza, że otrzymujemyonion|(ion)(#)(n#)|ion
(nawiasy kwadratowe pokazują trzy tokeny w ciągu zastępującym).Jeśli wyrażenie regularne nie pasuje do pierwszej alternacji (wszystko przed potokiem), musimy zmniejszyć nasz licznik do zera, co oznacza, że w drugim tokenie nie ma żadnych znaków. Zamiast tego, możemy spojrzeć na drugą część wzoru,
#.*
. To po prostu zastępuje wszystko po pierwszym #$'$1$2
. Ponieważ nie ma żadnych odwołań wstecznych utworzonych przez tę alternatywę, a po prawej stronie dopasowania nie ma nic (.*
dopasowania do końca łańcucha), kończymy dopasowanie i zwracamy wynik.Jest to tylko wskaźnik do poprzedniej linii, zapewniający kontynuowanie podstawiania wyrażenia regularnego, dopóki nie będzie już pasować.
źródło
jq 1,5: 91 znaków
(Kod 87 znaków + opcja wiersza poleceń 4 znaki).
Przykładowy przebieg:
źródło
rs ,
5148 bajtówWEŹ, ŻE RETINA I SED !!!!! ;)
Odetnij 3 bajty dzięki @randomra.
Prezentacje na żywo i przypadki testowe.
Pamiętaj, że
jackhammer
nie ma tam przypadku testowego. Wystąpił błąd w obsłudze spacji w interfejsie internetowym, który powoduje, że drukuje nieprawidłowe dane wyjściowe. Wersja offliners
obsługuje to poprawnie.Wersja 51-bajtowa:
Wersje demonstracyjne i testowe na żywo dla oryginału.
źródło
JavaScript (ES6), 95 bajtów
Próbny
Firefox tylko na razie:
źródło
JavaScript (ES6), 82 bajty
[Usunąłem pierwotną odpowiedź, ponieważ nauczyłem się ES6 i chciałem znaleźć rekurencyjne rozwiązanie tego wyzwania]
Przykład
źródło
CoffeeScript + ES6, 77 bajtów
Takie samo podejście jak moja odpowiedź JavaScript.
źródło
do
Gra w golfa: 195 bajtów - GCC
źródło
int
ukryty w (wystarczająco starych wersjach) C?Groovy
755755 bajtówNiesamowite, jak powrót do czegoś następnego dnia może pomóc
Nie golfowany:
źródło
W przypadku, gdy ktoś potrzebuje kodu w JS, aby go przetestować. Uwaga: przejrzałem ciąg od końca, aby zwiększyć wydajność:
źródło