শক্তি যোগফল n


14

দিকনির্দেশ

একটি ইনপুট পূর্ণসংখ্যা এন ( n >= 0) প্রদত্ত একটি প্রোগ্রাম লিখুন , ক্ষুদ্রতম ধনাত্মক পূর্ণসংখ্যা মি যেখানে আউটপুট দেয় :

  • n = a[1]^b[1] + a[2]^b[2] + a[3]^b[3] + ... + a[k]^b[k]
  • aএবং bএকই দৈর্ঘ্যের সীমাবদ্ধ ক্রম হয়
  • সমস্ত উপাদান aকম হয়m
  • সমস্ত উপাদান bকম হয়m
  • সমস্ত উপাদান aআছে বিভিন্ন এবং পূর্ণসংখ্যারa[x] >= 0
  • সমস্ত উপাদান bআছে বিভিন্ন এবং পূর্ণসংখ্যারb[x] >= 0
  • a[x]এবং b[x]উভয়ই 0 নয় (যেহেতু 0 ^ 0 অনির্দিষ্ট)

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

উদাহরণ

In 0 -> Out 1
Possible Sum: 

In 1 -> Out 2
Possible Sum: 1^0

In 2 -> Out 3
Possible Sum: 2^1

In 3 -> Out 3
Possible Sum: 2^1 + 1^0

In 6 -> Out 4
Possible Sum: 2^2 + 3^0 + 1^1

In 16 -> Out 5
Possible Sum: 2^4

In 17 -> Out 4
Possible Sum: 3^2 + 2^3

In 23 -> Out 6
Possible Sum: 5^1 + 3^0 + 2^4 + 1^3

In 24 -> Out 5
Possible Sum: 4^2 + 2^3

In 27 -> Out 4
Possible Sum: 3^3

In 330 -> Out 7
Possible Sum: 6^1 + 4^3 + 3^5 + 2^4 + 1^0

আমাদের কীভাবে অনন্য, অব্যাহতাকার পূর্ণসংখ্যার একটি অনুক্রম তৈরি করার কথা রয়েছে যার একটি অসীম যোগফল রয়েছে?
ফেয়ারসুম

এছাড়াও, প্রথম কেসটি বোঝায় না কারণ 0 টি শর্তের যোগফলই যথেষ্ট।
ফেয়ারসুম

@ ফেয়ারসাম আমি আপনার প্রশ্নটি বেশ বুঝতে পারি না। এই জন্য আমার সমাধান সব সমন্বয় যেখানে একটি পাশব বল অনুসন্ধান হয় m<2তারপর m<3তারপর m<4ইত্যাদি যতক্ষণ না আমি একটি সমষ্টি যে সমান এটি n। এছাড়াও, আমি যোগফলের 0কোনও শর্ত না হওয়া সম্পর্কে ভেবেছিলাম , তবে আউটপুটটি কী? মি>?
kukac67

1
সীমাবদ্ধ সিকোয়েন্সগুলির জন্য, আপনি সাধারণত এমন কিছু করতেন n = a[1]^b[1] + a[2]^b[2] + ... + a[k]^b[k]
অস্থিরতা

1
দুর্দান্ত প্রশ্ন। প্রথম পরীক্ষার ক্ষেত্রে কেবল একটি কোয়েবল: aএবং bএটি দৈর্ঘ্যের সীমাবদ্ধ ক্রম হয় 0, সুতরাং কোনও পূর্ণসংখ্যা নেই mযা সীমাবদ্ধতাগুলি পূরণ করে না, এবং যেহেতু কোনও ক্ষুদ্রতম পূর্ণসংখ্যার উত্তর নেই তা সংজ্ঞায়িত হয় না। সম্ভাব্য সংশোধনগুলি হ'ল ক্ষুদ্রতম প্রাকৃতিক সংখ্যা m(যা ক্ষেত্রে আপনার প্রত্যাশিত উত্তরটি পরিবর্তন করা উচিত 0) বা ক্ষুদ্রতম ধনাত্মক পূর্ণসংখ্যার জন্য জিজ্ঞাসা করা m
পিটার টেলর

