Pemeriksa "Palindrome nyaman"

39

Jika Anda pernah mencoba untuk menulis kode palindromic sebelumnya, Anda akan tahu berapa banyak kurung cenderung menghalangi Anda. ()()bukanlah palindrom, meskipun sepertinya sudah seharusnya, sementara ())(dan ()(keduanya palindrom dan keduanya terlihat sangat bodoh. Bukankah lebih nyaman jika sebaliknya?

Sebuah string adalah palindromic jika itu sama dengan string yang diturunkan ketika kebalikannya memiliki semua tanda kurung ( ()), tanda kurung ( []), dan kurung kurawal ( {}) dibalik. Tidak ada karakter lain yang spesial dan memerlukan pembalikan. ( <>Kadang-kadang berpasangan tetapi seringkali tidak begitu mereka ditinggalkan.)

Tugas Anda adalah menulis, dalam bahasa Anda, sebuah program (mengambil input pada STDIN) atau fungsi (mengambil argumen string tunggal) yang (a) memberikan nilai true yang konsisten * ketika argumennya dengan mudah palindromik dan berbeda, false konsisten nilai sebaliknya, dan (b) itu sendiri mudah palindromik.

Misalnya, input berikut mudah palindromik:

racecar
(a)(bb)(a)
void main(int argc, *char[] argv) {} (vgra []rahc* ,cgra tni)niam diov

Dan yang berikut ini bukan:

non-palindrome
A nut for a jar of tuna?
(old [style] parens) )snerap ]elyts[ dlo(
ingirumimusnocte)etconsumimurigni

Anda tidak boleh bergantung pada status eksternal apa pun (nama file tertentu, struktur direktori, input pengguna lain, akses web, dll) kecuali flag juru bahasa / penyusun.

Selain itu, Anda tidak boleh menggunakan "trik komentar" di mana Anda berkomentar atau membuat sebagian kode yang tidak digunakan dengan memanfaatkan fasilitas komentar bahasa Anda. Misalnya, semua hal berikut ini tidak diperbolehkan, karena mengandung bagian-bagian yang tidak berfungsi yang dapat dengan aman dihilangkan atau dihancurkan (dengan mengorbankan kehilangan kemudahan palindromik):

{some code} // {edoc emos}
{some code} NB.BN {edoc emos}
"n\" ;{edoc emos} ;"; {some code}; "\n"

Jelas ini mungkin tidak mencakup setiap kasus seperti itu, tetapi semangat tantangan di sini adalah tidak menggunakan komentar dan kode ** yang tidak diuraikan untuk mencapai palindrominess, alih-alih memanfaatkan paren dan kurung yang dikoreksi. Saya melihat Anda, LISP, Brainfuck.

Ini adalah , sehingga kode terpendek menang, tetapi semua panjang kode diterima.

* Dengan nilai-nilai benar dan salah yang konsisten, maksud saya bahwa Anda dapat mengembalikan salah satu dari sepasang nilai, seperti 1untuk true dan 0false, atau Falseuntuk true dan "no"false, selama nilai-nilai ini berbeda satu sama lain, dan tidak berubah dari menjalankan ke menjalankan program Anda. Gunakan apa pun yang menyelamatkan Anda karakter.

** Tidak perlu bingung dengan tidak dieksekusi : kode yang valid dan mungkin melakukan hal-hal aneh tetapi tidak pernah dipanggil baik-baik saja.

algoritme hiu
sumber
Bagaimana dengan hal-hal seperti if(false){some code}atau variabel yang tidak digunakan? Apakah mereka diizinkan?
pastebin.com memangkas 0mr8spkT
@ace Jika bahasa Anda entah bagaimana mengurai atau cek kode tidak dijalankan untuk perjanjian jenis atau validitas sintaksis, yang baik-baik saja ini. Jika itu sama dengan komentar karena bahasa Anda tidak memeriksa bagian dalam blok itu, ketika itu akan menimbulkan kesalahan sintaksis jika itu, itu tidak baik. Saya pikir jika Anda dapat menemukan penggunaan yang valid untuk (eslaf)fi, Anda bisa menggunakannya if(false).
algorithmshark
58
Butuh waktu terlalu lama bagi saya untuk mencari tahu mengapa ()()itu bukan palindrom
David mengatakan Reinstate Monica
Apakah kode harus bekerja dengan input multi-line?
Ventero
@Ventero Newlines dan carriage return adalah karakter, dan mereka tidak memiliki pasangan untuk flip, jadi saya akan mengatakan mereka dihitung sebagai karakter normal.
algorithmshark

Jawaban:

13

J (60)

(|.-:'())([]][{}}{'&charsub) :: (busrahc&'}{{}][[])(()':-.|)

Ini adalah fungsi yang mengambil argumen:

   (|.-:'())([]][{}}{'&charsub) :: (busrahc&'}{{}][[])(()':-.|) 'ingirumimusnocte)etconsumimurigni'
0
   (|.-:'())([]][{}}{'&charsub) :: (busrahc&'}{{}][[])(()':-.|) '(a)(bb)(a)'
1

Penjelasan:

  • f :: gmenjalankan fungsi di fatas input, dan mengembalikan hasilnya jika kembali tanpa kesalahan. Jika fgagal, itu berjalan gsebagai gantinya.

  • Di fsini adalah (|.-:'())([]][{}}{'&charsub), yang melakukan pekerjaan sebenarnya:

    • |.: membalikkan
    • -:: adalah sama dengan
    • '())([]][{}}{'&charsub: mengganti setiap braket dengan braket yang berlawanan
  • The gfungsi (busrahc&'}{{}][[])(()':-.|), yang adalah omong kosong tapi sintaksis valid. busrahctidak didefinisikan, tetapi itu tidak masalah karena hanya diselesaikan ketika dijalankan (dan tidak akan berjalan).
marinus
sumber
Anda dapat menyimpan karakter dengan mengubahnya f :: gmenjadi g@-@f. gsetara dengan kait (-.|)karena :begitu output menjadi -1 dan daftar kosong untuk palindromik nyaman dan tidak masing-masing.
algorithmshark
34

GolfScript, 107 91

.4:ab-1:ba=;1
%ba%{...fi@@=
c43.=;)('"([{
}])"'~?~'"([{
}])"')(;=.34c
=@@if...}%ab%
1;=ab:1-ba:4.

