Transmogrifier รหัส C เก่า *


13

* เครื่องส่งสัญญาณคืออะไร?

ในภาษาการเขียนโปรแกรม Cมีการก่อตัวที่เรียกว่าdigraphs และ trigraphsซึ่งเป็นลำดับอักขระสองและสามตัวที่ประเมินเป็นอักขระทั่วไปน้อยลง ตัวอย่างเช่นคุณสามารถใช้ถ้าแป้นพิมพ์ของคุณไม่มี??-~

ข้อความที่กำหนดให้แทนที่อินสแตนซ์ทั้งหมดของ digraphs และ trigraphs ต่อไปนี้ (ด้านซ้าย) ด้วยอักขระที่ถูกต้องสั้นลง golfed (ด้านขวา)

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

แหล่ง

อินพุต

อินพุตเป็นข้อความ ASCII ขึ้นบรรทัดใหม่ที่ได้รับอนุญาต ไม่จำเป็นต้องเป็นรหัส C ที่ถูกต้อง

เอาท์พุต

เอาท์พุทเป็นข้อความเดียวกันโดยที่ทุกอินสแตนซ์ของ digraphs และ trigraphs ข้างต้นถูกแทนที่ด้วยเวอร์ชั่นที่ย่อลงซึ่งประเมินจากซ้ายไปขวา ขึ้นบรรทัดใหม่ที่ได้รับอนุญาต ไม่จำเป็นต้องเป็นรหัส 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

@ SatanSon จะทำเช่นเดิมฉันไม่ได้อยู่ในบล็อคโค้ดเพื่อให้อินพุต / เอาต์พุตอ่านได้ง่ายขึ้น แต่ Riker เปลี่ยนไป รู้สึกอิสระที่จะแก้ไขบางอย่างเช่นการจัดรูปแบบตัวเองในครั้งต่อไป :)
สตีเฟ่น

1
ดังนั้นคุณกำลังขอรหัส golfed เพื่อรหัสกอล์ฟ โบนัสกอล์ฟ :-)
เสา

@Mast นั่นเป็นความคิด
Stephen

คำตอบ:


5

เรติน่า 65 ไบต์

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

ลองออนไลน์! Tค่อนข้างอึดอัดใจที่จะใช้ แต่ยังช่วยฉัน 14 ไบต์


คุณสามารถทำ\?\?[^:%]อะไร
ETHproductions

( \?\?[^:%?]ค่อนข้าง)
ประโยชน์ทับซ้อน

@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ในสถานที่ ทดสอบกับ GCC และส่งเสียงดังใน Fedora Workstation, x86, ในโหมด 32 บิตและ 64 บิต

C ไม่ใช่ภาษาที่ดีที่สุดสำหรับการเล่นกอล์ฟที่นี่


C is not exactly the best language for golfing here.ไม่ได้ล้อเล่น. หน้าตาดี :) คิดย้อนกลับไปฉันควรจะได้บังคับคำถามทั้งหมดเพื่อเพิ่ม +1 หรือ +2 ไบต์ถ้าพวกเขาใช้หนึ่งในตัวละครที่ว่าเดี่ยวหรือ trigraph ทำให้ xD
สตีเฟ่น

1
คุณสามารถทำให้มันยิ่งเลวร้ายลง: 1 หรือ 2 ตัวละครที่สามารถเป็นส่วนหนึ่งของแต่ละดิ / trigraph จะเจ็บจริงๆ :)
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(เท็จตามที่คาดไว้)

  • เมื่อiมีค่ามากกว่าหรือเท่ากับ9นิพจน์'??' + "=/'()!<>-"[i]จะประเมิน"??" + undefinedว่าสตริงใดถูก coerced "??undefined"(ความจริงเมื่อเราคาดหวังผลลัพธ์ที่ผิดพลาด)

นั่นเป็นเหตุผลที่เราต้องดำเนินการทดสอบตามลำดับนี้

กรณีทดสอบ




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 ไบต์

โซลูชัน Regex

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.