Normal ve görsel dize değiştirme


17

Kedi programı gibi davranan bir kod yazın. Yani, bir dize girmek ve olduğu gibi çıktılamak için. Ancak kodunuzun normal tersine çevrilmesi, giriş dizesinin normal tersine çevrilmesi sonucunu vermelidir. Ve kodunuzun görsel geri dönüşü, giriş dizesinin görsel geri dönüşünü çıktılamalıdır.

Normal tersine çevirme, bir dizenin ters çevrilmiş karakter dizisidir. Görsel tersine çevirme, karakterlerin sırasıyla ()[]{}<>değiştirildiği normal tersine çevirme işlemidir )(][}{><.

Karakterleri ()[]{}<>tanımlamak için bu sorgudan önce karakterleri olan ve yayınlanan herhangi bir kod sayfasını kullanabilirsiniz . Tüm kodlarınız için aynı kod sayfasını kullanmalısınız. Orijinal kodunuzun bu kod sayfasında geçerli olması gerekir ve tersine çevrilmiş kodlarınızdan herhangi birinin bu kodla uygulanması kendiliğinden gelmelidir.

Bu , bayt kazanır en kısa kod kazanır.

Misal

Dize için AB(XY), normal ve görsel geri dönüşleri sırasıyla )YX(BAve (YX)BA.

Kodunuz (varsayımsal bir dilde) ise AB(XY), kod )YX(BAve (YX)BAsırasıyla giriş dizesinin normal ve görsel geri dönüşlerini çıkarmalıdır. Ve AB(XY)bir kedi programı gibi davranmalıdır.


Giriş dizelerinin yeni satırlar içermesi bekleniyor mu?
Dijital Travma

@DigitalTrauma Bunu düşünmemiştim ... Programınız, kullandığınız giriş rutininin (bir dize döndürdüğü sürece) geri verebileceği her şeyi desteklemelidir. Ve orijinal kodun kendisi üzerinde çalışmalıdır.
jimmy23013

Yanıtlar:


9

05AB1E , 16 bayt

05AB1E'nin önceden tanımlanmış "()<>[]{}"ve görsel olarak geri dönüşü etkilemeyen bir sabit olması gerçeğini kullanır .

Kod:

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

Açıklama:

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

Çevrimiçi deneyin!


ters:

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

Açıklama:

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.

Çevrimiçi deneyin!


Görsel olarak ters çevrildi:

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

Açıklama:

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.       

Çevrimiçi deneyin!

CP-1252 kodlamasını kullanır .


6

CJam, 21 bayt

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

Burada test edin.

Normal geri dönüş:

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

Burada test edin.

Görsel tersine çevirme:

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

Burada test edin.

açıklama

İlk olarak, normal kod:

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

Bu basittir: qtüm girdileri okur e#, programın geri kalanını yorumlar ve giriş sonunda örtülü olarak yazdırılır.

Şimdi normal geri dönüş:

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

Ve son olarak, görsel geri dönüş:

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

Ben tam olarak bu kodu kendim vardı.
jimmy23013

6

Haskell, 124 bayt

yönlendir:

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

Normal ters:

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

Görsel ters:

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

Her sürüm fbir dize alan ve döndüren bir işlevi tanımlar . İleri modda fkimlik fonksiyonu id, kodun geri kalanı bir yorumdur. Normal ters modda koruma 1<2olarak f, IS True, yani reverseuygulanır. Görsel geri modunda, <geçer >ve koruma olup False. İkinci koruma, Truegörsel modda ve tam tersidir, bu nedenle ek qolarak "() <> {} []" anahtarları uygulanır.

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

Ayrıca <ve >korumalarda, kodum parantezlerin hiçbirini kullanmıyor, bu yüzden dağınık olamazlar.


6

Bash + ortak linux yardımcı programları, 51

  • @ Jimmy23013 sayesinde 2 bayt kaydedildi
  • @AdamKatz sayesinde 2 byte tasarruf edildi
#'><}{][)(' `P5BD706D5AC79E196iFe- cd` rt|ver|
\cat

Normal geri dönüş:

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

Görsel tersine çevirme:

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

Buradaki ana hile, dizenin ()[]{}<>691E97CA5D607DB5 (taban 15) olarak kodlanmış olmasıdır. Sonuçta ortaya çıkan dckomut, her iki tür ters dönüşten sonra da aynı sonucu verecektir. Ancak '()[]{}<>'dizge değişmezi ters kayıt tipine duyarlıdır.

tacgiriş satırlarının sırasını revtersine çevirmek ve her satırın karakterlerini tersine çevirmek için gereklidir. Herhangi bir ASCII girişi kabul edilebilir olmalıdır.


5

MATL, 26 24 22 16 bayt

ileri

DPEXSt'><}{][)('

Çevrimiçi deneyin!

Açıklama:

                % 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

Normal geri dönüş:

'()[]{}<>'tSXEPD

Çevrimiçi deneyin!

Açıklama:

            % 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

Görsel tersine çevirme:

')(][}{><'tSXEPD

Çevrimiçi deneyin!

Açıklama:

            % 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

Görsel tersine çevirme , karakterlerin sırasıyla ()[]{}<>değiştirildiği normal tersine çevirme işlemidir)(][}{>< .
Outgolfer Erik

@ ΈρικΚωνσταντόπουλος Güncellendi.
Suever,

3

GolfScript, 32 28 bayt

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

Çevrimiçi deneyin!

Normal geri dönüş:

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

Çevrimiçi deneyin!

Görsel tersine çevirme:

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

Çevrimiçi deneyin!

Eşsiz bir }kişinin GolfScript'teki programı sonlandırması bunu oldukça basitleştirdi. Ancak, parantez takma kodumun henüz uygun olmadığından eminim.


0

Python 2.7, 208 bayt

ileri

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

Normal geri dönüş

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

Görsel tersine çevirme

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

Stdin'den EOF'a kadar tüm talimatlar okundu.

Burada süper zekice bir şey yok. Yalnızca ileri ve geri kodunu yürütmek için yorumları izlemek, ardından execiki farklı geri dönüş için sözdizimi hatalarını yakalamak için bir try bloğundaki bir ifade.

Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.