旧的C代码转化器*


13

*什么是透湿剂?

C编程语言中,存在称为二字和三字的形式,这是两个和三个字符序列,其结果为较不常见的字符。例如,??-如果您的键盘没有,则可以使用~

给定文本,用正确的,较短的,打高尔夫球的角色(右侧)替换以下有向图和三联图的所有实例(左侧)。

??=  #
??/  \
??'  ^
??(  [
??)  ]
??!  |
??<  {
??>  }
??-  ~
<:   [
:>   ]
<%   {
%>   }
%:   #

资源

输入值

输入为ASCII文本。允许尾随换行符。不需要是有效的C代码。

输出量

输出是相同的文本,上面的二字和三字图的所有实例都被缩短的版本替换,从左到右评估。允许尾随换行符。不需要是有效的C代码。

测试用例

=> 分离输入和输出。

if (true ??!??! false) { => if (true || false) {

??-arr.indexOf(n) => ~arr.indexOf(n)

function f(??) { console.log('test??'); } => function f(] { console.log('test^); }

/* comment :> :) *??/ => /* comment ] :) *\

%:What am I doing??!!??` => `#What am I doing|!??

??(??)??(??) <:-- not a palindrome => [][] [-- not a palindrome

?????????? => ??????????

int f(int??(??) a) ??< return a??(0??)??'a??(1??) + "??/n"; ??> => int f(int[] a) { return a[0]^a[1] + "\n"; }

??<:>??<% => {]{%

<:> => [>

<::> => []

:>> => ]>

#\^[]|{}~ => #\^[]|{}~

: > => : >

??=%: => ##

3
请从示例中删除`s。这使它们很难阅读。
Caird coinheringaahing

4
"??=%:"另一个相关的测试案例:在C,这手段"#%:",其中%:并不特别,但我认为您的预计产量"##"
hvd

@ Satan'sSon可以,我本来不是在代码块中使用它来使输入/输出更具可读性,但是Riker改变了它。随时编辑类似下次格式化自己的内容:)
Stephen

1
因此,您需要从打高尔夫球的代码到打高尔夫球的代码。高尔夫奖金:-)
桅杆

@桅杆就是这个想法
斯蒂芬

Answers:



7

C, 206 205字节

(-1感谢ceilingcat)

换行符只是为了便于阅读。

c,d,q;f(char*s){for(char*S,*T,*t=s;c-63?q=0:q++,d=c<<8|*s,*s?
q>1&&(T=index(S="=/'()!<>-",*s))?t-=2,*s="#\\^[]|{}~"[T-S]:
d>*s&&(T=strstr(S=">:<>%<:%",&d))&&(c="][ }{ # "[T-S])&1?--t,*s=c:0:
0,*t++=c=*s++;);}

修改s到位。在Fedora工作站x86上的GCC和clang上以32位和64位模式进行了测试。

C语言并不是这里打高尔夫球的最佳语言。


C is not exactly the best language for golfing here.不开玩笑。看起来不错:)回想起来,如果所有问题都使用图或三部曲构成xD的字符之一,我应该强迫所有问题加+1或+2字节
Stephen

1
您可能会变得更糟:可能成为di- / trigraph一部分的每个字符+1或+2确实会伤害:)
hvd

5

JavaScript(ES6),106个字节

s=>[...'#\\^[]|{}~[]{}#'].map((c,i)=>s=s.split('<:<%%'[i-9]+':>%>:'[i-9]||'??'+"=/'()!<>-"[i]).join(c))&&s

怎么样?

这很简单。

但是,我们应该注意:

  • i小于9时,表达式'<:<%%'[i-9] + ':>%>:'[i-9]计算得出undefined + undefined等于NaN(等于预期)。

  • i大于或等于9时,表达式将'??' + "=/'()!<>-"[i]"??" + undefined值强制转换为字符串"??undefined"(当我们期望错误的结果时,此表达式为真)。

这就是为什么我们必须按此顺序处理测试的原因。

测试用例



2

使用Javascript(ES6),131个 123字节

f=
s=>"#??= \\??/ ^??' [??( ]??) |??! {??< {??> ~??- [<: ]:> {<% }%> #%:".split` `.map(x=>s=s.split(x.slice(1)).join(x[0]))&&s
<input oninput=console.log(f(this.value))>


2

PHP,112字节

<?=str_replace(explode(_,strtr("<:_:>_<%_%>_%:0=0/0'0(0)0!0<0>0-",["_??"])),str_split("[]{}##\\^[]|{}~"),$argn);

在线尝试!

PHP,115字节

<?=str_replace(explode(_,"??=_??/_??'_??(_??)_??!_??<_??>_??-_<:_:>_<%_%>_%:"),str_split("#\\^[]|{}~[]{}#"),$argn);

在线尝试!

PHP,124字节

正则表达式解决方案

foreach(explode(_,"=|%:_/_'_\(|<:_\)|:>_!_<|<%_>|%>_-")as$v)$a=preg_replace("#\?\?$v#","#\\^[]|{}~"[$k++],$a=&$argn);echo$a;

在线尝试!


1

JavaScript(ES6),113个字节

s=>s.replace(/\?\?[^:%?]|[<:%]./g,c=>"#\\^[]|{}~"["=/'()!<>-".indexOf(c[2])]||"[] {} #"["<:><%>%:".indexOf(c)]||c)

不是最短的,但是我想尝试另一种方法。

By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.