সংক্ষিপ্ততম পাথের সংখ্যা এন


21

এই কোড চ্যালেঞ্জটি আপনাকে x x + x j ফর্মের মানচিত্র ব্যবহার করে 2 থেকে শুরু করে এন পৌঁছনোর কয়েকটি সংখ্যার গণনা করতে হবে ( জে অ-নেতিবাচক পূর্ণসংখ্যার সাথে), এবং নূন্যতম পদক্ষেপের ক্ষেত্রে এটি করছেন doing2এক্সএক্স+ +এক্স

(দ্রষ্টব্য, এটি OEIS ক্রম A307092 এর সাথে সম্পর্কিত ))

উদাহরণ

সুতরাং উদাহরণস্বরূপ, (13)=2 কারণ তিনটি মানচিত্রের প্রয়োজন, এবং তিনটি মানচিত্রের দুটি স্বতন্ত্র ধারা রয়েছে যা 2 থেকে 13 প্রেরণ করবে :

এক্সএক্স+ +এক্স0এক্সএক্স+ +এক্স2এক্সএক্স+ +এক্স0অথবাএক্সএক্স+ +এক্স2এক্সএক্স+ +এক্স1এক্সএক্স+ +এক্স0

ফলে 231213 বা 261213

উদাহরণ মান

f(2)   = 1 (via [])
f(3)   = 1 (via [0])
f(4)   = 1 (via [1])
f(5)   = 1 (via [1,0])
f(12)  = 2 (via [0,2] or [2,1])
f(13)  = 2 (via [0,2,0] or [2,1,0], shown above)
f(19)  = 1 (via [4,0])
f(20)  = 2 (via [1,2] or [3,1])
f(226) = 3 (via [2,0,2,1,0,1], [3,2,0,0,0,1], or [2,3,0,0,0,0])
f(372) = 4 (via [3,0,1,0,1,1,0,1,1], [1,1,0,2,0,0,0,1,1], [0,2,0,2,0,0,0,0,1], or [2,1,0,2,0,0,0,0,1])

চ্যালেঞ্জ

চ্যালেঞ্জটি এমন একটি প্রোগ্রাম তৈরি করা যা কোনও ইনপুট হিসাবে এন2 পূর্ণসংখ্যার গ্রহণ করে এবং এক্স x + x j ফর্মের ন্যূনতম সংখ্যার মাধ্যমে পৃথক পাথের সংখ্যা 2 থেকে এন আউটপুট করে ।এক্সএক্স+ +এক্স

এটি , তাই খুব কম বাইট জিতেছে।


1
আমি মনে করি এটি স্পষ্টভাবে লক্ষ করা উচিত যে ^প্রতীকটি ক্ষয়ক্ষতি বোঝায়। এটি এক্সওআর হতে পারে (উদাহরণস্বরূপ ^বিটওয়াইস এক্সওআর জন্য সি ব্যবহার করে )।
রমিলিজ

1
@ র্যামিলিজ সম্ভবত এটি ম্যাথজ্যাক্সে পরিবর্তন করা উচিত। অর্থাত পরিবর্তে । এক্স=এক্স+ +এক্সx -> x + x^j
কেভিন ক্রুইজসেন

@ কেভিন ক্রুজসেন: ভালো কথা, এটি অবশ্যই সাহায্য করবে।
রমিলিজ

আমি এটি OEIS এ A309997 হিসাবে যুক্ত করেছি । ( অনুমোদিত না হওয়া পর্যন্ত এটি একটি খসড়া হবে ))
পিটার কেজি

উত্তর:


2

জেলি , 16 বাইট

2+*¥þ³Ḷ¤F$n³Ạ$¿ċ

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

একটি সম্পূর্ণ প্রোগ্রাম তার যুক্তি এন হিসাবে গ্রহণ করে এবং ন্যূনতম পাথ দৈর্ঘ্যটি ব্যবহার করে n পৌঁছনোর কয়েকটি সংখ্যাকে প্রত্যাবর্তন করে । বৃহত্তর n জন্য অপ্রয়োজনীয় ।


5

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

সত্য 'ফেরত পাঠায় বদলে 1 জন্য এন=2

f=(n,j)=>(g=(i,x,e=1)=>i?e>n?g(i-1,x):g(i-1,x+e)+g(i,x,e*x):x==n)(j,2)||f(n,-~j)

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

মন্তব্য

f = (                     // f is the main recursive function taking:
  n,                      //   n = input
  j                       //   j = maximum number of steps
) => (                    //
  g = (                   // g is another recursive function taking:
    i,                    //   i = number of remaining steps
    x,                    //   x = current sum
    e = 1                 //   e = current exponentiated part
  ) =>                    //
    i ?                   // if there's still at least one step to go:
      e > n ?             //   if e is greater than n:
                          //     add the result of a recursive call with:
        g(i - 1, x)       //       i - 1, x unchanged and e = 1
      :                   //   else:
                          //     add the sum of recursive calls with:
        g(i - 1, x + e) + //       i - 1, x + e and e = 1
        g(i, x, e * x)    //       i unchanged, x unchanged and e = e * x
    :                     // else:
      x == n              //   stop recursion; return 1 if x = n
)(j, 2)                   // initial call to g with i = j and x = 2
|| f(n, -~j)              // if it fails, try again with j + 1

