Eski C Kodu Dönüştürücü *


13

* Transmogrifier nedir?

In C programlama dilinin adı verilen oluşumlar vardır digraphs ve üç karakterli az görülen karakterlere değerlendirmek iki ve üç karakter dizileri vardır. Örneğin, ??-klavyeniz yoksa kullanabilirsiniz ~.

Metin verildiğinde, aşağıdaki digraf ve trigrafların (sol taraf) tüm örneklerini doğru, daha kısa, golf karakteriyle (sağ taraf) değiştirin.

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

Kaynak

Giriş

Giriş ASCII metnidir. Sondaki yeni satıra izin verilir. Geçerli bir C kodu olması gerekmez.

Çıktı

Çıktı aynı metindir, yukarıdaki digrafların ve trigrafların kısaltılmış versiyonla değiştirildiği tüm örnekler soldan sağa değerlendirilir. Sondaki yeni satıra izin verilir. Geçerli bir C kodu olması gerekmez.

Test Durumları

=> girdi ve çıktıyı ayırır.

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
Lütfen `leri örneklerden kaldırın. Okumayı çok zorlaştırıyor.
caird coinheringaahing

4
"??=%:"Başka ilgili test durumdur: C, bu araçlar özel değil, ama tahmini çıkış olduğunu düşünüyorum . "#%:"%:"##"
Hvd

@ Satan'sSon yapacak, aslında giriş / çıkış daha okunabilir hale getirmek için bir kod bloğunda yoktu ama Riker bunu değiştirdi. Bir dahaki sefere kendinizi biçimlendirmek gibi bir şeyi düzenlemekten çekinmeyin :)
Stephen

1
Yani, golf koduna golf kodu istiyorsun. Bonus golf :-)
Direk

@Bu fikir bu
Stephen

Yanıtlar:



7

C 206 205 bayt

(Ceilingcat sayesinde -1)

Yeni satırlar okunabilirlik için buradalar.

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

Değiştirir syerinde. 32 bit ve 64 bit modunda Fedora Workstation, x86'da GCC ve clang ile test edilmiştir.

C burada golf oynamak için en iyi dil değil.


C is not exactly the best language for golfing here.şaka yapmıyorum. İyi görünüyor :) Düşünüyorum, bir digraph veya trigraph'ın xD
Stephen

1
Daha da kötüleştirebilirsiniz: Bir di- / trigraph'ın parçası olabilecek her karakter için +1 veya +2 ​​gerçekten zarar verir :)
hvd

5

JavaScript (ES6), 106 bayt

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

Nasıl?

Bu oldukça basit.

Ancak şunu not etmeliyiz:

  • Tüm ı az olan , 9 , sentezleme '<:<%%'[i-9] + ':>%>:'[i-9]değerlendirir için undefined + undefinedolan eşittir NaN(falsy beklendiği gibi).

  • Tüm ı ya da eşit daha büyük olan , 9 , sentezleme '??' + "=/'()!<>-"[i]değerlendirir için "??" + undefinedolan dizgeye zorlama bir "??undefined"(bir falsy sonucu beklemek zaman truthy).

Bu yüzden testi bu sırayla işlemeliyiz.

Test senaryoları



2

JavaScript (ES6), 131 123 bayt

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 Bayt

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

Çevrimiçi deneyin!

PHP, 115 Bayt

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

Çevrimiçi deneyin!

PHP, 124 Bayt

Regex çözümü

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

Çevrimiçi deneyin!


1

JavaScript (ES6), 113 bayt

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

En kısa değil, ama farklı bir yaklaşım denemek istedim.

Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.