Известный построенный язык эсперанто использует латинский алфавит (в основном, см. Дополнительную информацию на странице википедии). Однако есть некоторые символы с акцентами: ĉ, ĝ, ĥ, ĵ, ŝ и ŭ . (С-огибающая, г-огибающая, ч-огибающая, J-огибающая, втор-огибающая и и- бревисом .) Естественно, что эти символы очень трудно ввести. Даже для этого вопроса мне пришлось искать в селекторе Unicode символы. В связи с этим для электронного использования была разработана конвенция с использованием буквы «х». Например, «cxu» используется для «ĉu». (Примечание: буква «х» обычно не используется в алфавите эсперанто ».
Тем не менее, я языковой пурист! Эта * воздушная цитата * х ерунда убивает меня! Мне нужна программа, чтобы исправить это, желательно как можно короче, чтобы я мог набрать ее в свой терминал как можно быстрее!
Вызов
Ваша миссия состоит в том, чтобы взять строку эсперанто с помощью x-Convention и преобразовать ее в настоящий эсперанто.
По сути, вы должны отобразить:
cx: ĉ
gx: ĝ
hx: ĥ
jx: ĵ
sx: ŝ
ux: ŭ
Cx: Ĉ
Gx: Ĝ
Hx: Ĥ
Jx: Ĵ
Sx: Ŝ
Ux: Ŭ
Все другие печатные символы ASCII должны быть приняты и не изменены. Юникод был бы хорош, но не обязательно.
Ввод и вывод могут быть в любом формате, приемлемом для вашего языка. Удачи!
Testcases
"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"
счет
Это код-гольф . Ответы оцениваются по наименьшему количеству пользователей в кодировке языка по умолчанию.
Вот фрагмент стека, который генерирует как регулярную таблицу лидеров, так и обзор победителей по языкам.
Чтобы убедиться, что ваш ответ обнаружен, начните его с заголовка, используя следующий шаблон уценки:
# Language Name, N bytes
где N
размер вашего представления. Если вы улучшите свой счет, вы можете сохранить старые результаты в заголовке, вычеркнув их. Например:
# Ruby, <s>104</s> <s>101</s> 96 bytes
Если вы хотите включить в заголовок несколько чисел (например, потому что ваш результат равен сумме двух файлов или вы хотите перечислить штрафы за флаг интерпретатора отдельно), убедитесь, что фактический результат является последним числом в заголовке:
# Perl, 43 + 2 (-p flag) = 45 bytes
Вы также можете сделать название языка ссылкой, которая затем будет отображаться во фрагменте списка лидеров:
# [><>](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>
Удачи, веселья и не стесняйтесь предлагать улучшения!
Разъяснения:
Вам нужно беспокоиться только о печатных символах ASCII.
Вам нужно только вывести символ, который выглядит как правильный вывод. Да, это означает, что вы можете прикрепить акцент на стандартном персонаже.
̂
, и объединяющий разрыв в 0306̆
.Ответы:
QuadR , 65 байт
Попробуйте онлайн!
.x
замените любой символ, за которым следует «x»3::⍵M
после ошибки индексации верните совпадение без изменений,⋄
теперь попробуйте:'ĉĝĥĵŝŭĈĜĤĴŜŬ'[
…]
индексировать в эту строку с индексом первой буквы⍵M
совпадения в этой строке⊃
⍳
'cghjsuCGHJSU'
Это эквивалентно неявной функции Dyalog APL:
источник
('cghjsuCGHJSU',¨'x')⎕r(,¨'ĉĝĥĵŝŭĈĜĤĴŜŬ')
Сетчатка , 27 байт
Попробуйте онлайн!
Эта программа состоит из двух транслитераций. Из-за того, что в коде комбинируются символы, это не слишком хорошо отрисовывается, первая строка должна выглядеть примерно так
iT`x`^`[cghjs]x
, где^
обозначает символ комбинирования акцентирующего окружности. Это говорит о том, что он долженT
транслировать (i
gnoring case) всеx
s во входных данных в a^
, когда они следуют за любой буквой в[cghjs]
.Примечание: TIO неправильно измеряет этот код как 25 байтов. На самом деле, эта программа Retina использует кодировку UTF-8 (другие программы могут использовать UTF-32 или ISO 8859-1), и два комбинируемых символа стоят по 2 байта каждый.
источник
C
173154 байтаСпасибо @Colera Su за сохранение 17 байт!
Попробуйте онлайн!
Объяснение:
источник
\0
?write(1,"..."+i*2,2)
чтобы сохранить 17 байтов. Попробуйте онлайн!Python 3 , 81 байт
Попробуйте онлайн!
Создает и оценивает строку:
Эрик Outgolfer сохранил байт.
источник
/// , 75 байт
Примечание: поскольку запрос OP должен обрабатывать все печатные символы, выбранные мои «специальные символы» не должны быть пригодными для печати. Поэтому я выбрал вкладку и символ новой строки вместо, что не меняет мою функциональность или код. Код будет выглядеть так:
Однако для этого требуется, чтобы ввод не содержал табуляции или новых строк.
Попробуйте онлайн!
Потому что
///
не может принять ввод, вы должны поставить ввод после кода.Довольно просто. Я думаю, это не может быть короче, потому что
///
нужна особая обработка каждого символа.Объяснение:
источник
Python 3 , 95 байт
Попробуйте онлайн!
-10 байт благодаря WhatToDo
-1 байт благодаря Colera Su
источник
Сетчатка , 55 байт
Попробуйте онлайн! Несовместимый подход. Байты могут быть сохранены, если не для отдельных
x
тестовых случаев.источник
Perl 5 , 101 + 1 (
-p
) = 102 байтаПопробуйте онлайн!
источник
JavaScript (ES6), 92 байта
Попробуйте онлайн!
Использовал метод split-join, рекомендованный здесь, чтобы уменьшить количество байтов, потому что
new RegExp(/*blah*/)
конструктор занимал слишком много байтов.Сравнение:
Короче, комбинирующий акцентный подход (63 байта), но с некоторыми видимыми артефактами.
Сноска. Я утверждаю, что мой ответ составляет 92 байта, потому что у 63-байтового решения есть артефакты, которые могут повлиять на вывод.
источник
APL (Dyalog Unicode) , 57 байт
Анонимная молчаливая функция. Обычаи:
Префикс функции к строке. Это транслитерирует строку.
Префиксная функция к списку строк. Это транслитерирует строки.
Инфиксная функция с номером связи входного файла в качестве правого аргумента и номером связи выходного файла в качестве левого аргумента. Это заполняет выходной файл транслитерированным содержимым входного файла.
('cghjsuCGHJSU',¨'x')⎕R(,¨'ĉĝĥĵŝŭĈĜĤĴŜŬ')
(
...)⎕R(
...)
PCRE R eplace'cghjsuCGHJSU'
эти письма,¨'x'
за каждым следует х… с…
,¨'ĉĝĥĵŝŭĈĜĤĴŜŬ'
каждое из этих букв в виде строкПопробуйте онлайн!
источник
J ,
6463 байтаКак это работает:
С
_2]\
я переставить строку «ĉĝĥĵŝŭĈĜĤĴŜŬ» в 12-рядный столбец, чтобы соответствовать форме другой строки.,.
добавляет 'x' к каждому символу строки 'cghjsuCGHJSU' и создает массив размером 12 строк на 2 столбца;~"1'
составляет список пар в штучной упаковке из вышеперечисленного: «1 - ранг 1 - применяется к каждой строке.rplc
использует эти элементы в штучной упаковке, чтобы заменить каждое вхождение левого элемента в штучной упаковке из пары на правое.Попробуйте онлайн!
источник
Befunge , 2x48 +1 = 99 байт
Попробуйте это (TIO очень странный в Befunge, и я не мог заставить ни одно из моих решений работать над ним)
Как это устроено
Получает ввод и проверяет, если это конец. Завершите программу, если она есть.
Проверяет, является ли символ «х». Если нет, сохраните копию персонажа и распечатайте ее.
Сохраните последний символ в (1,1). Помещает все символы для проверки в стек.
Сравните последний символ со всеми значениями в стеке.
Умножьте чек (0 или 1) на ʊ (значение Юникода 650). Проверьте, был ли персонаж au (для краткости) и добавляет 4 в стек, если это так. Наконец, добавьте также значение ascii для x (100). Сумма складывается из правильного акцента, если необходимо, или просто «х», если нет.
Сложите все значения в стопку вместе, распечатайте и сохраните дубликат. Вернитесь к следующему входу.
источник
R ,
7570 байтПопробуйте онлайн!
-5 байт благодаря Джузеппе
объяснение
gsub('(u)x','\\1\U306',s,T)
: заменять вs
каждом случае прописные или строчные буквы "u" (используяignore.case=TRUE
четвертый аргументT
), затем "x" и "u", за которыми следует символ Юникод для краткостиgsub('([cghjs])x','\\1\U302',gsub('(u)x','\\1\U306',s,T),T)
: возьмите результат этого и замените каждое вхождение верхнего или нижнего регистра (используяignore.case=TRUE
через четвертый аргументT
) "c", "g", "h", "j" или "s", за которыми следует "x": буква с последующим Unicode для обходаисточник
\U0302
и\U0306
: попробуйте онлайн!QuadR , 25 байт
Сочетание диакритического издания.
i
флагПопробуйте онлайн!
Заменить ...
если я чувствителен
Эквивалентно следующему коду Dyalog APL:
источник
C
145144 байтаДругой C подход. Возвратите путем перезаписи ввода, используя тот факт, что обводный / короткий - 2 байта.
-1 байт благодаря Steadybox .
Попробуйте онлайн!
источник
t^1&&memcpy(s-1,"ĉĝĥĵŝŭĈĜĤĴŜŬ"+t,2),t=1;
вместоt^1?memcpy(s-1,"ĉĝĥĵŝŭĈĜĤĴŜŬ"+t,2),t=1:0;
сохранения одного байта. Попробуйте онлайн!Mathematica, 81 байт или 57 байт
StringReplace[RemoveDiacritics@#<>"x"->#&/@Characters@"ĉĝĥĵŝŭĈĜĤĴŜŬ"]
Применяется правило замены, при котором буква без шапки вместе с «х» заменяется буквой.
Вот альтернатива с использованием добавленного символа акцентов:
StringReplace[{"ux"->"ŭ","Ux"->"Ŭ",c_~~"x":>c<>"̂"}]
источник
Perl 5 , 49 + 2 (
-p -C
) =6151 байтПопробуйте онлайн!
Сохранено 10 байтов благодаря Nahuel Fouilleul
источник
s/[CGHJScghjs]\Kx/\x{0302}/g;s/[Uu]\Kx/\x{0306}/g
-C
и без-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 байт
Попробуйте онлайн!
Объяснение:
источник
sed, 108 байт
источник
`...`
или<pre><code>...</code></pre>
или 4 отступов.PowerShell, 58 байт
Это 54 символа и сохранение его в PowerShell ISE делает это UTF-8 + BOM для 58 байтов. Это не выглядит так хорошо в браузере:
regex заменяет x на объединяющие символы Unicode из комментария @ user202729.
например
источник
Clojure,
126115 байтов-11 байт, заменяя карту замены на раздел строки.
Сокращение карты замен, которую нужно искать, и чем ее заменить.
Все еще работаю над способом сжатия карты замены.
источник
JavaScript (ES6), 91 байт
Попробуйте онлайн!
источник
Скала , 110 байт
Скучное регулярное выражение:
Старое решение для скалы (116 байт)
Ungolfed
источник
JavaScript, 35 символов, 36 байт
источник
sed, 40 байтов (38 символов)
Попробуйте онлайн!
Я считаю, что это достаточно отличается от ответа iBug .
источник