Нормальный и визуальный возврат строки

17

Напишите некоторый код, который действует как программа cat. То есть ввести строку и вывести ее как есть. Но нормальная реверсия вашего кода должна выводить нормальную реверсию входной строки. И визуальная реверсия вашего кода должна выводить визуальную реверсию входной строки.

Обычное обращение - это обратная последовательность символов строки. Визуальная реверсия - это нормальная реверсия с ()[]{}<>заменой символов )(][}{><соответственно.

Вы можете использовать любую кодовую страницу, которая имеет символы ()[]{}<>и опубликована перед этим испытанием, чтобы определить символы. Вы должны использовать одну и ту же кодовую страницу для всего своего кода. Ваш оригинальный код должен быть действительным в этой кодовой странице, и применение любого из ваших обращенных кодов должно привести к самому себе.

Это , выигрывает самый короткий код в байтах.

пример

Для строки AB(XY)ее нормальные и визуальные реверсии есть )YX(BAи (YX)BAсоответственно.

Если ваш код (на гипотетическом языке) есть AB(XY), то код )YX(BAи (YX)BAдолжен выводить нормальное и визуальное реверсии входной строки соответственно. И AB(XY)должен выступить в роли кошачьей программы.

jimmy23013
источник
Ожидается ли, что входные строки могут содержать символы новой строки?
Цифровая травма
@DigitalTrauma Не думал об этом ... Ваша программа должна поддерживать любую подпрограмму ввода, которую вы можете вернуть (если она возвращает строку). И это должно работать на самом оригинальном коде.
jimmy23013
1
Связанный codegolf.stackexchange.com/q/28190/15599
Уровень Река Сент

Ответы:

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в визуальном режиме, поэтому дополнительно 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

  • 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
Suever
источник
Визуальная реверсия - это нормальная реверсия с ()[]{}<>заменой символов )(][}{><соответственно.
Эрик 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

Все направления читаются от стандартного до EOF.

Здесь нет ничего сверхумного. Завершающие комментарии для выполнения только прямого и обратного кода, а затем execоператора в блоке try для обнаружения синтаксических ошибок для двух разных реверсий.

Orez
источник