การพลิกกลับสตริงปกติและสตริงที่มองเห็น


17

เขียนโค้ดที่ทำหน้าที่เป็นโปรแกรม cat นั่นคือเพื่อป้อนสตริงและส่งออกตามที่เป็นอยู่ แต่การพลิกกลับปกติของรหัสของคุณจะต้องส่งกลับการพลิกกลับปกติของสายอักขระอินพุต และการพลิกกลับที่มองเห็นได้ของรหัสของคุณจะต้องส่งออกการพลิกกลับที่มองเห็นได้ของสายป้อน

การกลับรายการปกติคือลำดับอักขระที่ตรงกันข้ามของสตริง การพลิกกลับทางภาพคือการพลิกกลับตามปกติ()[]{}<>โดยแทนที่อักขระ)(][}{><ตามลำดับ

คุณสามารถใช้เพจรหัสใด ๆ ที่มีอักขระ()[]{}<>และมีการเผยแพร่ก่อนการท้าทายนี้เพื่อกำหนดอักขระ คุณต้องใช้เพจรหัสเดียวกันสำหรับรหัสทั้งหมดของคุณ รหัสต้นฉบับของคุณต้องถูกต้องในเพจรหัสนี้และใช้รหัสที่กลับรายการของคุณอย่างใดอย่างหนึ่งเพื่อที่จะให้ผลตอบแทนเอง

นี่คือรหัสที่สั้นที่สุดในหน่วยไบต์ชนะ

ตัวอย่าง

สำหรับสตริงAB(XY), reversions ปกติและภาพที่มี)YX(BAและ(YX)BAตามลำดับ

หากรหัสของคุณ (ในภาษาสมมุติ) คือAB(XY)รหัส)YX(BAและ(YX)BAควรส่งออกการย้อนกลับปกติและภาพของสายป้อนตามลำดับ และAB(XY)ควรทำตัวเป็นโปรแกรมแมว


เป็นที่คาดว่าสตริงอินพุตอาจมีการขึ้นบรรทัดใหม่หรือไม่
บาดเจ็บทางดิจิตอล

@DigitalTrauma ไม่ได้คิดเกี่ยวกับว่า ... โปรแกรมของคุณควรสนับสนุนอะไรก็ตามที่คุณใช้ประจำสามารถกลับมา (ตราบเท่าที่มันกลับสตริง) และควรทำงานกับรหัสต้นฉบับเอง
jimmy23013

คำตอบ:


9

05AB1E , 16 ไบต์

ใช้ความจริงที่ว่า 05AB1E มีค่าคงที่ที่กำหนดไว้ล่วงหน้า"()<>[]{}"และไม่ได้รับผลกระทบจากการพลิกกลับทางสายตา

รหัส:

,q‡"}{][><)("užR

คำอธิบาย:

,                 # Pop and print the input.
 q                # Quit.
  ‡"}{][><)("užR  # This part is ignored.

ลองออนไลน์!


ย้อนกลับ

Ržu"()<>[]{}"‡q,

คำอธิบาย:

R                 # Reverse the input.
 žu               # Short for "()<>[]{}".
   "()<>[]{}"     # Push this string.
             ‡    # Transliterate (no-op, since everything is transliterated to itself).
              q   # Quit and implicitly print.
               ,  # This part is ignored.

ลองออนไลน์!


ย้อนกลับทางสายตา:

Ržu")(><][}{"‡q,

คำอธิบาย:

R                 # Reverse the input.
 žu               # Short for "()<>[]{}".
   ")(><][}{"     # Push this string.   
             ‡    # Transliterate (giving the visually reversed string).
              q   # Quit and implicitly print.
               ,  # This part is ignored.       

ลองออนไลน์!

ใช้การเข้ารหัสCP-1252


6

CJam, 21 ไบต์

qe#ere$_"}{][><)("%Wq

ทดสอบที่นี่

การพลิกกลับปกติ:

qW%"()<>[]{}"_$ere#eq

ทดสอบที่นี่

การพลิกกลับของภาพ:

qW%")(><][}{"_$ere#eq

ทดสอบที่นี่

คำอธิบาย

ก่อนรหัสปกติ:

qe#ere$_"}{][><)("%Wq

สิ่งนี้ง่าย: qอ่านอินพุตทั้งหมดe#แสดงความคิดเห็นส่วนที่เหลือของโปรแกรมและอินพุตถูกพิมพ์โดยปริยายในตอนท้าย

ตอนนี้การพลิกกลับปกติ:

q            e# Read all input.
W%           e# Reverse it.
"()<>[]{}"   e# Push this string.
_$           e# Duplicate and sort it. However, the string is already sorted
             e# so we just get two copies of it.
er           e# Transliteration (i.e. character-wise substitution). But since the
             e# source and target string are identical, the reversed input
             e# is left unchanged.
e#eq            Just a comment...

และในที่สุดการพลิกกลับทางภาพ:

q            e# Read all input.
W%           e# Reverse it.
")(><][}{"   e# Push this string.
_$           e# Duplicate and sort it. This gives us "()<>[]{}", i.e. the
             e# same string with each bracket pair swapped.
er           e# Transliteration (i.e. character-wise substitution). This
             e# time, this toggles all the brackets in the reversed input
             e# completing the visual reversion.
e#eq            Just a comment...

ฉันมีรหัสนี้อย่างแน่นอน
jimmy23013

6

Haskell, 124 ไบต์

ส่งต่อ:

f=id
--esrever.q pam=2>1|esrever=2<1|f;x=x q;')'='(' q;'('=')' q;']'='[' q;'['=']' q;'>'='<' q;'<'='>' q;'}'='{' q;'{'='}' q

ย้อนกลับปกติ:

q '}'='{';q '{'='}';q '>'='<';q '<'='>';q ']'='[';q '['=']';q ')'='(';q '('=')';q x=x;f|1<2=reverse|1>2=map q.reverse--
di=f

ภาพย้อนกลับ:

q '{'='}';q '}'='{';q '<'='>';q '>'='<';q '['=']';q ']'='[';q '('=')';q ')'='(';q x=x;f|1>2=reverse|1<2=map q.reverse--
di=f

แต่ละรุ่นจะกำหนดฟังก์ชั่นfที่รับและส่งคืนสตริง ในโหมดไปข้างหน้าfเป็นฟังก์ชั่นประจำตัวidส่วนที่เหลือของรหัสคือความคิดเห็น ในโหมดปกติกลับยาม1<2ในfมีTrueจึงreverseถูกนำไปใช้ ในโหมดกลับภาพที่<จะเปลี่ยนและป้องกันคือ> Falseตัวป้องกันที่สองเป็นเพียงวิธีอื่น ๆTrueในโหมด visual และดังนั้นเพิ่มเติมqจะถูกใช้ซึ่งสวิตช์ "() <> {} []"

f|1<2=reverse|1>2=map q.reverse      -- normal reverse mode
f|1>2=reverse|1<2=map q.reverse      -- visual reverse mode

นอกจากนี้<และ>ในยามที่รหัสของฉันไม่ได้ใช้ใด ๆ ของวงเล็บดังนั้นพวกเขาจึงไม่สามารถ messed ขึ้น


6

Bash + อรรถประโยชน์ linux ทั่วไป, 51

  • บันทึก 2 ไบต์ด้วย @ jimmy23013
  • บันทึก 2 ไบต์ด้วย @AdamKatz
#'><}{][)(' `P5BD706D5AC79E196iFe- cd` rt|ver|
\cat

การพลิกกลับปกติ:

tac\
|rev|tr `dc -eFi691E97CA5D607DB5P` '()[]{}<>'#

การพลิกกลับของภาพ:

tac\
|rev|tr `dc -eFi691E97CA5D607DB5P` ')(][}{><'#

เคล็ดลับหลักที่นี่คือสตริง()[]{}<>ถูกเข้ารหัสเป็น 691E97CA5D607DB5 (ฐาน 15) dcคำสั่งผลลัพธ์จะให้ผลลัพธ์เดียวกันนี้หลังจากการพลิกกลับทั้งสองแบบ อย่างไรก็ตาม'()[]{}<>'สตริงตัวอักษรมีความไวต่อประเภทการกลับรายการ

tacจำเป็นต้องย้อนกลับลำดับของอินพุตบรรทัดและrevจำเป็นต้องย้อนกลับอักขระของแต่ละบรรทัด อินพุต ASCII ใด ๆ ควรยอมรับได้


5

MATL, 26 24 22 16 ไบต์

ข้างหน้า

DPEXSt'><}{][)('

ลองออนไลน์!

คำอธิบาย:

                % Implicitly grab the input as a string
D               % Pop the top of the stack and display it
P               % Tries to flip the top element on the stack but errors out
                % because the stack is empty. Program terminates.
EXSt'><}{][)('  % Not executed

การพลิกกลับปกติ:

'()[]{}<>'tSXEPD

ลองออนไลน์!

คำอธิบาย:

            % Implicitly grab input as a string
'()[]{}<>'  % String literal (search string)
tS          % Duplicate and sort to create the replacement string: '()[]{}<>'
XE          % Replace all entries in the input using the search and replacement strings. 
            % Corresponding characters in the strings are used for the replacement.
            % Effectively a no-op
P           % Flip the string
D           % Explicitly display result

การพลิกกลับของภาพ:

')(][}{><'tSXEPD

ลองออนไลน์!

คำอธิบาย:

            % Implicitly grab the input as a string
')(][}{><'  % String literal (search string)
tS          % Duplicate and sort to create the replacement string: '()[]{}<>'
XE          % Replace all entries in the input using the search and replacement strings. 
            % Corresponding characters in the strings are used for the replacement. 
P           % Flip the result
D           % Explicitly display the result

การพลิกกลับทางภาพคือการพลิกกลับตามปกติ()[]{}<>โดยแทนที่อักขระ)(][}{><ตามลำดับ
Erik the Outgolfer

@ ΈρικΚωνσταντόπουλοςอัปเดตแล้ว
Suever

3

GolfScript, 32 28 ไบต์

#%{=1-[=-\7?@.`{[(<>)]}.}%1-

ลองออนไลน์!

การพลิกกลับปกติ:

-1%}.}])><([{`.@?7\-=[-1={%#

ลองออนไลน์!

การพลิกกลับของภาพ:

-1%{.{[(<>)]}`.@?7\-=]-1=}%#

ลองออนไลน์!

ความจริงที่ว่าไม่มีผู้ใดเทียบ}ยุติโปรแกรมใน GolfScript ทำให้มันค่อนข้างง่าย อย่างไรก็ตามฉันค่อนข้างแน่ใจว่ารหัสของฉันสำหรับการสลับวงเล็บปีกกายังไม่เหมาะสม


