সুপার-লোগারিদম গণনা করুন


29

এটি একটি সহজ চ্যালেঞ্জ হওয়া উচিত।

একটি নম্বর দেওয়া n >= 0, সুপার-লগারিদম আউটপুট করুন (বা লগ *, লগ-স্টার, বা পুনরাবৃত্ত লোগারিদম , যেহেতু সমান nএটি এই চ্যালেঞ্জের জন্য কখনও নেতিবাচক নয়।) n

লগ * (এন): = {0 যদি এন <= 1;  1 + লগ * (লগ (এন)) যদি এন> 1}

এটি টেটারেশনের দুটি বিপরীত কার্যের মধ্যে একটি । অন্যটি হ'ল সুপার-রুট , যা সম্পর্কিত প্রশ্নে রয়েছে

উদাহরণ

Input       Output
0           0
1           0
2           1
3           2
4           2
...
15          2
16          3
...
3814279     3
3814280     4

বিধি

  • আপনার দশমিককে সমর্থন করার দরকার নেই, যদিও আপনি পারেন।
  • আপনাকে অন্ততপক্ষে ইনপুট সমর্থন করতে হবে 3814280 = ceiling(e^e^e)
  • আপনি মানগুলি হার্ড-কোড নাও করতে পারেন 3814280। (আপনার প্রোগ্রামটি অবশ্যই তাত্ত্বিকভাবে উচ্চ সংখ্যার সমর্থন করবে)) আমি চাই একটি অ্যালগরিদম কার্যকর করা হোক।
  • সংক্ষিপ্ততম কোড জিতেছে।

সম্পর্কিত OEIS


উত্তর:


14

জেলি , 8 বাইট

ÆlÐĿĊḊi1

এটি অনলাইন চেষ্টা করুন! বা সমস্ত পরীক্ষার কেস যাচাই করুন

পটভূমি

আমরা ধারাবাহিকভাবে ইনপুটটির প্রাকৃতিক লোগারিদম গ্রহণ করে এবং পরবর্তী ফলাফলগুলি পরিবর্তন না করা পর্যন্ত পরবর্তী ফলাফলগুলি নিয়ে শুরু করি। জটিল প্লেনে প্রাকৃতিক লোগারিদমের সম্প্রসারণের একটি নির্দিষ্ট পয়েন্ট রয়েছে বলে এটি কাজ করে ; যদি z- র = ই -w (-1) ≈ 0.318 + + 1.337i - যেখানে ওয়াট উল্লেখ করে ল্যাম্বার্ট ডব্লিউ ফাংশন - আমরা আছে লগ (z- র) = z- র

ইনপুট এন এর জন্য , গণনার পরে [এন, লগ (এন), লগ (লগ (এন)),…, জেড] , আমরা প্রথমে প্রতিটি ফলাফলের সিলিং ফাংশনটি প্রয়োগ করি। জেলি বাস্তবায়ন ( Ċ) প্রকৃতপক্ষে এর কাল্পনিক অংশ নির্ণয় জটিল পরিবর্তে সংখ্যা , কিন্তু আমরা এই যাহাই হউক না কেন আগ্রহী নন।

একবার প্রয়োগের লগ একটি মান কম উৎপাদ চেয়ে বা সমান 1 , Ċফিরে আসবে 1 প্রথমবারের। প্রথম 1 এর 0 ভিত্তিক সূচকটি পছন্দসই ফলাফল।

সোজা বাস্তবায়ন (গণনা 1-ভিত্তিক সূচক, হ্রাস) ব্যর্থ হয়েছে কারণ প্রান্ত কেস 0 , যার লগারিদমের তালিকায় এর 1 নেই । আসলে, ইনপুট 0 এর জন্য , লগারিদমের ক্রম

[0, None]

