দ্বিমুখী Palindromic বন্ধ জেনারেটর


24

ভূমিকা

ইনপুট স্ট্রিংয়ের একটি প্যালিনড্রোমিক ক্লোজার হ'ল সংক্ষিপ্ততম প্যালিনড্রোম যা ইনপুট স্ট্রিংয়ের বাইরে তৈরি করা যেতে পারে যেখানে চূড়ান্ত প্যালিনড্রোম ইনপুট স্ট্রিং দিয়ে শুরু হয়।

এই চ্যালেঞ্জের জন্য, আমরা এরকম একটি দ্বিমুখী প্যালিনড্রোমিক বন্ধের বিষয়টি বিবেচনা করব

  • ইনপুট স্ট্রিংয়ের বাম Palindromic বন্ধন হ'ল সংক্ষিপ্ততম প্যালিনড্রোম যা ইনপুট স্ট্রিং দিয়ে শুরু হয়।
  • ইনপুট স্ট্রিংয়ের ডান প্যালিনড্রমিক ক্লোজার হ'ল সংক্ষিপ্ততম প্যালিনড্রোম যা ইনপুট স্ট্রিংয়ের সাথে শেষ হয়।
  • একটি ইনপুট স্ট্রিংয়ের দ্বিমুখী Palindromic বন্ধনটি ইনপুট স্ট্রিংয়ের বাম বা ডান Palindromic বন্ধের যে কোনওটির চেয়ে সংক্ষিপ্ত।

কার্য

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

আপনি STDIN (অথবা নিকটতম বিকল্প), কমান্ড-লাইন আর্গুমেন্ট বা ফাংশন আর্গুমেন্টের মাধ্যমে ইনপুট নিয়ে কোনও প্রোগ্রাম বা ফাংশন লিখতে পারেন এবং ফলাফলটি STDOUT (বা নিকটতম বিকল্প) এ মুদ্রণ করে বা স্ট্রিং হিসাবে ফিরিয়ে দিতে পারেন।

আপনি ধরে নিতে পারেন যে ইনপুটটি কোনও ফাঁকা স্ট্রিং হবে না।

কয়েকটি উদাহরণ:

<Input>   -> <Output>
"abcdef"  -> "abcdefedcba"  (or "fedcbabcdef")
"abcba"   -> "abcba"
"abcb"    -> "abcba"
"cbca"    -> "acbca"

প্রাথমিক আইডিয়া ক্রেডিট ভিজ্যুয়েলমেলনে যায়, মার্টিন এবং জাগার্বের সহায়তায় চূড়ান্ত ধারণা

প্যালিনড্রোমিক ক্লোজার, বাম-প্যালেন্ড্রোমিক ক্লোজার এবং ডান-প্যালিনড্রোমিক ক্লোজার শব্দটি প্রথম এই কাগজটি দ্বারা ব্যবহৃত এবং সংজ্ঞায়িত হয়েছিল ।


1
আমি একটি প্যালিনড্রমিক সমাধান দেখতে চাই ...
ওজডো

2
@ ইউজডো আমি বোনাস হিসাবে যুক্ত করার কথা ভেবেছিলাম তবে আমি নিশ্চিত যে বেশিরভাগ উত্তর প্যালিনড্রোম তৈরির জন্য মন্তব্যগুলি ব্যবহার করেছে used কিছু উত্তর যদি সত্যিকার অর্থেও একটি প্যালিনড্রোম হতে পারে, মন্তব্যগুলির উপর নির্ভর না করে, আমি সেই উত্তরের জন্য একটি অনুগ্রহ ছাড়ব!
অপ্টিমাইজার

উত্তর:


11

পাইথ, 22 19

hfq_TTsm,+z_d+_dzyz

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

ব্যাখ্যা

দ্বিমুখী প্যালিনড্রোমিক ক্লোসার হয় ফর্মের AXবা XAযেখানে Xইনপুট স্ট্রিং এবং Aএটির একটি স্ট্রিং X। আমাকে আসলে একটি সংলগ্ন সাবস্ট্রিং হতে হবে X, এক ফর্মের জন্য একটি উপসীম, অন্য রূপের প্রত্যয় হতে হবে। কিন্তু আমি এই ব্যর্থতা সম্পর্কে যত্ন নেই। পাইথের জন্য আমার প্রয়োজন কেবল একটি স্ট্রিং (সামঞ্জস্যপূর্ণ বা না)।

                        Implicit: z = raw_input() // Read a string
                 yz     A list with all substrings (contiguous or not) of z
       m                For each of these substrings d, build
        ,                  a pair of two strings:
         +z_d              ( z + inveres(d) ,
             +_dz            inverse(d) + z )
      s                 Sum (put all created pairs into a list)
 fq_TT                  filter elements T, where inverse(T) == T (Palindrom)
h                          Take the first element

সম্পাদন করা

