+ এবং * ব্যবহার করে একটি নম্বর পেতে সংখ্যার সন্ধান করুন


28

ভূমিকা

আপনার লক্ষ্য হ'ল ইনপুট মান পেতে আপনাকে একসাথে যুক্ত করতে বা গুণিত করতে হবে এমন সংখ্যার সন্ধান করুন, এটি A005245

ইনপুট

একটি ইতিবাচক পূর্ণসংখ্যা এন

আউটপুট

এন পাওয়ার জন্য যে সংখ্যক সংখ্যক অবশ্যই যুক্ত / গুণ করতে হবে ।

নমুনা ইনপুট

7

নমুনা আউটপুট

6

ব্যাখ্যা

( 1+ 1+ 1) * ( 1+ 1) + 1= 7

কারণ এটিগুলির প্রয়োজন 6হয়, আউটপুট হয়6

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

 1  1
 2  2
 3  3
 5  5
10  7
20  9
50 12

এটি একটি চ্যালেঞ্জ হিসাবে, সর্বনিম্ন সংখ্যা বাইট জিতেছে w



9
প্রোগ্রামিং ধাঁধা এবং কোড গল্ফ স্বাগতম! প্রথম চ্যালেঞ্জ হিসাবে এটি ঠিক আছে, তবে পরের বার চ্যালেঞ্জ পোস্ট করার আগে স্যান্ডবক্সটি ব্যবহার করুন যাতে আপনি প্রতিক্রিয়া পেতে পারেন!
betseg

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

2
f(x) != x.primeFactorisation().sum()1 বাদে যেখানে উদাহরণ আছে ?
jrtapsell

1
@ জিরতাপসেল: হ্যাঁ $ F (7) = 6 of এর প্রদত্ত উদাহরণটি একটি। যে কোনও (যথেষ্ট বড়) প্রধান prime p $ এর জন্য আপনি $ p-1 factor গুণন করতে পারেন এবং একটি যুক্ত করতে পারেন add আপনি এখনও আরও ভাল করতে সক্ষম হতে পারে।
রস মিলিকান

উত্তর:


17

পাইথন 2 , 74 70 বাইট

f=lambda n:min([n]+[f(j)+min(n%j*n+f(n/j),f(n-j))for j in range(2,n)])

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

বিকল্প সংস্করণ, 59 বাইট (যাচাই করা হয়নি)

f=lambda n:min([n]+[f(j)+f(n/j)+f(n%j)for j in range(2,n)])

এটি কমপক্ষে n = 1,000,000 অবধি কাজ করে , তবে এখনও প্রমাণ করতে পারিনি এটি সব ধনাত্মক এন এর জন্য কাজ করে ।

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


দুঃখিত যদি আমি কিছু সাধারণ অনুপস্থিত থাকি তবে এটি স্পষ্টতই নয় যে এটি প্রতিটি ব্যবহার্য অভিব্যক্তি গাছ চেষ্টা করে। বিশেষত, আমাদের n=a*j+bসাথে বাইরের স্তর রয়েছে b<jতবে আমাদের কি প্রয়োজন b>=j?
xnor

হুঁ, এটি শুধুমাত্র উভয় যদি ব্যর্থ হবে b>=jএবং b>=a। তবে আপনি ঠিক বলেছেন, এটি স্পষ্ট নয় যে এটি ঘটবে না।
ডেনিস

আকর্ষণীয় যে 1,000,000 পর্যন্ত কোনও পাল্টা নমুনা নেই, আমি অবাক করে দেখি যে এটি আসলে সর্বদা কার্যকর হয় কিনা। কাউন্টারিক্স নমুনার জন্য আমার সেরা চিন্তাটি সমস্ত সংক্ষেপ প্রকাশের a*b+c*dসাথে ফর্মের কিছু হতে পারে a,b,c,dএবং খুব দক্ষ।
xnor

10

জেলি , 16 14 বাইট

ডেনিস 2 বাইট সংরক্ষণ করার জন্য ধন্যবাদ!

ÆḌḊ,Ṗ߀€+U$FṂo

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


যুক্তি ব্যাখ্যা

প্রদত্ত একটি সংখ্যা এন :

  • যদি তা হয় 1তবে উত্তরটি 1। অন্যথায়:

উপস্থাপনা হয় হয় a + bবা হয় a × b, যেখানে aএবংb প্রকাশ হয়।

