ডিজিট পণ্য ক্রম


22

ব্লুমসবার্গ বিশ্ববিদ্যালয়ের গণিতবিদ পল লুমিস এটি আবিষ্কার করেছেন একটি আকর্ষণীয় অনুক্রম। এই অনুক্রমের তার পৃষ্ঠা থেকে :

নির্ধারণ
f(n) = f(n-1) + (the product of the nonzero digits of f(n-1))
f(0) = xসঙ্গে, xকোনো ধনাত্মক পূর্ণসংখ্যা, বেস 10 লেখা হিসাবে।

সুতরাং, দিয়ে শুরু করে f(0)=1, আপনি নিম্নলিখিত ক্রমটি পান
1, 2, 4, 8, 16, 22, 26, 38, 62, 74, 102, 104, ...

এতদূর, এতটা স্ট্যান্ডার্ড। আকর্ষণীয় সম্পত্তিটি খেলায় আসে যখন আপনি অন্য কোনও পূর্ণসংখ্যার প্রারম্ভিক পয়েন্ট হিসাবে গ্রহণ করেন, শেষ পর্যন্ত ক্রমটি উপরের x=1অনুক্রমের সাথে একটি বিন্দুতে রূপান্তরিত হয় । উদাহরণস্বরূপ, x=3ফলন দিয়ে শুরু করা
3, 6, 12, 14, 18, 26, 38, 62, 74, 102, ...

এখানে আরও কয়েকটি সিকোয়েন্স রয়েছে, প্রত্যেকটি কেবল সেখানে পৌঁছানো অবধি দেখানো হয় 102:

5, 10, 11, 12, 14, 18, 26, 38, 62, 74, 102, ...
7, 14, 18, 26, 38, 62, 74, 102, ...
9, 18, 26, 38, 62, 74, 102, ...
13, 16, 22, 26, 38, 62, 74, 102, ...
15, 20, 22, 26, 38, 62, 74, 102, ...
17, 24, 32, 38, 62, 74, 102, ...
19, 28, 44, 60, 66, 102, ...

তিনি অনুমান করেছিলেন, এবং অভিজ্ঞতার সাথে প্রমাণ করেছেন x=1,000,000যে এই সম্পত্তি (যেমন, সমস্ত ইনপুট সংখ্যা একই ক্রমে রূপান্তরিত হয়) সত্য।

চ্যালেঞ্জ

ধনাত্মক ইনপুট পূর্ণসংখ্যা দেওয়া হয়েছে 0 < x < 1,000,000, যেখানে f(x)অনুক্রমটি অনুক্রমকে রূপান্তর করে এমন সংখ্যাটি আউটপুট করুন f(1)। উদাহরণস্বরূপ, এর জন্য x=5, এটি হবে 26, যেহেতু উভয় অনুক্রমের ক্ষেত্রে এটি প্রথম সংখ্যা common

 x output
 1 1
 5 26
19 102
63 150056

বিধি

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

উত্তর:


5

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

@ ল 4 এম 2 এর জন্য 1 বাইট সংরক্ষণ করা হয়েছে

f=(n,x=1)=>x<n?f(x,n):x>n?f(+[...n+''].reduce((p,i)=>p*i||p)+n,x):n

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

মন্তব্য

f = (n,                   // n = current value for the 1st sequence, initialized to input
        x = 1) =>         // x = current value for the 2nd sequence, initialized to 1
  x < n ?                 // if x is less than n:
    f(x, n)               //   swap the sequences by doing a recursive call to f(x, n)
  :                       // else:
    x > n ?               //   if x is greater than n:
      f(                  //     do a recursive call with the next term of the 1st sequence:
        +[...n + '']      //       coerce n to a string and split it
        .reduce((p, i) => //       for each digit i in n:
          p * i || p      //         multiply p by i, or let p unchanged if i is zero
        ) + n,            //       end of reduce(); add n to the result
        x                 //       let x unchanged
      )                   //     end of recursive call
    :                     //   else:
      n                   //     return n