উত্তর:


2

গল্ফস্ক্রিপ্ট (৫৯ টি চর)

~:T),{),.0{2$0-{2${{4$2$^}2*@3$\?4$+f~}%\;~}%+\;\;}:f~T&}?)

অনলাইন ডেমো

প্রদত্তের জন্য অর্জনযোগ্য মানগুলি গণনা করার জন্য এটি পুনরাবৃত্তি ব্যবহার করে mএবং প্রথমটির জন্য অনুসন্ধান করে mযা কাজ করে। এটি এক্সনোরের উত্তর থেকে হালকাভাবে অনুপ্রাণিত তবে বাস্তবায়নে এটি বেশ আলাদা।

ব্যবচ্ছেদ

~:T                  # Evaluate input and store in T (for Target)
),{                  # Search [0 1 ... T] for the first m which matches a predicate
  ),.0               #   Push [0 ... m] to the stack twice and then 0
                     #   Stack holds: possibleAs possibleBs sum
  {                  #   Define the recursive function f
    2$0-{            #     Map over A in possibleAs (except 0)
      2${            #       Map over B in possibleBs (except 0)
        {4$2$^}2*    #         Duplicate respective possibles and remove selected values
        @3$\?4$+     #         Compute sum' = sum + A^B
        f            #         Recursive call gives an array [sums]
        ~            #         Push the sums to the stack individually
        }%           #       End map: this collects the sums into a combined array
      \;             #       Pop A, leaving just the combined [sums] inside the map
      ~              #       Repeat the trick: push to the stack individually
    }%               #     End map, collecting into a combined array
                     #     Stack now holds: possibleAs possibleBs sum [sums]
    +                #     Include the original sum in the array of reachable sums
    \;\;             #     Pop possibleAs and possibleBs
  }:f                #   End function definition
  ~                  #   Evaluate the function
  T&                 #   Test whether the sums contain T
}?                   # End search
)                    # Increment to get m

6

পাইথন, 120

f=lambda n,A,B:n*all(f(n-a**b,A-{a},B-{b})for a in A for b in B)
g=lambda n,m=1,M={0}:f(n,M-{0},M)and g(n,m+1,M|{m})or m

ফাংশন fএকটি অক্জিলিয়ারী ফাংশন যা চেক কিনা তা ব্যবহারকারীকে nকরতে না থেকে স্বতন্ত্র ভিত্তির ক্ষমতা একটি সমষ্টি প্রকাশ করা Aথেকে এবং বহিঃপ্রকাশ B। এটি একটি প্রাকৃতিক পুনরাবৃত্তি কৌশল ব্যবহার করে: nঅবশ্যই ননজারো হতে হবে এবং আমরা বেস এবং এবং ঘাঁটিঘাঁটির সম্ভাব্য প্রতিটি পছন্দ চেষ্টা করি এবং সেগুলি ব্যর্থ হওয়া দরকার। আমরা অনুমোদিত তালিকা থেকে সেগুলি সরিয়েছি এবং nসংশ্লিষ্ট পরিমাণে হ্রাস পাচ্ছি।

ফাংশনটি gমূল ফাংশন। এটি mকাজ করে এমন একটিটির জন্য অনুসন্ধান করে। Mঅনুমোদিত মানগুলির সেট আপ m-1। আমরা 0অনুমতিপ্রাপ্ত এক্সটেনশনগুলি থামার জন্য 0**0(পাইথন 1 দ্বারা মূল্যায়ন করে) ব্যবহার করা থেকে সরিয়ে ফেলি। এটি কোনওরকম ক্ষতি করে না কারণ অন্য সকলের জন্য 0**xএটি অকেজো ।0x


আপনি সম্ভবত পরিবর্তন n and all()করতে পারে n*all()
grc

@ জিআরসি আহা, আপনার আসলে শর্ট সার্কিটের দরকার নেই কারণ এটি বোতলজাতীয়। উন্নতির জন্য ধন্যবাদ।
xnor

4

পাইথন 2, 138 বাইট

