চুনকি প্যালিনড্রোমস


15

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

উদাহরণস্বরূপ, স্ট্রিংটি "abcabca"একটি প্যালিনড্রোম নয় যদি আমরা এটি অক্ষর অনুসারে অক্ষরটি পড়ে থাকি তবে এটিকে একটি চুনকামি প্যালিনড্রোম তৈরির তিনটি ভিন্ন উপায় রয়েছে :

["abcabca"]
["a" "bcabc" "a"]
["a" "bc" "a" "bc" "a"]

যেমন আপনি দেখতে পাচ্ছেন, চুড়ি প্যালিনড্রোমিসনেস একটি খুব অন্তর্ভুক্ত ধারণা; প্রতিটি স্ট্রিং কমপক্ষে এক উপায়ে ঠাণ্ডা প্যালিনড্রোমে পরিণত হতে পারে।

কার্য

এমন একটি প্রোগ্রাম বা একটি ফাংশন লিখুন যা ইনপুট হিসাবে একটি স্ট্রিং গ্রহণ করে এবং তার প্যালিনড্রোমিক চুঙ্কনেস , অর্থাৎ প্যালিনড্রমিক অ্যারেগুলির পার্টিশনের সংখ্যা প্রদান করে।

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

 OUTPUT | INPUT
--------+---------------------------------------------
      1 | ""                                          
      1 | "a"                                         
      1 | "ab"                                        
      2 | "aa"                                        
      2 | "aaa"                                       
      3 | "abcabca"                                   
      4 | "abababab"                                  
     28 | "abcabcaabababababcabca"                    
      1 | "bbbbabababbbbababbbaaaaa"                  
     20 | "ababbaaaabababbbaaabbbaa"                  
      5 | "baaabaabababaababaaabbaab"                 
     62 | "bbaaababbabbabbbabaabaabb"                 
      2 | "a man a plan a canal panama"               
     25 | "ama nap lan aca nal pan ama"               
     93 | "SATOR   AREPO   TENET   OPERA   ROTAS"     
    976 | "abcabcaabcabcaabcabcaabcabcaabcabcaabcabca"
  28657 | "ababababababababababaababababababababababa"
2097152 | "aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa"

অতিরিক্ত বিধি

  • আপনি ধরে নিতে পারেন যে ইনপুটটিতে 42 বা তার চেয়ে কম মুদ্রণযোগ্য ASCII অক্ষর থাকবে, optionচ্ছিকভাবে আপনার ভাষার স্ট্রিং ডিলিমিটর দ্বারা ঘিরে এবং / অথবা একটি নতুন লাইন থাকবে।

  • প্রতিটি বৈধ ইনপুট স্ট্রিংয়ের জন্য, আপনার কোডটি অবশ্যই আমার মেশিনে এক মিনিটেরও কম সময়ে শেষ করতে হবে (ইন্টেল কোর i7-3770, 16 জিআইবি র‌্যাম, ফেডোরা 21)।

    পর্যাপ্ত অ্যালগরিদম সহ, এই সময় সীমা মেনে চলা সহজ হওয়া উচিত। তবে আপনি সম্ভবত ইনপুট স্ট্রিংয়ের সমস্ত পার্টিশনটিতে পুনরাবৃত্তি করতে সক্ষম হবেন না।

  • আপনি যদি আউটপুটটি STDOUT এ মুদ্রণ করতে চান তবে এটি একটি একক নতুন লাইন অনুসরণ করতে পারে।

  • স্ট্যান্ডার্ড বিধি প্রযোজ্য।

উত্তর:


4

পাইথ, 40 34 27 22 বাইট

Lhsmy:bd_df!xb>TbS/lb2

অনলাইন ইন্টারপ্রেটারে এটি ব্যবহার করে দেখুন