`` `f = (n, x = 1) => x <n? f (x, n): x> n? f (+ [... n + '' ']। হ্রাস করুন ((পি, আই) = > পি * আমি || পি) + এন, এক্স): এন `` ``
l4m2

4

জেলি , 18 14 বাইট

ḊḢDo1P+Ʋ;µQƑ¿Ḣ

ইনপুটটি একটি সিঙ্গলটন অ্যারে।

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

কিভাবে এটা কাজ করে

ḊḢDo1P+Ʋ;µQƑ¿Ḣ  Main link. Argument: [n]

            ¿   While...
          QƑ      all elements of the return value are unique...
         µ          execute the chain to the left.
Ḋ                     Dequeue; remove the first item.
 Ḣ                    Head; extract the first item.
                      This yields the second item of the return value if it has
                      at least two elements, 0 otherwise.
       Ʋ              Combine the links to the left into a chain.
  D                     Take the decimal digits of the second item.
   o1                   Perform logical OR with 1, replacing 0's with 1's.
     P                  Take the product.
      +                 Add the product with the second item.
        ;             Prepend the result to the previous return value.
             Ḣ  Head; extract the first item.

2

পাইথন 2 , 111 95 93 বাইট

replace(*'01')@ রড উত্তর
-১৮ বাইটে আনপ্যাকিং ব্যবহার করে @ লিনকে ধন্যবাদ

l=[1,input()]
while cmp(*l):l[0]+=eval('*'.join(`l[0]`.replace(*'01')));l.sort()
print l[0]  

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


1
আহ এবং লুপের অবস্থাও হতে পারে while cmp(*l)!
লিন

@ লিন হ্যাঁ! আবার ধন্যবাদ
ডেড পসসাম


2

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

f=lambda a,b=1:a*(a==b)or f(*sorted([a+eval('*'.join(`a`.replace(*'01'))),b]))

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


আমি ল্যাম্বদার সাথে সলিউশন নিয়ে কাজ করছি, তবে কয়েক মিনিটের জন্য শর্টকাটারে আটকে গিয়েছি, ভাল কাজ!
ডেড পসসাম

2

হুশ , 13 বাইট

→UΞm¡S+ȯΠf±dΘ

সিঙ্গেলটন তালিকা হিসাবে ইনপুট নেয়।

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

ব্যাখ্যা

                 Implicit input, e.g 5
            Θ    Prepend a zero to get  [0,5]
   m             Map the following over [0,5]
    ¡              Iteratatively apply the following function, collecting the return values in a list
           d         Convert to a list of digits
         f±          keep only the truthy ones
       ȯΠ            then take the product
     S+              add that to the original number
                After this map, we have [[0,1,2,4,8,16,22,26,38,62...],[5,10,11,12,14,18,26,38,62,74...]]
  Ξ             Merge the sorted lists:  [0,1,2,4,5,8,10,11,12,14,16,18,22,26,26,38,38,62,62,74...]
 U              Take the longest unique prefix: [0,1,2,4,5,8,10,11,12,14,16,18,22,26]
→               Get the last element and implicitely output: 26


1

জাভা (জেডিকে 10) , 99 বাইট

n->{for(int x=1;x!=n;n+=(""+n).chars().reduce(1,(a,b)->a*(b>48?b-48:1)))x^=x<n?n^(n=x):0;return n;}

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

বেশিরভাগ ক্ষেত্রে আরনল্ডের জাভাস্ক্রিপ্ট উত্তরের একটি পুনরাবৃত্ত পোর্ট , সুতরাং তাকে উর্ধ্বমুখী করুন!



0

জে , 50 বাইট

স্পষ্ট শৈলী ফাংশন সংজ্ঞা

[:{.@(e.~#])/[:(+[:*/@(*#])(#~10)&#:)^:(<453)"0,&1

যদি যুক্তিটি (say৩ বলুন) একটি REPL প্রকাশে আটকানো হয় তবে এটি 45 উদাহরণস্বরূপ হতে পারে

{.(e.~#])/(+[:*/@(*#])(#~10)&#:)^:(<453)"0]1,63
  • ,&1 অনুসন্ধানের ক্রম পাশাপাশি যুক্তির ক্রম তৈরি করতে 1 যুক্ত করুন
  • ^:(<453)"0 1 মিউজিক 1 এর ক্রম না হওয়া পর্যন্ত প্রতিটি পুনরাবৃত্তি করে
  • + [: */@(*#]) (#~10)&#: কাঁটাচামচ হুককে যুক্ত করে যা সংখ্যার উত্পাদন করে
  • (e.~ # ])/ তালিকার ছেদ পেতে যদি পুনরায় আইটেম ব্যবহার করে
  • {. শুধুমাত্র প্রথম সাধারণ মানটি ফেরত দিন

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


0

আর , 110 86 বাইট

o=c(1,1:9);o=o%o%o%o%o;o=c(o%o%o)
x=c(1,n);while((x=sort(x))<x[2])x[1]=(x+o[x+1])[1]
x

Tio

পূর্ববর্তী সংস্করণ 110:

f=function(x){if((x[1]=x[1]+(c((y=(y=c(1,1:9))%o%y%o%y)%o%y))[x[1]+1])==x[2]){x[1]}else{f(sort(x))}}
f(c(1,n))

Tio

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