Pengembalian string normal dan visual

17

Tulis beberapa kode yang bertindak sebagai program kucing. Artinya, untuk memasukkan string dan output apa adanya. Tetapi pembalikan normal kode Anda harus menampilkan pembalikan normal dari string input. Dan pembalikan visual kode Anda harus menampilkan pembalikan visual dari string input.

Pengembalian normal adalah urutan karakter terbalik dari sebuah string. Pengembalian visual adalah pengembalian normal dengan karakter ()[]{}<>digantikan oleh )(][}{><masing-masing.

Anda dapat menggunakan codepage apa pun yang memiliki karakter ()[]{}<>dan diterbitkan sebelum tantangan ini untuk menentukan karakter. Anda harus menggunakan codepage yang sama untuk semua kode Anda. Kode asli Anda harus valid dalam codepage ini, dan menerapkan salah satu dari kode Anda yang dibalik itu harus menghasilkan sendiri.

Ini adalah , kode terpendek dalam byte yang menang.

Contoh

Untuk string AB(XY), pembalikan normal dan visualnya masing )YX(BA- (YX)BAmasing.

Jika kode Anda (dalam bahasa hipotetis) adalah AB(XY), maka kode )YX(BAdan (YX)BAharus menghasilkan pembalikan normal dan visual dari masing-masing string input. Dan AB(XY)harus bertindak sebagai program kucing.

jimmy23013
sumber
Apakah diharapkan string input mungkin berisi baris baru?
Digital Trauma
@DigitalTrauma Tidak memikirkan hal itu ... Program Anda harus mendukung apa pun yang rutin input yang Anda gunakan dapat kembali (selama itu mengembalikan sebuah string). Dan itu harus bekerja pada kode asli itu sendiri.
jimmy23013

Jawaban:

9

05AB1E , 16 byte

Menggunakan fakta bahwa 05AB1E memiliki konstanta yang telah ditentukan sebelumnya "()<>[]{}"dan tidak memengaruhi pengembalian visual.

Kode:

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

Penjelasan:

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

Cobalah online!


Terbalik:

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

Penjelasan:

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.

Cobalah online!


Terbalik secara visual:

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

Penjelasan:

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.       

Cobalah online!

Menggunakan pengodean CP-1252 .

Adnan
sumber
6

CJam, 21 byte

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

Uji di sini.

Pengembalian normal:

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

Uji di sini.

Pengembalian visual:

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

Uji di sini.

Penjelasan

Pertama, kode normal:

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

Ini sederhana: qmembaca semua input, e#mengomentari sisa program, dan input dicetak secara implisit di akhir.

Sekarang pengembalian normal:

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

Dan akhirnya, pengembalian visual:

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...
Martin Ender
sumber
Saya sendiri punya kode ini.
jimmy23013
6

Haskell, 124 byte

Meneruskan:

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

Pembalikan normal:

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

Pembalikan visual:

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

Setiap versi mendefinisikan fungsi fyang mengambil dan mengembalikan string. Dalam mode maju fadalah fungsi identitas id, sisa kode adalah komentar. Dalam mode reverse normal, guard 1<2in fadalah True, demikian reversediterapkan. Dalam mode visual mundur, <saklar diaktifkan >dan pelindungnya adalah False. Penjaga kedua hanyalah sebaliknya dan Truedalam mode visual, jadi tambahan qditerapkan yang beralih "() <> {} []".

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

Selain <dan >di penjaga, kode saya tidak menggunakan tanda kurung, jadi mereka tidak dapat dikacaukan.

nimi
sumber
6

Bash + utilitas linux umum, 51

  • 2 byte disimpan berkat @ jimmy23013
  • 2 byte disimpan berkat @AdamKatz
#'><}{][)(' `P5BD706D5AC79E196iFe- cd` rt|ver|
\cat

Pengembalian normal:

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

Pengembalian visual:

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

Trik utama di sini adalah bahwa string ()[]{}<>dikodekan sebagai 691E97CA5D607DB5 (basis 15). dcPerintah yang dihasilkan akan menghasilkan hasil yang sama setelah kedua jenis pengembalian. Namun '()[]{}<>'string literal peka terhadap tipe pembalikan.

tacdiperlukan untuk membalik urutan baris input dan revdiperlukan untuk membalik karakter setiap baris. Setiap input ASCII harus dapat diterima.

Trauma Digital
sumber
5

MATL, 26 24 22 16 byte

Meneruskan

DPEXSt'><}{][)('

Cobalah secara Online!

Penjelasan:

                % 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

Pengembalian normal:

'()[]{}<>'tSXEPD

Cobalah secara Online!

Penjelasan:

            % 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

Pengembalian visual:

')(][}{><'tSXEPD

Cobalah secara Online!

Penjelasan:

            % 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
Suever
sumber
Pembalikan visual adalah pembalikan normal dengan karakter ()[]{}<>digantikan oleh )(][}{><masing-masing.
Erik the Outgolfer
@ ΈρικΚωνσταντόπουλος Diperbarui.
Suever
3

GolfScript, 32 28 byte

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

Cobalah online!

Pengembalian normal:

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

Cobalah online!

Pengembalian visual:

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

Cobalah online!

Fakta bahwa program yang tidak tertandingi }mengakhiri program dalam GolfScript, membuatnya cukup sederhana. Namun, saya cukup yakin bahwa kode saya untuk bertukar kurung belum optimal.

Martin Ender
sumber
0

Python 2.7, 208 byte

Meneruskan

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

Pengembalian normal

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

Pengembalian visual

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

Semua arah membaca dari stdin hingga EOF.

Tidak ada yang super pintar di sini. Membuntuti komentar untuk hanya mengeksekusi kode forward vs code backward, lalu execpernyataan di blok percobaan untuk menangkap kesalahan sintaks untuk dua pembalikan yang berbeda.

Orez
sumber