প্লাস এবং টাইমস, ওনস এবং নাইনস


18

এই পুনরাবৃত্তির সম্পর্কটিকে কোনও ফাংশন বা প্রোগ্রাম হিসাবে প্রয়োগ করুন যা একটি অ-নেতিবাচক পূর্ণসংখ্যাকে ইনপুট করে এবং আউটপুট করে:

  • এফ (0) = 0

  • এফ (এন) = এফ (এন -1) এর চেয়ে বৃহত্তর পূর্ণসংখ্যা যেমন এর বেস -10 সংখ্যার যোগফল এবং / অথবা গুণনফল N হয়

এন হ'ল আপনার প্রোগ্রামের ইনপুট এবং এফ (এন) এর আউটপুট।

পরিষ্কার হতে হবে, 913 এর মতো সংখ্যার অঙ্কগুলির যোগফল 9 + 1 + 3 = 13। পণ্যটি 9 × 1 × 3 = 27। একক-অঙ্কের সংখ্যার জন্য, যোগফল এবং পণ্য একই সংখ্যা। একটি সংখ্যা অবশ্যই আছে 0 মধ্যে পণ্য 0 হয়।

এফ (70) এর মাধ্যমে ফলাফলগুলি হ'ল:

N F(N)
0 0
1 1
2 2
3 3
4 4
5 5
6 6
7 7
8 8
9 9
10 19
11 29
12 34
13 49
14 59
15 69
16 79
17 89
18 92
19 199
20 225
21 317
22 499
23 599
24 614
25 799
26 899
27 913
28 1147
29 2999
30 3125
31 4999
32 5999
33 6999
34 7999
35 8999
36 9114
37 19999
38 29999
39 39999
40 41125
41 59999
42 61117
43 79999
44 89999
45 91115
46 199999
47 299999
48 311128
49 499999
50 511125
51 699999
52 799999
53 899999
54 911116
55 1999999
56 2111147
57 3999999
58 4999999
59 5999999
60 6111125
61 7999999
62 8999999
63 9111117
64 11111188
65 29999999
66 39999999
67 49999999
68 59999999
69 69999999
70 71111125

বাইটের মধ্যে সংক্ষিপ্ততম কোডটি জয়ী। কুডোস আপনি যদি দেখান যে আপনার কোডটি কিছু দক্ষতার সুযোগ নিয়েছে।



1
বেশ সঠিক ক্রম নয়।
ক্যালভিনের

উত্তর:


4

05 এ বি 1 ই , 20 12 বাইট

অ্যাসেবলের জন্য 8 বাইট সংরক্ষিত !

µNSDOsP‚¾>å½

সিপি -1222 এনকোডিং ব্যবহার করে । এটি অনলাইন চেষ্টা করুন!


দৈর্ঘ্য পরীক্ষা প্রয়োজন? আমি সাথে এসেছি µNSDOsP‚¾>å½। এটি এলোমেলোভাবে নির্বাচিত সংখ্যার জন্য কাজ করে বলে মনে হচ্ছে।
কার্যকর

@ সম্ভাব্য আহ, অবশ্যই আপনি একজন প্রতিভা! আমি কেন জানি না কেন।
আদনান

আশ্চর্যজনক কীভাবে আপনি হঠাৎ করে একটি 20 বাইট প্রোগ্রাম 40% কমিয়ে আনতে পারেন ...
নিকোনিয়ার

3

গণিত, 71 বাইট, 68 টি অক্ষর

