আমি প্রতিসাম্য, প্যালেন্ড্রোমিক নয়!


22

পটভূমি

আমি একজন প্যালিনড্রোম দ্বারা অনুপ্রাণিত আপনি? , যেখানে এটি উপস্থাপন করা হয় নিতান্ত সত্য যে, " ()()একটি যে শব্দ কবিতা প্রভৃতি উলটা করিয়া পড়িলেও একই থাকে না, কিন্তু ())(", আমি নিজেকে জিজ্ঞেস পরিবর্তে ()()ও উত্তর কেবল: এটি একটি উল্লম্ব প্রতিসাম্য অক্ষ সঙ্গে একটি স্ট্রিং!

কাজটি

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

প্রতিবিম্বিত প্রতিসাম্য

একটি উল্লম্ব অক্ষের চারপাশে প্রতিবিম্বিত প্রতিসাম্য (বা বাম-ডান প্রতিসাম্য) এর অর্থ হ'ল আপনি যদি স্ট্রিংয়ের ঠিক মাঝের অংশে উল্লম্বভাবে একটি আয়না রাখেন তবে স্ট্রিংয়ের প্রথমার্ধের প্রতিফলিত চিত্রটি স্ট্রিংয়ের দ্বিতীয়ার্ধের মতোই।

উদাহরণস্বরূপ, নিম্নলিখিত স্ট্রিংগুলি উল্লম্ব অক্ষের চারপাশে প্রতিফলিত প্রতিসাম্য:

()()
()()()
[A + A]
WOW ! WOW
OH-AH_wx'xw_HA-HO
(<<[[[T*T]]]>>)
(:)
)-(
())(()
qpqp

যখন নিম্নলিখিতটি নেই:

())(
((B))
11
+-*+-
WOW ! wow
(;)
qppq

প্রতিযোগিতার নিয়ম

। আপনার প্রোগ্রাম বা ফাংশনটি কেবল ছাপার যোগ্য ASCII অক্ষর পাবেন। আপনি খালি স্ট্রিংকে অন্তর্ভুক্ত করতে পারেন বা না করতে পারেন (যা প্রতিসাম্য, অবশ্যই!) আইনী ইনপুট হিসাবে, যা আপনার পক্ষে ভাল।

• যে ASCII অক্ষরগুলি উল্লম্ব অক্ষগুলির সাথে সম্মিলিত হিসাবে বিবেচিত হতে পারে সেগুলি নিম্নরূপ (প্রাথমিক স্থানটি উল্লেখ করুন, এবং বড় হাতের অক্ষর এবং ছোট হাতের অক্ষরের মধ্যে পার্থক্য):

 !"'+*-.:=AHIMOTUVWXY^_ovwx|

ASCII অক্ষরগুলি যা "মিরর" হিসাবে বিবেচনা করা যেতে পারে এবং তার সাথে সম্পর্কিত অক্ষরগুলি হ'ল:

()<>[]{}qpbd/\

উল্লেখ্য, যেহেতু তারা প্রতিফলিত হয়, আপনি উভয় থাকতে পারে ()ভাল হিসাবে হিসাবে )(, /\এবং \/, ইত্যাদি

অন্যান্য সমস্ত ASCII মুদ্রণযোগ্য অক্ষরগুলিকে অবশ্যই অসম্পূর্ণ হিসাবে বিবেচনা করা উচিত এবং মিররযুক্ত সংশ্লিষ্ট চরিত্র ছাড়াই।

• এটি একটি চ্যালেঞ্জ: আপনার প্রোগ্রামটি যত কম সংক্ষিপ্ত, কোনও প্রোগ্রামিং ভাষায় বাইটে পরিমাপ করা তত ভাল।

People এমন লোকদের কাছে কুডোস যা একটি প্রতিসামগ্রী প্রোগ্রাম তৈরি করবে!

দ্রষ্টব্য : এই প্রশ্নটি "সুবিধাজনক প্যালিনড্রোম " এর সদৃশ নয় , এর জন্য প্যালিনড্রোমিক স্ট্রিংগুলি পরীক্ষা করা দরকার যেখানে বন্ধনীগুলি উল্টানো আছে two এই প্রশ্নটি দুটি কারণে পৃথক:

1) এটি প্যারেন্যাসিসহীন অক্ষরগুলি কীসের জন্য উদ্বেগযুক্ত তা অন্য প্রশ্নের সীমাবদ্ধতা, যেহেতু কেবলমাত্র প্রতিসম অক্ষর বিপরীত ক্রমে উপস্থিত হতে পারে।