জেলির লোগারিদম ( Æl) অতিরিক্ত চাপ হওয়া কারণ এটি ; এটি প্রথমে চেষ্টা করে math.log(বাস্তব লোগারিদম), তারপরে cmath.log(জটিল লোগারিদম) এবং অবশেষে "ছেড়ে দেয়" এবং ফিরে আসে None। ভাগ্যক্রমে, Ċএকইভাবে অতিরিক্ত লোড করা হয় এবং কেবল যদি এটি কোনও কল্পিত অংশ নিতে না পারে বা ব্যয় করতে পারে তবে এটি যুক্তি ফিরিয়ে দেয়।

তেমনিভাবে ইনপুট 1 রিটার্ন দেয়

[1, 0, None]

যা এতে বা জড়িত না এমন অন্যান্য পদ্ধতির ক্ষেত্রে সমস্যা তৈরি করতে পারে Ċ

এই সমস্যাটি সমাধানের একটি উপায় হ'ল লগারিদমের অ্যারেতে (ডেলিউ; প্রথম উপাদানটিকে সরিয়ে দেয়) প্রয়োগ করা । এই মানচিত্র

0ÆlÐĿ -> [0, None]    -> [None]
1ÆlÐĿ -> [1, 0, None] -> [0, None]

সুতরাং উভয় তালিকার এখনই 1 টি নেই । এইভাবে, প্রথম 1 এর সূচকটি খুঁজে বের করে 0 (খুঁজে পাওয়া যায় না) ফিরে আসবে , যা ইনপুট 0 এবং 1 এর জন্য পছন্দসই আউটপুট ।

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

ÆlÐĿĊḊi1  Main link. Argument: n (non-negative integer)

  ÐĿ      Apply the following link until the results are no longer unique.
Æl          Natural logarithm.
          Return the array of all unique results.
    Ċ     Round all resulting real numbers up to the nearest integer. This takes
          the imaginary part of complex numbers and does nothing for non-numbers.
     Ḋ    Dequeue; remove the first item (n) of the array of results.
      i1  Find the first index of 1 (0 if not found).

এটি জেলির মধ্যে কেবলমাত্র তিনটি পরমাণুর মধ্যে একটি যা অ-সুস্পষ্ট উপায়ে ওভারলোড হয়।




7

জাভাস্ক্রিপ্ট, 45 27 26 বাইট

l=a=>a>1&&1+l(Math.log(a))

এখানে পরীক্ষার স্যুট (3 য় রেভ)

শর্তসাপেক্ষে 1 বাইট সংরক্ষণ এবং তারপরে ল্যাম্বডায় ফাংশন রূপান্তর করার জন্য @ লিক্যনুনকে ধন্যবাদ এবং @ নীলকে মিথ্যা নির্দেশ করার জন্য ঠিক আছে <= 1 (=== এর পরিবর্তে পরীক্ষায় == হতে পরিবর্তিত)


আমি এসআই 6 ছাড়াই এটি করছিলাম, তবে হ্যাঁ এটি 1 বাইট ছোট হবে, ধন্যবাদ thanks
CShark

আপনি ল্যাম্বদা ব্যবহার করবেন না কেন?
ফাঁস নুন

কোন যুক্তিসঙ্গত কারণ নেই, আমি এটি এতটা ব্যবহার করি নি, তাই এটি আমার প্রথম প্রবৃত্তি নয়
CShark

স্পষ্টতই আমরা false0 এর পরিবর্তে ফিরে আসার অনুমতি পেয়েছি (যেমন এটি একটি পূর্ণসংখ্যার এক্সপ্রেশনে স্বয়ংক্রিয়ভাবে 0 তে রূপান্তরিত হয়) আপনি যদি এটিকে ড্রপ করতে পারেন |0
নিল

এটি 1 বাইট সাশ্রয় করতে পারে তবে "এটি স্বয়ংক্রিয়ভাবে 0 এ রূপান্তরিত হয়" এর অর্থ কী? এটা কি"?
সিশার্ক

6

গণিত, 21 বাইট