from itertools import*
S=lambda n,m=0,R=[]:m*any(n==sum(map(pow,*C))for k in R for C in product(*tee(permutations(R,k))))or S(n,m+1,R+[m])

(সমস্ত টিপসের জন্য @ জাকুবকে ধন্যবাদ)

আমি itertoolsএই একটি প্রশ্ন থেকে মডিউল সম্পর্কে এত কিছু শিখিনি । শেষ কেসটি প্রায় এক মিনিট সময় নেয়।

m = 1কোনও সমাধান না পাওয়া পর্যন্ত আমরা অনুসন্ধান এবং বর্ধনের মাধ্যমে শুরু করি। সমাধানের জন্য পরীক্ষা করতে আমরা পুনরাবৃত্তি করি:

  • k = 0 to m-1, kসমাধানে পদগুলির সংখ্যা কোথায়
  • শর্তগুলির সমস্ত সম্ভাব্য সংমিশ্রণ ( [0, 1, ... m-1]আকারের সাবসেটের দুটি ক্রমান্বয়ে একত্রে জিপ করে k), তারপরে সংক্ষেপ করে আমাদের কাছে আছে কিনা তা পরীক্ষা করে দেখুনn

নোট করুন যে আমরা kপর্যন্ত পুনরুক্তি করি m-1- যদিও প্রযুক্তিগতভাবে mশর্তাবলী মোটামুটি সম্ভব, সর্বদা m-1শর্তাদির একটি সমাধান রয়েছে যা 0^0অনুমোদিত নয় এবং 0^bকিছুই অবদান রাখে না। এটি আসলে গুরুত্বপূর্ণ কারণ 0^0পাইথন দ্বারা 1 হিসাবে চিকিত্সা করা হয় যা সমস্যা বলে মনে হচ্ছে তবে এটি কোনও বিষয় নয় turns

কারণটা এখানে.

ধরা যাক একটি সমাধান ভুলভাবে পাওয়া গেছে 0^0, যেমন 1 হিসাবে ব্যবহার করে 3^2 + 1^1 + 0^0 = 11। যেহেতু আমরা কেবলমাত্র m-1শর্তাদি তৈরি করি , এমন কিছু অবশ্যই থাকতে হবে যা jআমরা বেস হিসাবে ব্যবহার করছি না (এখানে j = 2)। jএখানে বৈধ সমাধান পাওয়ার জন্য আমরা 0 বেসটি অদলবদল করতে পারি 3^2 + 1^1 + 2^0 = 11

ছিল আমরা সবাই আপ iterated mপদ, তারপর আমরা মত ভুল সমাধান অর্জিত হয়েছে পারে m = 2জন্য n = 2মাধ্যমে 0^0 + 1^1 = 2


সুন্দর. আপনি যদিও ইমেপ ব্যবহার করে 4 বাইট সংরক্ষণ করতে পারেন। imap(pow,C,D) ... for C,D in
জাকুব

@ জাকুব আমি প্রকৃতপক্ষে ডকটি সন্ধান করছি itertoolsকারণ আমরা কথা বলছি : পিআই এরই মধ্যে অন্য একটি সঞ্চয় রয়েছে - tee
Sp3000

আমিও. এছাড়াও, আমার ভুল। কেউ কেন পরামর্শ দিবে imap, যখন আছে map?? -1 বাইট
জাকুবে

এর জন্য ডিফল্ট প্যারামিটারটি teeইতিমধ্যে n=2। 2 বাইট সঞ্চয়
জাকুব

@ জাকুবে আহাহ ধন্যবাদ এটি সম্ভবত প্রথমবারের মতো যখন আমি mapএকাধিক পুনরাবৃত্তিযোগ্য ব্যবহার করেছি এবং সত্যই এই প্রশ্নটি আমার জন্য প্রচুর পরিমাণে উদ্ভূত হয়েছে।
Sp3000

4

গল্ফস্ক্রিপ্ট ( 90 84 বাইট)

[0.,.]](~:T),(+{:x;{:|2,{:c)|=x),^{c[1$x]=:A^x^:-;[|~-+@A-?+@A+@]}%}/+~}%.[]*T&}?)\;