Baris baru artistik. fi, c43dan cnoops, tetapi seluruh kode dieksekusi.

Mencetak -3-1-1untuk palindrom yang nyaman, -4-1-1jika tidak. Cobalah online!

Versi alternatif, 155 byte

Dengan biaya 64 byte, ini dapat ditingkatkan setelah:

0!*1{!}\;:);0:f;0:i;-1:ab;9:ba;
...=;1%ab%{....i@f@@fi@@=@.=@\)
+""'"([{}])"'~+?+~'"([{}])"'""+
(\@=.@=@@if@@f@i....}%ba%1;=...
;ab:9;ba:1-;i:0;f:0;(:;\{!}1*!0

Seperti sebelumnya, seluruh kode dieksekusi dan setiap byte tunggal mempengaruhi output.

Mencetak 010untuk palindrom yang nyaman, -100jika tidak. Cobalah online!

Tes dan contoh

$ base64 > palindrome.gs -d <<< LjQ6YWItMTpiYT07MSViYSV7Li4uZmlAQD1jNDMuPTspKCciKFt7fV0pIid+P34nIihbe31dKSInKSg7PS4zNGM9QEBpZi4uLn0lYWIlMTs9YWI6MS1iYTo0Lg==
$ wc -c palindrome.gs
91 palindrome.gs
$ rev palindrome.gs | tr '([{}])' ')]}{[(' | diff - palindrome.gs
$ echo -n 'r(a[c{"e"}c]a)r' | golfscript palindrome.gs
-3-1-1
$ echo -n 'totallynotapalindrome' | golfscript palindrome.gs
-4-1-1
$
$ base64 > pal.gs -d <<< MCEqMXshfVw7Oik7MDpmOzA6aTstMTphYjs5OmJhOy4uLj07MSVhYiV7Li4uLmlAZkBAZmlAQD1ALj1AXCkrIiInIihbe31dKSInfis/K34nIihbe31dKSInIiIrKFxAPS5APUBAaWZAQGZAaS4uLi59JWJhJTE7PS4uLjthYjo5O2JhOjEtO2k6MDtmOjA7KDo7XHshfTEqITA=
$ wc -c pal.gs
155 pal.gs
$ rev pal.gs | tr '([{}])' ')]}{[(' | diff - pal.gs
$ echo -n 'r(a[c{"e"}c]a)r' | golfscript pal.gs
010
$ echo -n 'totallynotapalindrome' | golfscript pal.gs
-100
$ for i in {1..154}; do head -c $i pal.gs > tmp.gs; tail -c +$[i+2] pal.gs >> tmp.gs
> [ "$(echo -n 'r(a[c{"e"}c]a)r' | golfscript tmp.gs 2> /dev/null)" = "010" ] && echo $i
> done; rm tmp.gs
1
for i in {1..154}; do head -c $i pal.gs > tmp.gs; tail -c +$[i+2] pal.gs >> tmp.gs
>  [ "$(echo -n '42' | golfscript tmp.gs 2> /dev/null)" = "-100" ] && echo $i
> done | grep '^1$'; rm tmp.gs

Bagaimana itu bekerja

.             # Duplicate the input string.
4:ab-1:ba     # Save 4 in “ab” and -1 in “ba”.
=;            # Compare 4 to -1 and discard the result.
1%            # Save every element from the input string in a new string.
ab%           # Reverse the input string.
{             # For each character in the input string:
  ...         # Duplicate the character thrice.
  fi          # Variable “fi” is undefined; this does nothing.
  @@=         # Verify that the character is equal to itself; push 1.
  c43         # Variable “c43” is undefined; this does nothing.
  .=;         # Verify that 1 is equal to itself and discard the result.
  )(          # Increment and decrement the character.
  '"([{}])"'~ # Push that string and evaluate it. Result: '([{}])'
  ?           # Retrieve the character's position in '([{}])'. -1 means not found.
  ~           # Negate the position.. Examples: -1 -> 0    0 -> -1    2 -> -3
  '"([{}])"') # Push that string and pop its last element. Result: '"([{}])' 34
  (;          # Decrement 34 (the ASCII code of a double quote) and discard.
  =           # Retrieve the corresponding character.
  .34         # Duplicate the character and push 34.
  c           # Variable “c” is undefined; this does nothing.
  =           # If the character is a double quote, the index was -1.
  @@if        # In that case, replace the double quote with the original character.
  ...         # Duplicate the new character thrice.
}%            #
ab%           # Save every fourth element in a new string to discard dummy values.
1;            # Push 1 and discard.
=             # Push 1 if the modified string matches the original, 0 otherwise.
ab:1-         # Save 4 in “1” and subtract.
ba:4.         # Save -1 in “4” and duplicate.

0!*           # Pop and push the input string.
1{!}\;:);     # Make “)” an alias for “!”.
0:f;0:i;      # Variables.
-1:ab;9:ba;   # Moar variables.
...=;         # Duplicate the input string.
1%ab%         # Reverse the copy.
{             # For each character in the input string:
  ....        # Duplicate the character four times.
  i@          # Push 0 and rotate a string copy on top of it.
  f@@fi@@     # Push 0 and rotate 0 on top of it.
  =@          # Push 1 and rotate a string copy on top of it.
  .=@         # Push 1 and rotate 1 on top of it.
  \)+         # Negate a 1 and add. Result: 1
  ""          # Push that string.
  '"([{}])"'  # Push that string.
   ~+         # Evaluate the second string and concatenate. Result: '([{}])'
   ?          # Retrieve the characters position in '([{}])'. -1 means not found.
   +~         # Add 1 to the position and negate. Ex.: -1 -> -1 | 0 -> -2 | 1 -> -3
  '"([{}])"'  # Push that string.
  ""          # Push that string.
  +           # Concatenate. Result: '"([{}])"' 
  (\          # Pop the first double quote and swap it with the rest of the string.
  @=.         # Retrieve the corresponding character and duplicate it.
  @=          # If the character is a double quote, the index was -1.
  @@if        # In that case, replace the double quote with the original character.
  @@          # Rotate the modified character to the bottom.
  f@i....     # Push dummy values.
  }%          #
  ba%         # Save every ninth element in a new string to discard dummy values.
  1;          # Push 1 and discard.
  =           # Push 1 if the modified string matches the original, 0 otherwise.
  ...;        # Duplicate thrice and discard the last copy.
  ab:9;ba:1-; # Variables.
  i:0;f:0;    # Moar variables.
  (:;\        # Negate, override “;” and swap.
  {!}1*!0     # Negate twice and push 0.
Dennis
sumber
13

Ruby, 110

(z=gets;r=z.tr *["([{}])",")]}{[("];p *z==r.reverse;1)||(1;esrever.r==z* p;[")]}{[(","([{}])"]* rt.z=r;steg=z)

Mencetak truejika inputnya adalah palindrome yang nyaman dan falsejika tidak. Perhatikan bahwa solusi ini mengasumsikan bahwa input tidak diakhiri oleh baris baru, jadi ujilah dengan echo -n:

echo -n '(a)(bb)(a)' | ruby convpal.rb
true

echo -n '(a)(bb()a(' | ruby convpal.rb
false

# note that for this to work, the file must not contain a newline
# to remove a trailing newline, pipe it through tr -d $'\n'
cat convpal.rb | ruby convpal.rb
true

Ini adalah port yang agak langsung dari jawaban saya untuk Palindromic Palindrome Checker (dan tidak benar-benar bermain golf sejauh ini). Trik utama yang digunakan adalah bahwa ekspresi kurung pertama selalu kembali 1, sehingga bagian kedua dari ekspresi boolean tidak pernah dievaluasi (tetapi diuraikan).

Satu-satunya kesulitan dalam mengadaptasi ini adalah mencari tahu bagaimana cara menambahkan panggilan z.trsehingga "reverse nyaman" juga akan valid secara sintaksis - tetapi saya hanya bisa menggunakan trik yang sama saya sudah menggunakan put:, *yang pada paruh pertama diuraikan sebagai operator percikan (gunakan konten array sebagai parameter fungsi) dan sebagai operator perkalian array (atau repitisi) di babak kedua.

Ruby, 157 297, semua kode dieksekusi

w=tsoh=gets p
o=rt=esrever=Gem
q=tsoh.tr *["([{}])",")]}{[("]
q==esrever.host=w=tsoh.reverse==q
[")]}{[(","([{}])"]* rt.host=q
meG=reverse=tr=o
p steg=host=w

Versi ini (sedikit lebih lama) mengeksekusi semua kode, dan semua kecuali dua baris mempengaruhi output, yang dicetak pada baris terakhir - tetapi semua baris diurai dan dieksekusi tanpa kesalahan. Versi ini menginterpretasikan baris baru yang tertinggal sebagai bagian dari input, jadi gunakan echo -nuntuk mengujinya, atau tambahkan input Anda dengan baris baru. Ia mencetak truejika inputnya adalah palindrome yang nyaman, dan falsesebaliknya.

Penjelasan

# Read the input by calling gets(nil), which is achieved by passing the return
# value of a call to Kernel#p (which returns nil if no argument is supplied) to
# gets.
w=tsoh=gets p
# Assign the global Gem module to three variables.
# The variable names are the reversed names of methods we have to call later.
# This doesn't necessarily have to be the Gem module, any global module/variable
# (or class that allows object creation through a call to the module itself,
# e.g. Hash or GC) with a writable property would do, but Gem#host was
# the shortest one I could find. This is necessary because Ruby doesn't
# allow setting previously undefined properties through the dot syntax.
o=rt=esrever=Gem
# Replace the parentheses with the corresponding flipped one.
# sserts is the reverse of the property name we're going to use later.
q=tsoh.tr *["([{}])",")]}{[("]
# Do the convinient palindrome check and assign its result to a few variables
# and Gem's host property.
q==esrever.host=w=tsoh.reverse==q
# Here, the * is parsed as array join operator.
[")]}{[(","([{}])"]* rt.host=q
# Nothing special here.
meG=reverse=tr=o
# Print the result of the palindrome check, which was stored in w.
p steg=host=w
Ventero
sumber
9

GolfScript, 61 karakter

OK, inilah solusi dasar dalam GolfScript. Saya yakin ini bisa lebih ditingkatkan:

{.-1%{"([{}])".2$?~@[.]@+=}%=}~{=%{=+@[.]@~?$2."([{}])"}%1-.}

Seperti biasa untuk GolfScript, program ini membaca inputnya dari stdin. Ini menghasilkan:

1{=%{=+@[.]@~?$2."([{}])"}%1-.}

jika inputnya adalah palindrome yang nyaman, seperti yang didefinisikan dalam tantangan di atas, dan:

0{=%{=+@[.]@~?$2."([{}])"}%1-.}

Jika tidak.

Penjelasan: Program ini sangat bergantung pada aturan bahwa kode yang tidak dieksekusi adalah OK, selama kode tersebut diuraikan. Ini terdiri dari dua blok kode, dibatasi oleh kurung kurawal ( { }), yang merupakan gambar cermin satu sama lain.

Blok kode pertama dijalankan dengan ~mengikutinya, dan memeriksa apakah inputnya adalah palindrome yang nyaman, mengeluarkannya 1jika ada dan 0tidak. Blok kode kedua tidak dieksekusi, dan dengan demikian tetap berada di stack sampai program berakhir dan semua yang ada di stack secara otomatis dikompilasi dan dicetak oleh penerjemah GolfScript.

Perlu dicatat bahwa interpreter GolfScript melakukan sangat sedikit pemeriksaan sintaks pada waktu parse (atau pernah, dalam hal ini); blok kode GolfScript literal dapat berisi hampir semua hal, bahkan jika mungkin macet ketika dijalankan. Namun, beberapa kesalahan sintaksis, seperti literal string yang tidak dikalahkan, meningkatkan kesalahan bahkan dalam kode yang tidak dieksekusi, jadi saya percaya solusi ini (nyaris) berada dalam aturan.

Ps. Melihat kode yang sebenarnya dieksekusi, itu berisi beberapa elemen palindrom nyaman seperti @[.]@, string literal "([{}])", dan bahkan loop %{ ... }%. Ini menawarkan saran yang menggiurkan bahwa solusi GolfScript "secara intrinsik palindromik", di mana program palindromik penuh akan dieksekusi dan fungsional, mungkin sebenarnya dimungkinkan. Karena saya belum berhasil memproduksinya sendiri, saya dengan ini menawarkan hadiah +100 perwakilan kepada orang pertama yang berhasil membuat satu!

Ilmari Karonen
sumber
3
tunggu, kode Anda adalah palindrome itu sendiri? : O
Fabricio
Saya cenderung menganggap solusi ini lebih seperti "n\";X;";X;"\n"jenis komentar, tapi saya akan memberi Anda manfaat dari keraguan. Saya benar-benar mencari solusi "intrinsik palindrom" seperti itu untuk memulai, bagaimanapun, atau setidaknya yang mana non-eksekusi blok sedikit lebih curang.
algorithmshark
Jawaban saya memiliki noop (variabel tidak terdefinisi) dan beberapa bagian yang tidak menghasilkan apa-apa (misalnya, 1;). Apakah itu masih dianggap berfungsi penuh?
Dennis
@ Dennis: Ya, saya kira begitu. Selamat, tentu saja cukup mengesankan. Pertanyaannya tampaknya cukup baru sehingga saya belum bisa memposting hadiah itu, tetapi Anda akan mendapatkannya dalam beberapa hari.
Ilmari Karonen
1
keluaran format leeway abuuuse :-)
John Dvorak
4

