首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >解析我的世界语!

问解析我的世界语!
EN

Code Golf用户
提问于 2017-11-28 01:08:20
回答 14查看 3.6K关注 0票数 25

著名的构造语言世界语使用拉丁字母(主要是查看链接的维基百科页面获取详细信息)。但是,也有一些带有重音的字符:ĉ,ĝ,ĥ,ĵ,ŝ和ŭ。(C-旋旋、g-旋旋、h-旋旋、j-旋旋、S-旋旋、u-breve.)很自然,这些字符很难打字。即使对于这个问题,我也必须在Unicode选择器中搜索字符。因此,已经制定了一项使用字母"x“的公约,以供电子使用。例如,"cxu“用于"ĉu”。(注:世界语字母表中通常不使用"x“字。)

然而,我是一个语言纯粹主义者!这句空话太无聊了,我要死了!我需要一个程序来解决这个问题,最好是尽可能短一些,这样我就可以尽可能快地把它输入我的终端!

挑战

你的任务是使用x-约定将一串世界语转换成真正的世界语。

实际上,您必须映射:

代码语言:javascript
复制
cx: ĉ
gx: ĝ
hx: ĥ
jx: ĵ
sx: ŝ
ux: ŭ
Cx: Ĉ
Gx: Ĝ
Hx: Ĥ
Jx: Ĵ
Sx: Ŝ
Ux: Ŭ

所有其他可打印的ASCII字符都应被接受,而不应更改。Unicode很好,但没有必要。

输入和输出可以是任何合理的格式,你的语言。祝好运!

测试案例

代码语言:javascript
复制
"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"

评分

我是密码-高尔夫。答案由语言默认编码中最小的字节码来评分。

这里有一个Stack代码片段,用于生成一个常规的领导板和一个按语言分列的获奖者概览。

为了确保您的答案显示出来,请使用下面的Markdown模板以标题开头:

代码语言:javascript
复制
# Language Name, N bytes

其中N是您提交的大小。如果你提高你的分数,你可以保持旧的分数在标题中,通过敲击他们。例如:

代码语言:javascript
复制
# Ruby, <s>104</s> <s>101</s> 96 bytes

如果您想在标题中包含多个数字(例如,因为您的分数是两个文件的总和,或者要分别列出解释器标志惩罚),请确保实际分数是标题中的最后一个数字:

代码语言:javascript
复制
# Perl, 43 + 2 (-p flag) = 45 bytes

您还可以将语言名称作为链接,然后将其显示在领导板片段中:

代码语言:javascript
复制
# [><>](http://esolangs.org/wiki/Fish), 121 bytes
代码语言:javascript
复制
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;
代码语言:javascript
复制
body{text-align:left!important}#answer-list,#language-list{padding:10px;width:290px;float:left}table thead{font-weight:700}table td{padding:5px}
代码语言:javascript
复制
<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>

祝你好运,玩得开心,随时提出改进的建议!

Clarifications:

  • 您只需担心可打印的ASCII字符。
  • 您只需要输出一个与正确输出类似的字符。是的,这意味着你可以把重音固定在标准字符上。
EN

回答 14

Code Golf用户

发布于 2017-11-28 05:40:33

Python 3,81字节

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

在网上试试!

生成并计算字符串:

代码语言:javascript
复制
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','Ŭ')

外高夫埃里克保存了一个字节。

票数 5
EN

Code Golf用户

发布于 2017-11-28 02:01:12

///,75字节

代码语言:javascript
复制
/,/\/\///>/x\,/c>ĉ,g>ĝ,h>ĥ,j>ĵ,s>ŝ,u>ŭ,C>Ĉ,G>Ĝ,H>Ĥ,J>Ĵ,S>Ŝ,U>Ŭ/

注意:因为OP请求所有可打印字符必须处理,所以我选择的“特殊字符”不能打印。因此,我选择了选项卡和换行符,而不是,这不会改变我的字节码或代码功能。代码看起来应该是:

代码语言:javascript
复制
/
/\/\/// /x\
/c  ĉ
g   ĝ
h   ĥ
j   ĵ
s   ŝ
u   ŭ
C   Ĉ
G   Ĝ
H   Ĥ
J   Ĵ
S   Ŝ
U   Ŭ/

但是,这要求输入不能包含制表符或换行符。

在网上试试!

因为///不能接受输入,所以应该将输入放在代码后面。

相当直截了当。我想它不可能更短,因为///需要对每个字符进行特殊处理。

解释:

代码语言:javascript
复制
/,/\/\//       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
EN

Code Golf用户

发布于 2017-11-28 02:10:20

Python 3,95字节

代码语言:javascript
复制
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

在网上试试!

-10字节多亏了WhatToDo

-感谢Colera Su的1字节

票数 2
EN
页面原文内容由Code Golf提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://codegolf.stackexchange.com/questions/149292

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档