এমইউ-সংখ্যা গণনা করুন


19

প্রথম দুটি এমইউ-সংখ্যা 2 এবং 3 Every

এখানে প্রথম 10

2, 3, 6, 12, 18, 24, 48, 54, 96, 162

কার্য

একটি ধনাত্মক সংখ্যার গণনা দেওয়া হয়েছে এবং n ম এমউ-সংখ্যা আউটপুট দেয় ।

এটি একটি প্রতিযোগিতা যাতে আপনার উত্স কোডটি যতটা সম্ভব ছোট করা লক্ষ্য করা উচিত।

OEIS A007335


1
0-ইনডেক্সিং বা 1-ইনডেক্সিং?
— হাইপারনিউটারিনো

1
@ হাইপারনিউট্রিনো হয় ভাল আছে।
— গম উইজার্ড

2
এগুলিকে কেন এমইউ-নাম্বার বলা হয় কোনও ধারণা? (বন্য অনুমান: গুণ গুণ অনন্য?)

উত্তর:


5

পাইথ, 22 21 বাইট

@u+Gfq2l@GcLTGheGQhB2

এটি অনলাইনে চেষ্টা করুন। পরীক্ষা স্যুট.

0-ইন্ডেক্স।

ব্যাখ্যা

@u+Gfq2l@GcLTGheGQhB2Q    Implicitly append Q and read+eval input to it.
                  hB2     Take the list [2, 2 + 1].
 u               Q        Put the list in G and apply this Q times:
               eG           Get last number in G.
              h             Add one.
    f                       Starting from that, find the first T such that:
          cLTG                Divide T by each of the numbers in G.
        @G                    Find the quotients that are also in G.
       l                      Get the number of such quotients.
     q2                       Check that it equals 2.
  +G                        Append that T to G.
@                    Q    Get the Q'th number in G.

@শেষ লাইনটি সাইন শ্রেণীবদ্ধ করা হয়। আমি প্রস্তাবিত সম্পাদনা করতে পারি না, কারণ এটি একটি 2-চরিত্রের পরিবর্তন।
— ব্যবহারকারী 2357112

@ ব্যবহারকারী 2357112 স্থির।
— পুর্কাকুডারী

4

হাস্কেল, 80 77 বাইট

