Parsuj moje esperanto!

21

Słynny skonstruowany język Esperanto używa alfabetu łacińskiego (przeważnie, zobacz link do strony wikipedii, aby uzyskać szczegółowe informacje). Istnieją jednak znaki z akcentami: ĉ, ĝ, ĥ, ĵ, ŝ i ŭ . (C-circumflex, g-circumflex, h-circumflex, j-circumflex, s-circumflex i u- breve .) Oczywiście te znaki są bardzo trudne do wpisania. Nawet w przypadku tego pytania musiałem szukać znaków w selektorze Unicode. Z tego powodu opracowano konwencję używającą litery „x” do użytku elektronicznego. Na przykład „cxu” jest używane dla „ĉu”. (Uwaga: litera „x” nie jest normalnie używana w alfabecie esperanto. ”

Jestem jednak purystą językowym! Ten * cytat * x nonsens mnie zabija! Potrzebuję programu, aby to naprawić, najlepiej tak krótko, jak to możliwe, aby móc wpisać go do mojego terminala tak szybko, jak to możliwe!

Wyzwanie

Twoim zadaniem jest wziąć ciąg Esperanto za pomocą konwencji X i przekonwertować go na prawdziwe Esperanto.

W efekcie musisz zmapować:

cx: ĉ
gx: ĝ
hx: ĥ
jx: ĵ
sx: ŝ
ux: ŭ
Cx: Ĉ
Gx: Ĝ
Hx: Ĥ
Jx: Ĵ
Sx: Ŝ
Ux: Ŭ

Wszystkie pozostałe drukowane znaki ASCII powinny być akceptowane i nie mogą być zmieniane. Unicode byłby miły, ale nie konieczny.

Dane wejściowe i wyjściowe mogą być w dowolnym formacie odpowiednim dla twojego języka. Powodzenia!

Przypadki testowe

"input" : "output"
_____________
"gxi estas varma" : "ĝi estas varma"
"Cxu sxi sxatas katojn aux hundojn?" : "Ĉu ŝi ŝatas katojn aŭ hundojn?"
"Uxcxsxabcd(hxSx)efg{};" : "Ŭĉŝabcd(ĥŜ)efg{};"
"qwertyuiop" : "qwertyuiop"
" " : " "
"" : ""
"x" : "x"
"xc" : "xc"
"xcx" : "xĉ"
"cxx" : "ĉx"

Punktacja

To jest . Odpowiedzi są oceniane według najmniejszej liczby bajtów w domyślnym kodowaniu języka.

Oto fragment kodu, który pozwala wygenerować zarówno zwykłą tabelę wyników, jak i przegląd zwycięzców według języka.

Aby upewnić się, że twoja odpowiedź się pojawi, zacznij od nagłówka, korzystając z następującego szablonu Markdown:

# Language Name, N bytes

gdzie Njest rozmiar twojego zgłoszenia. Jeśli poprawić swój wynik, to może zachować stare porachunki w nagłówku, uderzając je przez. Na przykład:

# Ruby, <s>104</s> <s>101</s> 96 bytes

Jeśli chcesz umieścić w nagłówku wiele liczb (np. Ponieważ twój wynik jest sumą dwóch plików lub chcesz osobno wymienić kary za flagi tłumacza), upewnij się, że rzeczywisty wynik jest ostatnią liczbą w nagłówku:

# Perl, 43 + 2 (-p flag) = 45 bytes

Możesz także ustawić nazwę języka jako link, który pojawi się we fragmencie tabeli wyników:

# [><>](http://esolangs.org/wiki/Fish), 121 bytes

Powodzenia, baw się dobrze i nie krępuj się zasugerować ulepszenia!

Wyjaśnienia:

  • Musisz się tylko martwić o drukowalne znaki ASCII.

  • Musisz tylko wypisać znak, który wygląda jak poprawny wynik. Tak, oznacza to, że możesz przyczepić akcent do standardowej postaci.

OldBunny2800
źródło
ASCII oznacza tutaj 20-7E znaków do wydrukowania, 00-7F, czy co?
user202729,
Wszystkie te do wydruku.
OldBunny2800,
Uwaga: Dodałem wyjaśnienie, że możesz używać litery i akcentu modyfikującego.
OldBunny2800,
5
Łączenie obwodu jest na 0302 ̂, a łączenie breve na 0306 ̆.
user202729,
^ Każdy z nich bierze 2 bajty w UTF8 jako liczba TIO .
user202729,

Odpowiedzi:

9

QuadR , 65 bajtów

.x
3::⍵M'ĉĝĥĵŝŭĈĜĤĴŜŬ'['cghjsuCGHJSU'⍳⊃⍵M]

Wypróbuj online!

.x zamień dowolny znak, a następnie „x” na

3::⍵M po błędzie indeksowania zwróć dopasowanie niezmodyfikowane
 teraz spróbuj:
'ĉĝĥĵŝŭĈĜĤĴŜŬ'[] zindeksować ten ciąg z  indeksem  pierwszej litery
  ⍵M dopasowania  w tym ciągu
  
  
  'cghjsuCGHJSU'

Jest to równoważne z milczącą funkcją Dyalog APL:

'.x'R{3::⍵.Match'ĉĝĥĵŝŭĈĜĤĴŜŬ'['cghjsuCGHJSU'⍳⊃⍵.Match]}
Adám
źródło
Niezła odpowiedź! +1
OldBunny2800
Nie jestem pewien, jak liczone są tutaj bajty. Czy proste użycie ⎕R nie jest krótsze? ('cghjsuCGHJSU',¨'x')⎕r(,¨'ĉĝĥĵŝŭĈĜĤĴŜŬ')
ngn
@ngn Tak, ale moja bateria się wyczerpała, zanim zdążyłem to opublikować.
Adám
6

Siatkówka , 27 bajtów

iT`x`̂`[cghjs]x
iT`x`̆`ux

Wypróbuj online!

Ten program składa się z dwóch transliteracji. Ze względu na to, że łączenie znaków w kodzie nie renderuje się zbyt dobrze, pierwsza linia powinna faktycznie wyglądać podobnie do iT`x`^`[cghjs]x, gdzie ^oznacza obwodowy akcent łączący znak. To znaczy, że powinien Twymazać ( iprzypadek zgarnięcia) wszystkie xs na wejściu do a ^, ilekroć podążają za jakąkolwiek literą [cghjs].


Uwaga: TIO nieprawidłowo mierzy ten kod jako 25 bajtów. W rzeczywistości ten program Retina wykorzystuje kodowanie UTF-8 (inne programy mogą używać UTF-32 lub ISO 8859-1), a każda z obecnych dwóch łączących się znaków kosztuje 2 bajty.

Lew
źródło
5

C  173  154 bajtów

Dzięki @Colera Su za oszczędność 17 bajtów!

p,c,i;f(char*s){for(char*l="cghjsuCGHJSU";p=*s;~c&&putchar(p))for(c=*++s,i=0;c=='x'&&l[i];++i)l[i]-p||write(1,"ĉĝĥĵŝŭĈĜĤĴŜŬ"+i*2,2,c=-1,++s);}

Wypróbuj online!

Wyjaśnienie:

p,c,i;
f(char*s)
{
    // The outer loop and an array of characters that are modified by a trailing 'x'.
    // The array/string is used for getting the index for the accented character later.
    for (char*l="cghjsuCGHJSU";

                                // Store the current character of the input string in 'p'.
                                // If it is '\0', the loop terminates.
                                p=*s;

                                      // The last statement in the loop.
                                      // If 'c==-1', it outputs the char stored in 'p'. 
                                      ~c&&putchar(p))

        // Store the character following 'p' in 'c' and increment the string pointer.
        for(c=*++s, i=0;

                        // If 'c' is not the letter 'x', the inner loop terminates
                        // immediately. Otherwise it loops through the characters of
                        // string 'l'.
                        c=='x'&&l[i]; ++i)

            // If the character stored in 'p' is found inside the string 'l'...
            l[i]-p ||

                      // ...then print the accented character corresponding to 'p'.
                      // 'i' is the index of 'p' in 'l', and, because the characters
                      // with accents are two bytes each, the index is multiplied by 2.
                      write(1,"ĉĝĥĵŝŭĈĜĤĴŜŬ"+i*2,2,

                      // Finally set 'c' to -1 so that the non-accented character doesn't
                      // get printed too, and increment the string pointer so that the
                      // letter 'x' doesn't get printed either.
                                                    c=-1, ++s);
}
Steadybox
źródło
Miły! Czy mogę prosić o wyjaśnienie?
OldBunny2800,
Prawdopodobnie możesz użyć dosłownie zerowego bajtu zamiast \0?
user202729,
(ale to niestety nie działa na TIO)
user202729,
Możesz użyć, write(1,"..."+i*2,2)aby zapisać 17 bajtów. Wypróbuj online!
Colera Su
5

Python 3 , 81 bajtów

lambda s,T="cĉgĝhĥjĵsŝuŭ":eval("s"+".replace('%sx',%r)"*12%(*T+T.upper(),))

Wypróbuj online!

Generuje i ocenia ciąg:

s.replace('cx','ĉ').replace('gx','ĝ').replace('hx','ĥ').replace('jx','ĵ').replace('sx','ŝ').replace('ux','ŭ').replace('Cx','Ĉ').replace('Gx','Ĝ').replace('Hx','Ĥ').replace('Jx','Ĵ').replace('Sx','Ŝ').replace('Ux','Ŭ')

Erik the Outgolfer zapisał bajt.

xnor
źródło
@EriktheOutgolfer Fajny, dzięki!
xnor
3

/// , 75 bajtów

/,/\/\///>/x\,/c>ĉ,g>ĝ,h>ĥ,j>ĵ,s>ŝ,u>ŭ,C>Ĉ,G>Ĝ,H>Ĥ,J>Ĵ,S>Ŝ,U>Ŭ/

Uwaga: Ponieważ żądanie OP musi przetwarzać wszystkie znaki drukowalne, wybrane przeze mnie „znaki specjalne” nie mogą być drukowane. Wybrałem więc tabulator i znak nowej linii zamiast, co nie zmienia mojej liczby bajtów ani funkcji kodu. Kod wyglądałby następująco:

/
/\/\/// /x\
/c  ĉ
g   ĝ
h   ĥ
j   ĵ
s   ŝ
u   ŭ
C   Ĉ
G   Ĝ
H   Ĥ
J   Ĵ
S   Ŝ
U   Ŭ/

Wymaga to jednak, aby dane wejściowe nie zawierały tabulacji ani nowych linii.

Wypróbuj online!

Ponieważ ///nie można pobrać danych wejściowych, należy umieścić dane wejściowe po kodzie.

Całkiem proste. Myślę, że nie może być krótszy, ponieważ ///wymaga specjalnego traktowania każdej postaci.

Wyjaśnienie:

/,/\/\//       Replace all `,` in the code by `//`
               (two slashes are represented as two backslash-ed slashes)
/>/x\,         (in original code) becomes
/>/x\//        (because `,` is replaced by `//`) - replace all occurence of 
               `>` by `x/`.
/cx/ĉ//gx/ĝ//hx/ĥ//jx/ĵ//sx/ŝ//ux/ŭ//Cx/Ĉ//Gx/Ĝ//Hx/Ĥ//Jx/Ĵ//Sx/Ŝ//Ux/Ŭ/
               ^ The remaining part of the code should look like this.
               Straightforward replacement.
użytkownik202729
źródło
3

Python 3 , 95 bajtów

f=lambda x,v="cĉgĝhĥjĵsŝuŭCĈGĜHĤJĴSŜUŬ":v and f(x.replace(v[0]+"x",v[1]),v[2:])or x

Wypróbuj online!

-10 bajtów dzięki WhatToDo
-1 bajtów dzięki Colera Su

HyperNeutrino
źródło
96 bajtów Wypróbuj online!
WhatToDo,
@ user507295 o sprytny pomysł. dzięki!
HyperNeutrino,
Użyj i-lub sztuczki, aby zapisać jeden bajt: Wypróbuj online!
Colera Su
@ColeraSu oh cool, dzięki. nie jestem pewien, dlaczego ta sztuczka zniknęła D:
HyperNeutrino
@HyperNeutrino Ponieważ nie wiedziałem o tej sztuczce. Przepraszam!
WhatToDo,
2

Siatkówka , 55 bajtów

iT`CG\HJSUcg\hjsux`ĈĜĤĴŜŬĉĝĥĵŝŭ_`[cghjsux]x

Wypróbuj online! Podejście niepołączone. Bajty mogłyby zostać zapisane, gdyby nie samodzielne xprzypadki testowe.

Neil
źródło
1

Perl 5 , 101 + 1 ( -p) = 102 bajty

%k=qw/c ĉ g ĝ h ĥ j ĵ s ŝ u ŭ C Ĉ G Ĝ H Ĥ J Ĵ S Ŝ U Ŭ/;$"=join"|",keys%k;s/($")x/$k{$1}/g

Wypróbuj online!

Xcali
źródło
1

JavaScript (ES6), 92 bajty

s=>[..."cghjsuCGHJSU"].reduce((a,v,i)=>a.split(v+"x").join("ĉĝĥĵŝŭĈĜĤĴŜŬ"[i]),s)

Wypróbuj online!

Zalecana tutaj metoda łączenia z podziałem w celu zmniejszenia liczby bajtów, ponieważ new RegExp(/*blah*/)konstruktor zajął zbyt wiele bajtów.

Porównanie:

Original: a.replace(new RegExp(v+"x", "g"), "ĉĝĥĵŝŭĈĜĤĴŜŬ"[i])
New     : a.split(v+"x").join("ĉĝĥĵŝŭĈĜĤĴŜŬ"[i])

Krótszy, łączący podejście akcentujące (63 bajty), ale z widocznymi artefaktami.

s=>s.replace(/([cghjs])x/gi," ̂$1").replace(/(u)x/gi," ̌$1");

Przypis: Odbieram swoją odpowiedź 92 bajty, ponieważ 63-bajtowe rozwiązanie zawiera artefakty, które mogą wpływać na wynik.

Shieru Asakoto
źródło
1

APL (Dyalog Unicode) , 57 bajtów

Anonimowa ukryta funkcja. Zastosowania:

  1. Funkcja prefiksu do ciągu. To transliteruje ciąg.

  2. Funkcja prefiksu do listy ciągów. To transliteruje ciągi.

  3. Funkcja poprawki z numerem remisu pliku wejściowego jako prawym argumentem i numerem remisu pliku wyjściowego jako lewym argumentem. Spowoduje to zapełnienie pliku wyjściowego transliterowaną zawartością pliku wejściowego.

('cghjsuCGHJSU',¨'x')⎕R(,¨'ĉĝĥĵŝŭĈĜĤĴŜŬ')

(... )⎕R(... ) PCRE R EUmieãæ

'cghjsuCGHJSU' te litery

,¨'x' każdy po którym następuje x

 … z…

,¨'ĉĝĥĵŝŭĈĜĤĴŜŬ' każda z tych liter jako ciągi znaków

Wypróbuj online!

Adám
źródło
1

J , 64 63 bajtów

rplc((_2]\'ĉĝĥĵŝŭĈĜĤĴŜŬ');~"1'cghjsuCGHJSU',.'x')"0

Jak to działa:

Za pomocą _2]\przestawiam ciąg „ŬŜŬ” na 12-rzędową kolumnę, aby dopasować kształt drugiego ciągu.

,. dodaje „x” do każdego znaku ciągu „cghjsuCGHJSU” i tworzy tablicę 12 wierszy na 2 kolumny

;~"1' tworzy listę pudełkowanych par powyższych: „1 - ranga 1 - stosuje się do każdego wiersza.

┌──┬──┐
│cx│ĉ │
├──┼──┤
│gx│ĝ │
├──┼──┤
│hx│ĥ │
├──┼──┤
│jx│ĵ │
├──┼──┤
│sx│ŝ │
├──┼──┤
│ux│ŭ │
├──┼──┤
│Cx│Ĉ │
├──┼──┤
│Gx│Ĝ │
├──┼──┤
│Hx│Ĥ │
├──┼──┤
│Jx│Ĵ │
├──┼──┤
│Sx│Ŝ │
├──┼──┤
│Ux│Ŭ │
└──┴──┘

rplc używa tych elementów w pudełkach, aby zastąpić każde wystąpienie elementu w lewym pudełku z pary prawym.

Wypróbuj online!

Galen Iwanow
źródło
1

Befunge , 2x48 +1 = 99 bajtów

>~:1+!#@_:"x"-v>$ 11p0"cghjsuCGHJSU"1\ >\31p11g-v
^ # #, : ++$\ _^#1"x"0*4!-"u"g11*"ʊ"!\_^#!:\*g13<

Wypróbuj (TIO jest bardzo dziwne w Befunge i nie mogłem znaleźć żadnego z moich rozwiązań, aby nad tym popracować)

Jak to działa

>~:1+!@_

Pobiera dane wejściowe i sprawdza, czy to koniec. Zakończ program, jeśli tak jest.

          "x"-v>
^ # #, : ++$\ _^

Sprawdza, czy znak jest „x”. Jeśli nie, zachowaj kopię postaci i wydrukuj ją.

               >$ 11p0"cghjsuCGHJSU"1\

Przechowuj ostatni znak w (1,1). Umieszcza wszystkie znaki, aby sprawdzić na stosie.

                                       >\31p11g-v
                                      _^#!:\*g13<

Porównaj ostatni znak ze wszystkimi wartościami na stosie.

                 1"x"0*4!-"u"g11*"ʊ"!\

Pomnóż kontrolę (0 lub 1) przez ʊ (wartość Unicode 650). Sprawdź, czy postać była au (dla breve) i jeśli tak, dodaje 4 do stosu. Na koniec dodaj również wartość ascii x (100). Suma sumuje się z poprawnym akcentem w razie potrzeby lub po prostu „x”, jeśli nie.

>~:1+!#@_  
^ # #, : ++$\ _^#

Dodaj wszystkie wartości ze stosu, wydrukuj go i zachowaj duplikat. Wróć do następnego wejścia.

Jo King
źródło
1

R , 75 70 bajtów

function(s)gsub('([cghjs])x','\\1\U302',gsub('(u)x','\\1\U306',s,T),T)

Wypróbuj online!

-5 bajtów dzięki Giuseppe

Wyjaśnienie

  • gsub('(u)x','\\1\U306',s,T): zamieniaj za skażdym razem wielkie lub małe litery „u” (używając ignore.case=TRUEczwartego argumentu T), a następnie „x”, „u”, po którym następuje Unicode dla breve
  • gsub('([cghjs])x','\\1\U302',gsub('(u)x','\\1\U306',s,T),T): weź wynik tego i zamień każde wystąpienie dużej lub małej litery (używając ignore.case=TRUEczwartego argumentu T) „c”, „g”, „h”, „j” lub „s”, a następnie „x” na litera, po której następuje Unicode na obwód
duckmayr
źródło
użycie kolejności argumentów zamiast nazywania oszczędza 3 bajty, a kolejne dwa pozbywają się wiodącego zera \U0302i \U0306: Wypróbuj online!
Giuseppe,
@Giuseppe - świetny pomysł, dzięki!
duckmayr
1

QuadR , 25 bajtów

Łączenie edycji znaków diakrytycznych.

ux
([cghjs])x
 ̆&
 ̂\1

i flaga

Wypróbuj online!

Zastąpić…

(u)x         u followed by x and
([cghjs])x   any of these letters followed by x 
 ̆\1          by a breve followed by the first group (the u) and
 ̂\1          a circumflex followed by the first group (the letter)

rozróżniana I nsensitively

Odpowiednik następującego kodu Dyalog APL:

'(u)x' '([cghjs])x'R' ̆\1' ' ̂\1'
Adám
źródło
Dlaczego to 28, a nie 24 bajty?
Erik the Outgolfer
@EriktheOutgolfer TIO's SBCS counter mylił mnie. Naprawiony. Dzięki. Zaraz, czy to znaczy, że wygrałem?
Adám
Huh, teraz wygląda na to, że ma 27 bajtów (skopiowanych z TIO), ale 24 bajty po skopiowaniu stąd. Co to jest kodowanie QuadR i co jest poprawne?
Erik the Outgolfer
@EriktheOutgolfer Oba linki zgłaszają 24 na moim FFQ / Win10. QuadR używa Dyalog Classic lub dowolnego Unicode.
Adám
Czyli to 24 bajty czy co?
Erik the Outgolfer
1

C, 145 144 bajtów

Kolejne podejście C. Wróć, zastępując dane wejściowe, wykorzystując fakt, że circumflex / breve ma 2 bajty.

-1 bajty dzięki Steadybox .

i,t;f(char*s){for(t=1;*s;s++)if(*s^'x')for(i=12,t=1;i--;)t="cghjsuCGHJSU"[i]-*s?t:i*2;else t^1&&memcpy(s-1,"ĉĝĥĵŝŭĈĜĤĴŜŬ"+t,2),t=1;}

Wypróbuj online!

Colera Su
źródło
1
Używanie t^1&&memcpy(s-1,"ĉĝĥĵŝŭĈĜĤĴŜŬ"+t,2),t=1;zamiast t^1?memcpy(s-1,"ĉĝĥĵŝŭĈĜĤĴŜŬ"+t,2),t=1:0;zapisuje jeden bajt. Wypróbuj online!
Steadybox
1

Mathematica, 81 bajtów lub 57 bajtów

StringReplace[RemoveDiacritics@#<>"x"->#&/@Characters@"ĉĝĥĵŝŭĈĜĤĴŜŬ"]

Stosuje zasadę wymiany, w której litera bez czapki wraz z „x” jest zastępowana literą.

Oto alternatywa z użyciem dodanego znaku akcentu: StringReplace[{"ux"->"ŭ","Ux"->"Ŭ",c_~~"x":>c<>"̂"}]

M. Sterna
źródło
1

Perl 5 , 49 + 2 ( -p -C) = 61 51 bajtów

s/[CGHJScghjs]\Kx/\x{0302}/g;s/[Uu]\Kx/\x{0306}/g

Wypróbuj online!

Zaoszczędzono 10 bajtów dzięki Nahuelowi Fouilleulowi

Ciemne serce
źródło
można zapisać 7 bajtów:s/[CGHJScghjs]\Kx/\x{0302}/g;s/[Uu]\Kx/\x{0306}/g
Nahuel Fouilleul
wydaje się, że działa również tylko z ostrzeżeniem -Ci bez niego -C( Wide character in print)
Nahuel Fouilleul
1
z Perlrun-C on its own (not followed by any number or option list), or the empty string "" for the PERL_UNICODE environment variable, has the same effect as -CSDL.
Nahuel Fouilleul
0

CJam , 51 bajtów

q"ĉĝĥĵŝŭĈĜĤĴŜŬ""cghjsuCGHJSU".{'x+@\/*}

Wypróbuj online!

Wyjaśnienie:

q                   Read input
"ĉĝĥĵŝŭĈĜĤĴŜŬ"      String literal
"cghjsuCGHJSU"      Another string literal
.{                  Iterate over the strings in parallel
  'x+                 Add an 'x to the normal character
  @                   Rotate to bring the input to the top of stack
  \                   Swap to bring the "cx" to the top
  /                   Split the input on instances of "cx"
  *                   Join the input on instances of the accented character
}
Esolanging Fruit
źródło
Czy to naprawdę 39 bajtów? Liczę 39 znaków i nie sądzę, aby CJam miał specjalne kodowanie.
user202729,
@ user202729 Zmieniono (TIO z jakiegoś powodu liczone jako bajty)
Esolanging Fruit
Ponieważ TIO uważa, że ​​wszystkie języki gry w golfa mają specjalną stronę kodową znaków i nie zawraca sobie głowy sprawdzaniem, czy wszystkie znaki są na właściwej stronie kodowej.
user202729,
0

sed, 108 bajtów

s/cx/ĉ/g
s/gx/ĝ/g
s/hx/ĥ/g
s/jx/ĵ/g
s/sx/ŝ/g
s/ux/ŭ/g
s/Cx/Ĉ/g
s/Gx/Ĝ/g
s/Hx/Ĥ/g
s/Jx/Ĵ/g
s/Sx/Ŝ/g
s/Ux/Ŭ/g
iBug
źródło
Należy sformatować kod jako kod przez `...`lub <pre><code>...</code></pre>lub 4 tiret.
user202729,
@ user202729 Oczywiście to wiedziałem. Przesyłałem z mojego telefonu z Androidem, więc nie sformatowałem go poprawnie.
iBug
2
Wygląda na to, że ma 119 bajtów.
Erik the Outgolfer
0

PowerShell, 58 bajtów

Ma 54 znaki, a zapisanie go w programie PowerShell ISE sprawia, że ​​jest to UTF-8 + BOM na 58 bajtów. Nie wyświetla się tak ładnie w przeglądarce:

$args-replace'(?<=u)x','̆'-replace'(?<=[cghjs])x','̂'

regex zastępuje x łączącymi znakami Unicode z komentarza @ user202729.

na przykład

PS C:\> .\eo.ps1 "Cxu vi sxatas la cxapelliterojn? Mi ankaux."
Ĉu vi ŝatas la ĉapelliterojn? Mi ankaŭ.
TessellatingHeckler
źródło
0

Clojure, 126 115 bajtów

-11 bajtów, zmieniając mapę zastępczą na partycję ciągu.

#(reduce(fn[a[f r]](clojure.string/replace a(str f\x)(str r)))%(partition 2"cĉgĝhĥjĵsŝuŭCĈGĜHĤJĴSŜUŬ")) 

Zmniejszenie w stosunku do mapy zamienników do wyszukania i tego, co je zastąpić.

Nadal pracuję nad sposobem skompresowania mapy zastępczej.

(defn translate [^String esperanto]
  (reduce (fn [acc [f r]] (clojure.string/replace
                            acc ; Replace the translation so far by
                            (str f \x) ; adding a x after each character, search for it in the string,
                            (str r))) ; and replace it with a stringified accented char

          esperanto ; Before the reduction happens, the accumulator is the original string

          ; A list of [char-to-find what-to-replace-with] pairs
          (partition 2"cĉgĝhĥjĵsŝuŭCĈGĜHĤJĴSŜUŬ")))))
Carcigenicate
źródło
0

JavaScript (ES6), 91 bajtów

(i,s='cĉgĝhĥjĵsŝuŭCĈGĜHĤJĴSŜUŬ')=>i.replace(/.x/g,m=>s[1+s.search(m[0])||s]||m)

Wypróbuj online!

Patrick Stephansen
źródło
0

Scala , 110 bajtów

Nudne rozwiązanie wyrażenia regularnego:

def?(s:String)="(.)x".r.replaceAllIn(s,m=>m.group(0)(0)+(if(m.group(0)(0).toUpper=='U')"\u0306"else"\u0302"))

Stare rozwiązanie SCALA (116 bajtów)

def?(s:String)=s.foldLeft("")((r,c)=>if(c=='x')r.init+r.last+(if(r.last.toUpper=='U')"\u0306"else"\u0302")else r+c)

Nie golfił

def?(s:String)=
  s.foldLeft("")((r,c)=>  // 'Fold' string with empty string as first result
    if(c=='x')            // If current character is x
      r.init+             // Take the every character from result but the last
        r.last+           // The last character from result and add
          (if(r.last.toUpper=='U')
            "\u0306"      // combining breve if 'u' or 'U'
          else"\u0302")   // combining circumflex in any other case
 else r+c                 // Otherwise return result + character
)
AmazingDreams
źródło
0

JavaScript, 35 znaków, 36 bajtów

s=>s.replace(/([cghjsu])x/gi,"$1̂")
ericw31415
źródło