If[#>1,1+#0@Log@#,0]&

পুনরাবৃত্তি বেনামে ফাংশন। ইনপুট হিসাবে পূর্ণসংখ্যা নেয় এবং তার সুপার-লগারিদমকে আউটপুট হিসাবে দেয়। কেবলমাত্র প্রদত্ত সংজ্ঞাটি ব্যবহার করে।


3
আমি আসলে কোনও বিল্ট-ইন আছে কিনা তা দেখার জন্য সময়ের অপেক্ষায় ছিলাম। যখন ছিল না তখন আমি অবাক হয়েছি। : D
mbomb007


5

পাইথ, 10 বাইট

L&>b1hy.lb

পরীক্ষা স্যুট.

এটি একটি ফাংশন সংজ্ঞায়িত করে।


আমি আপনার টেস্ট স্যুটে কোনও আউটপুট দেখছি না। আউটপুটে খালি লাইনগুলির একগুচ্ছ।
mbomb007

@ mbomb007 স্থির হয়েছে।
লিকি নুন

ওয়ে কুলার: tl.u?>N1.l;-)
জাকুব

@ জাকুব আপনি যে পোস্ট করতে পারে!
ফাঁস নুন

5

হাস্কেল, 23 বাইট

l x|x>1=1+l(log x)|1<2=0

ব্যবহারের উদাহরণ: l 3814280-> 4


4

পাইথন 3, 45 বাইট

import math
s=lambda x:x>1and-~s(math.log(x))

কারণ x <= 1, এই রিটার্ন False(যা == 0পাইথনে রয়েছে)।


হ্যাঁ, Falseব্যবহার করা যেতে পারে 0
mbomb007

এছাড়াও, আপনি আমার নিষ্পাপ বাস্তবায়নকে মারধর করেছেন ( andপরিবর্তে ব্যবহার করে if else)। Grats।
mbomb007


3

এমএটিএল , 15 12 বাইট

0`ZetG>~}x@q

এটি অনলাইন চেষ্টা করুন! বা সমস্ত পরীক্ষার কেস যাচাই করুন (বেশ কয়েকটি ইনপুট পরিচালনা করতে সামান্য সংশোধিত সংস্করণ)।

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

0 দিয়ে শুরু করে, ইনপুট অতিক্রম না করা পর্যন্ত পুনরাবৃত্ত এক্সফোনেনটিশন প্রয়োগ করুন। আউটপুটটি পুনরাবৃত্তির সংখ্যা বিয়োগ 1।

0       % Push 0
`       % Do...while loop
  Ze    %   Exponential
  t     %   Duplicate
  G     %   Push input
  >~    %   Is current value less than or equal to the input? If so: next iteration
}       % Finally (code executed at the end of the last iteration)
  x     %   Delete
  @q    %   Iteration index minus 1
        % Implicitly end loop
        % Implicitly display stack

3

জে , 21 19 18 16 বাইট

লিকি নুনের কাছে 2 বাইট, গ্যালেন ইভানোভকে 1 বাইট, এবং ফ্রাউনফ্রগে 2 বাইট সংরক্ষণ করা হয়েছে!

2#@}.(0>.^.)^:a:

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

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

