Monday Mini-Golf: Seria krótkich golfowych wyzwań, opublikowanych (miejmy nadzieję!) W każdy poniedziałek.
Prawdziwa historia 1 : Pewnego dnia bawiłem się na tablecie, gdy wpadłem na pomysł, aby odwiedzić stronę, której zwykle używam na komputerze do testowania JavaScript. Po załadowaniu strony wszedłem do tego prostego programu:
alert("Hello!")
Następnie nacisnąłem przycisk Wykonaj i byłem zaskoczony, gdy powiedział mi, że wprowadzony kod jest nieprawidłowy. Spojrzałem na pole tekstowe i zobaczyłem to:
alllelelerlerlertlert("Heeelelellellelloello!")
Co ??? Nie do tego wszedłem! Co się tu stało? Aby to rozgryźć, wprowadziłem dwie proste linie:
abcdefg
0123456
Okazało się to:
abbbcbcbcdbcdbcdebcdebcdefbcdefbcdefgbcdefg
0112123123412345123456
Do tej pory nadal nie miałem pojęcia, co się stało z literami, ale liczby wydawały się prostsze, więc przyjrzałem się bliżej. Jak się okazało, strona po prostu wpisywała pierwszy znak, a następnie powtarzała całą resztę w ciągu za każdym razem, gdy naciskany był nowy:
0112123123412345123456
0
1
12
123
1234
12345
123456
Ale co z sekcjami liter? Po chwili zastanowienia zdałem sobie sprawę, że jest tak samo, ale zamiast powtarzać każdą podsekcję raz, powtarza ją dwa razy :
abbbcbcbcdbcdbcdebcdebcdefbcdefbcdefgbcdefg
a
bb
bcbc
bcdbcd
bcdebcde
bcdefbcdef
bcdefgbcdefg
Połączenie dwóch działa z kombinacją tych technik:
abc123z
abbbcbcbc1bc12bc123bc123zbc123z
a
bb
bcbc
bc1
bc12
bc123
bc123zbc123z
Cokolwiek powoduje usterka, wydaje się, że resetuje się przy interpunkcji i spacjach, więc tak się abc def
dzieje abbbcbc deeefef
.
W tym momencie byłem tak pochłonięty rozpracowaniem go i przekształceniem go w ciekawe wyzwanie, że zapomniałem, dlaczego tam byłem. (Jednak wymyśliłem, jak pisać normalnie: naciskanie spacji po każdym znaku. Dość nudne, ale musisz robić to, co musisz.)
Wyzwanie
Celem wyzwania jest napisanie programu lub funkcji, która pobiera tekst do przetworzenia, wprowadza zmiany wymienione powyżej i wyświetla / zwraca wynik.
Detale
- Dane wejściowe będą zawierały tylko ASCII do wydruku i nie będą zawierać zakładek ani znaków nowej linii.
Przypadki testowe
Wejścia: (jeden na linię)
Mess up text
This is some longer text.
CAPS LOCK && "Punc-tua"+'tion'
under_score_style
CaPs wItHIn loWERs
1337 numb3r5
abcdefghij 0123456789
Code-golf is the best!
Wyjścia:
Meeesesessess upp teeexexextext
Thhhihihishis iss sooomomomeome looononongongongeongeongeronger teeexexextext.
CAAAPAPAPSAPS LOOOCOCOCKOCK && "Puuunununcunc-tuuuaua"+'tiiioioionion'
unnndndndendendernder_scccococorcorcorecore_stttytytyltyltyletyle
CaaaPaPaPsaPs wIIItItItHItHItHIItHIItHInItHIn loooWoWoWEoWEoWERoWERoWERsoWERs
1333337 nuuumumumbumbumb3umb3rumb3rumb3r5
abbbcbcbcdbcdbcdebcdebcdefbcdefbcdefgbcdefgbcdefghbcdefghbcdefghibcdefghibcdefghijbcdefghij 0112123123412345123456123456712345678123456789
Cooodododeode-gooolololfolf iss thhhehe beeesesestest!
Punktacja
To jest golf golfowy , więc wygrywa najkrótszy prawidłowy kod w bajtach. Tiebreaker przechodzi do przesyłania, które jako pierwsze osiągnęło końcową liczbę bajtów. Zwycięzca zostanie wybrany w poniedziałek, 2 listopada. Powodzenia!
Edit: A zwycięzcą jest ... @ MartinBüttner użyciu Retina dla niesamowitej 43-bajtowy rozwiązanie!
1 Tak, ta historia jest całkowicie prawdziwa, a jeśli potrzebujesz więcej wyjaśnień, patrz przypis 1.
' '.join(x[0]+''.join(2*x[1:i]for i in range(1,len(x)+1)) for x in raw_input().split())