구식 C 코드 변형기 *


13

* 트랜스 모그리 파이어 란?

에서 C 프로그래밍 언어 라는 형성이 있습니다 이중 음자와 trigraph를 덜 일반적인 문자로 평가, 둘, 셋 문자 시퀀스입니다. 예를 들어 ??-키보드에이없는 경우 사용할 수 있습니다 ~.

텍스트가 주어지면 다음의 digraphs 및 trigraphs (왼쪽)의 모든 인스턴스를 정확하고 짧은 골프 캐릭터 (오른쪽)로 바꾸십시오.

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

출처

입력

입력은 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
예제에서`를 제거하십시오. 읽기가 어렵습니다.
caird coinheringaahing

4
"??=%:"또 다른 관련 테스트 사례입니다 .C에서 이것은 특별하지 않은 "#%:"곳을 의미 %:하지만 예상 출력은 "##"입니다.
hvd

@ Satan'sSon은 원래 입 / 출력을 더 읽기 쉽게하기 위해 코드 블록에 없었지만 Riker가 변경했습니다. 다음에 자신을 포맷하는 것과 같은 것을 자유롭게 편집하십시오 :)
Stephen

1
따라서 골프 코드 대 골프 코드를 요구하고 있습니다. 보너스 골프 :-)
돛대

@ 마침내 아이디어입니다
Stephen

답변:


5

레티 나 , 65 바이트

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

온라인으로 사용해보십시오! T사용하기 조금 어색하지만 여전히 14 바이트를 절약합니다.


당신은 할 수 있습니까 \?\?[^:%]?
ETHproductions

( \?\?[^:%?]대신)
ETH 프로덕션

@ETHproductions ??a로 전환하면 부작용이 생길 수 있습니다 a.
eush77

@ eush77 오 흠, 당신 말이 맞아요
ETHproductions

8 행 %>대신 이어야합니다 >%.
Dennis

7

씨, 206 205 바이트

(천장 고양이 덕분에 -1)

개행은 가독성을 위해 여기에 있습니다.

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제자리에서 수정합니다 . 32 비트 및 64 비트 모드의 Fedora Workstation x86에서 GCC 및 clang으로 테스트되었습니다.

여기서 C는 골프를위한 최고의 언어는 아닙니다.


C is not exactly the best language for golfing here.농담이 없습니다. :) 생각하면, 나는 모든 질문이 만약 digraph 나 trigraph가 xD로 만드는 문자 중 하나를 사용한다면 +1 또는 +2 바이트를 추가하도록 강요해야했다
Stephen

1
di- / trigraph의 일부가 될 수있는 각 문자에 대해 +1 또는 +2는 실제로 상처를 줄 것입니다. :)
hvd

5

자바 스크립트 (ES6), 106 바이트

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

어떻게?

이것은 매우 간단합니다.

그러나 다음 사항에 유의해야합니다.

  • 경우 11보다 9 익스프레션 '<:<%%'[i-9] + ':>%>:'[i-9]들을 평가가 undefined + undefined되는 동일 NaN(falsy 예상대로).

  • 경우 또는 같보다 큰 9 , 식 '??' + "=/'()!<>-"[i]평가하여은으로 "??" + undefined된 문자열을 강제한다 "??undefined"(우리는 falsy 결과를 기대할 때 truthy).

그렇기 때문에 테스트를이 순서대로 처리해야합니다.

테스트 사례



2

자바 스크립트 (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

자바 스크립트 (ES6), 113 바이트

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

가장 짧지는 않지만 다른 접근법을 시도하고 싶었습니다.

당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.