ls =: >:@$:@^.`0:@.(<:&1)
   ls 0
0
   ls 1
0
   ls 2
1
   ls 3
2
   ls 4
2
   ls 15
2
   ls 16
3
   ls 3814280
4

: এখানে আমার 18 বাইট সমাধান 2#@}.^.^:(0<])^:a:(আমি sovling কি নিষ্কাশিত এই সমস্যার একটি DUP হতে শুরু করে।)
গ্যালেন ইভানভ

2#@}.(0>.^.)^:a:কাজ মনে হচ্ছে।
ফ্রাউনফ্রগ

যদিও এটি সমতুল্য কিনা তা নিশ্চিত নয়।
ফ্রাউনফ্রোগ


2

ম্যাটল্যাব / অষ্টাভে, 44 বাইট

function a=g(n);a=0;if n>1;a=1+g(log(n));end

এটি একটি অনামী ফাংশন হিসাবে সমস্ত কিছু করার চেষ্টা করা হয়েছিল, কিন্তু আমি ভুলে গিয়েছিলাম যে ম্যাটল্যাব / অক্টাভা বুলিয়ান মিথ্যা (শূন্য) মানের দ্বারা গুণিত করা হলেও অভিব্যক্তিগুলির মূল্যায়ন করতে থাকবে:

f=@(n)(n>1)*(1+f(log(n)))


হ্যাঁ, একটি শর্ট সার্কিটের পণ্যটি পাওয়া ভাল লাগবে :-)
লুইস মেন্ডো

2

আর, 38 37 বাইট

f=function(x)if(x>1)1+f(log(x))else 0

ধন্যবাদ @ user5957401অতিরিক্ত বাইটের জন্য !

পরীক্ষার কেস:

> f(0)
[1] 0
> f(1)
[1] 0
> f(2)
[1] 1
> f(3)
[1] 2
> f(4)
[1] 2
> f(3814279)
[1] 3
> f(3814280)
[1] 4

আমি মনে করি আপনি আক্ষরিক যদি অন্য বিবৃতি ব্যবহার করে একটি বাইট সংরক্ষণ করতে পারেন। অর্থাত্ if(x>1)1+f(log(x))else 0একটি বাইট সংক্ষিপ্ত।
ব্যবহারকারী5957401


2

জাভা 7, 47 বাইট

int c(double n){return n>1?1+c(Math.log(n)):0;}

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

উপরে পুনরাবৃত্ত জাভা 7 শৈলী পদ্ধতিটি একটি পুনরাবৃত্ত জাভা 8 স্টাইলের ল্যাম্বদা থেকে 2 বাইট সংক্ষিপ্ত:

n->{int c=0;for(;n>1;c++)n=Math.log(n);return c;}

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

ব্যাখ্যা:

int c(double n){      // Method with double parameter and integer return-type
  return n>1?         //  If the input is larger than 1:
    1+                //   Return 1 +
      c(Math.log(n))  //   A recursive call with log(input)
   :                  //  Else:
    0;                //   Return 0 instead

n->{                  // Method with double parameter and integer return-type
  int c=0;            //  Create a counter, starting at 0
  for(;n>1;           //  Loop as long as the input is still larger than 1:
    c++)              //   Increase the counter by 1
    n=Math.log(n);    //   And update the input to log(input)
  return c;}          //  After the loop: return the counter as result

আপনি এটি একটি জাভা 8 ল্যাম্বদা দিয়ে সংক্ষিপ্ত পেতে পারেন।
mbomb007

@ এমবম্ব ২০০7 তিন বছর পরে সাড়া দিচ্ছে, হাহা .. (তখন আমি জাভা in-তে কেবল কোড-গল্ফ করছিলাম), তবে আপনার প্রশ্নের উত্তর দিতে: না, দুর্ভাগ্যক্রমে একটি জাভা 8 ল্যাম্বদা পুনরাবৃত্ত পদ্ধতির চেয়ে 2 বাইট দীর্ঘ longer আমি আমার উত্তরে এটি যুক্ত করেছি, এবং আমি একটি ব্যাখ্যাও যুক্ত করেছি।
কেভিন ক্রুইজসেন

সুতরাং আপনি পুনরাবৃত্ত ল্যাম্বডাস করতে পারবেন না?
mbomb007

@ mbomb007 না, জাভাতে দুর্ভাগ্যক্রমে নয়। পাইথন, জাভাস্ক্রিপ্ট এবং আমার মনে হয় সি #। নেটও, পুনরাবৃত্ত ল্যাম্বডাস সম্ভব, তবে জাভাতে কোনও কারণে নয় ..
নেটও


1

জেলি , 8 বাইট

-Ælß$Ị?‘

সংজ্ঞাটির সোজা বাস্তবায়ন implementation এটি অনলাইন চেষ্টা করুন! বা সমস্ত পরীক্ষার কেস যাচাই করুন

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

-Ælß$Ị?‘  Main link. Argument: x

     Ị    Insignificant; test if |x| ≤ 1.
      ?   If the result is 1:
-           Return -1.
          Else:
   $        Execute the monadic chain formed by the two links to the left.
Æl            Apply natural logarithm to x.
  ß           Recursively call the main link.
       ‘  Increment the result.

1

পার্ল 5, 35 বাইট

বেনামে পুনরাবৃত্তির জন্য কীওয়ার্ড -M5.016সক্ষম করতে খুব সহজ, প্রয়োজন (যা নিখরচায়) __SUB__

sub{$_[0]>1?1+__SUB__->(log pop):0}

আর একটি বিকল্প হ'ল

sub{$_[0]>1?1+__SUB__->(log pop):0}

যা 34 বাইট, এবং সমস্ত ইনপুট> 1 এর জন্য একই আউটপুট দেয় তবে ইনপুটগুলির জন্য বিশেষ ভুয়া মান প্রদান করে <= 1 টি যোগ্যতা অর্জন।


দুর্দান্ত উত্তর। আপনি sub{($_=pop)>1?1+__SUB__->(log):0}যদিও করে 1 বাইট জিততে পারবেন
দাদা

1

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

rd{_1>}{_ml}w],(

অনলাইন ডেমো

প্রাক শর্ত সহ লুপ সরল। (আমি এখানে যা চাই তা হল একটি গল্ফস্ক্রিপ্ট-স্টাইলের উদ্ঘাটন অপারেশন, তবে সিজেমের একটি নেই, এবং গল্ফস্ক্রিপ্টে ভাসমান বিন্দুটি অগোছালো এবং মোটেই গোলাপ নয়)।


অন্যদিকে, এটি গণিতে আমার 80 তম উত্তর এবং আজ আমার দ্বিতীয় ট্যাগ ব্যাজ অর্জন করেছেন।
পিটার টেলর



1

ম্যাপেল, 32,30 29 বাইট

f:=x->`if`(x>1,1+f(log(x)),0)

পরীক্ষার কেস:

> f(0.);
  0
> f(1.);
  0
> f(2.);
  1
> f(3.);
  2
> f(4.);
  2
> f(3814279.);
  3
> f(3814280.);
  4

1

আর, 36 বাইট

প্ল্যানাপাস থেকে কিছুটা আলাদা পদ্ধতি approach

->n;a=0;while(n>1){a=a+1;n=log(n)};a

কোডটি চালানোর জন্য একটি ডান অ্যাসাইন্ট ব্যবহার করে - সুতরাং কাঙ্ক্ষিত নম্বরটি অবশ্যই এর আগে। অর্থাত

10->n;a=0;while(n>1){a=a+1;n=log(n)};a

0

গণিত, 29 বাইট

সমস্ত জাহান্নামের মতো সহজ, এবং মজাদারভাবে বিশাল পাশাপাশি নেতিবাচক ইনপুটগুলির জন্যও কাজ করে:

f[x_]:=If[x>1,1+f[Log[x]],0]

এখানে চিত্র বর্ণনা লিখুন



0

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

{($_,*.log...1>=*)-1}

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

প্রথম বন্ধনযুক্ত প্রকাশটি একটি ক্রম। $_, ফাংশনের যুক্তিটি হ'ল প্রথম উপাদান। *.logপূর্ববর্তী উপাদানটির লগ নিয়ে প্রতিটি ধারাবাহিক উপাদান তৈরি করে। ক্রমটি শেষ শর্ত পর্যন্ত অব্যাহত থাকে 1 >= *,, সত্য: 1 বর্তমান উপাদানের চেয়ে বড় বা সমান। সিকোয়েন্স থেকে 1 টি বিয়োগ করে এটি একটি সংখ্যায় জোর করে: এর দৈর্ঘ্য।

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