২) যেহেতু এটি প্রতিসামিতার ধারণার ভিত্তিতে, এবং "সুবিধাজনক প্যালিনড্রোম" ধারণার উপর ভিত্তি করে নয়, তাই মিররযুক্ত অক্ষরগুলি উভয় ক্রমে হাজির হতে পারে, []এবং ][, এবং এটি প্রোগ্রামটিকে অন্য সমস্যার সমাধানকারী প্রোগ্রামগুলির থেকে পৃথক করে তোলে makes ।


6
কারও জন্যই ভাবছেন, চারকোল চিঠিগুলি প্রতিফলিত করে না। :(
সম্পূর্ণমানবিক

4
আমি দ্বিগুণতার সাথে একমত নই, যেহেতু দুপ টার্গেট চিঠিগুলি প্রতিফলিত করে না এবং এটি করে।
স্টিফেন

দুঃখিত, আমি উদাহরণগুলি মিস করেছি, আমার ভুল
jrtapsell

6
কেন 8"প্রতিসম" হিসাবে বিবেচিত হয় না ?
স্কট মিলনার

2
@ ফানকি কম্পিউটার কম্পিউটার এটি মূলত ডুপ টার্গেটের মতো নয়। প্রথম এবং সর্বাগ্রে এর কোনও উত্স কোডের বাধা নেই।
জোনাথন অ্যালান

উত্তর:


7

জাভাস্ক্রিপ্ট (ES6), 130 125 113 বাইট

f=
s=>s==[...s].reverse(s=`()<>[]{}qpbd/\\`).map(c=>s[s.indexOf(c)^1]||/[- !"'+*.:=AHIMOT-Y^_ovwx|]/.exec(c)).join``
<input oninput=o.textContent=f(this.value)><pre id=o>

সম্পাদনা করুন: @ আরনল্ডকে 5 টি বাইট সংরক্ষণ করা হয়েছে @ ইয়ারআর্যান্ডকে আরও 11 বাইট সংরক্ষণ করা হয়েছে।


আপনি কি পরিবর্তে একটি regexp ব্যবহার করতে পারেন includes()? যেমন /[- !"'+*.:=AHIMO^_ovwx|T-Y]/.test(c)
আর্নৌল্ড

@ আরনাউল্ড প্রকৃতপক্ষে, এই পরিসীমাটি খুব সহায়ক, ধন্যবাদ!
নীল

আপনি এতে গল্ফ [...s].reverse().map(...)করতে s::[].map().reverse()পারেন : আপনি যদি নতুন ইএস-পরবর্তী বৈশিষ্ট্যগুলি ব্যবহার করে ঠিক থাকেন। লিঙ্ক
ডাউনগোট

@ ডাওনগোট আপনার কি সেই বৈশিষ্ট্যের সাথে সম্পর্কিত কোনও লিঙ্ক আছে?
নীল


5

জেলি , 69 62 বাইট

“(<[{qb/“ !"'+*-.:=AHIMOTUVWXY^_ovwx|“)>]}pd\”,Ṛ$F©f@ð®œs2¤yU⁼

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

সমস্ত পরীক্ষার কেস

-7 বাইটস @ জোনাথান অ্যালানকে ধন্যবাদ

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

“(<[{qb/“ !"'+*-.:=AHIMOTUVWXY^_ovwx|“)>]}pd\”,Ṛ$F©f@ð®œs2¤yU⁼  main link

“(<[{qb/“ !"'+*-.:=AHIMOTUVWXY^_ovwx|“)>]}pd\”  The literal list of strings  ['(<[{qb/', ' !"\'+*-.:=AHIMOTUVWXY^_ovwx|', ')>]}pd\\']
               $                 Last two links (if not part of an LCC) as a monad 
            Ṛ                    Reverse array Does not vectorize.
           ,                     Pair; return [x, y].
                 ©               Copy link result to register (® atom to retrieve). 
              F                  Flatten list.
                  f              Filter; remove the elements from x that are not in y.
                   @             Swaps operands. 

                    ð            Start a new dyadic chain
                         ¤       Nilad followed by links as a nilad. 
                      2          The literal integer 2
                   ®             Restore; retrieve the value of the register. Initially 0.
                    œs           Split x into y chunks of similar lengths.
                          y      Translate the elements of y according to the mapping in x.
                           U     Upend; reverse an array.
                            ⁼    Equals. Does not vectorize.

ফিল্টার ব্যবহার করে ছয়টি বাইট সংরক্ষণ করুন: ¢FiЀ;1Ạðaµ¢yU⁼->¢Ff@ð¢yU⁼
জোনাথন অ্যালান

রেজিস্টার ব্যবহার করে অন্যটিকে সংরক্ষণ করুন (এখনই সমস্ত এক লাইনে): ...}pd\”,Ṛ$Fœs©2Ff@ð®yU⁼
জনাথন অ্যালান

(... যদিও একই দৈর্ঘ্যটি ...}pd\”,Ṛ$F©f@ð®œs2¤yU⁼তর্কযোগ্যভাবে ভাল)
জোনাথন অ্যালান

প্রতিসম সেট থেকে সংলগ্ন অর্ডিনালগুলির প্রতিটি জোড়ার জন্য কেবল একটি এনকোডিং করে অন্য একটি বাইট সংরক্ষণের সন্ধান পেয়েছি (আরও ভাল কোডের সাথে মুছে দেওয়া মন্তব্যের সম্পাদনা)
জোনাথন অ্যালান

4

পাইথন 3, 211 208 195 বাইট

lambda S,p="()<>[]{}qpbd\/",s=" !\"'+*-.:=AHIMOTUVWXY^_ovwx|":(S==S.translate({ord(s[2*x]):s[2*x+1]for s in(p,p[::-1])for x in range(7)})[::-1])*(~len(S)%2*s[len(S)//2]in s)*(not set(S)-set(p+s))

জোনাথন অ্যালানকে ধন্যবাদ 13 বাইট সংরক্ষণ করা।


1
9 বাইট সংরক্ষণ করুন : 1. স্ল্যাশের বিপরীত ক্রম যাতে পালানোর দরকার নেই; 2. ব্যবহার 2*xএবং range(7); ৩. >2পরীক্ষা এড়ানোর জন্য গুণ ব্যবহার করুন ; 4. ব্যবহারের উপর না bitwise len(S)এড়াতে notএর not len(S)%2; 5. যে ব্যবহার ''in'blah'হয় Trueস্ট্রিং গুণ করার অনুমতি ~len(S)%2*s[len(S)//2]in s
জোনাথন অ্যালান



2

কোটলিন 1.1, 201 199 বাইট

{var R="(<[{qb/\\dp}]>)"
var m=HashMap<Any,Any>()
"\"!'+*-.:=AHIMOTUVWXY^_ovwx| ".map{m[it]=it}
R.indices.map{m[R[it]]=R[R.length-(it+1)]}
it.zip(it.reversed()).filter{m[it.first]!=it.second}.none()}

শোভিত

{
    var R = "(<[{qb/\\dp}]>)"
    var m = HashMap<Any, Any>()
    "\"!'+*-.:=AHIMOTUVWXY^_ovwx| ".map { m[it] = it }
    R.indices.map { m[R[it]] = R[R.length - (it + 1)] }
    it.zip(it.reversed()).filter { m[it.first] != it.second }.none()
}

পরীক্ষা

var i:(String)->Boolean =
{var R="(<[{qb/\\dp}]>)"
var m=HashMap<Any,Any>()
"\"!'+*-.:=AHIMOTUVWXY^_ovwx| ".map{m[it]=it}
R.indices.map{m[R[it]]=R[R.length-(it+1)]}
it.zip(it.reversed()).filter{m[it.first]!=it.second}.none()}
fun main(args: Array<String>) {
    var GOOD = listOf("()()",
            "()()()",
            "[A + A]",
            "WOW ! WOW",
            "OH-AH_wx'xw_HA-HO",
            "(<<[[[T*T]]]>>)",
            "(:)",
            ")-(",
            "())(()",
            "qpqp")

    var BAD = listOf("())(",
            "((B))",
            "11",
            "+-*+-",
            "WOW ! wow",
            "(;)",
            "qppq")

    GOOD.filterNot { i(it) }.forEach { throw AssertionError(it) }
    BAD.filter { i(it) }.forEach { throw AssertionError(it) }
    println("Test Passed")
}

টিআইওতে চালানো যায় না কারণ 1.1 সমর্থিত নয়



আমার স্কোরটি কি আমদানির সাথে বা ছাড়াই হবে?
jrtapsell

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

2

পাইথন 2 , 182 167 163 162 160 158 বাইট

lambda s:s[::-1]==s.translate(m(t+w,w+t),m("","").translate(None," !\"'+*-.:=AHIMOTUVWXY^_ovwx|"+t+w))
from string import*
m=maketrans
t=")>[{/qd"
w="(<]}\pb"

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

জোনাথন অ্যালানকে ধন্যবাদ 2 বাইট সংরক্ষণ করা

ব্যাখ্যা প্রথমত, আমরা যে একটি প্রতিসম (: গৃহস্থালির কাজ নিজেই না সব অক্ষর তালিকা নির্মাণ করা প্রয়োজন A, ... বা অন্য গৃহস্থালির কাজ (জন্য ), ...):

  • m("","") সমস্ত উপলব্ধ অক্ষরের সাথে একটি স্ট্রিং প্রদান করে।

  • m("","").translate(None," \t!\"'+*-.:=AHIMOTUVWXY^_ovwx|"+t+w)) সমস্ত উপলব্ধ অক্ষর থেকে একটি প্রতিসাম্যযুক্ত অক্ষর সরিয়ে দেয়।

তারপরে, আমরা প্রতিটি চরকে এর প্রতিসাম্য চরকে ম্যাপ করি এবং যে অক্ষরগুলির সাথে প্রতিসাম্য থাকে না তা সরান s.translate(m(t+w,w+t),<chars that don't have a symmetric>)

যদি ফলাফলটি বিপরীত স্ট্রিংয়ের সমান হয় তবে আমাদের একটি প্রতিসম স্ট্রিং রয়েছে।


যদি আপনি স্ল্যাশগুলির ডান প্রান্ত থেকে সরিয়ে নিয়ে যান tএবং wআপনি পালানোর আগেভাগা করতে পারেন, যেমন w="(<]{\pb"। এর সাথে অন্য একটি বাইট সংরক্ষণ করুন from string import*;m=maketrans(আমি ব্যক্তিগতভাবে একটি নতুন লাইনের জন্য যাই যখন ;বাইটগুলি সংরক্ষণ না করে)। এছাড়াও আপনার এতক্ষণ ফাংশনটির নামকরণের প্রয়োজন নেই যতক্ষণ না এটি পুনরায় ব্যবহারযোগ্য এবং পুনরাবৃত্তিযোগ্য, যা অন্য 2 রক্ষা করে
জোনাথন অ্যালান

এছাড়াও আপনার এতক্ষণ ফাংশনটির নামকরণের প্রয়োজন নেই যতক্ষণ না এটি পুনরায় ব্যবহারযোগ্য এবং পুনরাবৃত্তিযোগ্য, যা অন্য 2 টিআইও সংরক্ষণ করে (নোট: আপনার তালিকাভুক্ত কোডটি এবং আপনার লিঙ্কে 162 বাইট রয়েছে)
জোনাথন অ্যালান

@ জোনাথান অ্যালান ধন্যবাদ আমি ইতিমধ্যে দুটি বাইট (মানসিকভাবে) অপসারণ করেছি f=, তবে আপনার সংস্করণটি আরও পরিষ্কার।
jferard


আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.