সেলাই টুগেদার প্যালিনড্রোমিক সাবস্ট্রিংস থেকে একটি প্যালিনড্রোম


14

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


উদাহরণ

বৈধ পরীক্ষার কেস

l = anaa
p = ['a', 'n', 'a', 'a', 'aa', 'ana']
result = anaaaaana or aanaaanaa or aaananaaa

l = 1213235
p = ['1', '2', '1', '3', '2', '3', '5', '121', '323']
result = 1213235323121

l = racecar
p = ['r', 'a', 'c', 'e', 'c', 'a', 'r', 'cec', 'aceca', 'racecar']
result = racecarcecaacecracecar (there are others)

l = 11233
p = ['1', '11', '1', '2', '3', '33', '3']
result = 113323311 or 331121133

l = abbccdd
p = ['a', 'b', 'bb', 'b', 'c', 'cc', 'c', 'd', 'dd', 'd']
result = bbccddaddccbb or ccbbddaddbbcc or (etc...)

l = a
p = ['a']
result = a

অবৈধ পরীক্ষার কেস (সম্ভাব্য নয়)

l = 123456789
p = ['1', '2', '3', '4', '5', '6', '7', '8', '9']
result = <not possible, behavior undefined>

l = hjjkl
p = ['h', 'j', 'jj', 'j', 'k', 'l']
result = <not possible, behavior undefined>

l = xjmjj
p = ['x', 'j', 'jmj', 'm', 'j', 'jj', 'j']
result = <not possible, behavior undefined>

বিধি

  • যদি ইনপুট শব্দটি নিজেই একটি প্যালিনড্রোম হয় তবে এটি সর্বদা ইনপুট হিসাবে কার্যকর হবে।
  • কেবল একটি মাত্র স্ট্রিং ফেরত দেওয়া উচিত, আপনি যেটি বেছে নিয়েছেন তা বৈধ হওয়া পর্যন্ত নির্বিচারে।
  • যদি ইনপুটটির কোনও व्यवहारযোগ্য আউটপুট না থাকে তবে আপনার কোডটির অপরিবর্তিত আচরণ থাকতে পারে।
  • ইনপুটগুলির মধ্যে কেবল ASCII- মুদ্রণযোগ্য অক্ষর থাকবে 0x20-0x7E
  • এটি , সর্বনিম্ন বাইট-কাউন্টটি বিজয়ী।

1
প্রথম প্রস্তাবিত ফলাফলের "abbccdd"ভুল: অন্তিম দুটি বর্ণ হওয়া উচিত "bb", তাই না "dd"
13:48 এ

আমরা কি একটি স্ট্রিংয়ের চেয়ে সাবস্ট্রিংয়ের একটি অ্যারে ফিরিয়ে দিতে পারি?
শেগি

আমি কি ইনপুট হিসাবে অক্ষরের একটি তালিকা নিতে পারি?
আলেফাল্ফ

1
গ্রহণযোগ্য আচরণ হিসাবে ঝুলিয়ে রাখার অর্থ, আপনি কী তাকে ইনপুট দিয়েছেন এমন ব্যক্তিকে ঝুলিয়ে দেবেন?
জন ডিভোরাক

@ জনডভোরাক স্পষ্ট করেছেন।
যাদু অক্টোপাস উরন

উত্তর:


8

ব্র্যাচল্যাগ , 10 বাইট

{s.↔}ᶠpc.↔

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

false.সম্ভব না হলে ব্যর্থ (যেমন প্রিন্ট ))

ব্যাখ্যা

{   }ᶠ         Find all…
 s.              …substrings of the input…
  .↔             …which are their own reverse
      p        Take a permutation of this list of palindromes
       c.      The output is the concatenation of this permutation
        .↔     The output is its own reverse


3

জাভাস্ক্রিপ্ট (ইএস 6), 193 বাইট

"মা দেখুন, অন্তর্নির্মিত কোনও অনুমতি নেই!" (তাই হ্যাঁ ... এটি দীর্ঘ ...)

কোনও সমাধান না হলে একটি খালি অ্যারে ফিরিয়ে দেয়।

f=(s,a=[].concat(...[...s].map((_,i,a)=>a.map((_,j)=>s.slice(i,j+1)))).filter(P=s=>[...s].reverse().join``==s&&s),m=S=[])=>S=a.map((_,i)=>f(s,b=[...a],[...m,b.splice(i,1)]))>''?S:P(m.join``)||S

