Đảo ngược chuỗi bình thường và trực quan


17

Viết một số mã hoạt động như một chương trình mèo. Đó là, để nhập một chuỗi và xuất nó như là. Nhưng sự đảo ngược bình thường của mã của bạn phải xuất ra sự đảo ngược bình thường của chuỗi đầu vào. Và sự đảo ngược trực quan của mã của bạn phải xuất ra sự đảo ngược trực quan của chuỗi đầu vào.

Sự đảo ngược bình thường là chuỗi ký tự đảo ngược của một chuỗi. Sự đảo ngược thị giác là sự đảo ngược bình thường với các ký tự được ()[]{}<>thay thế )(][}{><tương ứng.

Bạn có thể sử dụng bất kỳ bảng mã nào có các ký tự ()[]{}<>và được xuất bản trước thử thách này để xác định các ký tự. Bạn phải sử dụng cùng một bảng mã cho tất cả mã của bạn. Mã ban đầu của bạn phải hợp lệ trong bảng mã này và áp dụng mã đảo ngược của bạn cho mã đó sẽ tự sinh ra.

Đây là , mã ngắn nhất tính bằng byte thắng.

Thí dụ

Đối với chuỗi AB(XY), sự đảo ngược bình thường và trực quan của nó là )YX(BA(YX)BAtương ứng.

Nếu mã của bạn (trong một ngôn ngữ giả) là AB(XY), sau đó mã )YX(BA(YX)BAnên sản lượng reversions bình thường và hình ảnh của chuỗi đầu vào tương ứng. Và AB(XY)nên hoạt động như một chương trình mèo.


Dự kiến ​​các chuỗi đầu vào có thể chứa các dòng mới?
Chấn thương kỹ thuật số

@DigitalTrauma Không nghĩ về điều đó ... Chương trình của bạn sẽ hỗ trợ bất cứ thói quen đầu vào nào bạn sử dụng có thể trả về (miễn là nó trả về một chuỗi). Và nó nên hoạt động trên chính mã gốc.
jimmy23013

Câu trả lời:


9

05AB1E , 16 byte

Sử dụng thực tế là 05AB1E có hằng số được xác định trước "()<>[]{}"và không ảnh hưởng đến sự đảo ngược trực quan.

Mã số:

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

Giải trình:

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

Hãy thử trực tuyến!


Đảo ngược:

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

Giải trình:

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.

Hãy thử trực tuyến!


Trực quan đảo ngược:

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

Giải trình:

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.       

Hãy thử trực tuyến!

Sử dụng mã hóa CP-1252 .


6

CJam, 21 byte

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

Kiểm tra nó ở đây.

Đảo ngược bình thường:

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

Kiểm tra nó ở đây.

Đảo ngược thị giác:

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

Kiểm tra nó ở đây.

Giải trình

Đầu tiên, mã thông thường:

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

Điều này rất đơn giản: qđọc tất cả đầu vào, e#nhận xét phần còn lại của chương trình và đầu vào được in ngầm ở cuối.

Bây giờ sự đảo ngược bình thường:

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...

Và cuối cùng, sự đảo ngược thị giác:

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...

Tôi đã có chính xác mã này bản thân mình.
jimmy23013

6

Haskell, 124 byte

Ở đằng trước:

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

Đảo ngược bình thường:

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

Hình ảnh ngược:

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

Mỗi phiên bản định nghĩa một hàm flấy và trả về một chuỗi. Trong chế độ chuyển tiếp flà chức năng nhận dạng id, phần còn lại của mã là một nhận xét. Trong chế độ đảo ngược bình thường, bảo vệ 1<2trong fTrue, do đó reverseđược áp dụng. Trong chế độ đảo ngược trực quan, <được chuyển sang >và bảo vệ là False. Bảo vệ thứ hai chỉ là cách khác xung quanh và Truetrong chế độ trực quan, do đó, qđược áp dụng thêm các công tắc "() <> {} []".

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

Ngoài ra <>trong các vệ sĩ, mã của tôi không sử dụng bất kỳ dấu ngoặc nào, vì vậy chúng không thể bị rối.


6

Bash + các tiện ích linux phổ biến, 51

  • Lưu 2 byte nhờ @ jimmy23013
  • Lưu 2 byte nhờ @AdamKatz
#'><}{][)(' `P5BD706D5AC79E196iFe- cd` rt|ver|
\cat

Đảo ngược bình thường:

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

Đảo ngược thị giác:

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

Thủ thuật chính ở đây là chuỗi ()[]{}<>được mã hóa thành 691E97CA5D607DB5 (cơ sở 15). Lệnh kết quả dcsẽ mang lại kết quả tương tự sau khi một trong hai loại đảo ngược. Tuy nhiên, '()[]{}<>'chuỗi ký tự là nhạy cảm với loại đảo ngược.

tacđược yêu cầu đảo ngược thứ tự của các dòng đầu vào và revđược yêu cầu đảo ngược các ký tự của mỗi dòng. Bất kỳ đầu vào ASCII nên được chấp nhận.


5

MATL, 26 24 22 16 byte

Ở đằng trước

DPEXSt'><}{][)('

Hãy thử trực tuyến!

Giải trình:

                % 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

Đảo ngược bình thường:

'()[]{}<>'tSXEPD

Hãy thử trực tuyến!

Giải trình:

            % 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

Đảo ngược thị giác:

')(][}{><'tSXEPD

Hãy thử trực tuyến!

Giải trình:

            % 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

Sự đảo ngược thị giác là sự đảo ngược bình thường với các ký tự được ()[]{}<>thay thế )(][}{><tương ứng.
Erik the Outgolfer 19/05/2016

@ ΈρκΚωςςς Cập nhật.
Suever

3

GolfScript, 32 28 byte

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

Hãy thử trực tuyến!

Đảo ngược bình thường:

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

Hãy thử trực tuyến!

Đảo ngược thị giác:

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

Hãy thử trực tuyến!

Việc một }chương trình chưa từng có đã chấm dứt chương trình trong GolfScript, khiến việc này trở nên khá đơn giản. Tuy nhiên, tôi khá chắc chắn rằng mã của tôi để hoán đổi dấu ngoặc chưa tối ưu.


0

Python 2.7, 208 byte

Ở đằng trước

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

Đảo ngược bình thường

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

Đảo ngược thị giác

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

Tất cả các hướng đọc từ stdin cho đến EOF.

Không có gì siêu thông minh ở đây. Trailing bình luận để chỉ thực hiện chuyển tiếp so với mã ngược, sau đó một execcâu lệnh trong một khối thử để bắt lỗi cú pháp cho hai lần đảo ngược khác nhau.

Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.