Analysiere mein Esperanto!


21

Die berühmte konstruierte Sprache Esperanto verwendet das lateinische Alphabet (Details finden Sie auf der verlinkten Wikipedia-Seite). Es gibt jedoch einige Zeichen mit Akzenten: ĉ, ĝ, ĥ, ĵ, ŝ und ŭ . (C-Zirkumflex, g-Zirkumflex, h-Zirkumflex, j-Zirkumflex, s-circumflexa und u- breve .) Natürlich sind diese Zeichen sehr schwer zu geben. Auch bei dieser Frage musste ich im Unicode-Selektor nach den Zeichen suchen. Aus diesem Grund wurde eine Konvention mit dem Buchstaben "x" für die elektronische Verwendung entwickelt. Beispielsweise wird "cxu" für "ĉu" verwendet. (Hinweis: Der Buchstabe "x" wird im Esperanto-Alphabet normalerweise nicht verwendet. "

Ich bin jedoch ein Sprachpurist! Dieser Unsinn bringt mich um! Ich benötige ein Programm, um dies zu beheben, am besten so kurz wie möglich, damit ich es so schnell wie möglich in mein Terminal eingeben kann!

Herausforderung

Ihre Mission ist es, eine Folge von Esperanto mit x-convention zu nehmen und in echtes Esperanto umzuwandeln.

In der Tat müssen Sie Folgendes abbilden:

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

Alle anderen druckbaren ASCII-Zeichen sollten akzeptiert und nicht geändert werden. Unicode wäre nett, aber nicht notwendig.

Die Ein- und Ausgabe kann in jedem für Ihre Sprache angemessenen Format erfolgen. Viel Glück!

Testfälle

"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"

Wertung

Das ist . Die Antworten werden nach dem kleinsten Bytecount in der Standardcodierung der Sprache bewertet.

Hier ist ein Stack-Snippet, um sowohl eine reguläre Rangliste als auch eine Übersicht der Gewinner nach Sprache zu erstellen.

Um sicherzustellen, dass Ihre Antwort angezeigt wird, beginnen Sie Ihre Antwort mit einer Überschrift. Verwenden Sie dazu die folgende Markdown-Vorlage:

# Language Name, N bytes

Wo Nist die Größe Ihres Beitrags? Wenn Sie Ihren Score zu verbessern, Sie können alte Rechnungen in der Überschrift halten, indem man sich durch das Anschlagen. Zum Beispiel:

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

Wenn Sie mehrere Zahlen in Ihre Kopfzeile aufnehmen möchten (z. B. weil Ihre Punktzahl die Summe von zwei Dateien ist oder wenn Sie die Strafen für Interpreter-Flags separat auflisten möchten), stellen Sie sicher, dass die tatsächliche Punktzahl die letzte Zahl in der Kopfzeile ist:

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

Sie können den Namen der Sprache auch als Link festlegen, der dann im Leaderboard-Snippet angezeigt wird:

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

Viel Glück, viel Spaß und Verbesserungsvorschläge!

Klarstellungen:

  • Sie müssen sich nur um druckbare ASCII-Zeichen kümmern .

  • Sie müssen nur ein Zeichen ausgeben, das der korrekten Ausgabe entspricht. Ja, dies bedeutet, dass Sie den Akzent auf das Standardzeichen setzen können.


ASCII bedeutet hier 20-7E druckbare Zeichen, 00-7F oder was?
user202729

Alle druckbaren.
OldBunny2800

Anmerkung: Ich habe eine Klarstellung hinzugefügt, dass Sie den Buchstaben und den Modifikator-Akzent verwenden können.
OldBunny2800

5
Das Kombinieren von Zirkumflex ist bei 0302 ̂und das Kombinieren von Breve ist bei 0306 ̆.
User202729

^ Jeder nimmt 2 Bytes in UTF8 als TIO-Anzahl .
User202729

Antworten:


9

QuadR , 65 Bytes

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

Probieren Sie es online!

.x Ersetzen Sie alle Zeichen gefolgt von "x" durch

3::⍵M Geben Sie bei einem Indizierungsfehler die Übereinstimmung unverändert zurück.
 Versuchen Sie nun Folgendes:
'ĉĝĥĵŝŭĈĜĤĴŜŬ'[] Indizieren Sie in diese Zeichenfolge  den  Index
  ⍵M des
  ersten Buchstabens der Übereinstimmung  in dieser Zeichenfolge
  
  'cghjsuCGHJSU'

Dies entspricht der stillschweigenden Dyalog APL-Funktion:

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

Gute Antwort! +1
OldBunny2800

Ich bin nicht sicher, wie Bytes hier gezählt werden. Ist die einfache Verwendung von ⎕R nicht kürzer? ('cghjsuCGHJSU',¨'x')⎕r(,¨'ĉĝĥĵŝŭĈĜĤĴŜŬ')
28.

@ngn Es ist, aber mein Akku ist leer, bevor ich die Gelegenheit hatte, das zu posten.
Adám

6

Retina , 27 Bytes

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

Probieren Sie es online!

Dieses Programm besteht aus zwei Transliterationen. Da das Kombinieren von Zeichen im Code nicht gut funktioniert, sollte die erste Zeile ungefähr so ​​aussehen iT`x`^`[cghjs]x, dass sie ^für das kombinierende Zeichen mit Zirkumflex-Akzent steht. Was dies bedeutet ist, dass es alle s in der Eingabe in a Tumwandeln sollte (in ignoring case) , wann immer sie einem Buchstaben in folgen .x^[cghjs]


Hinweis: TIO misst diesen Code fälschlicherweise als 25 Byte. Tatsächlich verwendet dieses Retina-Programm die UTF-8-Codierung (andere Programme können UTF-32 oder ISO 8859-1 verwenden), und die beiden vorhandenen Kombinationszeichen kosten jeweils 2 Byte.


5

C,  173  154 Bytes

Vielen Dank an @Colera Su für die Einsparung von 17 Bytes!

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);}

Probieren Sie es online!

Erläuterung:

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);
}

Nett! Kann ich bitte eine Erklärung haben?
OldBunny2800

Wahrscheinlich können Sie statt \0? Ein Null-Byte-Literal verwenden .
User202729

(aber das funktioniert leider nicht auf TIO)
User202729

Sie können write(1,"..."+i*2,2)17 Bytes speichern. Probieren Sie es online!
Colera So

5

Python 3 , 81 Bytes

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

Probieren Sie es online!

Generiert und wertet den String aus:

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 der Outgolfer hat ein Byte gespeichert.


@EriktheOutgolfer Schön, danke!
28.

3

/// 75 Bytes

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

Hinweis: Da bei der OP-Anforderung alle druckbaren Zeichen verarbeitet werden müssen, dürfen meine ausgewählten "Sonderzeichen" nicht druckbar sein. Also habe ich statt Tab und Newline gewählt, was meine bytecount- oder Code-Funktionalität nicht verändert. Der Code würde so aussehen:

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

Voraussetzung ist jedoch, dass die Eingabe keine Tabulatoren oder Zeilenumbrüche enthält.

Probieren Sie es online!

Da ///keine Eingaben möglich sind, sollten Sie die Eingabe nach dem Code einfügen.

Ziemlich einfach. Ich schätze, es kann nicht kürzer sein, da ///für jeden Charakter eine spezielle Behandlung erforderlich ist.

Erläuterung:

/,/\/\//       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.

3

Python 3 , 95 Bytes

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

Probieren Sie es online!

-10 Bytes dank WhatToDo
-1 Bytes dank Colera Su



@ user507295 oh kluge idee. Vielen Dank!
HyperNeutrino

Verwenden Sie und-oder Trick, um ein Byte zu speichern: Probieren Sie es online!
Colera So

@ColeraSu oh cool, danke. nicht sicher, warum dieser Trick verschwunden ist D:
HyperNeutrino

@HyperNeutrino Weil ich diesen Trick nicht kannte. Es tut uns leid!
WhatToDo



1

JavaScript (ES6), 92 Byte

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

Probieren Sie es online!

Verwendete Split-Join-Methode, die hier empfohlen wird , um die Anzahl der new RegExp(/*blah*/)Bytes zu verringern, da der Konstruktor zu viele Bytes belegt hat.

Vergleich:

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

Kürzere, kombinierende Akzentannäherung (63 Bytes), aber mit einigen sichtbaren Artefakten.

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

Fußnote: Ich fordere meine Antwort für 92 Byte an, da die 63-Byte-Lösung Artefakte enthält, die sich auf die Ausgabe auswirken können.


1

APL (Dyalog Unicode) , 57 Byte

Anonyme stillschweigende Funktion. Verwendungen:

  1. Präfixfunktion für Zeichenfolge. Dadurch wird die Zeichenfolge transliteriert.

  2. Präfixfunktion für die Liste der Zeichenfolgen. Dadurch werden die Zeichenfolgen transliteriert.

  3. Infix-Funktion mit der Bindungsnummer der Eingabedatei als rechtem Argument und der Bindungsnummer der Ausgabedatei als linkem Argument. Dadurch wird die Ausgabedatei mit dem transliterierten Inhalt der Eingabedatei gefüllt.

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

(... )⎕R(... ) PCRE R eplace

'cghjsuCGHJSU' diese Buchstaben

,¨'x' jeweils gefolgt von einem x

 … Mit…

,¨'ĉĝĥĵŝŭĈĜĤĴŜŬ' Jeder dieser Buchstaben als Zeichenfolge

Probieren Sie es online!


1

J , 64 63 Bytes

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

Wie es funktioniert:

Mit _2]\ ordne ich die Zeichenfolge 'into' in eine 12-zeilige Spalte um, um sie an die Form der anderen Zeichenfolge anzupassen.

,. Fügt jedem Zeichen der Zeichenfolge 'cghjsuCGHJSU' 'x' hinzu und erstellt ein Array mit 12 Zeilen und 2 Spalten

;~"1' erstellt eine Liste der oben genannten Box-Paare: "1 - Rang 1 - gilt für jede Zeile.

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

rplc Verwendet diese Boxed Items, um jedes Vorkommen des linken Boxed Items von einem Paar durch das rechte zu ersetzen.

Probieren Sie es online!


1

Befunge , 2x48 +1 = 99 Bytes

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

Versuch es (TIO ist super komisch in Bezug auf Befunge und ich konnte keine meiner Lösungen dazu bringen, daran zu arbeiten)

Wie es funktioniert

>~:1+!@_

Ruft Eingaben ab und überprüft, ob es das Ende ist. Beenden Sie das Programm, wenn dies der Fall ist.

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

Überprüft, ob das Zeichen ein "x" ist. Wenn nicht, behalten Sie eine Kopie des Zeichens und drucken Sie sie aus.

               >$ 11p0"cghjsuCGHJSU"1\

Speichern Sie das letzte Zeichen bei (1,1). Setzt alle Zeichen, die eingecheckt werden sollen, in den Stapel.

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

Vergleichen Sie das letzte Zeichen mit allen Werten im Stapel.

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

Multiplizieren Sie die Prüfung (0 oder 1) mit ʊ (Unicode-Wert 650). Überprüfen Sie, ob der Charakter au war (für die Abkürzung) und fügen Sie dem Stapel 4 hinzu, wenn dies der Fall ist. Zum Schluss addieren Sie noch den ASCII-Wert von x (100). Die Summe ergibt bei Bedarf den richtigen Akzent oder, falls nicht, nur ein "x".

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

Addieren Sie alle Werte im Stapel, drucken Sie ihn aus und führen Sie ein Duplikat. Gehen Sie für die nächste Eingabe zurück nach oben.


1

R , 75 70 Bytes

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

Probieren Sie es online!

-5 Bytes dank Giuseppe

Erläuterung

  • gsub('(u)x','\\1\U306',s,T): Ersetzen Sie bei sjedem Auftreten eines Groß- oder Kleinbuchstaben "u" (durch Verwendung ignore.case=TRUEdes vierten Arguments T), gefolgt von einem "x", dem "u", gefolgt vom Unicode für eine Abkürzung
  • gsub('([cghjs])x','\\1\U302',gsub('(u)x','\\1\U306',s,T),T): nimm das Ergebnis davon und ersetze jedes Vorkommen eines Groß- oder Kleinbuchstabens (indem du ignore.case=TRUEdas vierte Argument verwendest T) "c", "g", "h", "j" oder "s" gefolgt von einem "x" durch der Brief gefolgt vom Unicode für einen Zirkumflex

Durch die Verwendung der Argumentreihenfolge anstelle der Benennung werden 3 Bytes gespart, und bei zwei weiteren wird die führende Null in \U0302und beseitigt\U0306 : Probieren Sie es online aus!
Giuseppe

@ Giuseppe - tolle Idee, danke!
duckmayr

1

QuadR , 25 Bytes

Kombinieren der diakritischen Ausgabe.

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

i Flagge

Probieren Sie es online!

Ersetzen…

(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)

Fall ich unempfindlich

Entspricht dem folgenden Dyalog APL-Code:

'(u)x' '([cghjs])x'R' ̆\1' ' ̂\1'

Warum sind das 28 und nicht 24 Bytes?
Erik der Outgolfer

@EriktheOutgolfer TIOs SBCS-Zähler hat mich verwirrt. Fest. Vielen Dank. Warte, heißt das, dass ich gewinne?
Adám

Huh, jetzt sieht es so aus, als wären es 27 Bytes (von TIO kopiert), aber 24 Bytes, wenn man von hier kopiert. Was ist die QuadR-Codierung und welche ist korrekt?
Erik der Outgolfer

@EriktheOutgolfer Beide Links melden 24 auf meinem FFQ / Win10. QuadR verwendet Dyalog Classic oder einen beliebigen Unicode.
Adám

Also sind es 24 Bytes oder was?
Erik der Outgolfer 29.11.17

1

C 145 144 Bytes

Ein weiterer C-Ansatz. Rückkehr durch Überschreiben der Eingabe unter Verwendung der Tatsache, dass Zirkumflex / Breve 2 Bytes sind.

-1 Bytes dank 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;}

Probieren Sie es online!


1
Mit t^1&&memcpy(s-1,"ĉĝĥĵŝŭĈĜĤĴŜŬ"+t,2),t=1;statt t^1?memcpy(s-1,"ĉĝĥĵŝŭĈĜĤĴŜŬ"+t,2),t=1:0;spart man ein Byte. Probieren Sie es online!
Steadybox

1

Mathematica, 81 Bytes oder 57 Bytes

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

Es gilt eine Ersetzungsregel, bei der der Buchstabe ohne Hut zusammen mit einem "x" durch den Buchstaben ersetzt wird.

Hier ist eine Alternative mit dem zusätzlichen Akzentzeichen: StringReplace[{"ux"->"ŭ","Ux"->"Ŭ",c_~~"x":>c<>"̂"}]


1

Perl 5 , 49 + 2 ( -p -C) = 61 51 Bytes

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

Probieren Sie es online!

Dank Nahuel Fouilleul 10 Bytes gespart


könnte 7 Bytes sparen:s/[CGHJScghjs]\Kx/\x{0302}/g;s/[Uu]\Kx/\x{0306}/g
Nahuel Fouilleul

scheint es funktioniert auch nur mit -Cund ohne -CWarnung ( Wide character in print)
Nahuel Fouilleul

1
aus 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 Bytes

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

Probieren Sie es online!

Erläuterung:

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
}

Ist das wirklich 39 Bytes? Ich zähle 39 Zeichen und glaube nicht, dass CJam eine spezielle Kodierung hat.
user202729

@ user202729 Geändert (TIO hat aus irgendeinem Grund Bytes als Zeichen gezählt)
Esolanging Fruit

Weil TIO der Meinung ist, dass alle Golfsprachen eine spezielle Codepage für Zeichen haben und es nicht stört, zu überprüfen, ob alle Zeichen die richtige Codepage haben.
User202729

0

sed, 108 bytes

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

Sie sollten den Code als Code durch `...`oder <pre><code>...</code></pre>oder 4 Einrückungen formatieren .
user202729

@ user202729 Das wusste ich natürlich. Ich habe von meinem Android-Handy gesendet und es daher nicht richtig formatiert.
iBug

2
Dies sieht aus wie es 119 Bytes lang ist.
Erik der Outgolfer

0

PowerShell, 58 Byte

Durch das Speichern von 54 Zeichen in PowerShell ISE wird UTF-8 + BOM für 58 Byte erstellt. In einem Browser wird es nicht so gut gerendert:

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

regex ersetzt das x durch die kombinierten Unicode-Zeichen aus dem Kommentar von @ user202729.

z.B

PS C:\> .\eo.ps1 "Cxu vi sxatas la cxapelliterojn? Mi ankaux."
Ĉu vi ŝatas la ĉapelliterojn? Mi ankaŭ.

0

Clojure, 126 115 Bytes

-11 Byte durch Ändern der Ersatzzuordnung in eine Partition einer Zeichenfolge.

#(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Ŭ")) 

Eine Verkleinerung über eine Karte von Ersatzteilen, nach denen gesucht werden muss und durch die sie ersetzt werden sollen.

Ich arbeite noch an einer Möglichkeit, die Ersatzkarte zu komprimieren.

(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Ŭ")))))


0

Scala , 110 Bytes

Langweilige Regex-Lösung:

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

Alte Scala-Lösung (116 Bytes)

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)

Ungolfed

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
)

0

JavaScript, 35 Zeichen, 36 Bytes

s=>s.replace(/([cghjsu])x/gi,"$1̂")

Durch die Nutzung unserer Website bestätigen Sie, dass Sie unsere Cookie-Richtlinie und Datenschutzrichtlinie gelesen und verstanden haben.
Licensed under cc by-sa 3.0 with attribution required.