ডেমো

কিভাবে?

কোডটি ছোট অংশে বিভক্ত করা যাক।

আমরা সংজ্ঞায়িত পি () , একটি ফাংশন যা রিটার্ন গুলি যদি গুলি একটি যে শব্দ কবিতা প্রভৃতি উলটা করিয়া পড়িলেও একই থাকে , অথবা মিথ্যা অন্যথায়।

P = s => [...s].reverse().join`` == s && s

আমরা ইনপুট স্ট্রিং এর সমস্ত সাবস্ট্রিংগুলি গণনা করি । ব্যবহার পি () , আমরা খালি নয় এমন palindromes বিছিন্ন এবং তাদের অ্যারের মধ্যে সংরক্ষণ একটি

a = [].concat(...[...s].map((_, i, a) => a.map((_, j) => s.slice(i, j + 1)))).filter(P)

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

f = (                        // given:
  a,                         //   a[] = input array
  m = S = []                 //   m[] = current permutation of a[]
) =>                         //   and S initialized to []
  S = a.map((_, i) =>        // for each element at position i in a[]:
    f(                       //   do a recursive call with:
      b = [...a],            //     b[] = copy of a[] without the i-th element
      [...m, b.splice(i, 1)] //     the element extracted from a[] added to m[]
    )                        //   end of recursive call
  ) > '' ?                   // if a[] was not empty:
    S                        //   let S unchanged
  :                          // else:
    P(m.join``) || S         //   update S to m.join('') if it's a palindrome


2

05 এ বি 1 ই , 13 12 বাইট

ŒʒÂQ}œJʒÂQ}¤

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

-1 বাইট ধন্যবাদ ম্যাজিক অক্টোপাস উরন এবং এনিগমা।


Jতাই আপনি প্রয়োজন হবে না স্বয়ংক্রিয়ভাবে factorizes €Jমাত্র J; এছাড়াও, আপনার মনে হচ্ছে যে সমস্ত কিছু নয়, একটি প্যালিনড্রোমও ফেরত দেবেন। এটি অনলাইন চেষ্টা করুন! একই বাইট-কাউন্টের জন্য বৈধ।
ম্যাজিক অক্টোপাস আরন

@ ম্যাজিক অ্যাক্টোপাস ইউরন স্থির, ধন্যবাদ!
ক্যাল্ডো

Ùćহতে পারে ¤(বা অন্যান্য বিকল্পের একটি সংখ্যা)
এমিগিনা

@ এমিগনা নিশ্চিত Ùছিলেন না যে আমি কেন দেখিনি যে এটির প্রয়োজন হয়নি।
ম্যাজিক অক্টোপাস আরন

এনগমা আমার খারাপ, একটি অজানা কারণে আমি ভেবেছিলাম আমাদের অনন্য প্যালিনড্রোমগুলি সমস্ত প্রদর্শন করার কথা, সুতরাং আসল Ù Ù টিপ জন্য ধন্যবাদ, স্থির!
কাল্ডো

2

স্ট্যাক্স , 13 বাইট

绬►Ö∞j∞:Æ╘τδ

পরীক্ষার কেসগুলি চালান (এটি আমার বর্তমান মেশিনে প্রায় 10 সেকেন্ড সময় নেয়)

এটি একই প্রোগ্রামের সংশ্লিষ্ট আসকি উপস্থাপনা।

