একটি পলিনড্রোমের একটি ছোট স্ট্রিংযুক্ত ক্ষুদ্রতম হামিংয়ের দূরত্ব


17

এটি একটি দ্বারা অনুপ্রাণিত হয়েছিল এখন সরানো CS.SE প্রশ্ন

কার্য

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

বিধিনিষেধ

  • সংবেদনশীল ইনপুট: একটি প্যালিনড্রোম বিদ্যমান। এর অর্থ | এ | ≥ | বি |
  • A এবং B এ কেবলমাত্র নিম্নতর ASCII অক্ষর রয়েছে, ছোট এবং বড় হাতের স্বতন্ত্র (অন্য সমস্ত অক্ষরের মতো)।
  • যদি আপনার ভাষা ASCII অক্ষরগুলির সাথে ডিল করতে না পারে তবে আপনি পূর্ণসংখ্যার (বা কিছু যুক্তিসঙ্গত ডেটা ধরণের )ও ব্যবহার করতে পারেন এবং আপনি 128 উপাদানগুলির মধ্যে সীমাটি সীমাবদ্ধ করতে বেছে নিতে পারেন।
  • আপনি স্টিডিন, ফাংশন আর্গুমেন্ট, কমান্ড লাইন আর্গুমেন্ট ইত্যাদি থেকে ইনপুট নিতে পারেন
  • আপনি স্টাডাউট, রিটার্ন মান ইত্যাদিতে ফলাফল দিতে পারেন etc.
  • আপনাকে একটি ওয়ার্কিং প্যালিনড্রোম দেওয়ার দরকার নেই, একটির মধ্যে সবচেয়ে ছোট দূরত্বই যথেষ্ট।

উদাহরণ

A                   B            Output
thilloaoyreot       hello        4 (thelloaolleht)
benjonson           stack        9 (stackcats)
neversaynever!      odd          9 (neveroddoreven)
ppcggcpp            gg           0 (ppcggcpp)
stars               tat          1 (stats)

স্কোরিং

এটি কোড গল্ফ, বাইট জেতে সংক্ষিপ্ততম কোড।

উত্তর:


5

পাইথ, 19 বাইট

hSmsnVQd/#z_I#^+Qzl

প্রদর্শন

চরম নিষ্ঠুর শক্তি পদ্ধতির। উভয় স্ট্রিংয়ে অক্ষরের সাথে উপযুক্ত দৈর্ঘ্যের সমস্ত স্ট্রিং উত্পন্ন করুন, প্যালিনড্রোমগুলির জন্য ফিল্টার করুন এবং দ্বিতীয় ইনপুট রয়েছে, ম্যাপটি প্রথম স্ট্রিং থেকে ক্ষুদ্রতম আউটপুট, আউটপুট সবচেয়ে ছোট।

ব্যাখ্যা:

hSmsnVQd/#z_I#^+Qzl
hSmsnVQd/#z_I#^+QzlQ     Variable introduction
                         Q = string A, z = string B.
               +Qz       Concatenate A and B
              ^   lQ     Form every string of length equal to len(A)using
                         characters from the concatenation.
             #           Filter on
           _I            Invariance under reversal (palindrome)
         #               Filter on
        / z              Nonzero occurences of B
  m                      Map to
    nV                   !=, vectorized over
      Qd                 A and the map input
   s                     Sum (gives the hamming weight)
hS                       Min

এরকম কিছু হ'ল আমি যা ভেবেছিলাম তবে সিদ্ধান্ত নিয়েছে ও ((এম + এন) O n) খুব ও (খারাপ)। : ডি
পূর্কাকুডারী

3

পাইথ, 45 বাইট

hSmsnVQdf}zTsmm+hc2KsXcd+Bklz1z_hc2PKh-lQlz_B

এটি অনলাইনে চেষ্টা করুন। পরীক্ষা স্যুট.

কীভাবে এটি পরিণত হয়েছিল আমি এখনও ঠিক সন্তুষ্ট নই। তবে কমপক্ষে এটি এখন ব্যাখ্যা ছাড়াই বোঝা বেশ শক্ত। (সাফল্য, আমি অনুমান করি?)

ব্যাখ্যা

  • এ হিসাবে Qএবং বি হিসাবে নিন z
  • m_BQএ এবং এর বিপরীত উভয়ের জন্য নিম্নলিখিতটি গণনা করুন d:
    • m… 0 থেকে h-ldlzসকলের জন্য নিম্নলিখিতগুলি গণনা করুনklen(A) - len(B) অন্তর্ভুক্ত :
      • +Bklzজুড়ি পান k, k + len(B)
      • cddসেই সূচকে বিভক্ত করুন ।
      • X1zদ্বিতীয় (মাঝের) অংশটি বি দিয়ে প্রতিস্থাপন করুন
      • Ksটুকরা টানা এবং সংরক্ষণ করুন K। বি এখন kএ বা এর বিপরীতে অবস্থানে isোকানো হয়েছে ।
      • hc2ফলস্বরূপ স্ট্রিংটি দুটিতে বিভক্ত করুন এবং প্রথম টুকরাটি রাখুন। এটি সম্ভাব্য মধ্যবর্তী অক্ষর সহ স্ট্রিংয়ের অর্ধেক দেয়।
      • hc2PKশেষ অক্ষরটি সরান এবং প্রথম টুকরা রেখে একই বিভাজন করুন। এটি সম্ভাব্য মধ্যবর্তী অক্ষর ছাড়াই স্ট্রিংয়ের অর্ধেক দেয়।
      • +_দীর্ঘ অংশে সংক্ষিপ্ত অংশের বিপরীত যুক্ত করুন। আমাদের এখন একটি প্যালিনড্রোম রয়েছে।
  • s এ এবং এর বিপরীতে ফলাফল প্রতিরোধ করুন।
  • f}zT বি নেই এমন সমস্ত স্ট্রিং মুছে ফেলুন B.
  • m সমস্ত ফলাফলযুক্ত স্ট্রিংয়ের জন্য নিম্নলিখিতটি গণনা করুন d :
    • nVQd এ-এর সাথে জোড়াযুক্ত বৈষম্য পান এটি পরিবর্তন করে এমন জোড়গুলির ক্ষেত্রে এটি সত্য দেয়।
    • sতালিকা যোগ করুন। এটি হামিংয়ের দূরত্ব দেয়।
  • hS সর্বনিম্ন ফলাফল নিন।

1

জাভাস্ক্রিপ্ট (ফায়ারফক্স 30+), 152 146 বাইট

(A,B)=>Math.min(...[...Array(A[l='length']-B[l]+1)].map((_,i)=>[for(c of q=A.slice(j=t=0,i)+B+A.slice(i+B[l]))t+=(c!=A[j])+(c!=q[q[l]-++j])/2]|t))

ব্রুট ফোর্স পদ্ধতির: এ এবং বি এর প্রতিটি সম্ভাব্য ওভারল্যাপ উত্পন্ন করুন, প্রতিটিকে একটি প্যালিনড্রোমে পরিণত করুন, এ থেকে হামিংয়ের দূরত্ব গণনা করুন এবং ফলাফলের দূরত্বগুলির মধ্যে সবচেয়ে ছোটটি নিয়ে যান।

সম্ভবত আরও কিছু গল্ফ করা যেতে পারে ...

পরীক্ষার স্নিপেট

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