আপনাকে খালি স্ট্রিংটি তৈরি এবং শুরু করার জন্য একটি স্ট্রিং দেওয়া হয়, এডিং এবং ক্লোনিং ব্যয় ব্যবহার করে এটি তৈরি করুন


17

আপনার কাজ হল প্রদত্ত লক্ষ্য স্ট্রিং তৈরি করা। খালি একটি স্ট্রিং দিয়ে শুরু করে, আপনার স্ট্রিংটি আমরা যা চাই তার অনুরূপ না হওয়া পর্যন্ত আপনাকে এতে অক্ষর যুক্ত করতে হবে। আপনি হয় প্রযোজনীয় এক্স দিয়ে আপনার স্ট্রিংয়ের শেষে একটি অক্ষর যুক্ত করতে পারেন, বা আপনি y এর সাথে স্ট্রিং ক্লোন করতে পারেন। আমরা যা চাই তা হ'ল এটি করার সস্তারতম উপায়।

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

targetString , appendcost, clonecost -> totalcost

"bb", 1, 2 -> 2
"bbbb", 2, 3 -> 7
"xzxpcxzxpy", 10, 11 -> 71
"abababab", 3, 5 -> 16
"abababab", 3, 11 -> 23

1
ব্যয়গুলি কীভাবে সংজ্ঞায়িত করা হয়? তারা ইতিবাচক পূর্ণসংখ্যা হয়?
আর্নল্ড

1
আমি মনে করি আপনি কেবল কোড গল্ফ (সংক্ষিপ্ততম কোড) চ্যালেঞ্জ তৈরি করতে চাইছেন, তাই আমি কোড চ্যালেঞ্জ এবং প্রোগ্রামিং ধাঁধা ট্যাগগুলি সরিয়েছি যা স্কোর করার কিছু বিকল্প উপায় নির্দেশ করে।
xnor

7
আমি মনে করি এটি আরও পরীক্ষার কেসগুলি তৈরি করতে সহায়তা করবে, যেহেতু মনে হয় যে কেউ এমন একটি প্রোগ্রাম লিখতে পারে যা ভাল পরীক্ষা-নিরীক্ষা করে যা সমস্ত পরীক্ষার ক্ষেত্রে ব্যবহার করে তবে সাধারণভাবে অনুকূল হয় না। বিশেষত, পরীক্ষার কোনও ক্ষেত্রেই একাধিক ক্লোন বা সাবস্ট্রিংয়ের ক্লোন নেই যা শুরুতে নেই। আমি মনে করি এটির উদাহরণ দেওয়া ভাল হবে যেখানে কেবল ব্যয় পরিবর্তনের ফলে আউটপুট পরিবর্তন হয়।
xnor

6
ভাল প্রথম চ্যালেঞ্জ, যাইহোক!
এরিক আউটগল্ফার

একটি একক চিঠি ক্লোনিং এখনও ক্লোন অপারেশন হিসাবে বিবেচনা করা হয়?
digEmAll সমস্ত

উত্তর:


2

হুশ , 25 বাইট

φ?ö▼z+:⁴∞²m⁰§:h§δf`€otṫḣ0

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

ইনপুটগুলি ক্রম সংযোজন মূল্য, ক্লোন ব্যয়, লক্ষ্যমাত্রায় রয়েছে।

ব্যাখ্যা

φ?ö▼z+:⁴∞²m⁰§:h§δf`€otṫḣ0  Two explicit inputs and one implicit.
                           Example: 2, 3, s="abab"
φ                          Make a recursive function and call it on s:
 ?                      0   If s is empty, return 0.
  ö▼z+:⁴∞²m⁰§:h§δf`€otṫḣ    Otherwise do this.
                       ḣ    Prefixes: ["a","ab","aba","abab"]
                    otṫ     Suffixes except the first one: ["bab","ab","b"]
               §δf`€        Keep those prefixes that have the corresponding suffix as substring: ["ab","aba"]
            §:h             Prepend s minus last character: ["aba","ab","aba"]
          m⁰                Recurse on each: x=[6,4,6]
        ∞²                  Repeat the clone cost: [3,3,3,..
      :⁴                    Prepend append cost: [2,3,3,3,..
    z+                      Add component-wise to x: [8,7,9]
   ▼                        Minimum: 7


1

জাভাস্ক্রিপ্ট (ES6), 123 111 বাইট

হিসাবে ইনপুট লাগে (x)(y)(s)

x=>y=>m=g=([s,...r],o='',c=0)=>s?[...r,g(r,o+s,c+x)].map(_=>s+=r.shift(~o.search(s)&&g(r,o+s,c+y)))|m:m=m<c?m:c

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

মন্তব্য

x => y =>                    // x = 'append' cost; y = 'clone' cost
m =                          // m = minimum cost, initialized to a non-numeric value
                             //     this is what will eventually be returned
g = (                        // g = recursive function taking:
  [s,                        //   - the input string split into s = next character
      ...r],                 //     and r[] = array of remaining characters
  o = '',                    //   - o = output string
  c = 0                      //   - c = current cost
) =>                         //
  s ?                        // if s is defined:
    [ ...r,                  //   split a copy of r
      g(r, o + s, c + x)     //   do a recursive call with an 'append' operation
    ].map(_ =>               //   iterate as many times as there are remaining characters
                             //   in r[], + 1
      s +=                   //     append to s
        r.shift(             //     the next character picked from the beginning of r[]
          ~o.search(s) &&    //     if s is found in o,
          g(r, o + s, c + y) //     do a recursive call with a 'clone' operation
        )                    //     (note that both s and r are updated *after* the call)
    ) | m                    //   end of map(); return m
  :                          // else:
    m = m < c ? m : c        //   update m to min(m, c)

1

আর , 192 185 বাইট

f=function(s,a,c,k=0,x="",R=substring,N=nchar,p=R(s,1,1:N(s)))'if'(!N(s),k,{y={};for(i in c(R(s,1,1),p[mapply(grepl,p,x)]))y=min(y,f(R(s,N(i)+1),a,c,k+'if'(any(y),c,a),paste0(x,i)));y})

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

নিবন্ধভুক্ত কোড এবং ব্যাখ্যা:

# s is the current remaining string (at the beginning is equal to the target string)
# a is the append cost
# c is the clone cost
# k is the current cost (at the beginning is zero)
# x is the partially constructed string (at the beginning is empty)
f=function(s,a,c,k=0,x=""){
  # store in p all the possible prefixes of s
  p = substring(s,1,1:nchar(s))
  # if s is empty return the current cost k
  if(!nchar(s))
    k
  else{
    y={}
    # prepend the first letter of s (=append operation) to  
    # the prefixes in p that are contained in x (=clone operations)
    for(i in c(substring(s,1,1),p[mapply(grepl,p,x)])){
      # perform first the append then the clone operations and recurse, 
      # storing the cost in y if lower than previous
      # (if y is NULL is an append operation otherwise is a clone, we use the right costs)
      y = min(y,f(substring(s,nchar(i)+1),a,c,k+'if'(any(y),c,a),paste0(x,i)))
    }
    # return the current cost
    y
  }
}
আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.