আতবাশ স্ব পলিনড্রোমস


27

আতবাশ রূপান্তর বিবেচনা করুন :

A|B|C|D|E|F|G|H|I|J|K|L|M
Z|Y|X|W|V|U|T|S|R|Q|P|O|N

যেখানে A ⇔ Z এবং L ⇔ O, যেমন একটি আকর্ষণীয় সম্পত্তি রয়েছে যা কিছু শব্দ ভাগ করে নেয়। যখন কিছু স্ট্রিংগুলি তাদের এ্যাটব্যাশ-সমতুল্য অনুবাদ করা হয়, তখন অনুবাদটি মূল শব্দটি বিপরীত হয় said আমি এট্যাশ সেল্ফ প্যালিনড্রোমগুলি বলি ।

উদাহরণ হিসাবে, আসুন উইজার্ড অনুবাদ করি :

ডাব্লু ডি
আমি → আর
জেড → এ
এ → জেড
আর → আই
ডি → ডাব্লু

ফলাফল ড্রাজিডাব্লু , যা উইজার্ড বিপরীত। সুতরাং, উইজার্ড হ'ল একটি অ্যাটব্যাশ স্ব প্যালিনড্রোম।

উদ্দেশ্য মুদ্রণযোগ্য ASCII অক্ষরের একটি স্ট্রিং দেওয়া, আউটপুট বা সত্যবাদী মানটি প্রদান করুন যদি সেই স্ট্রিংটি একটি অ্যাটাবশ স্ব প্যালিনড্রোম এবং অন্যথায় একটি মিথ্যা মান। (এই stdin, নিকটতম সমতুল্য, কার্যকরী ইনপুট, ইত্যাদি মাধ্যমে সম্পন্ন করা হয় আপনার ভাষায় এর মধ্যে যে কোনো কাজ করতে পারবেন না, তাহলে একটি ভিন্ন ভাষা নির্বাচন বিবেচনা আপনি ইনপুট হার্ডকোড পারে।) আপনাকে যা করতে হবে এই কেস-insensitively। যদি ইনপুটটি একটি প্যালিনড্রোম হয় এবং এটি অ্যাটব্যাশ সিক্যুয়েন্স দ্বারা প্রভাবিত না হয় তবে আপনার এখনও সঠিক আউটপুট করা উচিত, যেহেতু প্যালিনড্রোম + নিজেই একটি প্যালিনড্রোম। এটি একটি , তাই বাইটের মধ্যে সংক্ষিপ্ততম প্রোগ্রামটি জিতে।

পরীক্ষার মামলা

"Input" => true, false

"WIZARD" => true
"Wizard" => true // case doesn't matter
"wIzArD" => true 
"W I Z A R D" => true
"W IZ ARD" => false // the atbash of this is D RA ZIW, which is not a palindrome of W IZ ARD
"ABCXYZ" => true // ZYXCBA
"345 09%" => false // is not a palindrome
"ev" => true // ve
"AZGDFSSF IJHSDFIU HFIA" => false
"Zyba" => true
"-AZ" => false // -ZA is not a reverse of -AZ
"Tree vvig" => true // Givv eert 
"$%%$" => true // palindrome
"A$&$z" => true // z$&$A

লিডারবোর্ড

এই পোস্টের নীচে স্ট্যাক স্নিপেট উত্তরগুলি থেকে ক্যাটালগ তৈরি করে a) ভাষার প্রতি সংক্ষিপ্ত সমাধানের তালিকা হিসাবে এবং খ) সামগ্রিক লিডারবোর্ড হিসাবে।

আপনার উত্তরটি প্রদর্শিত হয়েছে তা নিশ্চিত করার জন্য, দয়া করে নীচের মার্কডাউন টেমপ্লেটটি ব্যবহার করে আপনার উত্তরটি শিরোনাম দিয়ে শুরু করুন:

## Language Name, N bytes

Nআপনার জমা দেওয়ার আকারটি কোথায় ? আপনি যদি নিজের স্কোরটি উন্নত করেন তবে আপনি পুরানো স্কোরগুলি শিরোনামে রেখে দিতে পারেন । এই ক্ষেত্রে:

## Ruby, <s>104</s> <s>101</s> 96 bytes

যদি আপনি নিজের শিরোনামে একাধিক সংখ্যা অন্তর্ভুক্ত করতে চান (যেমন আপনার স্কোর দুটি ফাইলের সমষ্টি বা আপনি পৃথকভাবে দোভাষী পতাকা দণ্ডের তালিকা করতে চান), নিশ্চিত করুন যে আসল স্কোরটি শিরোনামের শেষ সংখ্যা:

## Perl, 43 + 2 (-p flag) = 45 bytes

আপনি ভাষাটির নামটিকে একটি লিঙ্কও তৈরি করতে পারেন যা স্নিপেটে প্রদর্শিত হবে:

## [><>](http://esolangs.org/wiki/Fish), 121 bytes



4
অ্যাটব্যাশ আসলে কোনও নতুন জিনিস নয়। এটি এর সমতুল্য হ'ল কাবালা (ইহুদি রহস্যবাদ) হিব্রু বর্ণের রূপান্তর। হিব্রু যেহেতু কেবল উওয়ে দিয়ে লেখা হয় তাই যেকোন বর্ণের স্ট্রিংটি এলোমেলো উওলগুলি byুকিয়ে পড়া যায়। এটিবি (ক) এসএইচ হ'ল আলেফ (প্রথম হিব্রু বর্ণ) টাভ (শেষ), বয়েস (দ্বিতীয়) থেকে শিনে (পরের থেকে শেষের) রূপান্তর করার জন্য একটি স্মরণিকা।
Adám

1
-1000000 পয়েন্ট দেওয়ার বিষয়ে বিবেচনা করুন যদি কারও সমাধান কোডটি নিজেই একটি আটাব্যাশ স্ব প্যালিনড্রোম হয়? : পি
কোজিরো

