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 golf golfowy . 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 N
jest 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
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>
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.
̂
, a łączenie breve na 0306̆
.Odpowiedzi:
QuadR , 65 bajtów
Wypróbuj online!
.x
zamień dowolny znak, a następnie „x” na3::⍵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:
źródło
('cghjsuCGHJSU',¨'x')⎕r(,¨'ĉĝĥĵŝŭĈĜĤĴŜŬ')
Siatkówka , 27 bajtów
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 powinienT
wymazać (i
przypadek zgarnięcia) wszystkiex
s 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.
źródło
C
173154 bajtówDzięki @Colera Su za oszczędność 17 bajtów!
Wypróbuj online!
Wyjaśnienie:
źródło
\0
?write(1,"..."+i*2,2)
aby zapisać 17 bajtów. Wypróbuj online!Python 3 , 81 bajtów
Wypróbuj online!
Generuje i ocenia ciąg:
Erik the Outgolfer zapisał bajt.
źródło
/// , 75 bajtów
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:
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:
źródło
Python 3 , 95 bajtów
Wypróbuj online!
-10 bajtów dzięki WhatToDo
-1 bajtów dzięki Colera Su
źródło
Siatkówka , 55 bajtów
Wypróbuj online! Podejście niepołączone. Bajty mogłyby zostać zapisane, gdyby nie samodzielne
x
przypadki testowe.źródło
Perl 5 , 101 + 1 (
-p
) = 102 bajtyWypróbuj online!
źródło
JavaScript (ES6), 92 bajty
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:
Krótszy, łączący podejście akcentujące (63 bajty), ale z widocznymi artefaktami.
Przypis: Odbieram swoją odpowiedź 92 bajty, ponieważ 63-bajtowe rozwiązanie zawiera artefakty, które mogą wpływać na wynik.
źródło
APL (Dyalog Unicode) , 57 bajtów
Anonimowa ukryta funkcja. Zastosowania:
Funkcja prefiksu do ciągu. To transliteruje ciąg.
Funkcja prefiksu do listy ciągów. To transliteruje ciągi.
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ówWypróbuj online!
źródło
J ,
6463 bajtówJak 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.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!
źródło
Befunge , 2x48 +1 = 99 bajtów
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
Pobiera dane wejściowe i sprawdza, czy to koniec. Zakończ program, jeśli tak jest.
Sprawdza, czy znak jest „x”. Jeśli nie, zachowaj kopię postaci i wydrukuj ją.
Przechowuj ostatni znak w (1,1). Umieszcza wszystkie znaki, aby sprawdzić na stosie.
Porównaj ostatni znak ze wszystkimi wartościami na stosie.
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.
Dodaj wszystkie wartości ze stosu, wydrukuj go i zachowaj duplikat. Wróć do następnego wejścia.
źródło
R ,
7570 bajtówWypróbuj online!
-5 bajtów dzięki Giuseppe
Wyjaśnienie
gsub('(u)x','\\1\U306',s,T)
: zamieniaj zas
każdym razem wielkie lub małe litery „u” (używającignore.case=TRUE
czwartego argumentuT
), a następnie „x”, „u”, po którym następuje Unicode dla brevegsub('([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ącignore.case=TRUE
czwartego argumentuT
) „c”, „g”, „h”, „j” lub „s”, a następnie „x” na litera, po której następuje Unicode na obwódźródło
\U0302
i\U0306
: Wypróbuj online!QuadR , 25 bajtów
Łączenie edycji znaków diakrytycznych.
i
flagaWypróbuj online!
Zastąpić…
rozróżniana I nsensitively
Odpowiednik następującego kodu Dyalog APL:
źródło
C,
145144 bajtówKolejne podejście C. Wróć, zastępując dane wejściowe, wykorzystując fakt, że circumflex / breve ma 2 bajty.
-1 bajty dzięki Steadybox .
Wypróbuj online!
źródło
t^1&&memcpy(s-1,"ĉĝĥĵŝŭĈĜĤĴŜŬ"+t,2),t=1;
zamiastt^1?memcpy(s-1,"ĉĝĥĵŝŭĈĜĤĴŜŬ"+t,2),t=1:0;
zapisuje jeden bajt. Wypróbuj online!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<>"̂"}]
źródło
Perl 5 , 49 + 2 (
-p -C
) =6151 bajtówWypróbuj online!
Zaoszczędzono 10 bajtów dzięki Nahuelowi Fouilleulowi
źródło
s/[CGHJScghjs]\Kx/\x{0302}/g;s/[Uu]\Kx/\x{0306}/g
-C
i bez niego-C
(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 bajtów
Wypróbuj online!
Wyjaśnienie:
źródło
sed, 108 bajtów
źródło
`...`
lub<pre><code>...</code></pre>
lub 4 tiret.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:
regex zastępuje x łączącymi znakami Unicode z komentarza @ user202729.
na przykład
źródło
Clojure,
126115 bajtów-11 bajtów, zmieniając mapę zastępczą na partycję ciągu.
Zmniejszenie w stosunku do mapy zamienników do wyszukania i tego, co je zastąpić.
Nadal pracuję nad sposobem skompresowania mapy zastępczej.
źródło
JavaScript (ES6), 91 bajtów
Wypróbuj online!
źródło
Scala , 110 bajtów
Nudne rozwiązanie wyrażenia regularnego:
Stare rozwiązanie SCALA (116 bajtów)
Nie golfił
źródło
JavaScript, 35 znaków, 36 bajtów
źródło
sed, 40 bajtów (38 znaków)
Wypróbuj online!
Uważam, że to wystarczająco różni się od odpowiedzi iBuga .
źródło