JavaScript (ES6), 245 byte

Saya ingin jawaban JS yang dapat dijalankan di browser, jadi ini dia.

eurt=>eurt==(("",eurt))["split"||"nioj"]("")["map"||"esrever"](x=>({'{':'}','}':'{','[':']',']':'[','(':')',')':'('})[x]||x||[x]({')':'(','(':')',']':'[','[':']','}':'{','{':'}'})>=x)["reverse"||"pam"]("")["join"||"tilps"]((true,""))==true>=true

Menghapus semua kode yang tidak pernah benar-benar dijalankan, kami mendapatkan ini:

eurt=>eurt==(("",eurt))["split"||"nioj"]("")["map"||"esrever"](x=>({'{':'}','}':'{','[':']',']':'[','(':')',')':'('})[x]||x||[x]({')':'(','(':')',']':'[','[':']','}':'{','{':'}'})>=x)["reverse"||"pam"]("")["join"||"tilps"]((true,""))==true>=true
eurt=>eurt==(("",eurt))["split"        ]("")["map"           ](x=>({'{':'}','}':'{','[':']',']':'[','(':')',')':'('})[x]||x                                                           )["reverse"       ]("")["join"         ]((true,""))==true>=true

Yang dapat disederhanakan ini:

eurt=>eurt==eurt.split("").map(x=>({'{':'}','}':'{','[':']',']':'[','(':')',')':'('})[x]||x).reverse("").join("")
Produksi ETH
sumber
Anda dapat menghemat 60 byte dengan menggunakan n1 / 1n alih-alih true / eurt, koma di beberapa tempat, bukan ||, dan mengutak-atik braket pengalih: n1=>n1==(('',n1))['nioj','split']``['esrever','map'](c=>`()[]{}`[`()[]{}`['indexOf'](c)^1]||c||[1^(c)['fOxedni']`{}[]()`]`{}[]()`>=c)['pam','reverse']``['tilps','join']((1n,''))==1n>=1n(185 byte)
Yair Rand
3