প্রারম্ভিক 40 বাইট সংস্করণ থেকে ভারি গল্ফ হয়েছে। FryAmTheEggman কে বেশ কয়েকটি দরকারী অপারেটর (ডকস অনুসন্ধান করা শক্ত!) যে আমাকে মোট 6 টি বাইট সংরক্ষণ করেছে তা নির্দেশ করার জন্য ধন্যবাদ। একটি চালাক একক বাইট ফলাফলের ব্যাখ্যা দ্বারা সংরক্ষণ করার জন্য ডেনিস ধন্যবাদ x- একটি truthy / falsy বদলে একটি সূচক মান হিসাবে !xb>Tbবদলে q<bT>Tb


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

আমরা একটি ফাংশন সংজ্ঞায়িত করি yযা এর স্ট্রাস্টিংগুলিতে bপুনরাবৃত্তভাবে নিজেকে কল করে একটি স্ট্রিংয়ের খাঁটিতা নির্ধারণ করে b। পাইথগুলিতে ফাংশনগুলি স্বয়ংক্রিয়ভাবে স্মৃতিযুক্ত হয়, সুতরাং পুনরাবৃত্তির সময়ের সাথে সামান্য পরিমাণে ওভারহেড থাকে।

L                              def y(b): return ___
                 S/lb2         The range [1,2,...,len(b)/2]
          f!xb>Tb              Filter n for which b[:n] == b[-n:]
   m                           Map each n in the list to...
    y:bd_d                     y(b[d:-d])       
 hs                            Take the sum and add one (implicit return)

হ্যাঁ, পাইথ শেখার বেশিরভাগই সাম্প্রদায়িক / বিচার এবং ত্রুটি / লেক্সার পড়া, আরও বেশি গল্ফ করা সহ ভাল কাজ! :)
FryAmTheEggman

1
1. আপনি ফাংশন জমা দিয়ে দুটি বাইট সংরক্ষণ করতে পারেন। এটির সাথে কল করার দরকার নেই yz। ২. দুটি মানচিত্র এবং ফিল্টারের পরিবর্তে আপনি একটি একক মানচিত্র এবং শর্তসাপেক্ষে ( লিঙ্ক ) ব্যবহার করতে পারেন যা তিনটি বাইট সংরক্ষণ করে।
ডেনিস

2

সিজেএম ( 41 39 বাইট)

qM{_,2/,\f{\~_2$>@2$<@~)/(@=\M*j*}1b)}j

অনলাইন ডেমো

এটি "উত্সাহী" এই অর্থে যে এটি প্রতিটি "কেন্দ্রীয়" স্ট্রিংয়ের জন্য চুনকি প্যালিনড্রোমগুলির সংখ্যার সন্ধান করে (অর্থাত্ মূল স্ট্রিংয়ের উভয় প্রান্ত থেকে একই সংখ্যার অক্ষর অপসারণের ফলস্বরূপ), তবে কারণ এটি স্বতঃ-স্মৃতি ব্যবহার করে jঅপারেটর প্রত্যেকে একবারে খুব দ্রুত প্রোগ্রাম প্রদান করা হয় (এবং একটি স্মৃতিবিহীন বাস্তবায়নে কয়েকটি অক্ষর সংরক্ষণ করা হয়) is

এক বাইট সাশ্রয়ের জন্য ডেনিসকে ধন্যবাদ।



1

পার্ল, 86 বাইট

84 বাইট কোড + 2 সুইচ

একটি ছোট পদ্ধতি হতে পারে, কিন্তু এখানে যায়:

perl -lpe 'sub c{my($x,$i)=@_;$x=~/^(.{$i})(.*)\1$/&&c($2,0*++$s)while++$i<length$x}c$_;$_=++$s'

STDIN থেকে ইনপুট নেয়, প্রতি লাইনে একটি স্ট্রিং।

ব্যাখ্যা: মানগুলির জন্য 1<=$i<length(input string), /^(.{$i})(.*)\1$/বাম এবং ডান খণ্ডগুলি পেতে এবং গণনাটিকে বাড়িয়ে তুলতে রেজেক্স ব্যবহার করে । তারপরে পুনরাবৃত্তভাবে স্ট্রিংয়ের কেন্দ্র অংশের জন্য একই কাজ করে।

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