:e{cr=fw|Nc$cr=!

এটি নিখুঁত নিষ্ঠুর-শক্তি নয়, তবে এটি আমার দ্বারা নিষ্ঠুর বল প্রয়োগের মতোই ছোট। সে প্রায় 10 মিনিট পরে আমার ব্রাউজারটি ক্র্যাশ করেছে। যাইহোক, এটি কীভাবে কাজ করে তা এখানে।

:e                  Get all contiguous substrings
  {cr=f             Keep only those that are palindromes
       w            Run the rest of the program repeatedly while a truth value is produced.
        |N          Get the next permutation.
          c$        Copy and flatten the permutation.
            cr=!    Test if it's palindrome.  If not, repeat.
                    The last permutation produced will be implicitly printed.

2

রুবি , 131 123 120 বাইট

->s{m=->t{t==t.reverse}
(1..z=s.size).flat_map{|l|(0..z-l).map{|i|s[i,l]}}.select(&m).permutation.map(&:join).detect &m}

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

একটি ল্যাম্বদা একটি স্ট্রিং গ্রহণ করছে এবং একটি স্ট্রিং ফিরিয়েছে। ফেরত পাঠায় nilযখন কোন সমাধান বিদ্যমান।

-5 বাইট: select{|t|l[t]}সঙ্গে প্রতিস্থাপনselect(&l)

-3 বাইট: map{..}.flattenসঙ্গে প্রতিস্থাপনflat_map{...}

-1 বাইট: স্ট্রিংয়ের দৈর্ঘ্য এবং স্ট্রিং স্ট্রিং ওভার স্ট্রিং স্টার্ট এবং স্ট্রিংয়ের শেষের পরিবর্তে লুপ করুন

-২ বাইট: zআগে ব্যবহারের পরিবর্তে প্রথম ব্যবহারে ঘোষণা করুন

->s{
  l=->t{t==t.reverse}        # Lambda to test for palindromes
  (1..z=s.size).flat_map{|l| # For each substring length
    (0..z-l).map{|i|         # For each substring start index
      s[i,l]                 # Take the substring
    }
  }                          # flat_map flattens the list of lists of substrings
  .select(&l)                # Filter to include only palindromic substrings
  .permutation               # Take all orderings of substrings
  .map(&:join)               # Flatten each substring ordering into a string
  .detect &l                 # Find the first palindrome
}

1

পাইথ , 13 বাইট

h_I#sM.p_I#.:

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

-১ বাইট মিঃ এক্সকোডারকে ধন্যবাদ


লল আমি নিশ্চিত যে আর কেউ পাইথ ব্যবহার করে না যে আমি আপনার নিজের দেখার আগে আমার নিজের পৃথক উত্তর (এখন মুছে ফেলা) জমা দিয়েছি। আপনি ব্যবহার করতে পারেন h_I#sM.p_I#.:বা e_IDsM.p_I#.:13 বাইট জন্য।
মিঃ এক্সকডার

@ মিঃ এক্সকোডার ওহ হাহ: পি হ্যাঁ আমি খুব কমই পাইথ ব্যবহার করি না কেন আমি কেন এটি ব্যবহারের সিদ্ধান্ত নিয়েছিলাম তা জানেন না। ধন্যবাদ!
হাইপারনিউট্রিনো

1

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

lambda a:g(sum(k,[])for k in permutations(g(a[i:j+1]for i in range(len(a))for j in range(i,len(a)))))[0]
g=lambda k:[e for e in k if e==e[::-1]]
from itertools import*

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

-২ বাইটস মিঃ এক্সকোডারকে ধন্যবাদ


আপনি a[i:j+1]যদি for j in range(i,len(a))পরিবর্তে -2 বাইট ব্যবহার করেন তবে আপনি ব্যবহার করতে পারেন ।
মিঃ এক্সকডার

1

Japt , 19 বাইট

জাপ্ট দ্বারা বাধাগ্রস্থ হয়েছে (এখনও) পেতে সক্ষম হচ্ছে না একটি স্ট্রিংয়ের সমস্ত সাবস্ট্রিংগুলি (এবং আংশিকভাবে আমার বর্তমান স্তরের ক্লান্তি দ্বারা!) ।

আউটপুট undefinedসমাধান না হলে ।

Êõ@ãX fêQÃc á m¬æêQ

চেষ্টা করে দেখুন


ব্যাখ্যা

                        :Implicit input of string U
Ê                       :Length of U
 õ                      :Range [1,Ê]
  @      Ã              :Pass each X through a function
   ãX                   :  Substrings of U of length X
      f                 :  Filter
       êQ               :    Is it a palindrome?
          c             :Flatten
            á           :Permutations
              m         :Map
               ¬        :  Join to a string
                æêQ     :Get first element that is a palindrome

1
¬আপনার উত্তরটি সরানোর জন্য কেবল স্ট্রিংয়ের একটি তালিকা সম্পর্কে আপনার প্রশ্নটি রয়েছে : পি?
ম্যাজিক অক্টোপাস আরন

1
ভেবেছিলাম আমি সরিয়ে ফেলতে পারি তবে তারপরে আমার দরকার æ_¬êQহত তাই এটি কোনওরকম বাইট না বাঁচাতে পারত!
শেগি

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


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