Javascript (ES6) 288

Berjalan di shell baris perintah Spidermonkey . Membaca satu baris dari STDIN dan output trueatau falsetergantung pada apakah input adalah palindrome yang nyaman.

((print)((eval)('r=readline()')==([0]['map']['call'](r,x=>({'{':'}','}':'{','[':']',']':'[','(':')',')':'('})[x]||x)['reverse']()['join']('')))&&((('')['nioj']()['esrever'](x||[x]({')':'(','(':')',']':'[','[':']','}':'{','{':'}'})>=x,r)['llac']['pam'][0])==('()enildaer=r')(lave))(tnirp))

Kode ini valid secara sintaksis, tetapi semua yang terjadi setelahnya &&tidak dieksekusi, karena printfungsinya mengembalikan nilai falsey.

Anda dapat menjalankan kode ini di konsol Firefox dengan menjalankan shim ini terlebih dahulu untuk meniru readlinedan printfungsinya. Edit input di dalam readlinesesuai kebutuhan:

readline = function(){ 
    return "void main(int argc, *char[] argv) {} (vgra []rahc* ,cgra tni)niam diov"; 
}, print = console.log.bind(console);

Dan inilah contoh cepat dari hasilnya:

contoh baris perintah

nderscore
sumber
Mengambil keuntungan dari &&itu benar-benar pintar, saya memuji Anda (tetapi tampaknya sedikit curang)
MayorMonty
2