l#(a:b)|[x]<-[a|i<-l,j<-l,i<j,i*j==a]=a:(a:l)#b|1<2=l#b
((2:3:[2,3]#[4..])!!)

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

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

2:3:             -- start the list with 2 and 3 and append a call to # with
    [2,3]        -- the list so far and
         #[4..]  -- list of candidate elements

l # (a:b)        -- l -> list so far, a -> next candidate element, b -> rest c.el.
  | [x]<-[...]   -- if the list [...] is a singleton list
    =a:(a:l#b) -- the result is a followed by a recursive call with l extended
                    by a and b
  | 1<2=l#b      -- if it's not a singleton list, drop a and retry with b

                 -- the [...] list is
 [ i<-l,j<-l,    -- loop i through l and j through l and whenever   
       i<j,      -- i<j and
       i*j==a]   -- i*j==a
  a|             -- add a to the list              

3

জেলি , 22 বাইট

ŒcP€ḟ⁸ṢŒgLÞḢḢṭ
2,3Ç¡ị@

একটি মোনাডিক লিঙ্ক, 1-সূচকযুক্ত।

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

কিভাবে?

ŒcP€ḟ⁸ṢŒgLÞḢḢṭ - Link 1, add the next number: list, a  e.g. [2,3,6,12,18,24]
Œc             - unordered pairs                            [[2,3],[2,6],[2,12],[2,18],[2,24],[3,6],[3,12],[3,18],[3,24],[6,12],[6,18],[6,24],[12,18],[12,24],[18,24]]
  P€           - product of €ach                            [6,12,24,36,48,18,36,54,72,72,108,144,216,288,432]
     ⁸         - chain's left argument, a                   [2,3,6,12,18,24]
    ḟ          - filter discard                             [36,48,36,54,72,72,108,144,216,288,432]
      Ṣ        - sort                                       [36,36,48,54,72,72,108,144,216,288,432]
       Œg      - group runs of equal elements               [[36,36],[48],[54],[72,72],[108],[144],[216],[288],[432]]
          Þ    - sort by:
         L     -   length                                   [[48],[54],[108],[144],[216],[288],[432],[36,36],[72,72]]
           Ḣ   - head                                       [48]
            Ḣ  - head                                       48
             ṭ - tack to a                                  [2,3,6,12,18,24,48]

2,3Ç¡ị@ - Link: number, i                              e.g. 7
2,3     - literal [2,3]                                     [2,3]
    ¡   - repeat i times:
   Ç    -   call last link (1) as a monad                   [2,3,6,12,18,24,48,54,96]
     ị@ - index into with swapped @rguments (with i)        48

3

আর , 127 118 111 108 105 100 98 90 বাইট

8 বাইট জিউসেপ্পিকে ধন্যবাদ

r=3:2;for(i in 1:scan())r=c(min((g=(r%o%r)[i:-1<i])[colSums(g%o%g==g*g)+g%in%r<3]),r);r[3]

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


আমাকে চিরকালের জন্য অনুধাবন করতে পেরেছিলাম যে <এর চেয়ে কম নজরে রয়েছে +তাই হেক কী +g%in%r<3করছে তা আমি বুঝতে পারছিলাম না , এবং আমি যখন এটি করছিলাম তখন আপনি যে দুটি অংশ আমি সুপারিশ করতে যাচ্ছিলাম সেগুলি গল্ফ করে দিয়েছিলেন ... +1
— জিউসেপ্প

@ জিউসেপ্পে আমি আজই আর শিখতে শুরু করেছি ... একটি শালীন আর গল্ফারের সাথে দেখা করে ভাল লাগছে।
— লিকি নুন

আমি আপনাকে একই কথা বলতে যাচ্ছিলাম .............
— জিউসেপ্প

আহ, আরও একটি জিনিস, আপনি n=scan()স্টিডিন থেকে পড়ার জন্য কোনও ফাংশন সংজ্ঞা পরিবর্তে ব্যবহার করতে পারেন ; এটি আপনাকে 100 এর নিচে পেয়ে যাবে
— জিউসেপ

ইনপুট জন্য ব্যর্থ হলে:0
— রিফ্ট

2

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

4,{_2m*{~>},::*1$-$e`$0=|}qi*-2=

0-সূচক সহ অনলাইন ডেমো ।

আমি নিশ্চিত নই যে একটি ব্যতিক্রম নিয়ে অনুমিতের তুচ্ছ অনুবাদের বাইরেও আরও অনেক কিছু করা দরকার: [0 1 2 3](এর পরিবর্তে [2, 3]) একটি তালিকা দিয়ে শুরু করে আমি তত্ক্ষণাত এক বাইটকে আরম্ভ করার পরে এবং অন্য দুটি করতে সক্ষম হয়ে সংরক্ষণ করি 0=|(কেবলমাত্র যোগ করে নতুন উপাদান কারণ এর ফ্রিকোয়েন্সি হয় 1এবং ইতিমধ্যে তালিকায় রয়েছে), তবে কোনও মিথ্যা উপাদান পরিচয় করিয়ে দেবেন না কারণ xতালিকার প্রত্যেকটির জন্য 0*xএবং 1*xইতিমধ্যে তালিকায় রয়েছে।



1

গণিত, 154 বাইট by

ওয়েস লিঙ্কে কোডের সাধারণ পরিবর্তন

(s={2,3};Do[n=Select[Split@Sort@Flatten@Table[s[[j]]s[[k]],{j,Length@s},{k,j+1,Length@s}],#[[1]]>s[[-1]]&&Length@#==1&][[1,1]];AppendTo[s,n],{#}];s[[#]])&

1

পিএইচপি , 130 বাইট

0-ইন্ডেক্স

for($r=[2,3];!$r[$argn];$r[]=$l=min($m)/2){$m=[];foreach($r as$x)foreach($r as$y)($p=$x*$y)<=$l|$y==$x?:$m[$p]+=$p;}echo$r[$argn];

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

সম্প্রসারিত

for($r=[2,3];!$r[$argn]; #set the first to items and loop till search item exists
$r[]=$l=min($m)/2){ # add the half of the minimum of found values to the result array
  $m=[]; # start with empty array
  foreach($r as$x) # loop through result array
    foreach($r as$y) # loop through result array
      ($p=$x*$y)<=$l|$y==$x? # if product is greater as last value and we do multiple two distinct values
        :$m[$p]+=$p; # add 2 times or more the product to array so we drop 36 cause it will be 144  
}
echo$r[$argn]; # Output 

পিএইচপি , 159 বাইট

0-ইন্ডেক্স

for($r=[2,3];!$r[$argn];$r[]=$l=min(array_diff_key($m,$d))){$d=$m=[];foreach($r as$x)foreach($r as$y)$x<$y?${dm[$m[$p=$x*$y]<1&$p>$l]}[$p]=$p:0;}echo$r[$argn];

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

পিএইচপি , 161 বাইট

0-ইন্ডেক্স

for($r=[2,3];!$r[$argn];$r[]=$l=min(array_diff($m,$d))){$d=$m=[];foreach($r as$x)foreach($r as$y)$x<$y?${dm[!in_array($p=$x*$y,$m)&$p>$l]}[]=$p:0;}echo$r[$argn];

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


1

গণিত, 140 বাইট

(t=1;s={2,3};While[t<#,s=AppendTo[s,Sort[Select[First/@Select[Tally[Times@@@Permutations[s,{2}]],#[[2]]==2&],#>Last@s&]][[1]]];t++];s[[#]])&

1

এমএটিএল , 25 বাইট

3:i:"t&*9B#u2=)yX-X<h]2_)

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

ব্যাখ্যা

3:     % Push [1 2 3]. Initial array of MU numbers, to be extended with more numbers
i:     % Input n. Push [1 2 ... n]
"      % Do this n times
  t    %   Duplicate array of MU numbers so far
  &*   %   Matrix of pair-wise products
  9B   %   Push 9 in binary, that is, [1 0 0 1]
  #    %   Specify that next function will produce its first and fourth ouputs
  u    %   Unique: pushes unique entries (first output) and their counts (fourth)
  2=   %   True for counts that equal 2
  )    %   Keep only unique entries with count 2
  y    %   Duplicate (from below) array of MU numbers so far
  X-   %   Set difference
  X<   %   Minimum. This is the new MU number
  h    %   Concatenate vertically horizontally to extend the array
]      % End
2_     % Push 2 negated, that is, -2
)      % Get entry at position -2, that is, third-last. Implicitly display

1

পার্ল 6 , 96 বাইট

{(2,3,{first *∉@_,@_.combinations(2).classify({[*]
$_}).grep(*.value==1)».key.sort}...*)[$_]}

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

  • 2, 3, { ... } ... *অসীম অনুক্রম যেখানে তৃতীয়টি দিয়ে শুরু হওয়া প্রতিটি উপাদানটি ব্রেস-ডিলিমিট কোড ব্লক দিয়ে গণনা করা হয়। যেহেতু কোড ব্লকটি স্লাপি @_অ্যারের মাধ্যমে তার আর্গুমেন্টগুলি গ্রহণ করে, এটি সেই অ্যারেটিতে পুরো বর্তমান ক্রমটি গ্রহণ করে।
  • @_.combinations(2)সব 2-উপাদান সমন্বয় একটি ক্রম @_।
  • .classify({ [*] $_ }) প্রতিটি 2-টিউপলকে তার পণ্য দ্বারা শ্রেণিবদ্ধ করে, একটি হ্যাশ উত্পাদন করে যেখানে পণ্যগুলি কী এবং মানগুলি সেই পণ্যটিতে থাকা 2-টিপলগুলির তালিকা হয়।
  • .grep(*.value == 1) হ্যাশ থেকে সেই কী-মান যুক্তগুলি নির্বাচন করে যেখানে মান (অর্থাত্, পণ্যটির সাথে কীটি থাকা জোড়ের তালিকার) আকার 1 থাকে।
  • ».keyপ্রতিটি জুটির কেবল কীগুলি নির্বাচন করে। এটি বর্তমান পণ্যের ক্রমের একটি মাত্র সংমিশ্রণ থেকে উত্পন্ন পণ্যগুলির তালিকা।
  • .sort পণ্যগুলি সংখ্যা অনুসারে বাছাই করে।
  • first * ∉ @_, ... সেই পণ্যগুলির মধ্যে প্রথমটি আবিষ্কার করে যা ইতিমধ্যে অনুক্রমে উপস্থিত হয়নি।

1

জাভাস্ক্রিপ্ট (ES6), 119 118 117 বাইট

একটি পুনরাবৃত্ত ফাংশন যা 0-ভিত্তিক সূচক নেয়।

f=(n,a=[2,m=3])=>a[n]||a.map(c=>a.map(d=>c<d&(d*=c)>m?b[d]=b[d]/0||d:0),b=[])|f(n,a.push(m=b.sort((a,b)=>a-b)[0])&&a)

কিভাবে?

F () এর প্রতিটি পুনরাবৃত্তিতে , আমরা পরবর্তী শব্দটি সনাক্ত করার জন্য ক্রমের শেষ টার্ম এম এবং প্রাথমিকভাবে খালি অ্যারে বি ব্যবহার করি। দুটি পূর্বে পৃথক পৃথক MU- সংখ্যাগুলির প্রতিটি পণ্যের d> মি এর জন্য আমরা করি:

b[d] = b[d] / 0 || d

এবং তারপরে খ এর সর্বনিম্ন মান রাখুন ।

উপরের মত প্রকাশটি নিম্নরূপ মূল্যায়ন করা হয়:

b[d]               | b[d] / 0  | b[d] / 0 || d
-------------------+-----------+--------------
undefined          | NaN       | d
already equal to d | +Infinity | +Infinity
+Infinity          | +Infinity | +Infinity

এটি গ্যারান্টি দেয় যে পণ্যগুলি একাধিক উপায়ে প্রকাশ করা যায় সেগুলি কখনই নির্বাচিত হবে না।

ফর্ম্যাট এবং মন্তব্য

f = (n, a = [2, m = 3]) =>           // given: n = input, a[] = MU array, m = last term
  a[n] ||                            // if a[n] is defined, return it
  a.map(c =>                         // else for each value c in a[]:
    a.map(d =>                       //   and for each value d in a[]:
      c < d &                        //     if c is less than d and
      (d *= c) > m ?                 //     d = d * c is greater than m:
        b[d] = b[d] / 0 || d         //       b[d] = either d or +Infinity (see 'How?')
      :                              //     else:
        0                            //       do nothing
    ),                               //   end of inner map()
    b = []                           //   initialization of b[]
  ) |                                // end of outer map()
  f(                                 // do a recursive call:
    n,                               //   - with n
    a.push(                          //   - push in a[]:
      m = b.sort((a, b) => a - b)[0] //     m = minimum value of b[]
    ) && a                           //     and use a[] as the 2nd parameter
  )                                  // end of recursive call

ডেমো


0

হাস্কেল , 117 115 113 বাইট

n x=[a*b|[a,b]<-mapM id[1:x,x]]
d x=minimum[a|a<-n x,2==sum[1|b<-n x,b==a]]:x
l x|x<3=x+1:[2]|1>0=d$l$x-1
(!!0).l

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


প্রথম লাইনটি অপারেটর কার্টেসিয়ান পণ্যটির জন্য দরকারী আইডিয়াম হিসাবে লেখা যেতে পারে:n x=(*)<$>x<*>1:x
— xnor

0

পাইথন 3 2 , 167 139 136 133 123 121 120 118 বাইট

a=[2,3];exec'p=[x*y for x in a for y in a if x-y];a+=min(q for q in p if p.count(q)+(q in a)<3),;'*input();print a[-2]

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


উন্নতির জন্য @ মিস্টার এক্সকোডার এবং @ লিক্যনুনকে ধন্যবাদ!


159 বাইট , কেবল অপ্রয়োজনীয় স্পেস এবং বন্ধনী সরিয়ে দিয়ে।
— মিঃ এক্সকডার

@ মিঃ এক্সকোডার উন্নতির জন্য ধন্যবাদ। আমি নিশ্চিত p.count(q)==1যে p.count(q)>0এটিকে পরিবর্তন করা বৈধ কিনা, কারণ এটি সেই কোড যা চ্যালেঞ্জের "ঠিক এক পথে" শর্তটি নিশ্চিত করে।
— চেজ ভোগেলি

p.count(q)-~(q in a)<=3এর সমতুল্যp.count(q)+(q in a)<3
— লিকি নুন

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