Normale und visuelle Stringumkehrung

17

Schreiben Sie Code, der als Cat-Programm fungiert. Das heißt, eine Zeichenfolge eingeben und so ausgeben, wie sie ist. Die normale Umkehrung Ihres Codes muss jedoch die normale Umkehrung der Eingabezeichenfolge ausgeben. Und die visuelle Umkehrung Ihres Codes muss die visuelle Umkehrung der Eingabezeichenfolge ausgeben.

Die normale Umkehrung ist die umgekehrte Zeichenfolge einer Zeichenfolge. Die visuelle Umkehrung ist die normale Umkehrung, wobei die Zeichen jeweils ()[]{}<>durch ersetzt werden )(][}{><.

Sie können jede Codepage verwenden, die die Zeichen enthält ()[]{}<>und vor dieser Herausforderung veröffentlicht wurde, um Zeichen zu definieren. Sie müssen für Ihren gesamten Code dieselbe Codepage verwenden. Ihr ursprünglicher Code muss in dieser Codepage gültig sein, und wenn Sie einen Ihrer umgekehrten Codes darauf anwenden, sollte sich dies ergeben.

Dies ist , der kürzeste Code in Bytes gewinnt.

Beispiel

Für die Zeichenfolge AB(XY)sind die normalen und visuellen Umkehrungen )YX(BAund (YX)BA.

Wenn Ihr Code (in einer hypothetischen Sprache) ist AB(XY), dann sollte der Code )YX(BAund (YX)BAdie normalen und visuellen Umkehrungen der Eingabezeichenfolge ausgeben. Und AB(XY)sollte als Katzenprogramm wirken.

jimmy23013
quelle
Wird erwartet, dass Eingabezeichenfolgen Zeilenumbrüche enthalten?
Digitales Trauma
@DigitalTrauma Habe nicht darüber nachgedacht ... Ihr Programm sollte unterstützen, was auch immer die Eingaberoutine, die Sie verwenden, zurückgeben könnte (solange sie eine Zeichenfolge zurückgibt). Und es sollte am Originalcode selbst arbeiten.
Jimmy23013
1
Related codegolf.stackexchange.com/q/28190/15599
Level River St

Antworten:

9

05AB1E , 16 Bytes

Nutzt die Tatsache, dass 05AB1E eine Konstante hat, "()<>[]{}"die für die visuelle Umkehrung vordefiniert ist und diese nicht beeinflusst.

Code:

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

Erläuterung:

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

Probieren Sie es online!


Rückgängig gemacht:

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

Erläuterung:

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.

Probieren Sie es online!


Optisch umgekehrt:

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

Erläuterung:

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.       

Probieren Sie es online!

Verwendet CP-1252- Codierung.

Adnan
quelle
6

CJam, 21 Bytes

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

Teste es hier.

Normale Umkehrung:

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

Teste es hier.

Visuelle Umkehrung:

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

Teste es hier.

Erläuterung

Zunächst der normale Code:

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

Dies ist einfach: qLiest alle Eingaben, e#kommentiert den Rest des Programms aus und die Eingabe wird implizit am Ende gedruckt.

Nun die normale Umkehrung:

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

Und schließlich die visuelle Umkehrung:

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
quelle
Ich hatte genau diesen Code.
Jimmy23013
6

Haskell, 124 Bytes

Nach vorne:

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

Normaler Rückwärtsgang:

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

Visuelle Umkehrung:

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

Jede Version definiert eine Funktion, fdie einen String annimmt und zurückgibt. Im Vorwärtsmodus fist die Identitätsfunktion id, der Rest des Codes ist ein Kommentar. Im normalen Rückwärtsmodus die Wache 1<2in fheißt True, so reverseangewandt wird. Im visuellen Rückwärtsmodus <wird auf umgeschaltet >und die Wache ist False. Der zweite Wächter ist genau umgekehrt und Trueim visuellen Modus, also wird zusätzlich qangewendet, was "() <> {} []" schaltet.

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

Außerdem <und >in den Wachen verwendet mein Code keine der Klammern, so dass sie nicht durcheinander gebracht werden können.

nimi
quelle
6

Bash + gängige Linux-Dienstprogramme, 51

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

Normale Umkehrung:

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

Visuelle Umkehrung:

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

Der Haupttrick dabei ist, dass die Zeichenfolge ()[]{}<>als 691E97CA5D607DB5 (Basis 15) codiert ist. Der resultierende dcBefehl liefert nach beiden Arten der Umkehrung dasselbe Ergebnis. Das '()[]{}<>'Zeichenfolgenliteral ist jedoch vom Umkehrtyp abhängig.

tacwird benötigt, um die Reihenfolge der Eingabezeilen umzukehren, und revwird benötigt, um die Zeichen jeder Zeile umzukehren. Jede ASCII-Eingabe sollte akzeptabel sein.

Digitales Trauma
quelle
5

MATL, 26 24 22 16 Bytes

Nach vorne

DPEXSt'><}{][)('

Probieren Sie es online!

Erläuterung:

                % 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

Normale Umkehrung:

'()[]{}<>'tSXEPD

Probieren Sie es online!

Erläuterung:

            % 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

Visuelle Umkehrung:

')(][}{><'tSXEPD

Probieren Sie es online!

Erläuterung:

            % 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
quelle
Die visuelle Umkehrung ist die normale Umkehrung, wobei die Zeichen jeweils ()[]{}<>durch ersetzt werden )(][}{><.
Erik der Outgolfer
@ ΈρικΚωνσταντόπουλος Aktualisiert.
Suever
3

GolfScript, 32 28 Bytes

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

Probieren Sie es online!

Normale Umkehrung:

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

Probieren Sie es online!

Visuelle Umkehrung:

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

Probieren Sie es online!

Die Tatsache, dass ein Unmatched }das Programm in GolfScript beendet, machte dies ziemlich einfach. Allerdings bin ich mir ziemlich sicher, dass mein Code zum Vertauschen der Klammern noch nicht optimal ist.

Martin Ender
quelle
0

Python 2.7, 208 Bytes

Nach vorne

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

Normale Umkehrung

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

Visuelle Umkehrung

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

Alle Richtungen von stdin bis EOF gelesen.

Hier gibt es nichts besonders Schlaues. Nachgestellte Kommentare, um nur den Vorwärts- und den Rückwärtscode auszuführen, dann eine execAnweisung in einem try-Block, um Syntaxfehler für die beiden verschiedenen Umkehrungen abzufangen.

Orez
quelle