±0=0;±n_:=(For[x=±(n-1),FreeQ[{+##,1##}&@@IntegerDigits@x,n],x++];x)

আরও 4 টি বাইটের জন্য এখানে একটি সংস্করণ রয়েছে যা এর মানগুলি সংরক্ষণ করে ±n:

±0=0;±n_:=(For[x=±(n-1),FreeQ[{+##,1##}&@@IntegerDigits@x,n],x++];±n=x)

পরবর্তী সংস্করণ সহ, আপনি মূল্যায়ন করার আগে ±n, PlusMinusদুটি ডাউন মান হবে:

In[2]:= DownValues@PlusMinus
Out[2]= {HoldPattern[±0] :> 0, HoldPattern[±n_] :> (For[x=±(n-1),FreeQ[{+##,1##}&@@IntegerDigits@x,n],x++];±n=x)}

এখন যদি আমরা মূল্যায়ন করি ±20:

In[3]:= ±20
In[3]:= 225

In[4]:= DownValues@PlusMinus
Out[4]= {HoldPattern[±0] :> 0, HoldPattern[±1] :> 1, HoldPattern[±2] :> 2, HoldPattern[±3] :> 3, HoldPattern[±4] :> 4, HoldPattern[±5] :> 5, HoldPattern[±6] :> 6, HoldPattern[±7] :> 7, HoldPattern[±8] :> 8, HoldPattern[±9] :> 9, HoldPattern[±10] :> 19, HoldPattern[±11] :> 29, HoldPattern[±12] :> 34, HoldPattern[±13] :> 49, HoldPattern[±14] :> 59, HoldPattern[±15] :> 69, HoldPattern[±16] :> 79, HoldPattern[±17] :> 89, HoldPattern[±18] :> 92, HoldPattern[±19] :> 199, HoldPattern[±20] :> 225, HoldPattern[±n_] :> (For[x=±(n-1),FreeQ[{+##,1##}&@@IntegerDigits@x,n],x++];±n=x)}

এই নাটকীয়ভাবে ভবিষ্যৎ গণনার দ্রুত সম্পন্ন করা যেহেতু ম্যাথামেটিকাল আর মধ্যবর্তী মান নিরূপণ করবে 0এবং 20যাও recursively। সময় সাশ্রয়ের সময় nবৃদ্ধি হিসাবে আরও নাটকীয় :

In[5]:= Quit[]

In[1]:= ±0=0;±n_:=(For[x=±(n-1),FreeQ[{+##,1##}&@@IntegerDigits@x,n],x++];±n=x)

In[2]:= AbsoluteTiming[±60]
Out[2]= {23.0563, 6111125}

In[3]:= AbsoluteTiming[±60]
Out[3]= {9.89694*10^-6, 6111125}

এটি F (N - 1) এফ (এন - 1) + 1 এর পরিবর্তে শুরু হয়; পুনরাবৃত্তি অবশ্যই কঠোরভাবে বৃদ্ধি করা উচিত।
LegionMammal978

2

সি #, 155 159 135 বাইট

a=n=>{if(n<1)return 0;int i=n,s=0,p=1,N=a(n-1);for(;;){s=0;p=1;foreach(var c in++i+""){s+=c-48;p*=c-48;}if(i>N&(s==n|p==n))return i;}};

সুপার অদক্ষ, ন্যায়বিচারের জন্য দীর্ঘ সময় নেয় N>=14। আরও কার্যকর, তবে দীর্ঘ সমাধান পেতে চেষ্টা করবে।

ঠিক আছে, এখন অনেক ভাল, তবে 4 বাইট দীর্ঘ। ওহ ভাল, আমি N<=50এখন খুব দ্রুত করতে পারি । 24 বাইট বাঁচানোর জন্য আপনাকে @ মিল্ক ধন্যবাদ!


-২ বাইটগুলি সাথে for(;;)এবং পূর্বাভাসের সাথে প্রতিস্থাপন করতে foreach(var c in++i+"")। প্রতিস্থাপন -22 বাইট int.Parse(c+"")সঙ্গে c-48
দুধ

2

পাইথ - 18 17 বাইট

একটি বাইট সংরক্ষিত হয়েছে @ জাকুবকে ধন্যবাদ!

পুনরাবৃত্তির জিনিস করতে ব্যবহার হ্রাস করে।

uf}HsM*FBjT;hGSQZ

টেস্ট স্যুট


sM*FBjT;অঙ্কের যোগফল এবং পণ্যও উত্পন্ন করে এবং এটি 1 বাইট সংক্ষিপ্ত।
জাকুব

@ জাকুব ওহ সুন্দর কৌশল
মালটিসেন

1

আর, 124 112 বাইট

f=function(N){y=x=`if`(N-1,f(N-1),0);while(N!=prod(y)&N!=sum(y)){x=x+1;y=as.double(el(strsplit(c(x,""),"")))};x}

এন = 45 এ ব্যর্থ হয়েছে কারণ আর 10000+ 1e + 05 হিসাবে লেখার জন্য জোর দিয়েছিলেন, যা প্রশংসা করতে পারে না, এটি 12 বাইট ব্যয়ে as.numeric()ব্যবহার করে স্থিরযোগ্য as.integer():

f=function(N){y=x=`if`(N-1,f(N-1),0);while(N!=prod(y)&N!=sum(y)){x=x+1;y=as.double(el(strsplit(c(as.integer(x),""),"")))};x}

স্ট্যাটিস্টিকাল প্রোগ্রামিং ল্যাঙ্গুয়েজ হিসাবে আর এর কাছে বিরক্তিকরভাবে সংখ্যাগুলির ভেক্টরে সংখ্যাকে বিভক্ত করার দুর্দান্ত শব্দ রয়েছে y বিশেষত কারণ সমস্ত কিছু স্ট্রিং থেকে সংখ্যার মানগুলিতে স্পষ্টভাবে রূপান্তর করতে হয়।

বিলিওবকে 12 বাইট সংরক্ষণ করা হয়েছে।


1
আপনি as.double(el(strsplit(c(x,""),"")))কোনও পূর্ণসংখ্যাটিকে তার অঙ্কগুলির ভেক্টরে বিভক্ত করতে ব্যবহার করতে পারেন । যাইহোক, আপনি এখনও ফর্ম্যাটিং ইস্যুতে চালিত হন তবে এটি আপনার উত্তর হিসাবে সমাধান হতে পারেas.integer()
বিলিওব


আপনি এর sprintf()পরিবর্তে সরাসরি কোনও পেছনের শূন্য ছাড়াই একটি স্ট্রিংয়ের সাথে পূর্ণসংখ্যা বিন্যাস করতে পারেন : as.double(el(strsplit(sprintf("%1.f",x),"")))এবং ব্যবহারটি এড়িয়ে যানas.integer()
বিলিউব

@ LegionMammal978 প্রথম জিনিস এটা লুপ থাকাকালীন করে x=x+1এবং এই কারণ শুরুতে একবার মূল্যায়ন করা নিশ্চিত হয়, y=F(N-1)যা স্পষ্টভাবে হয় সমান নয় N
জেএডি

@ জারকো ডাবডেলডাম ওফস, এটি ভুলভাবে পড়ুন: পি
লিজিওন ম্যাম্মেল 978

1

জাভাস্ক্রিপ্ট (ES6) 109 107 105 91 89 বাইট

f=n=>n&&eval(`for(i=f(n-1);++i,${x="[...i+''].reduce((r,v)=>"}+r+ +v)-n&&${x}r*v)-n;);i`)



console.log(f.toString().length + 2); 
console.log(f(25));
console.log(f(13));
console.log(f(8));                                  


1

জাভাস্ক্রিপ্ট (ES6), 84 86

সম্পাদনা করুন: 2 বাইট সংরক্ষিত thx @ আরনাউল্ড

f=n=>eval("for(v=n&&f(n-1),p=s=n+1;s&&p-1;)[...++v+''].map(d=>(p/=d,s-=d),p=s=n);v")

50 এর উপরে টেস্ট নোট এটি আপনার সিপিইউর খুব বেশি ব্যবহার করবে, খুব বেশি দেরী হওয়ার আগে থামাতে 'ফলাফলগুলি লুকান' এ ক্লিক করুন

f=n=>eval("for(v=n&&f(n-1),p=s=n+1;s&&p-1;)[...++v+''].map(d=>(p/=d,s-=d),p=s=n);v")

out=x=>O.textContent=x+'\n'+O.textContent

i=0
step=_=>out(i+' '+f(i),++i,setTimeout(step,i*10))

step()
<pre id=O></pre>


আমি মনে করি for(v=n&&f(n-1),p=s=n+1;s&&p-1;)[...++v+''].map(d=>(p/=d,s-=d),p=s=n);v2 বাইট সংরক্ষণ করা উচিত। আমার সন্দেহ হয় এটি আরও কিছুটা ছোট করা যেতে পারে তবে আমি এখনও এটিকে বের করতে পারি না।
আর্নল্ড

@ আরনাউল্ড আমি বারবার ভাসমান পয়েন্ট বিভাগ নিয়ে কিছু সমস্যা আশা করছি
expect ই

আমাদের একমাত্র প্রয়োজন হ'ল p /= dযখন dএকটি বিভাজক হয় তখন একটি সঠিক ফলাফল দেয় p। আমি ভুল না হলে এটি কারও পক্ষে সত্য d <= p <= Number.MAX_SAFE_INTEGER। আমরা যখন ভাসমান পয়েন্টের বৃত্তাকার ত্রুটিগুলি পেয়ে যাব p % d != 0তবে তা নিরাপদ হওয়া উচিত।
আর্নল্ড

@ সেনারলিও পরামর্শটি দেবেন না আপনি নিজের চেষ্টা করেননি (চেষ্টা করুন eval`1+1` ) (কেন কোডগলফ.স্ট্যাকেক্সেঞ্জার.com / a / 52204 / 21348 : প্রথম মন্তব্যটি পড়ুন)
edc65

1

গণিত, 67 বাইট

a@0=0;a@b_:=NestWhile[#+1&,a[b-1]+1,+##!=b&&1##!=b&@*IntegerDigits]

ফাংশন, নামকরণ a। ইনপুট হিসাবে একটি সংখ্যা নেয় এবং আউটপুট হিসাবে একটি নম্বর প্রদান করে। পূর্ববর্তী ম্যাথমেটিকা ​​সমাধান দ্বারা অনুপ্রাণিত, তবে একটি ভিন্ন লুপিং প্রক্রিয়া ব্যবহার করে।


1

সি, 240 বাইট

int f(char n){int q[19],i=19,r=n%9,j=9,*p=q,c=n/9;while(i)q[--i]=0;if(c){if(!r){r=9;c--;}q[9]=c;if(!(n%r)){n/=r;while((j-1)*(n-1)*c){if(n%j)j--;else{c--;q[9+j]++;n/=j;}}q[10]=c;if(1==n)p+=9;}while(++i<10){while(p[i]--)r=r*10+i;}}return(r);}

অনুক্রমের কিছু গণিতের বৈশিষ্ট্য কাজে লাগানোর চেষ্টা করা হচ্ছে।


0

পাওয়ারশেল ভি 3 +, 114 বাইট

param($n)$i=,0;$l=1;1..$n|%{for(;$_-notin((($b=[char[]]"$l")-join'+'|iex)),(($b-join'*'|iex))){$l++}$i+=$l};$i[$n]

কোনও সংখ্যাটিকে তার অঙ্কগুলির যোগ / গুণে রূপান্তর করার সহজ উপায় ছাড়াই আইট্রেটিভ সমাধান solution সুতরাং এটি জাভাস্ক্রিপ্টের উত্তরের চেয়ে বেশ খানিকটা দীর্ঘ longer

ইনপুট নেয় $n, $iঠিক একটি অ্যারের সাথে সেট করে 0(এটি সংগ্রহ F()এবং এটি $lসমান সেট করে 1(এটি সর্বশেষতম F)) আমরা তারপরে প্রতিটি লৌক নির্বাহ করে প্রতিটি পুনরাবৃত্তিকে উপরের 1দিকে লুপ করি।$nfor

forলুপ এর শর্তাধীন লাগে $latest নম্বর, একটি স্ট্রিং "$l", তারপর কাস্ট করে একটি হিসাবে char-array, এবং দোকান যে টেম্প পরিবর্তনশীল মধ্যে অ্যারে $b। আমরা তখন -joinসেই সংখ্যার সাথে একসাথে +পাইপ করি যা এর জন্য iex(সংক্ষিপ্ত Invoke-Expressionএবং অনুরূপ eval)। অতিরিক্তভাবে, আমরা এর সাথেও একই কাজ করি *। এই দুটি সংখ্যা প্যারেন্সে এনপ্যাপুলেটেড হয় এবং বহিরাগত লুপের -notinবর্তমান সংখ্যার $_(যেমন forলুপটি এত দীর্ঘ হয় +এবং *এর চেয়ে আলাদা $_) এর বিপরীতে অপারেটরের অ্যারে আর্গুমেন্ট হিসাবে বিবেচিত হয় । forলুপের শরীরটি কেবল বৃদ্ধি করে $l++

একবার আমরা এই অভ্যন্তরীণ forলুপটি থেকে বেরিয়ে আসার পরে , এর $lনতুন উপাদান হিসাবে আমাদের যুক্ত করি $i। একবার পরিসীমা লুপটি সম্পূর্ণ করার পরে আমরা কেবল রাখি$i[$n] পাইপলাইনে এবং আউটপুট অন্তর্ভুক্ত থাকে।

এনবি - উপরে 20লুপ কাঠামোর কারণে প্রায় কার্যকর করতে খুব ধীর হয়ে যায় । উদাহরণস্বরূপ, N=40আমার মেশিনে প্রায় দুই মিনিট সময় লাগে এবং আমি পরীক্ষারও বিরক্ত করি না N>50


0

পাইকে, 17 বাইট

t.fY'Bs]~ohR{Io(e

এখানে চেষ্টা করুন!

অথবা 13 বাইট অ-প্রতিযোগিতামূলক

first_nইতিমধ্যে পাওয়া আইটেমের পরিমাণ iযদি ব্যবহৃত হয় তবে প্লাস ওয়ান রাখে ।

Q.fY'Bs]iR{)e

এখানে চেষ্টা করুন!

Q.f        )  -  first_n(input, start=1)
   Y          -   digits(^)
    'Bs]      -   [sum(^), product(^)]
         R}   -   V in ^
        i     -    len(results)+1
            e - ^[-1]


0

আশ্চর্য , 49 বাইট

f\.{0\0@(:>@(| =#1sum#0)=#1prod#0)(dp +1f -#0 1)N

প্যাটার্ন ম্যাচিং ftw! ব্যবহার:

f\.{0\0@(:>@(| =#1sum#0)=#1prod#0)(dp +1f -#0 1)N}; f 10

আরও পঠনযোগ্য:

f\.{
  0\0
  @(
    find @(or = #1 sum #0) = #1 prod #0
  ) (dp + 1 (f -#0 1)) N
}

এটি মূলত চশমাগুলির কেবলমাত্র শব্দ-শব্দের বাস্তবায়ন।



0

বেফুঞ্জ, 101 বাইট

&20p>:000pv
>\1+^vp011<
| >.@>:55+%:00g+00p10g*v>10g-*
::\$_^#!:/+55p01*!`"~":<^\-g00
< |!-g02
+1< v\

এটি অনলাইন চেষ্টা করুন! তবে মনে রাখবেন যে আপনি উচ্চ চল্লিশের দশকে প্রবেশের পরে এটি সত্যিই ধীর হতে চলেছে। আপনি যদি পুরো ব্যাপ্তিটি পরীক্ষা করতে চান তবে আপনাকে অবশ্যই একটি বেফঞ্জ সংকলক ব্যবহার করা উচিত।

ব্যাখ্যা

&20p           Read N and save for later.

>              Start of main loop; current target and test number on stack, initially 0.
:              Duplicate the test number so we can manipulate it.
000p           Initialise the sum to 0.
110p           Initialise the product to 1.

>              Start of inner loop.
:55+%:         Modulo 10 of the test number to get the first digit.
00g+00p        Add to the sum.
10g*           Multiply by the product.
:"~"`!*        If greater than 126, set to 0 to prevent overflows - it'll never match.
10p            Update the product variable.
55+/           Divide the test number by 10 to get the next digit.
:!_            If not zero, repeat the inner loop

$              Drop the zero left over from the loop.
\::00g-\10g-   Compare the sum and product with the current target.
*|             Multiply the two diffs and branch; up if no match, down if either match.
\1+^           On no match, we increment the test number and repeat the main loop.
:>20g-!|       With a match, we compare the current target with the saved N.
1+\v           If that doesn't match, increment the current target and restart main loop.
\>.@           If it does match, we've got our result; output it and exit.

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