পুরানো সংস্করণ দৈর্ঘ্য অনুযায়ী ফিল্টারিংয়ের পরে স্ট্রিংগুলি অর্ডার করেছিল .olN...। ঠিক বুঝতে পেরেছি, এটি yদৈর্ঘ্য অনুসারে সাবস্ট্রিংগুলি অর্ডার করে। সুতরাং এই প্যালিনড্রোমগুলি ইতিমধ্যে বাছাই করা হয়েছে।


6

ক্লিপ , 40

(sl`f[a=ava}+m[i+v+ixx}Rlxm[i+xvu0ix}Rlx

উদাহরণ

Documents>java -jar Clip4.jar palindrome.clip
abcb
abcba

ব্যাখ্যা

(sl`                                        .- The shortest                     -.
    f[a=ava}                                .- palindrome                       -.
            +                               .- among the following two sets:    -.
             m[i      }Rlx                  .- For each number up to length(x)  -.
                +                           .- combine                          -.
                 v+ix                       .- the last i chars of x, reversed  -.
                     x                      .- and x.                           -.
                          m[i       }Rlx    .- For each number up to length(x)  -.
                             +              .- combine                          -.
                              x             .- x and                            -.
                               vu0ix        .- the first i chars of x, reversed.-.

6

সিজেম, 30 বাইট

সত্যিই এখন অবধি একটি সিজেএম উত্তর দেখার আশা ছিল .. সুতরাং এখানে এটি যায়: পি

q:Q,{)QW%/(Q+Q@+s}%{,}${_W%=}=

আমি {,}$সেখানে সেই ব্লকটিকে সত্যিই ঘৃণা করি , তবে আমি ব্যবহার করছি প্রজন্মের অ্যালগরিদমের কারণে আমি সম্ভাব্য প্যালিনড্রোমের একটি আনর্ডারড তালিকা পেয়েছি।

কোড ব্যাখ্যা

q:Q,{            }%             "Read the input string, store in Q, take length and";
                                "run the code block that many times";
     )QW%                       "Increment the iteration index and Put reversed Q on stack";
         /                      "Split reversed Q into parts of incremented iteration index";
          (Q+                   "Take out the first part and prepend it to Q";
             Q@+s               "Take the rest of the parts and append them to Q";
                   {,}$         "At this point, we have all possible prepended and appended";
                                "sequences of the input string. Sort them by length";
                       {_W%=}=  "Take the first sequence which is a palindrome";

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


6
আমি সত্যিই {,}$সেখানে ব্লক ঘৃণা ! খালি ঠাট্টা করছি, সিজোমে কি করে তা আমার কোনও ধারণা নেই।
অ্যালেক্স এ 3

4

পাইথন 2, 115 113 109 105 96 বাইট

f=lambda x:[x for x in sum([[x[:~i:-1]+x,x+x[i::-1]]for i in range(len(x))],[])if x==x[::-1]][0]

আশা করি আরও গল্ফ ডাউন হতে পারে। বিট সম্ভবত নোট যোগ্য:

  • একটিতে দুটি তালিকা বোঝার জন্য যোগফল ব্যবহার করে
  • নূন্যতম প্রয়োজন এড়াতে বাছাই করা শর্তাবলী শর্তাদি গঠন

1
আইটেমগুলি বেশ সাজানো ক্রমে নয়, তাই এটি স্ট্রিংগুলির মতো ব্যর্থ হয় a
Sp3000

4

গণিত, 96 বাইট

এর চেয়ে আরও দুর্দান্ত উপায় থাকতে হবে ...

""<>#&@@SortBy[r=Reverse;#/.{b___,a__/;r@{a}=={a}}:>{b,r@{b,a}}&/@{r@#,#}&@Characters@#,Length]&

এটি একটি নামবিহীন ফাংশন সংজ্ঞা দেয় যা একটি স্ট্রিং নেয় এবং ফলাফলটি দেয়।

প্রাথমিক ধারণাটি হ'ল

  • স্ট্রিংটি এর মধ্যে বিভক্ত করুন Characters
  • এই তালিকা এবং এর বিপরীতে একটি অ্যারে গঠন করুন।
  • তাদের প্রত্যেকের ডান প্যালেন্ড্রোমিকটি সন্ধান করতে প্যাটার্ন ম্যাচিং ব্যবহার করুন:

    {b___,a__/;r@{a}=={a}}:>{b,r@{b,a}}
    

    নোট করুন যে এটি আসলে কোনও ফ্ল্যাট তালিকা দেয় না। যেমন {a,b,c}আপনি পেতে চাই

    {a,b,{c,b,a}}
    
  • দুটি ফলাফল দৈর্ঘ্য অনুসারে বাছাই করুন।

  • সংক্ষিপ্তটি চয়ন করুন এবং এর সাথে আবার একটি স্ট্রিংয়ে যোগ দিন ""<>#&@@

abacabaইনপুট হলে এটি আউটপুট হয় abac। সঠিক উত্তরটি হ'ল cabac। আমি মনে করি দৈর্ঘ্য অনুসারে বাছাই করার আগে আপনার এগুলি সমতল করা উচিত।
আলেফাল্ফ

1
@ এলফাল্ফার একটি আরও ভাল ফিক্স পাওয়া গেছে যার কোডের আকার পরিবর্তন করার প্রয়োজন ছিল না (এবং এটি বাছাইয়ের পিছনে আসলে আমার উদ্দেশ্য ছিল)।
মার্টিন এন্ডার

2

ব্র্যাচল্যাগ (2), 6 বাইট, ভাষা পোস্টডেটস চ্যালেঞ্জ

~{↔?a}

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

ব্র্যাচল্যাগের জন্য যথারীতি এটি একটি সম্পূর্ণ প্রোগ্রাম নয়, এটি একটি ফাংশন।

ব্যাখ্যা

~{↔?a}
~{   }   Find a value that produces {the input} upon doing the following:
  ↔        reversing it;
   ?       asserting that we still have the same value;
    a      and taking either a prefix, or a suffix.

আমি যতদূর জানি (এটি আমার ভাষা নয়, তবে এটি অসম্ভব বলে মনে হয়), aএই চ্যালেঞ্জের জন্য ব্র্যাচল্যাজে যোগ করা হয়নি, তবে এটি এখানে খুব কার্যকর। আমরা "বিপরীত ব্যবহার করি, এবং দৃsert়রূপে এটি পরিবর্তিত হয় না" পদ্ধতিটি জোর দিয়ে বলি যে আমরা যে মান খুঁজে পাই তা একটি প্যালিনড্রোম।

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


a- এই চ্যালেঞ্জের জন্য অ্যাডফিক্স যোগ করা হয়নি। উপসর্গ এবং প্রত্যয়টির জন্য আমার ভাল স্মৃতিবিদ্যার সাথে কোনও উপলভ্য চিহ্ন নেই, তাই আমি উভয়টি অ্যাডফিক্সে মিশে গিয়েছিলাম যা প্রয়োজন হলে কেবল উপসর্গ বা প্রত্যয় নির্বাচন করতে সাবস্ক্রিপ নিতে পারে।
২৪

1

রুবি, 76 + 2 = 78

কমান্ড-লাইন পতাকা সহ -pl ( lআপনি কীভাবে ইনপুট করছেন তার উপর নির্ভর করে প্রয়োজনের প্রয়োজন নাও), চালান

$_=[[$_,r=$_.reverse]*"\0",r+"\0#$_"].min_by{|s|s.sub!(/(.*)\0\1/){$1}.size}

'আবা' একটি স্ট্রিং দেওয়া হয়েছে , যেখানে 'সিবিসিএ 0 এসিবিসি' এবং 'এসিবিসি 0 সিবিসিএ' স্ট্রিং তৈরি করা হয়েছে 0 কোড 0 সহ অক্ষর। এটি তারপরে দীর্ঘতম পুনরাবৃত্ত স্ট্রিং ফ্রেমিং 0 এর একটি অনুলিপি মুছে দেয় যা প্রতিটিটিতে পাওয়া যায়, দুটি ক্লোজার পেতে প্রথমটিতে 'এ' এবং দ্বিতীয়টিতে 'সিবিসি' এটি তখন সংক্ষিপ্ত ফলাফল আউটপুট করে।

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


1

পাইথন 3, 107 বাইট


f=lambda a:[i for i in[a[:i:-1]*j+a+a[-1-i::-1]*(1-j)for i in range(len(a))for j in(0,1)]if i==i[::-1]][-1]

পরীক্ষা করার জন্য:

>>> print("\n".join(map(f, ["abcdef", "abcba", "abcb", "cbca"])))
abcdefedcba
abcba
abcba
acbca

1

হাস্কেল, 107 বাইট

import Data.List
r=reverse
f s=snd$minimum[(length x,x)|x<-map(s++)(tails$r s)++map(++s)(inits$r s),x==r x]

টেস্ট:

*Main> mapM_ (putStrLn.f) ["abcdef", "abcba", "abcb", "cbca"]
abcdefedcba
abcba
abcba
acbca

1

জে, 66 62 বাইট

3 :'>({~[:(i.>./)(#%~[-:|.)@>),(<@([,|.@{.~)"#:i.@#"1)y,:|.y'

বেশ সোজা। আমি যে দুটি কৌশল ব্যবহার করি:

ডান প্যালিনড্রোমিক ক্লোজারটি হ'ল বিপরীত স্ট্রিংয়ের বাম প্যালিনড্রোমিক ক্লোজার।

সর্বনিম্ন দৈর্ঘ্যের সাথে স্ট্রিংয়ের দৈর্ঘ্য এবং প্যালিনড্রোমিনিটি কমপক্ষে প্রকাশের সাথে (is_palindrome / দৈর্ঘ্য) with

   f=.3 :'>({~[:(i.>./)(#%~[-:|.)@>),(<@([,|.@{.~)"#:i.@#"1)y,:|.y'

   f 'lama'
lamal

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

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