正常和可视字符串还原


17

编写一些充当cat程序的代码。即,输入字符串并按原样输出。但是代码的正常还原必须输出输入字符串的正常还原。并且代码的可视化还原必须输出输入字符串的可视化还原。

正常的反转是字符串的反转字符序列。视觉还原是正常的还原,字符分别()[]{}<>替换)(][}{><为。

您可以使用任何包含字符()[]{}<>且在此挑战之前发布的代码页来定义字符。您必须对所有代码使用相同的代码页。您的原始代码在此代码页中必须是有效的,并且将您的任何反向代码应用于该代码页都会产生效果。

这是,以字节为单位的最短代码获胜。

对于字符串AB(XY),其正常和视觉还原分别为)YX(BA(YX)BA

如果您的代码(使用假设语言)为AB(XY),则代码)YX(BA(YX)BA应该分别输出输入字符串的正常和视觉转换。并且AB(XY)应该充当猫的程序。


是否期望输入字符串包含换行符?
Digital Trauma

@DigitalTrauma没考虑...您的程序应该支持您使用的输入例程可能返回的任何内容(只要它返回一个字符串)。它应该可以在原始代码本身上运行。
jimmy23013 '16

Answers:


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 '16

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是identity函数id,其余代码是注释。在正常反向模式防护1<2fIS True,所以reverse被施加。在可视反向模式下,将<切换为>,而防护罩为False。第二个防护装置恰好相反,并且True处于可视模式,因此另外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

除此以外<>在我的代码中,我的代码不使用任何括号,因此不会弄乱它们。


6

Bash +通用Linux实用程序,51

  • @ jimmy23013节省了2个字节
  • @AdamKatz节省了2个字节
#'><}{][)(' `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)'16年

@ΈρικΚωνσταντόπουλος更新。
Suever,2016年

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在try块中执行一条语句以捕获两种不同版本的语法错误。

By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.