(Znaczenie: Konwertuj angielski na Bleet)
Od lat chwalimy kozy za boga.
Ale jeśli nie potrafimy przetłumaczyć angielskiego na „Bleet”, język koziego Boga, nie możemy się z nimi porozumieć.
Aby więc się z nimi komunikować, zbadaliśmy działalność kóz i znaleźliśmy ten wzór, który jest rdzeniem języka.
Powiedz „Bleet” na długość każdego słowa. Oznacza to, że liczba „e” powinna wynosić (długość-3) dla słów dłuższych niż 3 litery. Powinieneś zmniejszyć „Bleet” dla słów krótszych niż „Blt”. Na przykład „be” staje się „bl”, ale „cat” i „boat” stają się „blt” i „blet”.
Wygląda na to, że tak naprawdę nie zmieniają znaków innych niż alfabet na „Bleet”. Nasze badania wykazały, że „Witaj, świecie!” Bleet to „Bleet, Bleet!” nie „Bleeet Bleeet”. Ponadto kozy nie są tak inteligentne (bez obrazy), więc wydaje się, że w ogóle nie rozumieją postaci innych niż ascii ani znaków diakrytycznych.
Teraz czas na tłumacza, by komunikował się z kozimi bogami.
Bleeeeet (znaczenie: przykłady)
Hello, World! => Bleet, Bleet!
lorem ipsum dolor sit amet. => Bleet Bleet Bleet Blt Blet.
We praise the Goat God! => Bl Bleeet Blt Blet Blt!
I have a pen => B Blet B Blt
0123456789_ => 0123456789_
0te_st1 => 0Bl_Bl1
it's
staćBlt
lubBl't
czyBl'B
?Jimmy's
:Bleee't
), traktują je jako separacji słowa (Jimmy's
:Bleet'B
), albo traktować je jako część słowa (Jimmy's
:Bleeeet
). Gdybym musiał wybrać taki, wybrałbym opcję separatora słów, ponieważ właśnie to robi 6 odpowiedzi.Odpowiedzi:
Retina , 31 bajtów
Wypróbuj online!
Wyjaśnienie
Zamień wszystkie litery na
e
s.Włącz pierwszy
e
w każdym bieguB
.Zamień się
Be
wBl
.Zmień ostatni
e
w każdym biegut
.źródło
T1L
T
etap „zawija” par tłumaczeniowych, dzięki czemu można włączyć wszystkie litery tak abye
l
, a nie1
, ale nie jestem pewien, co masz na myśli przez „wrap”. Transliteracja po prostu powtarza ostatni znak we wzorcu docelowym, więc gdyby tak byłoT`lL`ef
, odwzorowałbyśa
nae
i wszystkie inne litery naf
, nie na przemian doe
if
.JavaScript (ES6),
797774 bajtówAlternatywne podejście, obecnie
8378 bajtów:Najlepsze, co mogłem zrobić rekurencyjnie, to 88 bajtów:
źródło
'Blet'[i>1?2+!x[i+1]:i]
, ale niestety to jest tej samej długości.PHP,
11588867775 bajtówpreg_replace
z tablicami (wymaga PHP 5.4 lub nowszego)Uruchom go
echo '<string>' | php -nR '<code>'
lub przetestuj online .awaria
Wersja 5: zapisano 9 bajtów za pomocą łańcucha wyrażeń regularnych Martina Endera .
(To także naprawiło przypadki z nie alfabetycznymi znakami słów = cyfry / podkreślenia.)
źródło
Haskell ,
135128 bajtówWypróbuj online! Wykorzystanie
(""!) $ "some string"
. Bez wyrażeń regularnych okazało się to dość długie, może inne podejście jest krótsze. Edycja: Zapisano 7 bajtów dzięki @nimi!źródło
b
doa
można stosować go bezpośrednio przy konstruowaniu wynikowy ciąg i pominąć końcowy=<<
:b!(l:t)|...|1<3=a b++l:""!t;b!_=a b;(""!)
.Perl 5 , 47 bajtów
Zaoszczędzono 15 bajtów, stosując tę samą technikę, co odpowiedź Retina Martina Endera . (Ta odpowiedź jest teraz w zasadzie częścią jego odpowiedzi)
46 bajtów kodu +
-p
flaga.Wypróbuj online!
Starsze wersje: 62 bajty:
I 68 bajtów:
źródło
PHP, 84 bajtów
PHP, 117 bajtów
źródło
-1+$l=...
\bl
nie dla non-alfabetycznych znaków słownych:_we_
. W przeglądarce musi być wyraźne stwierdzenie:(?<!l)l
. To samo dotyczye\b
->e(?!e)
(+7 bajtów)C,
1201511401111081051049290 BajtówPraca dla „It's Jimmy's test” -> Bl'B Bleet'B Blet
Wynik jest teraz efektem ubocznym poprzez zniszczenie oryginalnego łańcucha.
Myślę, że to jest poprawne przynajmniej teraz
źródło
Python 2.7,
129118114109959188 bajtówPo prostu
re.sub
łańcuchKrok po kroku
Przykładowe dane wejściowe: „ Chwalimy boga kozła! ”
Alias sub, dzięki czemu możemy zaoszczędzić bajty na powtarzanych połączeniach
Zamień wszystkie znaki słów na „e”
s("\w","e",i)
Wynik:
ee eeeeee eee eeee eee!
Zamień wszystkie litery „e” poprzedzone granicą wyrazów (początek słowa) na „B”
s(r"\be","B",s("\w","e",i))
Wynik:
Be Beeeee Bee Beee Bee!
Zamień wszystkie „Be” na „Bl”
s("Be","Bl",s(r"\be","B",s("\w","e",i)))
Wynik:
Bl Bleeee Ble Blee Ble!
Zamień wszystkie „e”, po których następuje granica słowa na „t”
s(r"e\b","t",s("Be","Bl",s(r"\be","B",s("\w","e",i))))
Wynik:
Bl Bleeet Blt Blet Blt!
źródło
return
zeprint
powinien zapisać bajt.r
ciągi z nieprzetworzonych ciągów, jeśli nie mają w nich luzów, oszczędzając kolejne 3 bajtyr
) i udało mi się go zmniejszyć do 95 bajtów. Dzieki za sugestie!Pip , 28 bajtów
Pobiera dane wejściowe jako argument wiersza polecenia. Wypróbuj online!
Wyjaśnienie
To była świetna zabawa - musiałem używać modyfikatorów wyrażeń regularnych i interpolacji ciągów.
źródło
Python 3, 271 bajtów
Zdaję sobie sprawę, że jest to dość długa i cieszę się z sugestii dotyczących skrócenia długości.
źródło
x.append(y)
lub w twoim przypadkua(x,y)
możesz to zrobićx+=y,
(wymagany przecinek)ułożone , 57 bajtów
Wypróbuj online! Pobiera dane wejściowe z góry stosu.
Niech a ( n ) = A136412 ( n - 2) = (5 × 4 n - 2 + 1) ÷ 3. Przekształcenie a ( n ) na podstawę 4 daje:
Odwzorowując indeksy 0..3 na ciąg
Blet
, otrzymujemy:Teraz prepending
B
daje nam pożądany ciąg, biorąc pod uwagę długość. Przeważnie. Wystarczy zająć się przypadkami specjalnymi dla n ≤ 2. W moim przypadku jest to rozwiązane przez odjęcie ( n - 2 <1) jako liczbową wartość logiczną (1 dla „true” i 0 dla „false”).Jeśli chodzi o szczegóły odpowiedzi:
źródło
Python 2 ,
137114 bajtówWypróbuj online!
źródło
Java 7, 201 bajtów
Nie bardzo z tego zadowolony, a na pewno można jeszcze zagrać w golfa ..
Wyjaśnienie:
Kod testowy:
Wypróbuj tutaj.
Wynik:
źródło
s.split("")
zamiasts.toCharArray()
x=c&~32
nie będzie działał na Ciągu ix>64&x<91
oba nie będą działać). Jeśli możesz zrobić to krócej dzięki podziałowi, daj mi jednak znać.05AB1E , 36 bajtów
Wypróbuj online! lub jako pakiet testowy
Wyjaśnienie
Przygotuj dane wejściowe:
Spowoduje to utworzenie listy, takiej jak
['hello', ', ', 'world', '!']
dane wejścioweHello, World!
Iterate over list:
źródło