05AB1E, 35 byte

"{[()]}"DRr‡`rJ¹Q,Q¹Jr`‡rRD"{[()]}"

Cobalah online!

Penjelasan:

                     # Implicit input
 "{[()]}"            # Push "{[()]}" onto the stack
         DR          # Pushes a reversed copy onto the stack
           r         # Reverse the order of the stack
            ‡        # Transliterate
             `       # Flatten array on stack
              r      # Reverse order of stack
               J     # Join stack
                ¹Q   # Check equality with first input
                  ,  # Print
                     # Everything after is still syntactically correct, but just does not print anything.
Oliver Ni
sumber
Saya tidak berpikir ini akan membantu karena jawabannya tidak valid tetapi "()[]{}"Anda tidak dapat melakukannyažu„<>-
acrolith
@daHugLenny Sekarang sah
Oliver Ni
Apakah sisa program setelah qsetidaknya diuraikan untuk validitas sintaksis? Jika tidak, saya akan menganggap ini sama dengan mengomentari bagian kedua dari kode.
algorithmshark
@algorithmshark Diperbaiki.
Oliver Ni
1

CJam, 38 byte

Q~"=re%W_@%W_q"`{[()]}`"q_W%@_W%er="~Q

Mencetak "=re%W_@%W_q"1jika inputnya sesuai dengan palindromic dan "=re%W_@%W_q"0sebaliknya.

Cobalah online di juru bahasa CJam .

Bagaimana itu bekerja

Q~                                     e# Evaluate an empty string.
  "=re%W_@%W_q"                        e# Push that string.
               `                       e# Inspect. Pushes "\"=re%W_@%W_q\"".
                {[()]}                 e# Push that block.
                      `                e# Inspect. Pushes "{[()]}".
                       "           "~  e# Push and evaluate.
                        q              e# Read from STDIN.
                         _W%           e# Push a reversed copy.
                            @          e# Rotate "{[()]}" on top of the stack.
                             _W%       e# Push a reversed copy.
                                er     e# Perform transliteration.
                                  =    e# Compare to the input string.
                                     Q e# Push an empty string.

Setelah menjalankan program, CJam secara otomatis mencetak ketiga item pada stack: string yang diperiksa, Boolean dari perbandingan string dan string kosong.

Dennis
sumber
0

Perl, 83 + 2 = 85 byte

Jalankan dengan -nl

say$_~~reverse y-"({[]})"-")}][{("-r;exit;tixe;r-")}][{("-"({[]})"-y esrever~~_$yas

Kode keluar setelah mencetak kebenaran input. Segala sesuatu setelah tanda titik koma ditafsirkan (dan akan crash ketika skrip mencapai titik itu kalau bukan karena exitpertemuan itu), tetapi tidak dieksekusi. Jika saya meninggalkan exit;tixe;kode, masih akan mencetak hasilnya dengan benar sebelum crash.

Gabriel Benamy
sumber