অনলাইন ডেমো

ব্যবচ্ছেদ

[0.,.]             # Base case: [sum As Bs] is [0 [] []]
](~:T              # Collect it in an array of cases; fetch parameter, eval, store in T.
),(+               # Create array [1 2 ... T 0]. Putting 0 at the end means that it won't
                   # be reached except when T is 0, and nicely handles that special case.
{                  # Loop over the values from that array...
  :x;              #   ...assigning each in turn to x (and popping it from the stack)
  {                #   Stack holds array of [sum As Bs] cases; map them...

    :|             #     Store [sum As Bs] in |
    2,{:c          #     For c in [0 1]...
      )|=x),^      #       Get [0 1 ... x]^ either As or Bs, depending on c
      {            #       Map these legal new As or Bs respectively...
        c[1$x]=:A  #         Work out which of that value or x is the new A
        ^x^:-;     #         And the other one is the new B
        [          #         Begin gathering in an array
          |~       #           Push sum As Bs to the stack
          -+       #           Add - to Bs to get Bs'
          @A-?+    #           Rotate sum to top and add A^- to get sum'
          @A+      #           Rotate As to top and add A to get As'
          @        #           Final rotation to put elements in the right order
        ]          #         Gather in array [sum' As' Bs']
      }%           #       End map
    }/             #     End for
    +~             #     Push all the elements corresponding to x^B and A^x on to the stack
  }%               #   End map, collecting the untouched [sum As Bs] and all the new
                   #   [sum' As' Bs'] arrays into a new array of reached cases.
  .[]*T&           #   Flatten a copy of that array and filter to values equal to T.
                   #   This gives a truthy value iff we've found a way to make T.
}?                 # Loop until we get a truthy value, and push the corresponding x
)\;                # Increment to get the value of m and discard the array of cases

সর্বাধিক মার্জিত কৌশলটি হ'ল বিশেষ ক্ষেত্রে পরিচালনা করা 0


আমি সত্যিই খুশি যে সিজেএম এবার স্ট্যান্ডার্ড পাইথন = পি
fla

@ ফ্লোয়ার, এটি গল্ফস্ক্রিপ্ট, সিজেম নয়। সিজেএম সম্ভবত বেশ খানিকটা খাটো হতে পারে কারণ এতে কার্টেসিয়ান পণ্যগুলির জন্য অন্তর্নির্মিত রয়েছে। এবং এটি হতে পারে যে একটি পুনরাবৃত্তির ক্রিয়াকলাপ সম্পর্কে এক্সনরের ধারণাটিও ছোট গল্ফস্ক্রিপ্ট দেয়।
পিটার টেলর

ওহ দুঃখিত, কেবল তাদের বিভ্রান্ত করেছেন =)
flawr

4

হাস্কেল, 143 130

import Data.List
p n=head$[1..]>>=(\m->[m|let x=permutations[0..m-1]>>=inits,a<-x,b<-x,sum(zipWith(\x y->x^y*signum(x+y))a b)==n])

ব্যবহারের উদাহরণ: p 23-> 6

এটি একটি সাধারণ উদ্দীপনা অনুসন্ধান। প্রতিটি তালিকার জন্য[0..0], [0..1], [0..2] ... [0..∞] জন্য ক্রমানুসারে সমস্ত প্রাথমিক বিভাগগুলি নিও (যেমন [০.২]]: অনুমান:, [012], [102], [210], [120], [201], [021]প্রথম অনুমানের জন্য প্রাথমিক বিভাগ :, [0], [01], [012]২ য় :, [1], [10], [102]ইত্যাদি)। এই তালিকার 2 টির প্রতিটি সংমিশ্রণের জন্য শক্তির যোগফল গণনা করুন। যখন প্রথমটির সমান হয় তখন থামান।


আপনি >>=বরং ব্যবহার করা উচিত concatMap। তারা ঠিক একই তবে যুক্তিগুলি উল্টে গেছে।
গর্বিত হাসেল্লার

@ প্রফেসহেস্কিলার: হ্যাঁ, ধন্যবাদ!
নিমি