এর সমস্ত সম্ভাব্য মান বিবেচনা করুন aএবং b:

  • যদি প্রতিনিধিত্ব হয় a + b, তবে aএবং bসীমার মধ্যে রয়েছে [1 .. n-1]
  • তাহলে উপস্থাপনা a × b, aএবং bযথাযথ ভাজক আছে nচেয়ে বড়1

উভয় ক্ষেত্রেই তালিকাটি [[<proper divisors of n larger than 1>], [1, 2, ..., n-1]]গণনা করা হয়েছে ( ÆḌḊ,Ṗ), প্রতিটি সংখ্যার উপরের বর্তমান লিঙ্কটি মানচিত্র করুন ߀€, একসাথে সঠিক জোড় যুক্ত করুন (+U$ ) এবং সর্বনিম্ন মান ( FṂo) পান।

কোড ব্যাখ্যা

ÆḌḊ,Ṗ߀€+U$FṂo   Main link. Assume n = 10.
ÆḌ       Proper divisors. [1,2,5]equeue, remove the first element. [2,5]
   ,Ṗ    Pair with op. Auto convert n = 10 to range 
         [1,2,3,4,5,6,7,8,9,10] and remove the last element
         10, get [1,2,3,4,5,6,7,8,9].

߀€      Apply this link over each element.
   +U$   Add with the Upend of itself.

FṂ       Flatten and get the inimum element.
  o      Logical or with n.
         If the list is empty, minimum returns 0 (falsy), so logical or
         convert it to n.

5

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

f=n=>n<6?n:Math.min(...[...Array(n-2)].map((_,i)=>Math.min(f(++i)+f(n-i),n%++i/0||f(i)+f(n/i))))

খুব অদক্ষ; Array(n>>1)বাইট ব্যয়ে এটিকে কিছুটা গতি দেয়। ব্যাখ্যা: n%++iনন-জিরো হলে i, একটি ফ্যাক্টর নয় তাই n%++i/0হয় Infinity(এবং truthy, এবং এছাড়াও স্পষ্টভাবে ন্যূনতম নয়) যদি iএকটি ফ্যাক্টর নয়, কিন্তু NaN(এবং falsy) যদি iএকটি ফ্যাক্টর। সম্পাদনা করুন: @ edc65 থেকে অনুপ্রেরণা সহ 12 বাইট সংরক্ষণ করা হয়েছে।


আমি ব্যাকগ্রাউন্ডে এটি চালানোর চেষ্টা করেছিলাম এটি আসলে গণনা করার পক্ষে সক্ষম কিনা তা f(50)দুর্ভাগ্যক্রমে উইন্ডোজ আপডেটটি আমার পিসিটি শেষ হওয়ার আগেই রিবুট করেছিল।
নিল

আপনি কি অ্যারেতে একক হাঁটার চেষ্টা করেছেন?
edc65

@ edc65 দুঃখিত, আপনি কী প্রস্তাব দিচ্ছেন এবং কেন করছেন সে সম্পর্কে আমি অস্পষ্ট।
নিল

আমি 2 টি মানচিত্র দেখছি, প্রত্যেকে aঅ্যারে স্ক্যান করছে । আপনি 2 টি ল্যাম্বডায় মূল্যায়নগুলি মার্জ করতে এবং মিনিটটি নিতে পারবেন না?
edc65

@ এডসি 65 হ্যাঁ হ্যাঁ, কোনও কারণে আমি ভেবেছিলাম যে মিনিট বাসা বাঁধতে কম ব্যয় হবে না তবে আমি (i+=2)অন্যটির সাথে প্রতিস্থাপন ++iকরব যাতে আমি মোট 12 টি বাইট সঞ্চয় করছি, ধন্যবাদ!
নিল

5

পরী / জিপি , 66 বাইট

ডেনিসের পাইথনের উত্তর বন্দর :

f(n)=vecmin(concat(n,[f(j)+min(n%j*j+f(n\j),f(n-j))|j<-[2..n-1]]))

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


পরী / জিপি , 72 বাইট

দীর্ঘ, তবে আরও দক্ষ:

f(n)=if(n<6,n,vecmin([if(d>1,f(d)+f(n/d),1+f(n-1))|d<-divisors(n),d<n]))

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


1
ডেনিস তার পদ্ধতি উন্নত এবং আপনি 11 বাইট সংরক্ষণ করতে পারবেন ব্যবহার করছে: f(n)=vecmin(concat(n,[f(j)+f(n\j)+f(n%j)|j<-[2..n-1]]))
জোনাথন অ্যালান