0

Python 2.7, 208 ไบต์

ข้างหน้า

import sys#
print''.join(sys.stdin)#
#0:tpecxe
#"]1-::[)nidts.sys(nioj.'' tnirp"cexe:yrt
#0:tpecxe
#"(('<>{}[]()','><}{][)(')snartekam.s)etalsnart.[1-::](nidts.sys)nioj.'' tnirp"cexe:yrt
#s sa gnirts,sys tropmi

การพลิกกลับปกติ

import sys,string as s#
try:exec"print''.join)sys.stdin(]::-1[.translate)s.maketrans)'()[]{}<>',')(][}{><'(("#
except:0#
try:exec"print''.join(sys.stdin)[::-1]"#
except:0#
#)nidts.sys(nioj.''tnirp
#sys tropmi

https://eval.in/574639

การพลิกกลับของภาพ

import sys,string as s#
try:exec"print''.join(sys.stdin)[::-1].translate(s.maketrans(')(][}{><','()[]{}<>'))"#
except:0#
try:exec"print''.join)sys.stdin(]::-1["#
except:0#
#(nidts.sys)nioj.''tnirp
#sys tropmi

https://eval.in/574638

ทุกทิศทางอ่านจาก stdin จนกระทั่ง EOF

ไม่มีอะไรที่ฉลาดเลยที่นี่ ความคิดเห็นต่อท้ายที่จะดำเนินการไปข้างหน้าเทียบกับรหัสย้อนหลังแล้วexecคำสั่งในบล็อกลองที่จะจับข้อผิดพลาดทางไวยากรณ์สำหรับการย้อนกลับที่แตกต่างกันสอง

โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.