Język geobitsian to nowa perwersja języka angielskiego, w której słowo jest podzielone na segmenty, z których każdy musi zaczynać się od innej litery. Następnie za każdym razem, gdy jedna z tych liter początkowych pojawia się w innym ciągu, jest ona zastępowana przez cały odpowiadający jej segment, zachowując wielkie litery.
Ten proces nazywa się Geobitsizing .
Na przykład słowo „ Geobity ” może zostać rozbite geo bits
, a także nonsensowny wiersz
Algy met a Bear
A Bear met Algy
The Bear was bulgy
The bulge was Algy
byłby z nim geobitsized jako
Algeoy met a Bitsear
A Bitsear met Algeoy
The Bitsear was bitsulgeoy
The bitsulgeoe was Algeoy
ponieważ każdy g
staje się geo
, każdy G
(chociaż nie ma) staje się Geo
, każdy b
staje się bits
i każdy B
staje się Bits
.
Zauważ, że każde podstawienie jest wykonywane względem oryginalnego łańcucha, a nie żadnego kroku pośredniego. np. gdyby geo
był gbo
zamiast, b
stworzone nie zastąpiłoby bits
.
Wyzwanie
Napisz program lub funkcję, która może generować język geobitsian.
Weź jednowierszowy ciąg złożony z małych liter (az) i spacji. Będzie to słowo użyte jako argument Geobitsizing, ze spacjami oddzielającymi segmenty. Możesz założyć:
- Segmenty nie będą puste. Dlatego spacje nie będą się ze sobą sąsiadować ani znajdować na początku ani na końcu łańcucha.
- Każdy segment zaczyna się od innej litery. Zatem nie może być więcej niż 26.
Na przykład, niektóre ważne ciągi segmentowe należy wspierać to geo bits
, butt ner
, alex
, i do o r k nob
(pojedyncze segmenty nas nie mają żadnego wpływu, ale są ważne). Ale geo
, butt ner
, Alex
, i do o r k n ob
są nieważne.
Twój program lub funkcja musi również pobrać inny dowolny ciąg znaków, aby zastosować Geobitsizing i wydrukować lub zwrócić wynikowy język Geobitsian.
Możesz założyć, że ten ciąg zawiera tylko znaki nowej linii i ASCII do wydruku.
Pamiętaj, że litery należy zachować od danych wejściowych do wyjściowych.
Oto kilka przykładów wykorzystujących no pro gr am m ing
jako argument Geobitsizing:
[empty string]
→ [empty string]
i
→ ing
I
→ Ing
Mmmm, mmm... MmmmMMM: m&m!
→ Mmmm, mmm... MmmmMMM: m&m!
(bez zmian)
People think bananas are great, don't you?
→ Proeoprole thingnok bamnoamnoams amre grreamt, dono't you?
Pet a Puppy
Google Wikipedia
↓
Proet am Prouproproy
Groogrle Wingkingproedingam
Zauważ, że wyniki powinny być identyczne bez względu na sposób ułożenia argumentu, np. ing pro m no am gr
Powinny dawać takie same wyniki jak powyżej.
Najkrótszy kod w bajtach wygrywa.
["no", "pro", "gr", "am", "m", "ing"]
\\b${l}(\\S+)
chociaż kosztuje to 5 bajtów.abra cadabra
,!"#$%&'()*+,-./0123456789:;<=>?@ABCDEFGHIJKLMNOPQRSTUVWXYZ[\]^_`abcdefghijklmnopqrstuvwxyz{|}~
To powinno obejmować wszystkie przypadki krawędzi, a istnieje wiele z nich, jeśli ktoś próbuje użyć regexes ...Odpowiedzi:
Galaretka , 18 bajtów
Wypróbuj online!
Alternatywna wersja, 15 bajtów (niekonkurująca)
Błąd funkcji tytułowej Jelly miał błąd; nie użyła pierwszego słowa. Zostało to naprawione, więc teraz działa teraz.
Ten kod działa tak samo jak w wersji konkurencyjnej, z tym wyjątkiem, że
Œt
(przypadek tytułu) zastępuje warunkową górną obudowę osiągniętą przezŒu1¦€
.Jak to działa
źródło
Python 3, 71 bajtów
Przetestuj na Ideone .
Jak to działa
W Pythonie 3 wbudowane
str.translate
pobiera ciąg i słownik i zastępuje każdy znak w ciągu, którego punktem kodowym jest klucz tego słownika, odpowiednią wartością, która może być ciągiem, liczbą całkowitą lub Brakiem (odpowiednik parametru pusta struna).Konwersja ciągu słów w na wielkość liter (tj. Pisanie wielką literą każdego słowa) i dołączanie go do wyniku
w+' '
powoduje utworzenie ciągu słów oddzielonych spacjami w wersji z małymi i dużymi literami (pierwsza litera). Bez drugiego argumentustr.split
dzieli się na białe znaki, więc(w+' '+w.title()).split()
tworzy listę wszystkich słów.Wreszcie, zrozumienie słownika
{ord(t[0]):t for t in...}
zamienia każde słowo t w pozycję słownika z kluczemord(t[0])
(punkt kodowy pierwszej litery) i wartością t , więcstr.translate
wykona zamierzone podstawienia.źródło
Python,
126999581 bajtówOgromne podziękowania dla Dennisa:
Edycja1: nie trzeba dołączać do tymczasowego
Edycja2:
S
może zawierać wielkie litery ...Edycja3: nie powielaj G
Edit4: nieco bardziej skompresowany i przesunięty w jedną linię
Edycja5: używając nienazwanej lambda i
j=join' '
źródło
Pyth, 19 bajtów
Wypróbuj online!
źródło
Vim, 46 naciśnięć klawiszy
Brzydki i Hacky.
źródło
Siatkówka , 36 bajtów
Liczba bajtów zakłada kodowanie ISO 8859-1.
Wypróbuj online!
źródło
Pyth
1816Wypróbuj tutaj
Definiuje funkcję,
g
która wykonuje geobitsising. Jako program byłby nieco krótszy, gdyby drugi ciąg był jednym wierszem, ale wejście wielowierszowe nie jest tego warte:Ogólny pomysł polegał na tym, aby tytuł tytułu ciąg geobitsian i dołączyć go do oryginalnego ciągu. Następnie podziel to na spacje i dla każdego łańcucha, weź pierwszą literę i zamapuj ją na łańcuch, który reprezentuje. W ten sposób
X
pierwsza litera każdego słowa zamieni się w pełne słowo.źródło
Python 2,
8378 bajtówPrzetestuj na Ideone .
Jak to działa
Iterujemy wszystkie znaki c w ciągu s .
Wstawiamy spację do ciągu słów w , a następnie szukamy wystąpienia małej litery c , poprzedzonej spacją.
Jeśli takie zjawisko istnieje,
find
zwróci indeks przestrzeni w ciąg' '+w
, który pasuje do indeksu C w szer .w[...:]
zwraca zatem ogon w , zaczynając od słowa z pierwszą literą c .split()
dzieli ogon w odstępach,[0]
wybiera pierwszą porcję (słowo) i[1:]
usuwa pierwszą literę.Po dodaniu c do poprzedniego wyniku, otrzymujemy poprawnie wstawione słowo, które zaczyna się od c .
Jeśli żadne słowo nie zaczyna się na c ,
find
zwraca -1 .W ten sposób
w[...:]
otrzymuje się ostatni znak w ,split()
zawija je w tablicy,[0]
cofa opakowanie i[1:]
usuwa tylko znak z łańcucha.Po dodaniu c otrzymujemy ciąg singletonu, którego znak to c , więc cała operacja nie działa.
Na koniec
''.join
konkatenuje wszystkie powstałe ciągi, zwracając wersję s Geobitsized .źródło
Julia,
7268 bajtówWypróbuj online!
źródło
CJam, 19 bajtów
Sprawdź to tutaj.
Wyjaśnienie
źródło
JavaScript ES6,
676370 bajtówPrzetestuj to w przeglądarce Firefox. robaki powodują, że trwa to dłużej niż chciałbym
Wyjaśnienie
źródło
f("abracadabra")("1Dbw")
zwraca"1abracadabraDbracadabrababracadabrawbracadabra"
.Rubin,
656058 bajtówWypróbuj online!
źródło