3
@ কোজিরো অ-তুচ্ছ হিসাবে এর বিপরীতে code {Comment-symbol}{Atbash'ed Comment-symbol} Atbash'ed code...
অ্যাডাম

1
@ এমবম্ব ২০০7 আমি বলেছিলাম যে যদি এমন একটি অনানুষ্ঠানিক প্রোগ্রাম পাওয়া যায় তবে আমি একটি অনুদানের প্রস্তাব দিতে পারি
কনর ওব্রায়ান

উত্তর:


8

আরএক্স , 9 8 বাইট

রেটিনা দ্বারা ভারীভাবে অনুপ্রাণিত হয়ে, আমি এটি কয়েক দিন আগে তৈরি করেছি। কোড:

prR`w$rM

ব্যাখ্যা:

prR`w$rM

p         # Start pattern
 r        # Reversed lowercase alphabet
  R       # Reversed uppercase alphabet
   `      # Next pattern
    w     # Equivalent to a-zA-Z_0-9 (word pattern)
     $    # End pattern and compute regex
      r   # Reverse input
       M  # Change mode to Match mode, compares the atbash string with the reversed string.

এখানে চেষ্টা করুন !


তাহলে ভাষাটি আসলে কীভাবে কাজ করে? এটি কি কোনও ধরণের স্ট্যাক-ভিত্তিক স্ট্রিং প্রক্রিয়াজাতকরণ ভাষা? এটি সত্যিই চিত্তাকর্ষক, তবে যতদূর আমি বলতে পারি এখনও ভাষায় লুপ করার কোনও উপায় নেই যার অর্থ এটি এই পর্যায়ে একটি প্রোগ্রামিং ভাষার আমাদের মানগুলি পূরণ করে এমনটি অত্যন্ত সম্ভাবনা নয় ।
মার্টিন এেন্ডার

@ মার্টিনব্যাটনার এই ভাষাটি প্রাথমিকভাবে স্ট্যাক মডেল ব্যবহার করে ইনপুট প্রক্রিয়াকরণের উপর ভিত্তি করে। এটি পূর্ণসংখ্যা ব্যবহার করে না (এবং সম্ভবত কখনই হবে না)। আমি একটি লুপ প্রয়োগ করেছি, তবে এখনও সেই সংস্করণ প্রকাশিত হয়নি।
আদনান

@ মার্টিন রেইগেক্সস তাদের নিজস্ব প্রাইমালিটি টেস্টিং করতে সক্ষম, তাই আমি নিশ্চিত যে এটি বৈধ কিনা।
lirtosiast

@ থমাসকওয়া যতদূর আমি দেখতে পাচ্ছি, দোভাষী কোন প্রকৃত নিয়মিত অভিব্যক্তি ব্যবহার করেন না।
মার্টিন এেন্ডার

@ মার্টিন হুম, আপনি ঠিক বলেছেন।
lirtosiast

11

পাইথ, 10 9 বাইট

qJrz0_XJG

অনলাইনে এই ঝাঁকুনির চেষ্টা করুন বা একবারে সমস্ত পরীক্ষার কেস যাচাই করুন।

ব্যাখ্যা

qJrz0_XJG
  rz0      Lowercase input
 J         Store a copy in J
     _XJG  Translate J with the reverse alphabet and reverse
q          Compare

3
আপনি যেহেতু rz0দু'বার ব্যবহার করছেন তাই এটিকে ভেরিয়েবলে সংরক্ষণ করা কি খাটো নয়?
xnor

1
@ এক্সনরের পরামর্শ অনুসারে, q_Jrz0XJGএটি একটি বাইট ছোট।
পুর্কাকুডারী

6

জুলিয়া, 96 বাইট

s->join([get(Dict(zip([u=map(Char,65:90);],reverse(u))),c,c)for c=(S=uppercase(s))])==reverse(S)

এটি একটি ল্যাম্বদা ফাংশন যা একটি স্ট্রিং গ্রহণ করে এবং একটি স্ট্রিং প্রদান করে। এটি কল করতে, এটি একটি ভেরিয়েবলের জন্য বরাদ্দ করুন।

Ungolfed:

function f(s::AbstractString)
    # Get all of the uppercase letters A-Z
    u = map(Char, 65:90)

    # Create a dictionary for the transformation
    D = Dict(zip(u, reverse(u)))

    # Uppercase the input
    S = uppercase(s)

    return join([get(D, c, c) for c in S]) == reverse(S)
end

5

বাশ + লিনাক্স ব্যবহার, 56 56

tr a-z `printf %s {z..a}`<<<${1,,}|cmp - <(rev<<<${1,,})

সত্যের খালি স্ট্রিং এবং ফ্যালসির মতো কিছু আউটপুট করে - /dev/fd/63 differ: byte 1, line 1। যদি এটি গ্রহণযোগ্য না হয় তবে আমরা -sঅতিরিক্ত 3 বাইট যুক্ত করতে পারি এবং সাফল্যের জন্য সত্যের ইউনিক্স রিটার্ন কোডগুলি (সত্যবাদী) এবং 1 ব্যর্থতার জন্য (ফ্যালসি) ব্যবহার করতে পারি।


5

রেটিনা , 44 বাইট

$
¶$_
T`lL`Ro`.+$
+`(¶.*)(.)
$2$1
i`^(.+)\1$

প্রিন্ট 1বা 0। বাইট গণনাটি ধরে নিয়েছে যে ফাইলটি আইএসও 8859-1 হিসাবে এনকোড করা আছে।

এটি অনলাইন চেষ্টা করুন!

এই উত্তরটি মূলত ডিজিটালট্রামার সিড উত্তর দ্বারা অনুপ্রাণিত হয়েছিল তবে আমি আবার অনুমান করি যে প্রথমদিকে এই চ্যালেঞ্জের পক্ষে খুব বেশি পন্থা নেই।

ব্যাখ্যা

আপনি যখনই কোনও দেখতে পান , কোডটি লাইনে বিভক্ত করার পরে রেটিনা প্রথম জিনিসটি হ'ল লাইনফিডগুলির সাহায্যে ওই সমস্ত পাইলকগুলিকে প্রতিস্থাপন করা। এটি লাইনফিডগুলি রেটিনার স্টেজ বিভাজক হওয়া সত্ত্বেও একক বাইটের জন্য লাইনফিড অন্তর্ভুক্ত করতে দেয়।

$
¶$_

আমরা ইনপুট সদৃশ দ্বারা শুরু। আমরা $ইনপুটটির শেষের সাথে মেলে এবং ইনপুট নিজেই (ব্যবহার করে $_) পাশাপাশি একটি লাইনফিড সন্নিবেশ করি ।

T`lL`Ro`.+$

একটি লিপ্যন্তরের পর্যায়। এর Regex দিয়ে শুরু করা যাক: .+$। এটি ইনপুটটির দ্বিতীয় অনুলিপিটির সাথে মেলে (স্ট্রিংয়ের শেষ পর্যন্ত ম্যাচটি চলে যায় তা নিশ্চিত করে)। সুতরাং দ্বিতীয় অনুলিপিতে কেবলমাত্র অক্ষরগুলিই লিখিতভাবে লিখিত হবে। অনুলিপি নিজেই কিছু অতি সাম্প্রতিক বৈশিষ্ট্য ব্যবহার করে। lএবং Lযথাক্রমে নিম্ন এবং উচ্চতর অক্ষরের অক্ষরের ক্লাস হয়। oপ্রতিবর্ণের অন্য চরিত্রের Rসেটটিকে বোঝায় এবং এটিকে বিপরীত করে। সুতরাং দুটি চরিত্র সেট প্রসারিত:

abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ
ZYXWVUTSRQPONMLKJIHGFEDCBAzyxwvutsrqponmlkjihgfedcba

আপনি লক্ষ্য করবেন যে এটি আটব্যাশ সাইফার করার সময় কেসটি অদলবদল করে, তবে আমরা চূড়ান্ত তুলনা কেস-সংবেদনশীলভাবেই করব।

+`(¶.*)(.)
$2$1

এখন আমরা দ্বিতীয় কপি বিপরীত। দুর্ভাগ্যক্রমে, রেটিনার কাছে এখনও এটি করার জন্য কোনও সুবিধাজনক উপায় নেই, সুতরাং আমাদের একটি অক্ষরকে একবারে সামনে থেকে সামনে নিয়ে যেতে হবে। লাইনফিড বিভাজকটিকে পুনরায় প্রকাশের মাধ্যমে এটি করা হয়েছে যার অংশটি এখনও বিপরীত হয়নি। আমরা সেই অংশটি মেলে তবে শেষ চরিত্রটি আলাদাভাবে ক্যাপচার করি। সেই চরিত্রটি সামনে চলে যায় এবং বাকী অংশটি অপরিবর্তিত থাকে। +রেটিনা বলে এই বারবার না হওয়া পর্যন্ত এটা এখন আর সম্ভব (কারণ স্ট্রিং এর শেষে)।

i`^(.+)\1$

অবশেষে, আমরা দুটি স্ট্রিং একই কিনা তা পরীক্ষা করে দেখি। iপ্যাটার্ন তোলে কেস-অবশ - সুবিধামত, .নেট দাঁড়াচ্ছে এই যে, যে backreferences এছাড়াও কেস-অবশ হয়। আপনি লক্ষ্য করতে পারেন যে আমাদের আর মূল ইনপুট এবং পরিবর্তিত অনুলিপিটির মধ্যে বিভাজক নেই। যদিও আমাদের একটির দরকার নেই, কারণ সেগুলি একই দৈর্ঘ্য, এবং যদি স্ট্রিং এখন একই স্ট্রিংয়ের সাথে দু'বার (আপ কেস) থাকে তবে অবশ্যই সেগুলি অবশ্যই মূল এবং পরিবর্তিত স্ট্রিং হওয়া উচিত। আপনি যদি ভাবছেন যে আমরা অনুসরণকারী লাইনফিডের কী ঘটেছিল যা আমরা একটি চিহ্নিতকারী হিসাবে ব্যবহার করেছি তবে এটি এখনও রয়েছে, তবে অনেকগুলি রেজিেক্স স্বাদে স্ট্রিংয়ের শেষ চরিত্রের আগেও$ মেলে যদি সেই চরিত্রটি লাইনফিড হয়।

যেহেতু এই পর্যায়টি কেবল একটি একক লাইন নিয়ে গঠিত তাই এটি ম্যাচের মঞ্চ হিসাবে নেওয়া হয়, যা ম্যাচের সংখ্যা গণনা করে। যদি ইনপুটটি কোনও অ্যাটব্যাশ প্যালিনড্রোম হয় তবে আমরা ঠিক একটি ম্যাচ পেয়ে যাব এবং আউটপুট 1। যদি তা না হয় তবে এই রেজেক্সটি মিলবে না এবং আউটপুট হবে 0


আমি অনুমান করি যে লাইনফিডগুলি মঞ্চ বিভাজক এবং পাইলক্রোগুলি বিপরীত থেকে আক্ষরিক হতে হবে।
কনর ওব্রায়ান

@ কেওবিʀɪᴇɴ সুবিধার্থে, আপনি রেসেক্স সিকোয়েন্সগুলি, \n রেজেক্সে এবং $nপ্রতিস্থাপনে লাইনফিডগুলিও সন্নিবেশ করতে পারেন , তবে এটি গল্ফিংয়ের জন্য বর্জ্য নষ্ট। ;)
মার্টিন এন্ডার

5

জিএনইউ শেড, 105

s/.*/\l&/
h
y/abcdefghijklmnopqrstuvwxyz/zyxwvutsrqponmlkjihgfedcba/
G
:
s/\(.\)\n\1/\n/
t
/^.$/{c1
q}
c0

সত্যের জন্য আউটপুট 1 এবং ভুয়া জন্য 0।

আমি রেটিনায় এটি করার চেষ্টা করেছি, তবে কীভাবে পরের সাথে বিপরীত তুলনার জন্য আটবাশ ট্রান্সলিটেশন এর আগে স্ট্রিংটি সংরক্ষণ করতে পারি তা বুঝতে পারিনি। সম্ভবত আরও ভাল উপায় আছে।

শেডের লিখিত লিখিত লিখিত লিখিত yআদেশটি কাঙ্ক্ষিত হওয়ার জন্য অনেক কিছু ছেড়ে যায়।


হ্যাঁ, "স্টোর করা" জিনিসগুলি এখনও রেটিনার মধ্যে জটিল। আপনাকে স্ট্রিংটির সদৃশ করতে হবে এবং তারপরে প্রতিলিপি এবং কেবল একটি অনুলিপি উল্টো করতে হবে। আমি ভবিষ্যতে কোনও ধরণের ব্রাঞ্চিং / ফর্কিং বৈশিষ্ট্য যুক্ত করতে চাই, তবে আমি বিশদ সম্পর্কে এখনও নিশ্চিত নই।
মার্টিন এন্ডার

আহ, আমি মনে করি আমি দেখেছি - আমি কোলনের সাথে স্ট্রিংয়ের আগে এবং পরে পৃথক করে অনুরূপ কিছু করার চেষ্টা করেছি। আমি রেগেক্সের সাথে নীচে পড়ে গেলাম T- আমি ধরে নিচ্ছিলাম এটি প্রতিটি চরিত্রের পরিবর্তে প্রয়োগ হয়েছে, তবে এটি যদি আমার বোধগম্যতা সঠিক হয় তবে এটি পুরো প্যাটার্ন স্পেসে প্রযোজ্য, যা অনেক বেশি কার্যকর
ডিজিটাল ট্রমা

1
ইনপুট স্ট্রিংটিতে টিতে রেজেক্স প্রয়োগ করা হয়। প্রতিলিপিটি কেবলমাত্র সেই রেজেক্সের ম্যাচগুলির মধ্যেই সম্পাদিত হয় এবং সমস্ত কিছু মিল নেই। রেজেক্স [\s\S]+এটিকে বাদ দিয়ে ডিফল্ট করে আপনি সমস্ত কিছু প্রতিলিপি করছেন rating
মার্টিন এন্ডার


যেহেতু এটা গনুহ কিন্তু, আপনি ট্রেড দ্বারা একটি বাইট সংরক্ষণ করতে পারবেন -rমধ্যে ব্যাকস্ল্যাশ জন্য তা পতাকাঙ্কিত \(এবং \)। আমি yআদেশে আপনার সাথে একমত !
টবি স্পিড

4

𝔼𝕊𝕄𝕚𝕟, 15 অক্ষর / 30 বাইট

ïþ)Ī(ᶐ,ᶐᴙ)ᴙ≔ïþ)

Try it here (Firefox only).

ব্যাখ্যা

ïþ)Ī(ᶐ,ᶐᴙ)ᴙ≔ïþ) // implicit: ï=input, ᶐ=A-Z
ïþ)             // ï.toUpperCase()
   Ī(ᶐ,ᶐᴙ)ᴙ     // transliterate input from A-Z to Z-A, then reverse
           ≔ïþ) // check if that's still equal to ï.toUpperCase()
                // implicit output

4

প্যারেন্টিক, 658 বাইট

((()()())(()(((()))))((()()((())))))((()()())(()(((())))()()())((())()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()))((()()())(()(((())))())((()())((()(((())))()()))((()()()())((()(())(()))(()(((())))()())(()((()))))(()((())))((()((()))())((()(())(())())((()(()))(()(((())))()()())((()(()()))((())()()()()()()()()()()()()()()()()()()()()()()()()())((()(()()))((()(()())())((()((()))(()))(()(((())))()())))(()(((())))()()())))))((()(((())))())((()((()))()())(()(((())))()())))))))((()(())(()))((()()()(()))((()()()()())(()(((()))))))((()(((())))())((()()()()())(()(((())))))))

স্ক্রিপ্টের এই পরিবর্তিত সংস্করণটি ব্যবহার করে এখনই হোয়াইটস্পেস ছাড়াই সমস্ত ক্যাপের জন্য কাজ করে যাতে এটি স্টাডিনের পাঠকে সমর্থন করে:

#!/usr/bin/env python
from collections import defaultdict
from itertools import izip
import copy
import operator
import os
import sys

# map from paren strings to english names
# for the predefined symbols (lambda, etc)
to_english = defaultdict(lambda:None,\
    {'()': 'lambda',
     '()()': 'define',
     '(())': 'plus',
     '(()())': 'minus',
     '()(())': 'mult',
     '(())()': 'div',
     '()()()': 'if',
     '((()))': 'empty',
     '()()()()': 'charsof',
     '()()(())': 'reverse',
     '()(())()': 'LE',
     '()(()())': 'not',
     '(()())()': 'intofchar',
     '()((()))': 'readline',
     '((()))()': 'cons',
     '(())(())': 'equal',
     '((()))(())': 'car',
     '((()))()()': 'cdr',
     '(())(())()': 'char',
     '(())()(())': 'string'})

# map from english to parenthetic
to_scheme = defaultdict(lambda:None)
for k,v in to_english.iteritems():
    to_scheme[v] = k

def Error(errorString = 'unmatched parens', debug_mode = True):
    if debug_mode:
        print "Error: " + errorString
        sys.exit()
    else:
        raise Exception('paren mismatch')

def bracketsMatch(chars):
    """Returns False if any parentheses in `chars` are not matched
    properly. Returns True otherwise.
    """
    level = 0
    for p in chars:
        if p == '(':
            level += 1
        elif p == ')':
            level -= 1
        if level < 0:
            return False    
    return level == 0

def get_exprs(chars):
    """Returns a list of character sequences such that for each sequence,
    the first and last parenthesis match.
    For example, "(())()()" would be split into ["(())", "()", "()"]
    """
    level = 0
    current = []
    for p in chars:
        if p == '(' or p == ')':
            current.append(p)
        if p == '(':
            level += 1
        elif p == ')':
            level -= 1
        if level == 0:
            yield current
            current = []

## built-in functions ##
def builtin_accumulate(init, accumulate, environment, params):
    """Helper function that handles common logic for builtin functions.
    Given an initial value, and a two-parameter function, the environment, and
    a list of params to reduce, this function will reduce [init] + params using
    the accumulate function and finally returns the resulting value.
    """
    result = init
    for param in params:
        value = interpret(param, environment)
        try: result = accumulate(result, value)
        except: Error(str(value) + ' is not the correct type')
    return result

def builtin_plus(environment, params):
    if len(params) >= 1:
        return builtin_accumulate(interpret(params[0], environment), operator.add, environment, params[1:])
    else:
        return 0.0

def builtin_minus(environment, params):
    if len(params) == 0:
        Error('subtraction requires at least 1 param')
    return builtin_accumulate(interpret(params[0], environment), operator.sub, environment, params[1:])

def builtin_mult(environment, params):
    return builtin_accumulate(1.0, operator.mul, environment, params)

def builtin_div(environment, params):
    if len(params) == 0:
        Error('division requires at least 1 param')
    return builtin_accumulate(interpret(params[0], environment), operator.div, environment, params[1:])

def builtin_LE(environment, params):
    return interpret(params[0], environment) <= interpret(params[1], environment)

def builtin_lambda(environment, params):
    bodies = [body for body in params[1:]]
    params = params[0][1]
    if len(bodies) == 0:
        Error("a function had no body")
    for kind, name in params:
        if kind != 'symbol':
            Error('lambda must have only symbols as arguments')
    def ret(old_environment, arguments):
        #print bodies
        try:
            # create new environment based on args
            environment = copy.copy(old_environment)
            for param, arg in izip(params, arguments):
                environment[param[1]] = interpret(arg, old_environment)
            # evaluate the function bodies using the new environment
            return interpret_trees(bodies, environment, False)
        except:
            Error("Error evaluating a function")
    return ret

def builtin_equal(environment, params):
    for param1, param2 in izip(params[:-1], params[1:]):
        if interpret(param1, environment) != interpret(param2, environment):
            return False
    return True

def builtin_if(environment, params):
    if len(params) != 3:
        Error("'if' takes in exactly 3 params")    
    if interpret(params[0], environment):
        return interpret(params[1], environment)
    return interpret(params[2], environment)

def builtin_not(environment, params):
    return False if interpret(params[0], environment) else True

def builtin_cons(environment, params):
    return (interpret(params[0], environment), interpret(params[1], environment))

def builtin_car(environment, params):
    result = interpret(params[0], environment)
    if not isinstance(result, tuple):
        Error("car must only be called on tuples")
    return result[0]

def builtin_cdr(environment, params):
    result = interpret(params[0], environment)
    if not isinstance(result, tuple):
        Error("cdr must only be called on tuples")
    return result[1]

def builtin_char(environment, params):
    result = interpret(params[0], environment)
    if result != int(result):
        Error("char must only be called on integers")
    return chr(int(result))

def builtin_intofchar(environment, params):
    result = interpret(params[0], environment)
    result = ord(result)
    return result

def builtin_string(environment, params):
    result = ''
    cur = interpret(params[0], environment)
    while cur != ():
        if not isinstance(cur, tuple) or not isinstance(cur[1], tuple):
            Error("string only works on linked lists")
        result += cur[0]
        cur = cur[1]
    return result

def unmakelinked(llist):
    result = ()
    while llist != ():
        if not isinstance(llist, tuple) or not isinstance(llist[1], tuple):
            Error("only works on linked lists")
        result += (llist[0],)
        llist = llist[1]
    return result

def makelinked(tup):
    result = ()
    while tup != ():
        result = (tup[-1],result)
        tup = tup[:-1]
    return result

def builtin_reverse(environment, params):
    result = interpret(params[0], environment)
    result = makelinked(unmakelinked(result)[::-1])
    return result

def builtin_charsof(environment, params):
    result = interpret(params[0], environment)
    result = makelinked(tuple(result))
    return result

def builtin_readline(environment, params):
    result = raw_input()
    return result

# define the default (top-level) scope
default_environment = \
    {to_scheme['plus']: builtin_plus,
     to_scheme['minus']: builtin_minus,
     to_scheme['mult']: builtin_mult,
     to_scheme['div']: builtin_div,
     to_scheme['lambda']: builtin_lambda,
     to_scheme['if']: builtin_if,
     to_scheme['equal']: builtin_equal,
     to_scheme['LE']: builtin_LE,
     to_scheme['not']: builtin_not,
     to_scheme['empty']: (),
     to_scheme['car']: builtin_car,
     to_scheme['cdr']: builtin_cdr,
     to_scheme['cons']: builtin_cons,
     to_scheme['char']: builtin_char,
     to_scheme['string']: builtin_string,
     to_scheme['readline']: builtin_readline,
     to_scheme['charsof']: builtin_charsof,
     to_scheme['reverse']: builtin_reverse,
     to_scheme['intofchar']: builtin_intofchar}

# parse the tokens into an AST
def parse(tokens):
    """Accepts a list of parentheses and returns a list of ASTs.
    Each AST is a pair (type, value).
    If type is 'symbol', value will be the paren sequence corresponding
    to the symbol.
    If type is 'int', value will be a float that is equal to an int.
    If type is expr, value will be a list of ASTs.
    """
    # check for errors
    if not bracketsMatch(tokens):
        Error('paren mismatch')
    # to return - a list of exprs
    exprs = []
    for expr in get_exprs(tokens):
        # check for errors
        if len(expr) < 2:
            Error('too few tokens in: ' + ''.join(expr))
        elif expr[0] != '(' or expr[-1] != ')':
            Error('expression found without () as wrapper')
        # pop off starting and ending ()s
        expr = expr[1:-1]
        # symbol
        if expr[:2] == ['(', ')'] and len(expr) > 2:
            exprs.append(('symbol', ''.join(expr[2:])))
        # integer
        elif expr[:4] == ['(', '(', ')', ')'] and len(expr) >= 4:
            exprs.append(('num', expr[4:].count('(')))
        # expr
        else:
            exprs.append(('expr', parse(expr)))
    return exprs

def interpret(tree, environment):
    """Interpret a single tree (may not be a define) and return the result"""
    kind, value = tree
    if kind == 'num':
        return float(value)
    elif kind == 'symbol':
        if value in environment:
            return environment[value]
        else:
            Error('Unresolved symbol - ' + value)
    elif kind == 'expr':
        function = interpret(value[0], environment)
        if not hasattr(function, '__call__'):
            Error('Symbol "'+value[0]+'" is not a function.')
        return function(environment, value[1:])
    else:
        Error("Unknown tree kind")

def interpret_trees(trees, environment, doprint = True):
    """Interpret a sequence of trees (may contain defines)
    and output the result.
    The trees passed in should be ASTs as returned by parse().
    If doprint is true, the post-interpretation value of each tree is printed.
    """
    environment = copy.copy(environment)
    # hoist define statements (note: trees.sort is stable)
    #trees.sort(key = lambda x: 0 if x[0] == 'expr' and x[1][0][1] == to_scheme['define'] else 1)
    ret = None
    for tree in trees:
        if tree[0] == 'expr' and tree[1][0][0] == 'symbol' and tree[1][0][1] == to_scheme['define']:
            try:
                symbol = tree[1][1]
                if symbol[0] != 'symbol':
                    Error('first argument to define must be a symbol')
                symbol = symbol[1]
                value = tree[1][2]
                environment[symbol] = interpret(value, environment)
            except:
                Error('error evaluating define statement')
        else:
            ret = interpret(tree, environment)
            if doprint:
                print ret,
    return ret

# read in the code ignoring all characters but '(' and ')' 
f = open(sys.argv[1],'r')
code = []
for line in f.readlines():
    code += [c for c in line if c in '()']

# parse and interpret the code. print 'Parenthesis Mismatch'
# if an error occured.
#try:
syntax_trees = parse(code)
interpret_trees(syntax_trees, default_environment)
#except:
#    print 'Parenthesis Mismatch'

ব্যাখ্যা

(
  define
  (() ()())
  input [[[[]]]]
  (() (((()))))
  exec readline
  ( (() ()((()))) )
)
(
  define
  (() ()())
  value of 'A' [[[[]]]] [][][]
  (() (((())))()()())
  65
  ((()) ()()()()()()()()()()
        ()()()()()()()()()()
        ()()()()()()()()()()
        ()()()()()()()()()()
        ()()()()()()()()()()
        ()()()()()()()()()()
        ()()()()())
)
(
  define
  (() ()())
  atbash [[[[]]]] []
  (() (((())))())
  (
    lambda
    (() ())
    (
      list [[[[]]]] [][]
      (() (((())))()())
    )
    (
      if
      (() ()()())
      (
        equal
        (() (())(()))
        list
        (() (((())))()())
        empty
        (() ((())))
      )
      then return empty
      (() ((())))
      else
      (
        cons
        (() ((()))())
        (
          char
          (() (())(())())
          (
            plus
            (() (()))
            value of 'A' 65
            (() (((())))()()())
            (
              minus
              (() (()()))
              25
              ((()) ()()()()()()()()()()
                    ()()()()()()()()()()
                    ()()()()())
              (
                minus
                (() (()()))
                (
                  intofchar
                  (() (()())())
                  (
                    car
                    (() ((()))(()))
                    list
                    (() (((())))()())
                  )
                )
                value of 'A' 65
                (() (((())))()()())
              )
            )
          )
        )
        (
          atbash
          (() (((())))())
          (
            cdr
            (() ((()))()())
            list
            (() (((())))()())
          )
        )
      )
    )
  )
)

(
  equals
  (() (())(()))
  (
    reverse
    (() ()()(()))
    (
      charsof
      (() ()()()())
      input
      (() (((()))))
    )
  )
  (
    atbash
    (() (((())))())
    (
      charsof
      (() ()()()())
      input
      (() (((()))))
    )
  )
)

4
আপনি কি চান যে আপনার কোডটি দীর্ঘতম হোক? : পি
জর্জিটোন

4

পাইথন 3, 90 85 বাইট

s=input().upper()
print(s[::-1]==''.join(chr([o,155-o][64<o<91])for o in map(ord,s)))

আমরা ইনপুটটিকে বড় হাতের মধ্যে রূপান্তর করি এবং তারপরে অক্ষর বর্ণমালার সীমার মধ্যে থাকে তবে 155 থেকে সমস্ত অর্ডিনাল বিয়োগ করে আটবাসে স্ট্রিংটি গণনা করি।


4

কেআরফ , 73 বাইট

এপিএল, জে ও কে হিসাবে কেফারফ একই সাধারণ পরিবারে স্বত্বাধিকারী ভাষা cry ক্রিপ্টিক, কমপ্যাক্ট অনেলাইনার লিখতে এবং সুস্পষ্ট লুপের ব্যবহার এড়ানো সম্ভব:

{[s]s:_ s;n:?isnull i:s search\<a:char 97+^26;f:(/a)[i];s match/f[n]:s[n]}

তবে, শর্টহ্যান্ড প্রতীকগুলির পরিবর্তে কমান্ডের জন্য বানানযুক্ত উপাত্তগুলি ব্যবহার করা এবং অর্থবহ শনাক্তকারীদের ব্যবহার প্রোগ্রামকে আরও স্পষ্ট করে তোলে এবং আপনি কেপিএফের সাথে পরিচিত না হলেও অনুসরণ করতে মোটামুটি সহজ:

def atbash_palindrome(str) {
  str:       tolower str
  alpha:     char range(97, 123)
  indices:   str search mapleft alpha
  encoded:   (reverse alpha)[indices]
  notfound:  which isnull indices
  return     str match reverse encoded[notfound]:str[notfound]
}

কর্মে:

KeRF> p: {[s]s:_ s;n:?isnull i:s search\<a:char 97+^26;f:(/a)[i];s match/f[n]:s[n]};

KeRF> p mapdown ["WIZARD","Wizard","W I Z A R D","ABCXYZ","345 09%","ev","Zyba","$%%$","-AZ"]
  [1, 1, 1, 1, 0, 1, 1, 1, 0]

কেরিফ সম্ভবত একটি টন কোডগল্ফ প্রতিযোগিতা জিততে পারে না, বিশেষত উদ্দেশ্য-নির্মিত ভাষাগুলির বিরুদ্ধে, তবে আপনি যদি এপিএল-পারিবারিক ভাষার ধারণা পছন্দ করেন তবে সিনট্যাক্সটি খুব অদ্ভুত বলে মনে করেন তবে এটি ঝুঁকির বিষয় হতে পারে। ( অস্বীকৃতি: আমি কেপিএফের রেফারেন্স ম্যানুয়ালটির লেখক ))


3

প্রোলোগ, 121 বাইট

a(W):-upcase_atom(W,X),atom_codes(X,C),b(C,Z),!,reverse(Z,C).
b([A|T],[R|S]):-(A>64,A<91,R is 77-A+78;R=A),(b(T,S);S=[]).

এটিকে ইনপুট হিসাবে পরমাণুর সাহায্যে বলা হয়, যেমন a('WIZARD').


3

জাভাস্ক্রিপ্ট (ES6), 91

x=>(x=[...x.toLowerCase()]).every(c=>((v=parseInt(c,36))>9?(45-v).toString(36):c)==x.pop())

পরীক্ষা

F=x=>(x=[...x.toLowerCase()]).every(c=>((v=parseInt(c,36))>9?(45-v).toString(36):c)==x.pop())

console.log=x=>O.textContent+=x+'\n'

;[
 ["WIZARD", true]
,["Wizard", true] // case doesn't matter
,["wIzArD", true]
,["W I Z A R D", true]
,["W IZ ARD", false] // the atbash of this is D RA ZIW, which is not a palindrome of W IZ ARD
,["ABCXYZ", true] // ZYXCBA
,["345 09%", false] // is not a palindrome
,["ev", true] // ve
,["AZGDFSSF IJHSDFIU HFIA", false]
,["Zyba", true]
,["-AZ", false] // -ZA is not a reverse of -AZ
,["Tree vvig", true] // Givv eert 
,["$%%$", true] // palindrome
,["$%ZA%$", true]
].forEach(t=>{var i=t[0],x=t[1],r=F(i);
              console.log(i+' -> '+r+(x==r?' OK':' Fail (expected:'+x+')'))})
<pre id=O></pre>


3

সি, 101 97 বাইট

প্রশ্নটি ASCII অক্ষরগুলিকে নির্দিষ্ট করেছে বলে এটি অন্য কোনও এনকোডিংগুলি পরিচালনা করে না।

f(char*s){char*p=s+strlen(s);while(*s&&!(isalpha(*--p)?*s<64||*s+*p-27&31:*s-*p))++s;return s>p;}

ব্যাখ্যা

int f(char*s)
{
    char *p = s + strlen(s);
    while (*s && !(isalpha(*--p) ? *s<64||*s+*p-27&31 : *s-*p))
        ++s;
    return s > p;
}

আমরা একটি পয়েন্টার তৈরি pকরি যা স্ট্রিংয়ের শেষে শুরু হয়। আমরা তখন লুপ করি, উভয় sএবং pএকে অপরের দিকে sপ্রান্তে পৌঁছে যাই। এর অর্থ হ'ল প্রতি জোড়া অক্ষর দুটিবার পরীক্ষা করা হবে, তবে এটি পয়েন্টারগুলি অতিক্রম করার সাথে সাথে থামার তুলনায় কয়েকটি বাইট সংরক্ষণ করে ves

প্রতিটি পুনরাবৃত্তিতে, আমরা *pএকটি চিঠি কিনা তা পরীক্ষা করে দেখি। যদি তাই হয়, পরীক্ষা করুন যে *sবর্ণের পরিসীমা (হওয়া ASCII 64 উর্ধ্বগামী) এ, এবং যে *pএবং *s27 (গেলিক ভাষার 32) পর্যন্ত যোগ। 64-র উপরে নন-অক্ষরগুলি এই পরীক্ষায় ব্যর্থ হবে, সুতরাং আমাদের চেক করার দরকার নেই isalpha(*s)

যদি *pকোনও চিঠি না হয়, তবে আমরা কেবল এটির সমান কিনা তা পরীক্ষা করি *s। উভয় ক্ষেত্রেই, আমরা লুপ সামনে বিনষ্ট sএবং pনদী পার হয়ে।

যদি sএবং pঅতিক্রম করে থাকে, তবে প্রতিটি জোড়া অক্ষর সঠিকভাবে মিলেছে, তাই আমরা সত্যটিতে ফিরে আসি; অন্যথায় আমরা মিথ্যা ফিরে।

পরীক্ষা প্রোগ্রাম

কমান্ড-লাইন আর্গুমেন্ট হিসাবে পরীক্ষা করার জন্য স্ট্রিংগুলি পাস করুন। এটি সমস্ত পরীক্ষার ক্ষেত্রে সঠিক ফলাফল দেয়। খালি স্ট্রিংয়ের জন্য সরবরাহের প্রয়োজন নেই; আমার প্রয়োগটি ইনপুটটির জন্য মিথ্যা প্রত্যাবর্তন করে।

#include <stdio.h>

int main(int argc, char **argv)
{
    while (*++argv)
        printf("\"%s\" => %s\n", *argv, f(*argv)?"true":"false");
    return 0;
}

আপনি fকে & আর স্টাইলের প্রোটোটাইপের জন্য প্রকারের ঘোষণাটি ফেলে দিতে পারেন :f(char*s)
বিড়াল

3

পার্ল 5, 70 বাইট

একটি সাবরুটিন:

{$"='';reverse(map/[A-Z]/?chr(155-ord):$_,(@_=split'',uc$_[0]))eq"@_"}

এটি ব্যবহারে দেখুন:

print sub{...}->("W i z a r d")



2

জাপট, 30 27 বাইট

U=Uv)w ¥Ur"[a-z]"_c +4^31 d

এটি অনলাইন চেষ্টা করুন!

কিভাবে এটা কাজ করে

এটি বর্ণমালার অদলবদলের মূলত আমার জ্যাপ উত্তরের উপর ভিত্তি করে ।

U=Uv)w ¥Ur"[a-z]"_c +4^31 d
U=Uv)      // Set U to U.toLowerCase().
w ¥        // Reverse it, and check if it is equal to:
Ur"[a-z]"  //  Take the input and replace each letter with:
 _c +4     //   Take its char code and add 4. This results in
           //   the string      "abc...xyz"
           //   becoming        "efg...|}~".
 ^31       //   XOR the result by 31. This flips its last five 5 bits.
           //   We now have     "zyx...cba".
 d         //   Convert back from a char code.
           // Implicit: output last expression

1

পাইথন, 156 112 বাইট

a=map(chr,range(65,91))
s=raw_input().upper()
print ''.join([dict(zip(a,a[::-1])).get(i,i) for i in s])==s[::-1]

মূলত, এটি বড় হাতের অক্ষরের সাহায্যে অনুবাদটির একটি অভিধান তৈরি করে এবং ইনপুট মূলধন হয় (যদি তার পরিবর্তে সবকিছু ছোট হাতের অক্ষরে থাকে, তবে এটি 5 বাইট যুক্ত করে)। তারপরে মূলধনিত ইনপুটের প্রতিটি অক্ষরের জন্য অনুবাদ করুন এবং অক্ষর বর্ণমালায় না থাকলে তালিকায় যুক্ত করুন, সেই ক্ষেত্রে চরিত্রটি যেমন যুক্ত করা হয় ততক্ষণ। সম্পূর্ণ তালিকায় যোগদান করুন এবং বিপরীত তালিকার সাথে তুলনা করুন।

আমার আগে যেমন পোস্ট করতে যাচ্ছিলাম ঠিক ঠিক তেমন পোস্ট করার জন্য @ আর্টিয়রের কাছে চিৎকার করুন। তবে আমার নিশ্চিত হওয়া দরকার, এটি আমার কাজ এবং আমি স্বাধীনভাবে এটি করেছি

অ্যালেক্স এ এর ​​জুলিয়া উত্তরের ভিত্তিতে এটি চেষ্টা করে দেখুন


এর পরে একটি অপ্রয়োজনীয় সাদা স্থান রয়েছে .get(i,i)। +1 টি।
ইয়াতসি

1

05 এ বি 1 ই , 8 বাইট (প্রতিযোগী নয়)

এই ভাষা এমন বৈশিষ্ট্যগুলি ব্যবহার করে যা চ্যালেঞ্জ পরবর্তী পোস্ট করে এবং অতএব প্রতিযোগিতামূলক।

কোড:

lDAAR‡RQ

ব্যাখ্যা:

l         # Lowercase the implicit input
 D        # Duplicate top of the stack
  AAR     # Push the lowercase alphabet (A) and the lowercase alphabet reversed (AR)
     ‡    # Transliterate a -> b
      R   # Reverse this string
       Q  # Compare with the input string

এটি অনলাইন চেষ্টা করুন!


1

ফ্যাক্টর, 118 113 বাইট

এটি একটি বেনামে ফাংশন।

[ >upper dup >array [ 1string 65 90 [a,b] [ 1string ] map dup reverse zip >hashtable at ] map "" join reverse = ]

আমি বর্ণমালার একটি সহযোগী অ্যারে তৈরির জন্য আরও ছোট উপায় সম্পর্কে জানি না: সি


1

ক্লোজার, 100 বাইট

(defn x[b](let[a(.toUpperCase b)c(reverse a)](=(map #(char(if(<= 65(int %)90)(- 155(int %))%))a)c)))

এটি একটি একক বেনামে কাটা সম্ভব, আরও প্রায় 10 টি বাইট (ঘোষণার) কেটে ফেলতে পারা সম্ভব তবে আমি এখনও কোনও উপায় পাইনি।


1

রুবি, 79 77 বাইট

s=$*[0].upcase
exit(s==s.reverse.tr('A-Z','ZYXWVUTSRQPONMLKJIHGFEDCBA'))?0:1

কমান্ড-লাইন আর্গুমেন্ট হিসাবে পরীক্ষার জন্য শব্দটি গ্রহণ করে। যদি আর্গুমেন্টটি আটাব্যাশ স্ব প্যালিনড্রোম হয়, বা অন্যথায় কোড 1 সহ কোড 0 (যা শেলের সাথে সত্য) দিয়ে প্রস্থান করে।


1
putsফলাফলটি কী কোনও বার্নিশের সাথে প্রস্থান করার চেয়ে ছোট হবে না ?
বিড়াল 19

এফওয়াইআই $*হ'ল একটি উপনাম ARGV
জর্দান

1

রুবি, 56 বাইট

->s{s.upcase!;s==s.tr(x=[*?A..?Z]*'',x.reverse).reverse}

এটি একটি বেনাম ফাংশন যা একটি স্ট্রিং নেয় এবং ফিরে আসে trueবা false। এটি বরং আনাড়ি: কিছু বাইট সংরক্ষণ করতে, এটি upcase(তার !পরে) এর ধ্বংসাত্মক রূপটি ব্যবহার করে । upcase!দুর্ভাগ্যক্রমে nilকিছুই পরিবর্তন না হলে (সমস্ত সংখ্যার ইনপুটের মতো) ফিরে আসে, তাই কিছু বাইটগুলি এটি মোকাবেলা করতে গিয়ে হারিয়ে যায়। এখনও কাজ করে :)


1

ম্যাটল্যাব, 61 বাইট

সংক্ষিপ্ততম সমাধান নয়, তবে এখনও আকর্ষণীয়

f=@(a)~any(changem(upper(a),90:-1:65,65:90)-fliplr(upper(a)))
আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.