4

হাস্কেল , 78 75 বাইট

এই বাস্তবায়নটি পুনঃসংশ্লিষ্ট সমস্ত প্রয়োজনীয় ম্যাপিংয়ের "ট্রি" -তে শ্বাস-প্রশ্বাসের প্রথম অনুসন্ধান ব্যবহার করে x -> x + x^j

j#x=x+x^j
f n=[sum[1|x<-l,x==n]|l<-iterate((#)<$>[0..n]<*>)[2],n`elem`l]!!0

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

ব্যাখ্যা

-- computes the mapping x -> x + x^j
j#x=x+x^j                          
--iteratively apply this function for all exponents [0,1,...,n] (for all previous values, starting with the only value [2])
                            iterate((#)<$>[0..n]<*>)[2] 
-- find each iteration where our target number occurs
    [                   |l<-...........................,n`elem`l] 
-- find how many times it occurs
     sum   [1|x<-l,x==n] 
-- pick the first entry
f n=.............................................................!!0




1

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

qi2a{{_W$,f#f+~2}%_W$&!}ge=

অনলাইন ডেমো

সতর্কতা: এটি খুব দ্রুত স্মৃতি-নিবিড় হয়।

ব্যবচ্ছেদ:

qi            e# Read input and parse to int n (accessed from the bottom of the stack as W$)
2a            e# Start with [2]
{             e# Loop
  {           e#   Map each integer x in the current list
    _W$,f#f+~ e#     to x+x^i for 0 <= i < n
    2         e#   and add a bonus 2 for the special case
  }%          e#   Gather these in the new list
  _W$&!       e#   Until the list contains an n
}g
e=            e# Count occurrences

বোনাস 2গুলি ( ইনপুটটির বিশেষ ক্ষেত্রে পরিচালনা করার জন্য 2, কারণ whileলুপগুলির তুলনায় do-whileলুপগুলি বেশি ব্যয়বহুল ) মানে তালিকার আকার খুব দ্রুত বৃদ্ধি পায় এবং এক্সটেন্ডারদের ব্যবহার পর্যন্ত n-1বোঝায় যে তালিকার বৃহত সংখ্যার মান বৃদ্ধি পায় খুব দ্রুত.


1

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

([2]%)
l%n|elem n l=sum[1|x<-l,x==n]|1>0=[x+x^k|x<-l,k<-[0..n]]%n

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

গল্ফিং flawr এর প্রশস্ত প্রথম সন্ধান । আমিও পিছন থেকে যাওয়ার চেষ্টা করেছি n, তবে এটি দীর্ঘ ছিল:

73 বাইট

q.pure
q l|elem 2l=sum[1|2<-l]|1>0=q[x|n<-l,x<-[0..n],i<-[0..n],x+x^i==n]

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


1

আর , 78 77 বাইট

function(n,x=2){while(!{a=sum(x==n)})x=rep(D<-x[x<n],n+1)+outer(D,0:n,'^')
a}

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

সরলীকৃত চওড়া-প্রথম অনুসন্ধান ব্যবহার করা

ব্যাখ্যা সহ নিবন্ধিত কোড:

function(n){                              # function taking the target value n

  x=2                                     # initialize vector of x's with 2

  while(!(a<-sum(x==n))) {                # count how many x's are equal to n and store in a
                                          # loop while a == 0

    x=rep(D<-x[x<n],n+1)+outer(D,0:n,'^') # recreate the vector of x's 
                                          # with the next values: x + x^0:n
  }
a                                         # return a
}   

বিশাল মেমরি বরাদ্দ সহ ছোট সংস্করণ (বড় ক্ষেত্রে ব্যর্থ):

আর , 70 69 বাইট

function(n,x=2){while(!{a=sum(x==n)})x=rep(x,n+1)+outer(x,0:n,'^')
a}

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

-১ বাইট @ রবিনরাইডারকে ধন্যবাদ


!(a<-sum(x==n))!{a=sum(x==n)}উভয় ক্ষেত্রে -1 বাইট জন্য হতে পারে ।
রবিন রাইডার

0

Pyth , 24 বাইট

VQIJ/mu+G^GHd2^U.lQ2NQJB

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

এটি সঠিক আউটপুট উত্পন্ন করা উচিত, তবে খুব ধীর (372 পরীক্ষার কেস টিআইওতে শেষ)। আমি প্রতিস্থাপন করে এটি আরও ছোট করে তুলতে পারি.lQ2 সঙ্গে Q, কিন্তু এই রানটাইম ভয়ঙ্কর করতে হবে।

(এন1)

ব্যাখ্যা

VQ                        # for N in range(Q (=input)):
   J                      #   J =
     m                    #     map(lambda d:
      u                   #       reduce(lambda G,H:
       +G^GH              #         G + G^H,
            d2            #         d (list), 2 (starting value) ),
              ^U.lQ2N     #       cartesian_product(range(log(Q, 2)), N)
    /                Q    #     .count(Q)
  IJ                  JB  #   if J: print(J); break
আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.