Pemancar Kode C Lama *

13

* Apa itu transmogrifier?

Dalam bahasa pemrograman C , ada formasi yang disebut digraf dan trigraph yang merupakan urutan dua dan tiga karakter yang dievaluasi menjadi karakter yang kurang umum. Misalnya, Anda dapat menggunakan ??-jika keyboard Anda tidak punya ~.

Teks yang diberikan, ganti semua instance dari digraf dan trigraph berikut (sisi kiri) dengan karakter yang benar, lebih pendek, golf (sisi kanan).

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

Sumber

Memasukkan

Input adalah teks ASCII. Membuntuti baris baru diizinkan. Tidak perlu kode C yang valid.

Keluaran

Keluaran adalah teks yang sama, dengan semua contoh digraph dan trigraph di atas diganti dengan versi singkat, dievaluasi dari kiri ke kanan. Membuntuti baris baru diizinkan. Tidak perlu kode C yang valid.

Uji Kasus

=> memisahkan input dan output.

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"; }

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

<:> => [>

<::> => []

:>> => ]>

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

: > => : >

??=%: => ##
Stephen
sumber
3
Harap hapus `s dari contoh. Itu membuat mereka sulit dibaca.
caird coinheringaahing
4
"??=%:"adalah kasus uji lain yang relevan: di C, ini berarti di "#%:"mana %:tidak istimewa, tapi saya pikir output yang Anda harapkan "##".
hvd
@ Setan'sSon akan melakukan, saya awalnya tidak dalam blok kode untuk membuat input / output lebih mudah dibaca tetapi Riker mengubahnya. Jangan ragu untuk mengedit sesuatu seperti memformat diri sendiri lain kali :)
Stephen
1
Jadi, Anda meminta kode golf ke kode golf. Bonus golf :-)
Mast
@Tentu itulah idenya
Stephen

Jawaban:

5

Retina , 65 byte

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

Cobalah online! Tsedikit canggung untuk digunakan tetapi masih menyelamatkan saya 14 byte.

Neil
sumber
Bisakah kamu melakukannya \?\?[^:%]?
ETHproduksi
( \?\?[^:%?]agak)
ETHproduksi
@ ETHproductions Itu akan memiliki efek samping juga berubah ??amenjadi a.
eush77
@ eush77 Oh hmm, kau benar ...
ETHproduksi
Baris 8 seharusnya %>bukan >%.
Dennis
7

C, 206 205 byte

(-1 terima kasih kepada ceilingcat)

Baris baru hanya di sini untuk dibaca.

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++;);}

Dimodifikasi sdi tempat. Diuji dengan GCC dan dentang pada Fedora Workstation, x86, dalam mode 32-bit dan 64-bit.

C bukan bahasa terbaik untuk bermain golf di sini.

hvd
sumber
C is not exactly the best language for golfing here.tidak bercanda. Kelihatannya bagus :) Kalau dipikir-pikir, saya seharusnya memaksakan semua pertanyaan untuk menambahkan +1 atau +2 byte jika mereka menggunakan salah satu karakter yang membuat xD digraf atau trigraph
Stephen
1
Anda dapat memperburuknya: +1 atau +2 untuk setiap karakter yang dapat menjadi bagian dari di- / trigraph akan sangat menyakitkan :)
hvd
5

JavaScript (ES6), 106 byte

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

Bagaimana?

Ini sangat mudah.

Namun kita harus perhatikan bahwa:

  • Kapan saya kurang dari 9 , ekspresi '<:<%%'[i-9] + ':>%>:'[i-9]mengevaluasi undefined + undefinedyang sama dengan NaN(falsy seperti yang diharapkan).

  • Kapan saya lebih besar dari atau sama dengan 9 , ekspresi '??' + "=/'()!<>-"[i]mengevaluasi "??" + undefinedyang dipaksakan ke string "??undefined"(benar ketika kita mengharapkan hasil palsu).

Itu sebabnya kita harus memproses tes dalam urutan ini.

Uji kasus

Arnauld
sumber
2

Rubi , 104 + 1 = 105 byte

Menggunakan -pbendera untuk +1 byte.

"=#/\\'^([)]!|<{>}-~".scan(/(.)(.)/){|k,v|gsub'??'+k,v}
"<:[:>]<%{%>}%:#".scan(/(..)(.)/){|k,v|gsub k,v}

Cobalah online!

Nilai Tinta
sumber
2

Javascript (ES6), 131 123 byte

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

nderscore
sumber
2

PHP, 112 Bytes

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

Cobalah online!

PHP, 115 Bytes

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

Cobalah online!

PHP, 124 Bytes

Solusi Regex

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

Cobalah online!

Jörg Hülsermann
sumber
1

JavaScript (ES6), 113 byte

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

Bukan yang terpendek, tetapi saya ingin mencoba pendekatan yang berbeda.

Produksi ETH
sumber