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 Code-Golf . 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 N
ist 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
var QUESTION_ID=149292,OVERRIDE_USER=47670;function answersUrl(e){return"https://api.stackexchange.com/2.2/questions/"+QUESTION_ID+"/answers?page="+e+"&pagesize=100&order=desc&sort=creation&site=codegolf&filter="+ANSWER_FILTER}function commentUrl(e,s){return"https://api.stackexchange.com/2.2/answers/"+s.join(";")+"/comments?page="+e+"&pagesize=100&order=desc&sort=creation&site=codegolf&filter="+COMMENT_FILTER}function getAnswers(){jQuery.ajax({url:answersUrl(answer_page++),method:"get",dataType:"jsonp",crossDomain:!0,success:function(e){answers.push.apply(answers,e.items),answers_hash=[],answer_ids=[],e.items.forEach(function(e){e.comments=[];var s=+e.share_link.match(/\d+/);answer_ids.push(s),answers_hash[s]=e}),e.has_more||(more_answers=!1),comment_page=1,getComments()}})}function getComments(){jQuery.ajax({url:commentUrl(comment_page++,answer_ids),method:"get",dataType:"jsonp",crossDomain:!0,success:function(e){e.items.forEach(function(e){e.owner.user_id===OVERRIDE_USER&&answers_hash[e.post_id].comments.push(e)}),e.has_more?getComments():more_answers?getAnswers():process()}})}function getAuthorName(e){return e.owner.display_name}function process(){var e=[];answers.forEach(function(s){var r=s.body;s.comments.forEach(function(e){OVERRIDE_REG.test(e.body)&&(r="<h1>"+e.body.replace(OVERRIDE_REG,"")+"</h1>")});var a=r.match(SCORE_REG);a&&e.push({user:getAuthorName(s),size:+a[2],language:a[1],link:s.share_link})}),e.sort(function(e,s){var r=e.size,a=s.size;return r-a});var s={},r=1,a=null,n=1;e.forEach(function(e){e.size!=a&&(n=r),a=e.size,++r;var t=jQuery("#answer-template").html();t=t.replace("{{PLACE}}",n+".").replace("{{NAME}}",e.user).replace("{{LANGUAGE}}",e.language).replace("{{SIZE}}",e.size).replace("{{LINK}}",e.link),t=jQuery(t),jQuery("#answers").append(t);var o=e.language;/<a/.test(o)&&(o=jQuery(o).text()),s[o]=s[o]||{lang:e.language,user:e.user,size:e.size,link:e.link}});var t=[];for(var o in s)s.hasOwnProperty(o)&&t.push(s[o]);t.sort(function(e,s){return e.lang>s.lang?1:e.lang<s.lang?-1:0});for(var c=0;c<t.length;++c){var i=jQuery("#language-template").html(),o=t[c];i=i.replace("{{LANGUAGE}}",o.lang).replace("{{NAME}}",o.user).replace("{{SIZE}}",o.size).replace("{{LINK}}",o.link),i=jQuery(i),jQuery("#languages").append(i)}}var ANSWER_FILTER="!t)IWYnsLAZle2tQ3KqrVveCRJfxcRLe",COMMENT_FILTER="!)Q2B_A2kjfAiU78X(md6BoYk",answers=[],answers_hash,answer_ids,answer_page=1,more_answers=!0,comment_page;getAnswers();var SCORE_REG=/<h\d>\s*([^\n,]*[^\s,]),.*?(\d+)(?=[^\n\d<>]*(?:<(?:s>[^\n<>]*<\/s>|[^\n<>]+>)[^\n\d<>]*)*<\/h\d>)/,OVERRIDE_REG=/^Override\s*header:\s*/i;
body{text-align:left!important}#answer-list,#language-list{padding:10px;width:290px;float:left}table thead{font-weight:700}table td{padding:5px}
<script src="https://ajax.googleapis.com/ajax/libs/jquery/2.1.1/jquery.min.js"></script> <link rel="stylesheet" type="text/css" href="//cdn.sstatic.net/codegolf/all.css?v=83c949450c8b"> <div id="answer-list"> <h2>Leaderboard</h2> <table class="answer-list"> <thead> <tr><td></td><td>Author</td><td>Language</td><td>Size</td></tr></thead> <tbody id="answers"> </tbody> </table> </div><div id="language-list"> <h2>Winners by Language</h2> <table class="language-list"> <thead> <tr><td>Language</td><td>User</td><td>Score</td></tr></thead> <tbody id="languages"> </tbody> </table> </div><table style="display: none"> <tbody id="answer-template"> <tr><td>{{PLACE}}</td><td>{{NAME}}</td><td>{{LANGUAGE}}</td><td>{{SIZE}}</td><td><a href="{{LINK}}">Link</a></td></tr></tbody> </table> <table style="display: none"> <tbody id="language-template"> <tr><td>{{LANGUAGE}}</td><td>{{NAME}}</td><td>{{SIZE}}</td><td><a href="{{LINK}}">Link</a></td></tr></tbody> </table>
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.
̂
und das Kombinieren von Breve ist bei 0306̆
.Antworten:
QuadR , 65 Bytes
Probieren Sie es online!
.x
Ersetzen Sie alle Zeichen gefolgt von "x" durch3::⍵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:
quelle
('cghjsuCGHJSU',¨'x')⎕r(,¨'ĉĝĥĵŝŭĈĜĤĴŜŬ')
Retina , 27 Bytes
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 aT
umwandeln sollte (ini
gnoring 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.
quelle
C,
173154 BytesVielen Dank an @Colera Su für die Einsparung von 17 Bytes!
Probieren Sie es online!
Erläuterung:
quelle
\0
? Ein Null-Byte-Literal verwenden .write(1,"..."+i*2,2)
17 Bytes speichern. Probieren Sie es online!Python 3 , 81 Bytes
Probieren Sie es online!
Generiert und wertet den String aus:
Erik der Outgolfer hat ein Byte gespeichert.
quelle
/// 75 Bytes
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:
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:
quelle
Python 3 , 95 Bytes
Probieren Sie es online!
-10 Bytes dank WhatToDo
-1 Bytes dank Colera Su
quelle
Netzhaut , 55 Bytes
Probieren Sie es online! Nicht kombinierender Ansatz. Ohne die eigenständigen
x
Testfälle könnten Bytes gespeichert werden.quelle
Perl 5 , 101 + 1 (
-p
) = 102 BytesProbieren Sie es online!
quelle
JavaScript (ES6), 92 Byte
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:
Kürzere, kombinierende Akzentannäherung (63 Bytes), aber mit einigen sichtbaren Artefakten.
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.
quelle
APL (Dyalog Unicode) , 57 Byte
Anonyme stillschweigende Funktion. Verwendungen:
Präfixfunktion für Zeichenfolge. Dadurch wird die Zeichenfolge transliteriert.
Präfixfunktion für die Liste der Zeichenfolgen. Dadurch werden die Zeichenfolgen transliteriert.
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 ZeichenfolgeProbieren Sie es online!
quelle
J ,
6463 BytesWie 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.rplc
Verwendet diese Boxed Items, um jedes Vorkommen des linken Boxed Items von einem Paar durch das rechte zu ersetzen.Probieren Sie es online!
quelle
Befunge , 2x48 +1 = 99 Bytes
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
Ruft Eingaben ab und überprüft, ob es das Ende ist. Beenden Sie das Programm, wenn dies der Fall ist.
Überprüft, ob das Zeichen ein "x" ist. Wenn nicht, behalten Sie eine Kopie des Zeichens und drucken Sie sie aus.
Speichern Sie das letzte Zeichen bei (1,1). Setzt alle Zeichen, die eingecheckt werden sollen, in den Stapel.
Vergleichen Sie das letzte Zeichen mit allen Werten im Stapel.
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".
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.
quelle
R ,
7570 BytesProbieren Sie es online!
-5 Bytes dank Giuseppe
Erläuterung
gsub('(u)x','\\1\U306',s,T)
: Ersetzen Sie beis
jedem Auftreten eines Groß- oder Kleinbuchstaben "u" (durch Verwendungignore.case=TRUE
des vierten ArgumentsT
), gefolgt von einem "x", dem "u", gefolgt vom Unicode für eine Abkürzunggsub('([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 duignore.case=TRUE
das vierte Argument verwendestT
) "c", "g", "h", "j" oder "s" gefolgt von einem "x" durch der Brief gefolgt vom Unicode für einen Zirkumflexquelle
\U0302
und beseitigt\U0306
: Probieren Sie es online aus!QuadR , 25 Bytes
Kombinieren der diakritischen Ausgabe.
i
FlaggeProbieren Sie es online!
Ersetzen…
Fall ich unempfindlich
Entspricht dem folgenden Dyalog APL-Code:
quelle
C
145144 BytesEin weiterer C-Ansatz. Rückkehr durch Überschreiben der Eingabe unter Verwendung der Tatsache, dass Zirkumflex / Breve 2 Bytes sind.
-1 Bytes dank Steadybox .
Probieren Sie es online!
quelle
t^1&&memcpy(s-1,"ĉĝĥĵŝŭĈĜĤĴŜŬ"+t,2),t=1;
stattt^1?memcpy(s-1,"ĉĝĥĵŝŭĈĜĤĴŜŬ"+t,2),t=1:0;
spart man ein Byte. Probieren Sie es online!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<>"̂"}]
quelle
Perl 5 , 49 + 2 (
-p -C
) =6151 BytesProbieren Sie es online!
Dank Nahuel Fouilleul 10 Bytes gespart
quelle
s/[CGHJScghjs]\Kx/\x{0302}/g;s/[Uu]\Kx/\x{0306}/g
-C
und ohne-C
Warnung (Wide character in print
)-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.
CJam , 51 Bytes
Probieren Sie es online!
Erläuterung:
quelle
sed, 108 bytes
quelle
`...`
oder<pre><code>...</code></pre>
oder 4 Einrückungen formatieren .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:
regex ersetzt das x durch die kombinierten Unicode-Zeichen aus dem Kommentar von @ user202729.
z.B
quelle
Clojure,
126115 Bytes-11 Byte durch Ändern der Ersatzzuordnung in eine Partition einer Zeichenfolge.
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.
quelle
JavaScript (ES6), 91 Byte
Probieren Sie es online!
quelle
Scala , 110 Bytes
Langweilige Regex-Lösung:
Alte Scala-Lösung (116 Bytes)
Ungolfed
quelle
JavaScript, 35 Zeichen, 36 Bytes
quelle
sed, 40 Bytes (38 Zeichen)
Probieren Sie es online!
Ich glaube, das unterscheidet sich genug von der Antwort von iBug .
quelle