Uwielbiam ten prosty szyfr, fajnie jest czytać nie do końca czytelne słowa i wypełniać luki ...
Ot wes thi bist uf tomis, ot wes thi wurst uf tomis,
ot wes thi egi uf wosdum, ot wes thi egi uf fuuloshniss,
ot wes thi ipuch uf biloif, ot wes thi ipuch uf oncridaloty,
ot wes thi siesun uf loght, ot wes thi siesun uf derkniss,
ot wes thi sprong uf hupi, ot wes thi wontir uf dispeor,
wi hed ivirythong bifuri as, wi hed nuthong bifuri as,
wi wiri ell guong dorict tu hievin, wi wiri ell guong dorict thi uthir wey –
on shurt, thi piroud wes su fer loki thi prisint piroud,
thet sumi uf ots nuosoist eathurotois onsostid un ots biong riciovid,
fur guud ur fur ivol, on thi sapirletovi digrii uf cumperosun unly.
Zasady są bardzo proste:
- Zaakceptuj część tekstu jako dane wejściowe (znaki ascii, wielkie / małe litery i znaki interpunkcyjne).
- Dla każdej samogłoski obróć ją do następnej samogłoski lub z powrotem na początek.
- a => e
- e => i
- i => o
- o => u
- u => a
- Wielkie litery samogłosek pozostają dużymi literami, małe litery pozostają małymi literami.
- Po tych konwersjach wyślij tekst.
- Nie trzeba wspierać akcentów.
- Wszystkie pozostałe postacie powinny pozostać niezmienione.
- Spróbuj to zrobić przy najmniejszej liczbie bajtów.
- Dowolny stary język, który lubisz.
Przypadki testowe
It was the best of times, it was the worst of times,
it was the age of wisdom, it was the age of foolishness,
it was the epoch of belief, it was the epoch of incredulity,
it was the season of light, it was the season of darkness,
it was the spring of hope, it was the winter of despair,
we had everything before us, we had nothing before us,
we were all going direct to heaven, we were all going direct the other way –
in short, the period was so far like the present period,
that some of its noisiest authorities insisted on its being received,
for good or for evil, in the superlative degree of comparison only.
Na zewnątrz:
Ot wes thi bist uf tomis, ot wes thi wurst uf tomis,
ot wes thi egi uf wosdum, ot wes thi egi uf fuuloshniss,
ot wes thi ipuch uf biloif, ot wes thi ipuch uf oncridaloty,
ot wes thi siesun uf loght, ot wes thi siesun uf derkniss,
ot wes thi sprong uf hupi, ot wes thi wontir uf dispeor,
wi hed ivirythong bifuri as, wi hed nuthong bifuri as,
wi wiri ell guong dorict tu hievin, wi wiri ell guong dorict thi uthir wey –
on shurt, thi piroud wes su fer loki thi prisint piroud,
thet sumi uf ots nuosoist eathurotois onsostid un ots biong riciovid,
fur guud ur fur ivol, on thi sapirletovi digrii uf cumperosun unly.
W:
The quick brown fox jumps over the lazy dog.
Na zewnątrz:
Thi qaock bruwn fux jamps uvir thi lezy dug.
W:
Home is where the heart is.
Na zewnątrz:
Humi os whiri thi hiert os.
W:
Boaty McBoatface
Na zewnątrz:
Buety McBuetfeci
W:
AEIOUaeiou
Na zewnątrz:
EIOUAeioua
W:
Programming Puzzles And Code Golf
Na zewnątrz:
Prugremmong Pazzlis End Cudi Gulf
code-golf
text-processing
AJFaraday
źródło
źródło
Odpowiedzi:
Stax , 7 bajtów
Uruchom i debuguj
Wypróbuj online!
Objaśnienie (rozpakowane)
Być może uda się zaoszczędzić więcej, będę próbował.
źródło
MS-SQL, 51 bajtów
Działa na SQL 2017 lub nowszym:
Nowa funkcja
TRANSLATE
zastępuje indywidualne znaki, dlatego idealnie nadaje się do tego wyzwania.Dane wejściowe pochodzą z wcześniej istniejącej tabeli t z kolumną varchar v , zgodnie z naszymi regułami IO .
W takim przypadku tabela musi zostać utworzona przy użyciu sortowania z rozróżnianiem wielkości liter , albo na serwerze z rozróżnianiem wielkości liter, albo przy użyciu
COLLATE
słowa kluczowego (nie liczone do całkowitej liczby znaków):EDYCJA : SSMS może odciąć długi cytat powyżej, zwracając wynik w oknie „wyników na tekst”, jest to ustawienie klienta, a nie błąd w moim programie .
Aby to naprawić, przejdź do
Tools > Options > Query Results > SQL Server > Results to Text
i zwiększ „Maksymalna liczba znaków wyświetlanych w każdej kolumnie”.źródło
REPLACE
niektórych lewach: na przykład,REPLACE(TRANSLATE(v,'1234567890','xxxxxxxxxx'),'x','')
aby wyeliminować wszystkie cyfry z łańcucha. Wciąż długie, ale znacznie krótsze niż 10 zagnieżdżonychREPLACE
s.Bash + coreutils , 24
Wypróbuj online!
źródło
Haskell , 52 bajty
Wypróbuj online!
Lynn oszczędził mi dwa bajty, wskazując, że
!!0
jest krótszy niżhead
.Wyjaśnienie
Jeśli nigdy nie kodowałeś w Haskell, prawdopodobnie będzie to wyglądać jak kupa szarpaniny. Najpierw odłóżmy go, a następnie podzielmy:
Najpierw mamy funkcję
!
, która pobiera ciąg znakóws
i znakc
. Nasz pierwszy chwyt przy dopasowaniu wzorca przyjmuje dane wejściowe, jeśli ciąg nie jest pusty. Jeśli ciąg nie jest pusty, porównujemy jego pierwszy znakc
. Jeśli jego pierwszy znak nie jest równyc
, podrzucamy go i wzywamy!
ponownie resztą ciągu ic
. Jeśli jest równy, zwracamy drugi znak w ciągu.Nasze następne dopasowanie wzorca łapie łańcuch we wszystkich innych przypadkach, to znaczy, jeśli łańcuch jest pusty. W tym przypadku właśnie wracamy
c
.W sumie ta funkcja pobiera znak
c
i ciąg znakóws
i zwraca znak po pierwszym wystąpieniuc
ins
. JeśliaeiouaAEIOUA
to przekażemy, wykonamy nasz szyfr na jednym znaku. Aby wykonać całą naszą funkcję, powinniśmy zamapować to na łańcuch.źródło
Siatkówka ,
1098 bajtówWypróbuj online!
Zaoszczędzono 1 bajt dzięki Neilowi! I kolejny bajt dzięki Martinowi!
Nowa wersja siatkówki ma klasy samogłosek, co sprawia, że wynik jest nieco krótszy. Transliteracja korzysta również z klasy „other”. Więc
to
klasa wygląda jak „aeiouAEIOUA”, podczas gdyfrom
klasa wygląda jak „uaeiouAEIOUA”Nie powoduje to żadnych problemów, ponieważ drugie
u
mapowanieA
nigdy nie zostanie wykonane, ponieważu
zostało już mapowanea
.źródło
T`_o`uvUV
._
w zestawie potraktowałoby to dosłownie, ale wygląda na to, że tak nie jest.Y
jeszcze dużo, więc dam temu szansę jutro.Perl 5 + -p,
2423 bajtówWypróbuj online
-1 bajt dzięki @DomHastings
źródło
-p
już jako +1, zamiast tego uważamy, że ta odpowiedź znajduje się w „Perl 5 +-p
”.;
jako separatora, możesz zapisać bajt!Python 3, 62 bajty
Stwórz tabelę tłumaczeń (słownik) metodą
str
statycznąstr.maketrans
. Przetłumacz odpowiednie znaki na ich znaki docelowe.źródło
x
parametru. W Pythonie funkcje lambda nie wymagają instrukcji return.C,
8576676564 bajtówOdpowiedź Javy z portu Kevina Cruijssena . Wypróbuj online tutaj .
Podziękowania dla Kevina Cruijssena za grę w golfa za 9 bajtów, za Christopha za grę w golfa za 11 bajtów i za grę sufitową za grę w golfa za 1 bajt.
Wersja bez golfa:
źródło
\0
. Nie działa to również po kompilacji z clang: tio.run/##S9ZNzknMS///…const char *res = strchr("AEIOU...", 0)
zwraca wskaźnik do terminatora w literale ciągu.putchar(res[1])
czyta poza koniec literału łańcucha. Z gcc najwyraźniej zdarza się znaleźć kolejny bajt zerowy i działa, ale z clang dostaje73 'I'
(prawdopodobnie zmain
dosłownego ciągu „To było ...”, ale nie sprawdziłem asm). Więcputchar
nie zwraca 0, i ostatecznie segregujemy, gdy*c++
odczytuje niezapisaną stronę.f(char*c){for(;*c;)putchar(1[strchr("AEIOUAaeioua",*c++)?:c-2]);}
. To chyba wszystko na razie.a[b]==*(a+b)==*(b+a)==b[a]
. Dlatego1[...]==(...)[1]
R , 43 bajty
Wypróbuj online!
Oto moje rozwiązanie zapakowane w
cat
, aby wydrukować go ładniej: Wypróbuj online!źródło
Galaretka , 11 bajtów
Wypróbuj online!
źródło
Python 2 ,
796867 bajtów-1 bajt dzięki @ArnoldPalmer
Wypróbuj online!
źródło
JavaScript (ES6), 60 bajtów
Wypróbuj online!
źródło
s=>s.replace(/./g,c=>'auoieaAUOIEA'.match(".(?=${c})")||c)
only.
=>unlya
Ruby
-p
, 31 bajtówWypróbuj online!
źródło
Pyth, 17 bajtów
Wypróbuj tutaj
źródło
Japt 2.0,
2521 bajtówBawiłem się w golfa z Shaggy.
Uruchom tutaj.
źródło
S.p(f)
.Java 10,
9787 bajtów-10 bajtów po zainspirowaniu odpowiedzią JavaScript @Arnauld (jego 60- bajtowa wersja) .
Wypróbuj online.
Wyjaśnienie:
źródło
05AB1E ,
141311 bajtówWypróbuj online!
źródło
|
i»
: Wypróbuj online: 11 bajtów .Retina 0.8.2 , 20 bajtów
Wypróbuj online! Link zawiera przypadki testowe.
źródło
APL + WIN, 55 bajtów
Monity o ciąg wejściowy:
źródło
Świnka, 38 bajtów
Mumps zwykle nie dodaje znaku powrotu karetki, ponieważ nie widziałem wymogu oddzielania danych wejściowych od wyjściowych, wygląda to trochę dziwnie przy pierwszym uruchomieniu. Na przykład dane wyjściowe dla ostatniego przypadku testowego wyglądają następująco:
Jeśli chcesz dodać znak powrotu karetki, dodaj dwa bajty:
źródło
Vim + tpope / vim-abolish , 30 bajtów
Alternatywne rozwiązanie, również 30 bajtów:
Według meta odpowiedzi vim mogą używać wtyczek bez kary bajtowej. To nie jest odpowiedź vima, ale vim + odpowiedź zniesiona .
Abolish to niezwykle przydatna wtyczka. Ta sekcja README ładnie opisuje działanie tego polecenia (
Subvert
polecenia).źródło
CJam ,
2919 bajtówWypróbuj online!
-10 bajtów dzięki @Peter Taylor
Wyjaśnienie:
źródło
q
raczej użyć , niżl
wziąć dane wejściowe. Pierwszy przypadek testowy wydaje się być wieloliniowy. Możesz także skrócić"eioua"
do_1m<
. W rzeczywistości możesz pójść dalej iq"aeioua"_eu+_1m<er
AutoHotkey , 24 bajty
AuotHotkey automatycznie zastępuje litery z uwzględnieniem wielkości liter.
źródło
PHP, 90 bajtów
Wypróbuj online
Kod
Wyjaśnienie
75 bajtów, jeśli uruchomiono przy
php -r
użyciu$argv
źródło
J , 33 bajty
Wypróbuj online!
źródło
str , 18 bajtów
Wypróbuj online!
Wyjaśnienie
źródło
PHP, 38 bajtów
Całkiem proste, mało kreatywne, używa
strtr
do zastąpienia samogłosek:Uruchom z
echo '<input>' | php -nF <filename>
lub Wypróbuj online .źródło
argn
? Jeśli tak, to nie jest poprawne; musisz przekazać ciąg jako argument i użyć$argv1]
zamiast tego.-F
flagą, to działa z wejściem w linii poleceń. Z dokumentacji PHP na temat opcji :-F --process-file PHP file to execute for every input line. Added in PHP 5.
Definiowanie zmiennych Wypróbuj online jest po prostu dlatego, że niektórzy ludzie nie mają zainstalowanego PHP lokalnie, a ja nie mogłem uruchomić-F
flagi w TIO.q / kdb +,
3633 bajtówRozwiązanie:
Przykłady:
Wyjaśnienie:
Oblicz indeks samogłosek, dodaj jeden, aby przejść do następnego i zindeksuj. Nadal myślę, że to podejście można znacznie poprawić ...
Premia:
Moje stare ** 36 bajtowe (()) rozwiązanie, które moim zdaniem jest całkiem fajne, ale muszę zagrać w golfa na liście, aby było konkurencyjne:
źródło
Węgiel drzewny , 35 bajtów
Wypróbuj online!
Metoda naiwna.
Wyjaśnienie:
źródło
PHP , 76 bajtów.
Sprawdź to!
To był najkrótszy czas jaki mogłem to zrobić w PHP.
źródło