2

পাইথন: 166 টি অক্ষর

from itertools import*;p=permutations
f=lambda n,r=[0]:any(n==sum(map(lambda x,y:(x+y>0)*x**y,a,b))for j in r for a,b in product(p(r,j),p(r,j)))*1or 1+f(n,r+[len(r)])

ব্যাখ্যা

ফাংশনটি fসমস্ত সম্ভাব্য পূর্ণসংখ্যা তৈরি করে, যা সংখ্যার ক্ষমতার যোগফল হিসাবে প্রকাশ করা যায় r। যদি শুরু হয় r = [0]। যদি সেই পূর্ণসংখ্যারগুলির কোনওটির সমান হয় n, তবে এটি দৈর্ঘ্য ফিরিয়ে দেয় r, অন্যথায় এটি নিজেকে বর্ধিত করে পুনরাবৃত্তভাবে ডাকে r

সমস্ত পূর্ণসংখ্যার গণনা, যা দুটি লুপের সাহায্যে সম্পন্ন হিসাবে প্রকাশ করা যায়। প্রথম লুপটি হ'ল for j in r, যা আমাদের এক্সপ্রেশনটির দৈর্ঘ্য বলে (2 ^ 3 + 1 ^ 2 দৈর্ঘ্য 2) tells rদৈর্ঘ্যের ক্রমকরণের সমস্ত সংমিশ্রণে অভ্যন্তরীণ লুপটি পুনরাবৃত্তি করে j। প্রত্যেকের জন্য আমি শক্তির যোগফল গণনা করি।


2

জাভাস্ক্রিপ্ট (ES6) 219 224

পুনরাবৃত্তি ফাংশন। মি = 1 দিয়ে শুরু করে, আমি ঘাঁটিগুলির জন্য পূর্ণসংখ্যার 1..m এবং এক্সপেনশনগুলির জন্য 0..m এর সমস্ত সংমিশ্রণ চেষ্টা করি (0 ভিত্তি 0 ^ 0 == অপরিজ্ঞাপিত দেওয়া হয় না)।
যদি কোনও সমাধান না পাওয়া যায় তবে মি বাড়িয়ে আবার চেষ্টা করুন।
ইনপুট 0 এর জন্য বিশেষ কেস (আমার মতে এটি যাই হোক চশমাগুলিতে একটি ত্রুটি)

সি ফাংশন পুনরাবৃত্তভাবে প্রদত্ত দৈর্ঘ্যের অ্যারে থেকে সমস্ত সংমিশ্রণ উত্পন্ন করে, যাতে

C(3, [1,2,3]) --> [[3,2,1], [3,1,2], [2,3,1], [2,1,3], [1,3,2], [1,2,3]]

তৃতীয় স্তরটি everyঘাঁটি এবং ঘাঁটিঘটিতকারীদের বি অ্যারে একসাথে জিপ করতে ব্যবহৃত হয় ( zipজাভাস্ক্রিপ্টে কোনও ফাংশন নেই )। everyদুটি অ্যারেতে সমস্ত উপাদান ব্যবহার না করে এমন কোনও সমাধান পাওয়া গেলে তাড়াতাড়ি থামার জন্য ব্যবহার করা।

F=(n,j=1,k=[],
  C=(l,a,o=[],P=(l,a,i=l)=>{
    for(l||o.push(a);i--;)
      e=[...a],P(l-1,e.concat(e.splice(i,1)))
  })=>P(l,a)||o
)=>n&&C(k.push(j++),k)[E='every'](a=>C(j,[0,...k])[E](b=>a[E](x=>t-=Math.pow(x,b.pop()),t=n)))
?F(n,j,k):j

টেস্ট ফায়ারফক্স / ফায়ারবাগ কনসোলটি

;[0,1,2,3,6,16,17,23,24,27,330].map(x=>[x,F(x)])

আউটপুট

[[0, 1], [1, 2], [2, 3], [3, 3], [6, 4], [16, 5], [17, 4], [23, 6], [ 24, 5], [27, 4], [330, 7]]

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