ตัวตรวจสอบ“ สะดวก palindrome”


39

หากคุณเคยพยายามที่จะเขียนรหัส palindromic มาก่อนคุณจะรู้ว่ามีแนวโน้มที่จะได้รับในวงเล็บของคุณ ()()ไม่ใช่ palindrome แม้ว่ามันดูเหมือนว่ามันควรจะเป็นในขณะที่())(และ()(มีทั้ง palindromic และทั้งสองมองเป็นใบ้ มันจะไม่สะดวกถ้ามันเป็นอย่างอื่น?

สตริงเป็นpalindromic สะดวกถ้ามันเท่ากับสตริงที่ได้รับเมื่อ reverse มีวงเล็บ ( ()), วงเล็บ ( []) และวงเล็บปีกกา ( {}) ทั้งหมด ไม่มีตัวละครอื่นที่พิเศษและต้องการการพลิก ( <>บางครั้งมีการจับคู่ แต่มักจะไม่ถูกปล่อยออกไป)

งานของคุณคือการเขียนในภาษาของคุณโปรแกรม (รับอินพุตบน STDIN) หรือฟังก์ชั่น (รับอาร์กิวเมนต์สตริงเดี่ยว) ซึ่ง (a) ให้ค่าจริงที่สอดคล้องกัน * เมื่ออาร์กิวเมนต์มีความสะดวก Palindromic และเท็จที่สอดคล้องกัน ค่าเป็นอย่างอื่นและ (b) เป็นตัวเองอย่างสะดวก palindromic

ตัวอย่างเช่นอินพุตต่อไปนี้เป็นแบบ palindromic:

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

และสิ่งต่อไปนี้ไม่ใช่:

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

คุณไม่สามารถพึ่งพาสถานะภายนอกใด ๆ (ชื่อไฟล์เฉพาะโครงสร้างไดเรกทอรีอินพุตผู้ใช้อื่น ๆ การเข้าถึงเว็บ ฯลฯ ) ยกเว้นตัวแปลภาษา / ตัวแปลภาษา

นอกจากนี้คุณไม่สามารถใช้ "เคล็ดลับการแสดงความคิดเห็น" ซึ่งคุณแสดงความคิดเห็นหรือแสดงโค้ดบางส่วนที่ไม่ได้ใช้โดยใช้ประโยชน์จากสิ่งอำนวยความสะดวกการแสดงความคิดเห็นในภาษาของคุณ ตัวอย่างเช่นทั้งหมดต่อไปนี้ไม่ได้รับอนุญาตเพราะมีชิ้นส่วนที่ไม่สามารถใช้งานได้ซึ่งสามารถนำออกหรือทำลายได้อย่างปลอดภัย (มีค่าใช้จ่ายในการสูญเสียความสะดวก - palindromic-ness):

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

เห็นได้ชัดว่าสิ่งนี้อาจไม่ครอบคลุมทุกกรณี แต่วิญญาณของความท้าทายที่นี่ไม่ได้ใช้ความคิดเห็นและรหัสที่ไม่ได้แยกวิเคราะห์เพื่อให้ได้ความน่ากลัวแทนที่จะใช้ parens และวงเล็บที่ถูกต้อง ฉันกำลังมองคุณ LISP, Brainfuck

นี่คือดังนั้นรหัสที่สั้นที่สุดชนะ แต่ความยาวทั้งหมดของรหัสยินดีต้อนรับ

* โดยค่าจริงและเท็จที่สอดคล้องกันฉันหมายความว่าคุณสามารถส่งคืนหนึ่งในคู่ของค่าเช่น1สำหรับจริงและ0เท็จหรือFalseสำหรับจริงและ"no"เท็จและตราบใดที่ค่าเหล่านี้จะแตกต่างกันและไม่ เปลี่ยนจากการรันเป็นโปรแกรมของคุณ ใช้สิ่งที่ช่วยให้คุณประหยัดอักขระ

** เพื่อไม่ให้สับสนกับunexecuted : รหัสที่ถูกต้องและอาจทำสิ่งแปลก ๆ แต่ไม่เคยเรียกว่าเป็นเรื่องปกติ


สิ่งที่เกี่ยวกับสิ่งที่ชอบif(false){some code}หรือตัวแปรที่ไม่ได้ใช้? พวกเขาได้รับอนุญาตหรือไม่
ace_HongKongIndependence

@ace หากภาษาของคุณแยกวิเคราะห์หรือตรวจสอบรหัสที่ไม่ได้ดำเนินการเพื่อหาข้อตกลงประเภทหรือความถูกต้องทางไวยากรณ์มันก็ใช้ได้ ถ้ามันเท่ากับความคิดเห็นเพราะภาษาของคุณไม่ได้ตรวจสอบด้านในของบล็อกนั้นเมื่อมันจะโยนข้อผิดพลาดทางไวยากรณ์ถ้ามันเป็นเช่นนั้นไม่เป็นไร ผมคิดว่าถ้าคุณจะพบการใช้งานที่ถูกต้องสำหรับคุณจะได้รับการใช้งาน(eslaf)fi if(false)
algorithmshark

58
ฉันใช้เวลานานเกินไปที่จะคิดออกว่าทำไมจึง()()ไม่ใช่ palindrome
Reinstate Monica

รหัสต้องทำงานกับอินพุตหลายบรรทัดหรือไม่
Ventero

@Ventero Newlines และ carriage return เป็นตัวละครและพวกเขาไม่มีคู่ใด ๆ ที่จะพลิกดังนั้นฉันจึงบอกว่าพวกเขานับว่าเป็นตัวอักษรปกติ
algorithmshark

คำตอบ:


13

J (60)

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

นี่คือฟังก์ชันที่รับอาร์กิวเมนต์:

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

คำอธิบาย:

  • f :: gเรียกใช้ฟังก์ชันfเหนืออินพุตและส่งคืนผลลัพธ์หากฟังก์ชันส่งคืนโดยไม่มีข้อผิดพลาด หากfล้มเหลวมันจะทำงานgแทน

  • fที่นี่เป็นที่(|.-:'())([]][{}}{'&charsub)ซึ่งจะทำงานจริง:

    • |.: ย้อนกลับ
    • -:: เท่ากับ
    • '())([]][{}}{'&charsub: แทนที่แต่ละวงเล็บด้วยวงเล็บตรงข้าม
  • gฟังก์ชั่น(busrahc&'}{{}][[])(()':-.|)ซึ่งเป็นเรื่องไร้สาระ แต่ที่ถูกต้องไวยากรณ์ busrahcไม่ได้กำหนดไว้ แต่นั่นไม่สำคัญเพราะจะได้รับการแก้ไขเฉพาะเมื่อมีการเรียกใช้เท่านั้น (และจะไม่ทำงาน)

คุณสามารถบันทึกตัวอักษรด้วยการเปลี่ยนของคุณลงในf :: g เทียบเท่ากับ hook เนื่องจากผลลัพธ์กลายเป็น -1 และรายการว่างสำหรับ palindromic สะดวกและไม่ตามลำดับ g@-@fg(-.|):
algorithmshark

34

GolfScript, 107 91

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

บรรทัดใหม่เป็นศิลปะ fi, c43และcมี noops แต่รหัสทั้งหมดจะถูกดำเนินการ

พิมพ์-3-1-1เพื่อความสะดวกในการ palindromes -4-1-1มิฉะนั้น ลองออนไลน์!

รุ่นทางเลือก 155 ไบต์

ด้วยราคา 64 ไบต์สามารถปรับปรุงได้เมื่อ:

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

เมื่อก่อนหน้านี้รหัสทั้งหมดจะถูกดำเนินการและทุก ๆ ไบต์มีผลต่อผลลัพธ์

พิมพ์010เพื่อความสะดวกในการ palindromes -100มิฉะนั้น ลองออนไลน์!

การทดสอบและตัวอย่าง

$ 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

มันทำงานอย่างไร

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

ทับทิม, 110

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

พิมพ์trueถ้าอินพุตเป็นพานโดรมแบบสะดวกหรือfalseไม่ โปรดทราบว่าวิธีการแก้ปัญหานี้สันนิษฐานว่าอินพุตไม่ได้ถูกยกเลิกโดยการขึ้นบรรทัดใหม่ดังนั้นให้ทดสอบด้วย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

นี้เป็นท่าเรือที่ค่อนข้างตรงไปตรงมาของคำตอบของฉันจะpalindromic ประโยค Checker (และไม่แข็งแรงเล่นกอล์ฟจริงๆเพื่อให้ห่างไกล) เคล็ดลับหลักที่ใช้คือนิพจน์วงเล็บแรกจะส่งคืนเสมอ1ดังนั้นในช่วงครึ่งหลังของนิพจน์บูลีนจะไม่ถูกประเมิน (แต่จะถูกแยกวิเคราะห์)

ความยากเพียงอย่างเดียวในการปรับสิ่งนี้คือการหาวิธีเพิ่มการเรียกเพื่อz.trให้ "การย้อนกลับที่สะดวก" ของมันก็จะถูกต้องตามหลักไวยากรณ์ - แต่ฉันสามารถใช้เคล็ดลับแบบเดียวกับที่ฉันใช้อยู่แล้ว: *ซึ่งในครึ่งแรก ตัวดำเนินการ splat (ใช้เนื้อหาของอาเรย์เป็นพารามิเตอร์ของฟังก์ชั่น) และเป็นตัวดำเนินการของการคูณอาเรย์ (หรือการทำซ้ำ) ในช่วงครึ่งหลัง

ทับทิม, 157 297รหัสทั้งหมดดำเนินการ

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

เวอร์ชัน (ยาวกว่านี้เล็กน้อย) รันโค้ดทั้งหมดและทุกบรรทัด แต่สองบรรทัดจะมีผลต่อเอาต์พุตซึ่งพิมพ์ในบรรทัดสุดท้าย - แต่บรรทัดทั้งหมดจะถูกวิเคราะห์และประมวลผลโดยไม่มีข้อผิดพลาดใด ๆ รุ่นนี้ตีความขึ้นบรรทัดใหม่ที่ต่อท้ายเป็นส่วนหนึ่งของอินพุตดังนั้นใช้echo -nทดสอบหรือเพิ่มอินพุตของคุณด้วยการขึ้นบรรทัดใหม่ มันพิมพ์trueถ้าอินพุตเป็น palindrome สะดวกและเป็นfalseอย่างอื่น

คำอธิบาย

# 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 ตัวอักษร

ตกลงนี่เป็นโซลูชันพื้นฐานใน GolfScript ฉันแน่ใจว่ามันจะได้รับการปรับปรุงเพิ่มเติม:

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

ตามปกติสำหรับ GolfScript โปรแกรมนี้อ่านอินพุตจาก stdin มันเอาท์พุท:

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

ถ้าการป้อนข้อมูลเป็นแบบ palindrome สะดวกตามที่กำหนดไว้ในการท้าทายด้านบนและ:

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

ถ้าไม่ใช่

คำอธิบาย:โปรแกรมนี้อาศัยการพิจารณาคดีอย่างมากว่ารหัสที่ยังไม่ได้ดำเนินการนั้นใช้ได้ดีตราบใดที่มีการแยกวิเคราะห์ มันประกอบด้วยสองบล็อกรหัสคั่นด้วยวงเล็บปีกกา ( { }) ซึ่งเป็นภาพสะท้อนของกันและกัน

บล็อกโค้ดแรกจะถูกดำเนินการตาม~ดังต่อไปนี้และตรวจสอบว่าอินพุตเป็นพาลินโดรมที่สะดวกหรือไม่และแสดง1ว่ามันเป็นหรือ0ไม่ บล็อกโค้ดที่สองไม่ได้ถูกดำเนินการและดังนั้นจึงยังคงอยู่ในสแต็กจนกว่าโปรแกรมจะสิ้นสุดลงและทุกอย่างในสแต็กจะได้รับการทำให้เป็นสตริงและพิมพ์โดยอัตโนมัติโดยล่าม GolfScript

ควรสังเกตว่าล่าม GolfScript ทำการตรวจสอบไวยากรณ์น้อยมากในเวลาที่แยกวิเคราะห์ (หรือเคยสำหรับเรื่องนั้น); ตัวอักษรบล็อกรหัส GolfScript สามารถมีเกือบทุกอย่างแม้ว่ามันจะล้มเหลวเมื่อดำเนินการ ยังมีข้อผิดพลาดทางไวยากรณ์บางอย่างเช่นตัวอักษรสตริงที่ไม่ถูกทำลายทำให้เกิดข้อผิดพลาดแม้ในรหัสที่ไม่ได้ดำเนินการดังนั้นฉันเชื่อว่าวิธีนี้ (แทบจะไม่) อยู่ภายในกฎ

ps มองไปที่รหัสดำเนินการที่เกิดขึ้นจริงก็มีไม่กี่องค์ประกอบ palindromic สิ่งอำนวยความสะดวกเช่น@[.]@, อักษรสตริงและแม้กระทั่งวง"([{}])" %{ ... }%สิ่งนี้นำเสนอข้อเสนอแนะยั่วเย้าว่าโซลูชัน GolfScript "ที่อยู่ภายใน palindromic" ซึ่งโปรแกรม palindromic แบบเต็มจะถูกเรียกใช้และทำงานได้จริงอาจเป็นไปได้ ในขณะที่ฉันยังไม่สามารถสร้างตัวเองได้ฉันจึงขอมอบค่าตอบแทน +100 ตัวแทนให้กับคนแรกที่จัดการมาด้วย!


3
รอรหัส ur เป็น palindrome ตัวเอง? : O
Fabricio

ฉันอยากพิจารณาโซลูชันนี้มากขึ้นเช่น"n\";X;";X;"\n"-kind of commenting แต่ฉันจะให้ประโยชน์แก่คุณจากข้อสงสัย ฉันกำลังมองหาวิธีแก้ปัญหา "palindromic" เช่นนั้นจริง ๆ เพื่อเริ่มต้นด้วยอย่างไรก็ตามหรืออย่างน้อยก็ที่การไม่ดำเนินการของบล็อกได้รับเล่ห์กว่าเล็กน้อย
algorithmshark

คำตอบของฉันมี noop (ตัวแปรที่ไม่ได้กำหนด) และบางส่วนที่ไม่ประสบความสำเร็จ (เช่น1;) สิ่งนั้นยังนับว่าทำงานได้อย่างสมบูรณ์หรือไม่?
เดนนิส

@Dennis: ใช่ฉันคิดว่ามันเป็นอย่างนั้น ขอแสดงความยินดีก็น่าประทับใจพอแน่นอน คำถามดูเหมือนจะใหม่พอที่ฉันยังไม่สามารถโพสต์เงินรางวัลได้ แต่คุณจะได้ในไม่กี่วัน
Ilmari Karonen

1
รูปแบบผลลัพธ์ abuuuse leeway :-)
John Dvorak

4

JavaScript (ES6), 245 ไบต์

ฉันต้องการคำตอบ JS ที่สามารถเรียกใช้ในเบราว์เซอร์ดังนั้นนี่คือ

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

การลบรหัสทั้งหมดที่ไม่เคยใช้งานจริงเราได้รับ:

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

ซึ่งสามารถลดความซับซ้อนนี้:

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

คุณสามารถบันทึก 60 ไบต์ได้โดยใช้ n1 / 1n แทนที่จะเป็น true / eurt, จุลภาคในบางแห่งแทน || และเล่นซอกับ switch switcher: n1=>n1==(('',n1))['nioj','split']``['esrever','map'](c=>`()[]{}`[`()[]{}`['indexOf'](c)^1]||c||[1^(c)['fOxedni']`{}[]()`]`{}[]()`>=c)['pam','reverse']``['tilps','join']((1n,''))==1n>=1n(185 bytes)
Yair Rand

3

Javascript (ES6) 288

ทำงานในSpidermonkey เปลือกบรรทัดคำสั่ง อ่านบรรทัดเดียวจาก STDIN และเอาท์พุทtrueหรือfalseขึ้นอยู่กับว่าอินพุตเป็น palindrome สะดวกหรือไม่

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

รหัสนี้มีความถูกต้องทางไวยากรณ์ แต่ทุกอย่างหลังจากที่&&ไม่ได้ดำเนินการตามที่printฟังก์ชั่นส่งกลับค่าเท็จ

คุณสามารถเรียกใช้รหัสนี้ในคอนโซลของ Firefox โดยเรียกใช้ shim นี้ก่อนเพื่อจำลองreadlineและprintฟังก์ชั่น แก้ไขอินพุตภายในreadlineตามต้องการ:

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

และนี่คือตัวอย่างรวดเร็วของผลลัพธ์:

ตัวอย่างบรรทัดคำสั่ง


การใช้ประโยชน์จาก&&คนฉลาดจริง ๆ ฉันขอยกย่องคุณ (แต่มันดูเหมือนโกงเล็กน้อย)
MayorMonty

2

05AB1E, 35 ไบต์

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

ลองออนไลน์!

คำอธิบาย:

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

ฉันไม่คิดว่ามันจะช่วยได้เพราะคำตอบนั้นไม่ถูกต้อง แต่"()[]{}"คุณสามารถทำได้žu„<>-
acrolith

@daHugLenny ใช้งานได้แล้วตอนนี้
Oliver Ni

ส่วนที่เหลือของโปรแกรมหลังจากqแยกวิเคราะห์อย่างน้อยสำหรับความถูกต้องทางไวยากรณ์หรือไม่ ถ้าไม่ฉันจะพิจารณาเท่ากับนี้เพื่อแสดงความคิดเห็นในช่วงครึ่งหลังของรหัส
algorithmshark

@algorithmshark แก้ไขแล้ว
Oliver Ni

1

CJam, 38 ไบต์

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

พิมพ์"=re%W_@%W_q"1ถ้าอินพุตมีความสะดวก palindromic และเป็น"=re%W_@%W_q"0อย่างอื่น

ลองใช้ออนไลน์ในล่าม CJam

มันทำงานอย่างไร

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.

หลังจากเรียกใช้งานโปรแกรม CJam พิมพ์ทั้งสามรายการโดยอัตโนมัติบนสแต็ก: สตริงที่ตรวจสอบแล้วบูลีนจากการเปรียบเทียบสตริงและสตริงว่าง


0

Perl, 83 + 2 = 85 ไบต์

ทำงานด้วย -nl

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

รหัสออกหลังจากพิมพ์ความจริงของอินพุต ทุกอย่างหลังจากตีความเครื่องหมายอัฒภาค (และจะผิดพลาดเมื่อสคริปต์มาถึงจุดนั้นไม่ใช่เพื่อการexitพบ) แต่ไม่ได้ดำเนินการ หากฉันexit;tixe;ออกจากรหัสมันจะยังคงพิมพ์ผลลัพธ์ได้อย่างถูกต้องก่อนที่จะเกิดความผิดพลาด

โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.