古いCコードTransmogrifier *


13

*トランスモーグリファイアとは何ですか?

Cプログラミング言語と呼ばれる地層がある有向グラフとトリグラフにあまり一般的でない文字を評価2と3文字の配列です。たとえば??-、キーボードにがない場合に使用できます~

テキストが与えられたら、次のダイグラフおよびトライグラフのすべてのインスタンス(左側)を、正しい短いゴルフのキャラクター(右側)に置き換えます。

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

ソース

入力

入力は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を削除してください。読みにくくなっています。
コイナーリンガーアーイング

4
"??=%:"別の関連するテストケースです:Cでは、これは特別"#%:"%:はない場所を意味しますが、期待される出力はであると思います"##"
hvd

@ Satan'sSonは、入力/出力をより読みやすくするために元々コードブロックではありませんでしたが、Rikerはそれを変更しました。次回は自分でフォーマットするようなものを自由に編集してください:)
スティーブン

1
だから、あなたはゴルフのコードにゴルフのコードを求めています。ボーナスゴルフ:
マスト

@マストそれはアイデアです
スティーブン

回答:


5

網膜、65バイト

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

オンラインでお試しください! T使用するのは少し厄介ですが、それでも14バイト節約できます。


できますか\?\?[^:%]
ETHproductions

\?\?[^:%?]むしろ)
ETHproductions

また、回すの副作用だろう@ETHproductions ??aにしますa
eush77

@ eush77うーんああ、あなたしている右の...
ETHproductions

行8はの%>代わりになり>%ます。
デニス

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場で変更します。32ビットおよび64ビットモードで、Fedora Workstation、x86上のGCCおよびclangでテスト済み。

ここでCはゴルフに最適な言語ではありません。


C is not exactly the best language for golfing here.冗談じゃない。彼らは有向グラフまたはトライグラフはxDさんを作ることのいずれかの文字を使用する場合のルックスの良い:)考える背中、私は1つのまたは2バイトを追加するためにすべての質問を余儀なくされていなければならない
スティーブン・

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

どうやって?

これは非常に簡単です。

ただし、次の点に注意する必要があります。

  • 場合私は以下である9、発現'<:<%%'[i-9] + ':>%>:'[i-9]に評価undefined + undefined等しいNaN(予想通りfalsyを)。

  • 場合iが以上に等しい9、発現'??' + "=/'()!<>-"[i]評価するにはに"??" + undefined文字列に強制された"??undefined"(我々はfalsy結果を期待truthy)。

そのため、この順序でテストを処理する必要があります。

テストケース



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)

最短ではありませんが、別のアプローチを試してみたかったのです。

弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.