通常および視覚的な文字列復帰


17

catプログラムとして機能するコードを作成します。つまり、文字列を入力してそのまま出力します。ただし、コードの通常の復帰では、入力文字列の通常の復帰を出力する必要があります。また、コードの視覚的な反転は、入力文字列の視覚的な反転を出力する必要があります。

通常の復帰とは、文字列の逆の文字シーケンスです。視覚的復帰は、文字()[]{}<>)(][}{><それぞれ置き換えられた通常の復帰です。

()[]{}<>文字を定義し、このチャレンジの前に公開されている任意のコードページを使用して文字を定義できます。すべてのコードに同じコードページを使用する必要があります。元のコードはこのコードページで有効である必要があり、逆のコードのいずれかをそのコードページに適用すると、結果が得られます。

これは、バイト単位の最短コードが優先されます。

文字列の場合はAB(XY)、その正常な視覚的な差し戻しがある)YX(BA(YX)BA、それぞれ。

(架空の言語で)あなたのコードがある場合はAB(XY)、そのコード)YX(BA(YX)BAすべき出力をそれぞれ入力文字列の正常かつ視覚的な差し戻し。そしてAB(XY)、猫のプログラムとして機能する必要があります。


入力文字列に改行が含まれると予想されますか?
デジタル外傷

@DigitalTraumaそれについて考えていませんでした...あなたのプログラムは、使用する入力ルーチンが返す可能性のあるものをサポートする必要があります(文字列を返す限り)。そして、元のコード自体で動作するはずです。
jimmy23013

回答:


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<2fTrue、ガードはですのでreverse、適用されます。視覚的反転モードでは、<はに切り替えられ>、ガードはFalseです。2番目のガードは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

視覚的復帰は、文字がそれぞれ置き換えられた通常の復帰です。()[]{}<>)(][}{><
エリックアウトゴルファー

@ΈρικΚωνσταντόπουλος更新されました。
スーバー

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、2つの異なる復帰の構文エラーをキャッチするためのtryブロック内のステートメント。

弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.