3

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

def F(N,n,s="",r=""):
 try:
	if n<1:return(eval(s)==N)*0**(`11`in s or"**"in s)*s
	for c in"()+*1":r=F(N,~-n,s+c)or r
 except:r
 return r
f=lambda N,n=1:F(N,n).count(`1`)or f(N,-~n)

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


@ pizzapants184 মূল ফাংশনটি fবেনামে রাখা উচিত নয়, কারণ এটি নিজেকে পুনরাবৃত্তি বলে।
জোনাথন ফ্রেচ

আহ, দুঃখিত, আমি এটি দেখিনি।
পিজ্জাপ্যান্টস 184

2

ওল্ফ্রাম ভাষা (গণিত) , 59 বাইট

মার্টিন ইন্ডারকে 3 বাইট সংরক্ষণ করা হয়েছে সিপি-1252 এনকোডিং ব্যবহার করে, যেখানে ±এক বাইট রয়েছে।

±1=1;±n_:=Min[1+±(n-1),±#+±(n/#)&/@Divisors[n][[2;;-2]]]

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


2
উত্সটি 3 বাইটের ±পরিবর্তে ব্যবহার fকরে উত্সটি সিপি 1252 এ এনকোড করা হয়েছে তা অনুমান করে ব্যবহার করুন : tio.run/##y00syUjNTSzJTE78///QRkNbQ@tDG/PirWx9M/…
মার্টিন

1
353942783 ইনপুটটির জন্য সঠিকভাবে কাজ করে না
মিশা লাভরভ

1

পার্ল 5 , -p 78 বাইট

পুরাতন স্টাইল গণনায় 79 বাইট ( +1জন্য -p)

$পার্লকে অবশ্যই সমস্ত স্কেলারের অ্যাক্সেসের জন্য অতিরিক্ত ব্যবহার করা উচিত তা সত্যিই গল্ফগুলির দৈর্ঘ্যে ব্যাথা করে যা প্রচুর পাটিগণিত করে ...

এই পদ্ধতিটি বেশিরভাগই ইতিমধ্যে পোস্ট করা অন্যদের মতো (একটি লক্ষ্য সংখ্যা তৈরির জন্য গুণ এবং আরও সংখ্যার চেষ্টা করুন, সবচেয়ে সস্তা নিন)। এটি বার বার পুনরাবৃত্তি করে না তাই এটি তুলনামূলকভাবে বড় ইনপুটগুলির জন্য ব্যবহার করা যেতে পারে।

এটি সংযোজন বা সংখ্যাবৃদ্ধির দ্বারা সংখ্যা তৈরির ব্যয়কে হ্রাস করার চেষ্টাও করে না [লিকশন কারণ পার্ল 5 এর কোনও বিল্টিন নেই minএবং সংখ্যাগত সাজানটি লুওউওং (কোডটিতে এখনও সাজানো থেকে দেখা যায়)। পরিবর্তে আমি কেবল ধরে নিচ্ছি যে কোনও সংখ্যা লক্ষ্যটির একটি উপাদান যা আমি গুণন ব্যবহার করব। এটি নিরাপদ কারণ যেহেতু উদাহরণস্বরূপ 3একটি ফ্যাক্টর 12(সুতরাং এটির ব্যয়টি যোগ করে 3এবং 12/3) পরে লুপে এটি বিবেচনা 9=12-3করবে যা কোন ফ্যাক্টর হবে না, সুতরাং 9+3একই ব্যয়ের সাথে যেমন 3+9চেষ্টা করা হবে। তবে লক্ষ্যগুলির জন্য <= 4এটি ব্যর্থ হতে পারে (এটি কেবলমাত্র1 এবং2 )। $_এই সংশোধনগুলি হ্রাস করতে তালিকায় যুক্ত করা হচ্ছে । যেটি দুর্ভাগ্যজনক যেহেতু বেস মামলাগুলির জন্য আমার আসলে এটির প্রয়োজন নেই কারণ আমি ইতিমধ্যে সূচনা করেছি@; যথাযথ আরম্ভের মানগুলির সাথে এটির জন্য 3 বাইট ব্যয় হয়।

#!/usr/bin/perl -p
($_)=sort{$a-$b}$_,map{$;[$_]+$;[$'%$_?$'-$_:$'/$_]}//..$_ for@;=0..$_;$_=pop@

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

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