Công cụ kiểm tra palindrom tiện lợi


39

Nếu bạn đã từng thử viết mã palindromic trước đây, bạn sẽ biết có bao nhiêu dấu ngoặc có xu hướng cản trở bạn. ()()không phải là một palindrom, mặc dù nó trông giống như nó phải vậy, trong khi ())(()(cả hai đều nhạt màu và cả hai trông rất ngu ngốc. Sẽ không thuận tiện nếu nó là cách khác?

Một chuỗi là thuận tiện palindromic nếu nó bằng với chuỗi xuất phát khi đảo ngược của nó có tất cả các dấu ngoặc đơn ( ()), ngoặc ( []) và dấu ngoặc ( {}). Không có nhân vật khác là đặc biệt và yêu cầu lật. ( <>đôi khi được ghép nối nhưng thường không để chúng bị bỏ đi.)

Nhiệm vụ của bạn là viết, bằng ngôn ngữ của bạn, một chương trình (lấy đầu vào trên STDIN) hoặc một hàm (lấy một đối số chuỗi đơn) mà (a) đưa ra một giá trị đúng nhất quán * khi đối số của nó thuận tiện và sai, nhất quán, sai giá trị khác, và (b) là chính nó thuận tiện.

Ví dụ, các đầu vào sau đây là palindromic thuận tiện:

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

Và sau đây không phải là:

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

Bạn không được dựa vào bất kỳ trạng thái bên ngoài nào (tên tệp cụ thể, cấu trúc thư mục, đầu vào người dùng khác, truy cập web, v.v.) ngoại trừ cờ trình thông dịch / trình biên dịch.

Ngoài ra, bạn không được sử dụng "thủ thuật nhận xét" khi bạn nhận xét hoặc hiển thị một số đoạn mã không sử dụng bằng cách tận dụng các phương tiện nhận xét ngôn ngữ của bạn. Chẳng hạn, tất cả những điều sau đây đều không được phép, bởi vì chúng có chứa các bộ phận không có chức năng có thể được gỡ bỏ hoặc phá hủy một cách an toàn (với chi phí mất thuận tiện-palindromic-ness):

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

Rõ ràng điều này có thể không bao gồm mọi trường hợp như vậy, nhưng tinh thần của thách thức ở đây không phải là sử dụng các bình luận và mã ** chưa được chỉnh sửa để đạt được sự minh bạch, thay vào đó là sử dụng các dấu ngoặc và dấu ngoặc đúng. Tôi đang nhìn bạn, LISP, Brainfuck.

Đây là một , vì vậy mã ngắn nhất sẽ thắng, nhưng tất cả độ dài của mã đều được chào đón.

* Bằng các giá trị đúng và sai nhất quán, ý tôi là bạn có thể trả về một trong các cặp giá trị, chẳng hạn như 1đúng và 0sai, hoặc Falseđúng và "no"sai, miễn là các giá trị này khác nhau và không thay đổi từ chạy sang chạy chương trình của bạn. Sử dụng bất cứ điều gì giúp bạn tiết kiệm nhân vật.

** Không nên nhầm lẫn với chưa được thực hiện : mã hợp lệ và có thể làm những điều kỳ lạ nhưng không bao giờ được gọi là tốt.


Điều gì về những thứ như if(false){some code}hoặc các biến không sử dụng? Họ có được phép không?
ace_HongKongInependence

@ace Nếu ngôn ngữ của bạn bằng cách nào đó phân tích cú pháp hoặc kiểm tra mã chưa được thực hiện để thỏa thuận loại hoặc hiệu lực cú pháp, điều đó tốt. Nếu nó tương đương với một nhận xét vì ngôn ngữ của bạn không kiểm tra bên trong khối đó, khi nào nó sẽ xuất hiện lỗi cú pháp nếu có, điều đó không ổn. Tôi nghĩ rằng nếu bạn có thể tìm thấy một sử dụng hợp lệ cho (eslaf)fi, bạn có thể sử dụng if(false).
thuật toán

58
Tôi đã mất quá nhiều thời gian để tìm ra lý do tại sao ()()không phải là một palindrom
Phục hồi lại

Mã có phải làm việc với đầu vào nhiều dòng không?
Ventero

@Ventero Dòng mới và trả về vận chuyển là các ký tự và chúng không có cặp nào để lật, vì vậy tôi nói chúng được tính là các ký tự bình thường.
thuật toán

Câu trả lời:


13

J (60)

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

Đây là một hàm có một đối số:

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

Giải trình:

  • f :: gchạy hàm ftrên đầu vào và trả về kết quả nếu nó trả về mà không có lỗi. Nếu fthất bại, nó chạy gthay thế.

  • Đây f(|.-:'())([]][{}}{'&charsub), công việc thực tế:

    • |.: đảo ngược
    • -:: bằng
    • '())([]][{}}{'&charsub: thay thế mỗi khung bằng khung đối lập của nó
  • Các gchức năng (busrahc&'}{{}][[])(()':-.|), đó là vô nghĩa nhưng cú pháp hợp lệ. busrahckhông được xác định, nhưng điều đó không quan trọng bởi vì nó chỉ được giải quyết khi nó được chạy (và nó sẽ không chạy).

Bạn có thể lưu một nhân vật bằng cách biến bạn f :: gthành g@-@f. gtương đương với hook (-.|):vậy các đầu ra trở thành -1 và danh sách trống tương ứng thuận tiện và không tương ứng.
thuật toán

34

GolfScript, 107 91

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

Dòng mới là nghệ thuật. fi, c43clà noops, nhưng toàn bộ mã được thực thi.

In -3-1-1cho palindromes thuận tiện, -4-1-1nếu không. Hãy thử trực tuyến!

Phiên bản thay thế, 155 byte

Với chi phí 64 byte, điều này có thể được cải thiện khi:

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

Như trước đây, toàn bộ mã được thực thi và mỗi byte đơn ảnh hưởng đến đầu ra.

In 010cho palindromes thuận tiện, -100nếu không. Hãy thử trực tuyến!

Các bài kiểm tra và ví dụ

$ 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

Làm thế nào nó hoạt động

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

13

Hồng ngọc, 110

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

In truenếu đầu vào là một bảng màu thuận tiện và falsenếu không. Lưu ý rằng giải pháp này giả định rằng đầu vào không bị chấm dứt bởi một dòng mới, vì vậy hãy kiểm tra nó bằng 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

Đây là một cổng khá đơn giản trong câu trả lời của tôi cho Palindromic Palindrom Checker (và không thực sự được đánh gôn cho đến nay). Thủ thuật chính được sử dụng là biểu thức được ngoặc đơn đầu tiên luôn trả về 1, vì vậy nửa sau của biểu thức boolean không bao giờ được đánh giá (nhưng nó được phân tích cú pháp).

Khó khăn duy nhất trong việc điều chỉnh điều này là tìm ra cách thêm cuộc gọi để z.tr"đảo ngược thuận tiện" của nó cũng có hiệu lực về mặt cú pháp - nhưng tôi chỉ có thể sử dụng cùng một mẹo mà tôi đã sử dụng đặt: *trong nửa đầu được phân tích cú pháp như Toán tử splat (sử dụng nội dung mảng làm tham số hàm) và toán tử nhân mảng (hoặc lặp lại) trong nửa thứ hai.

Ruby, 157 297, tất cả mã được thực thi

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

Phiên bản (dài hơn một chút) này thực thi tất cả mã và tất cả trừ hai dòng ảnh hưởng đến đầu ra, được in ở dòng cuối cùng - nhưng tất cả các dòng được phân tích cú pháp và thực thi mà không có bất kỳ lỗi nào. Phiên bản này diễn giải bất kỳ dòng mới nào dưới dạng một phần của đầu vào, vì vậy hãy sử dụng echo -nđể kiểm tra nó hoặc thêm vào đầu vào của bạn với một dòng mới. Nó in truenếu đầu vào là một bảng màu thuận tiện, và falsenếu không.

Giải trình

# 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

9

GolfScript, 61 ký tự

OK, đây là một giải pháp cơ bản trong GolfScript. Tôi chắc chắn rằng nó có thể được cải thiện hơn nữa:

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

Như thường lệ đối với GolfScript, chương trình này đọc dữ liệu nhập từ stdin. Nó xuất ra:

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

nếu đầu vào là một bảng màu thuận tiện, như được xác định trong thử thách ở trên và:

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

nếu không phải vậy.

Giải thích: Chương trình này chủ yếu dựa trên phán quyết rằng chưa thi hành code is OK, miễn là nó được phân tích cú pháp. Nó bao gồm hai khối mã, được phân định bằng dấu ngoặc nhọn ( { }), là hình ảnh phản chiếu của nhau.

Khối mã đầu tiên được thực thi bằng cách ~theo sau nó và kiểm tra xem đầu vào có phải là một bảng màu thuận tiện hay không, xuất ra 1nếu có và 0nếu không. Khối mã thứ hai không được thực thi và do đó chỉ cần duy trì trên ngăn xếp cho đến khi chương trình kết thúc và mọi thứ trên ngăn xếp sẽ tự động được xâu chuỗi và in bởi trình thông dịch GolfScript.

Cần lưu ý rằng trình thông dịch GolfScript thực hiện rất ít kiểm tra cú pháp tại thời điểm phân tích cú pháp (hoặc bao giờ, đối với vấn đề đó); một khối mã GolfScript theo nghĩa đen có thể chứa hầu hết mọi thứ, ngay cả khi nó có thể bị sập khi được thực thi. Tuy nhiên, một vài lỗi cú pháp, chẳng hạn như các chuỗi ký tự bị lỗi, đã gây ra lỗi ngay cả trong mã chưa được thực hiện, vì vậy tôi tin rằng giải pháp này (hầu như không) nằm trong các quy tắc.

Thi thiên Nhìn vào mã được thực thi thực tế, nó chứa một vài phần tử palindromic thuận tiện như @[.]@, chuỗi ký tự "([{}])"và thậm chí cả vòng lặp %{ ... }%. Điều này đưa ra gợi ý trêu ngươi rằng một giải pháp GolfScript "thực chất palindromic", trong đó chương trình palindromic đầy đủ sẽ được thực thi và thực sự có thể thực hiện được. Khi tôi chưa thể tự sản xuất một cái, tôi sẽ cung cấp tiền thưởng đại diện +100 cho người đầu tiên quản lý để đưa ra một!


3
chờ đã, mã của bạn là một palindrom? : O
Fabricio

Tôi có xu hướng xem xét giải pháp này giống như "n\";X;";X;"\n"ý kiến ​​của việc bình luận, nhưng tôi sẽ cho bạn lợi ích của sự nghi ngờ. Tuy nhiên, tôi đã thực sự tìm kiếm các giải pháp "thực chất palindromic" như vậy, hoặc ít nhất là các giải pháp mà việc không thực hiện các khối được sử dụng nhiều hơn một chút.
thuật toán

Câu trả lời của tôi có một noop (biến không xác định) và một vài phần không thực hiện được gì (ví dụ 1;:). Điều đó vẫn được tính là đầy đủ chức năng?
Dennis

@Dennis: Vâng, tôi nghĩ vậy. Xin chúc mừng, nó chắc chắn đủ ấn tượng. Câu hỏi dường như đủ mới để tôi chưa thể đăng tiền thưởng trên đó, nhưng bạn sẽ có nó sau vài ngày.
Ilmari Karonen

1
định dạng đầu ra mất dần abuuuse :-)
John Dvorak

4

JavaScript (ES6), 245 byte

Tôi muốn có một câu trả lời JS có thể chạy trong trình duyệt, vì vậy đây là.

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

Xóa tất cả mã không bao giờ thực sự chạy, chúng tôi nhận được điều này:

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

Mà có thể được đơn giản hóa để này:

eurt=>eurt==eurt.split("").map(x=>({'{':'}','}':'{','[':']',']':'[','(':')',')':'('})[x]||x).reverse("").join("")

Bạn có thể lưu khoảng 60 byte bằng cách sử dụng n1 / 1n thay vì true / eurt, dấu phẩy ở một số nơi thay vì || và thay đổi bằng trình chuyển đổi khung: 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

Chạy trong shell dòng lệnh Spidermonkey . Đọc một dòng duy nhất từ ​​STDIN và đầu ra truehoặc falsetùy thuộc vào việc đầu vào có phải là một bảng màu thuận tiện hay không.

((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))

Mã này có giá trị cú pháp, nhưng mọi thứ sau đó &&không được thực thi, vì printhàm trả về giá trị falsey.

Bạn có thể chạy mã này trong bảng điều khiển của Firefox bằng cách chạy shim này trước để mô phỏng readlinevà các printchức năng. Chỉnh sửa đầu vào bên trong readlinekhi cần:

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

Và đây là một ví dụ nhanh về đầu ra:

ví dụ dòng lệnh


Tận dụng lợi thế &&là rất thông minh, tôi khen ngợi bạn (nhưng có vẻ hơi gian lận)
MayorMonty

2

05AB1E, 35 byte

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

Hãy thử trực tuyến!

Giải trình:

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

Tôi không nghĩ rằng điều này sẽ giúp vì câu trả lời là không hợp lệ nhưng thay vào đó "()[]{}"bạn có thể làmžu„<>-
acrolith

@daHugLenny Bây giờ là hợp lệ
Oliver Ni

Là phần còn lại của chương trình sau khi qít nhất được phân tích cú pháp cho tính hợp lệ cú pháp? Nếu không, tôi sẽ xem xét tương đương này để bình luận về nửa sau của mã.
thuật toán

@alacticmshark Đã sửa.
Oliver Ni

1

CJam, 38 byte

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

In "=re%W_@%W_q"1nếu đầu vào thuận tiện palindromic và "=re%W_@%W_q"0cách khác.

Hãy thử trực tuyến trong trình thông dịch CJam .

Làm thế nào nó hoạt động

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.

Sau khi thực hiện chương trình, CJam tự động in cả ba mục trên ngăn xếp: chuỗi được kiểm tra, Boolean từ so sánh chuỗi và chuỗi trống.


0

Perl, 83 + 2 = 85 byte

Chạy với -nl

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

Mã thoát sau khi in tính trung thực của đầu vào. Tất cả mọi thứ sau dấu chấm phẩy được diễn giải (và sẽ sụp đổ khi tập lệnh đạt đến điểm đó không phải vì exitnó gặp phải), nhưng không được thực thi. Nếu tôi rời exit;tixe;khỏi mã, nó vẫn sẽ in kết quả chính xác trước khi nó bị hỏng.

Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.