সুমাক ক্রমের দৈর্ঘ্য [বন্ধ]


11

একটি সুমাক ক্রম দুটি পূর্ণসংখ্যার সাথে শুরু হয়: টি 1 এবং টি 2

পরবর্তী শব্দ, টি 3 , = টি 1 - টি 2

আরও সাধারণভাবে, t n = t n-2 - t n-1

ক্রমটি শেষ হয় যখন টি এন <0 হয়।

আপনার চ্যালেঞ্জ: একটি প্রোগ্রাম বা ফাংশন লিখুন যা টি 1 এবং টি 2 দিয়ে শুরু করে সুমাক ক্রমের দৈর্ঘ্য মুদ্রণ করে ।

  • টি 1 এবং টি 2 আপনার ভাষার সীমার মধ্যে পূর্ণসংখ্যা।
  • স্ট্যান্ডার্ড লুফোলস প্রযোজ্য।

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

t1  t2       sumac_len(t1,t2)

120  71      5
101  42      3
500  499     4
387  1       3

বোনাস রাস্তার ক্রেডিট:

3    -128    1
-314 73      2

এটি কোড-গল্ফ, তাই বাইট জেতে সংক্ষিপ্ত উত্তর।



2
এটি একটি ভাল চ্যালেঞ্জ বলে মনে হচ্ছে তবে এটি কিছুটা অস্পষ্ট। আমরা নিতে অনুমিত হয় t1এবং t2ইনপুট হিসাবে? এবং iপরীক্ষার ক্ষেত্রে কী আছে?
কেয়ারড কোইনরিঙ্গিংহিং

2
এটি কি গ্যারান্টিযুক্ত যে টি 1 এবং টি 2> = 0 হয়?
ব্যবহারকারী 202729

6
@ ব্ল্যাকসিলভার হাহ? ঠিক সেই বোনাসটি কী? বোনাস সাধারণত যাইহোক নিরুৎসাহিত হয়
লুইস মেন্ডো

6
আমাদের কি পরিচালনা করতে হবে t_1 = t_2 = 0? "বোনাস স্ট্রিট ক্রেডিট" এর অর্থ কি আমাদের পরিচালনা করতে হবে না t_1 < 0বা t_2 < 0?
xnor

উত্তর:


8

কাস্তে , 8 বাইট

→V<¡oG-↔

একটি 2-উপাদান তালিকা হিসাবে ইনপুট নেয়। এটি অনলাইন চেষ্টা করুন!

ব্যাখ্যা

→V<¡oG-↔  Implicit input, say p=[101,42]
   ¡      Iterate on p:
       ↔    Reverse: [42,101]
    oG-     Cumulative reduce by subtraction: [42,59]
          Result is infinite list [[101,42],[42,59],[59,-17],[-17,76],[76,-93]...
 V<       Find the first index where adjacent pairs are lexicographically increasing.
          In our example [42,59] < [59,-17], so this gives 2.
→         Increment: 3

8

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

a#b|b<0=1|c<-a-b=1+b#c

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

আমি সত্যিই চাই যে নেতিবাচক সংখ্যার জন্য প্যাটার্ন ম্যাচের কোনও উপায় ছিল ...

ব্যাখ্যা

a#b|b<0=1|c<-a-b=1+b#c

a#b                     -- define a function (#) that takes two arguments a and b
   |b<0                 -- if b is negative...
       =1               -- return 1
         |              -- otherwise...
          c<-a-b        -- assign a-b to c...
                =  b#c  -- and return the result of (#) applied to b and c...
                 1+     -- incremented by 1

আমি মনে করি ব্যাখ্যাটি একবারের জন্য কোডের থেকে কম স্পষ্ট। : পি
অ্যাডহক গার্ফ হান্টার

@ ওয়েট উইজার্ড এটি সম্ভবত কারণ আমি ব্যাখ্যাগুলিতে চুষছি। : পি
সম্পূর্ণরূপে

3

হুশ , 12 11 বাইট

V<0t¡ȯF-↑2↔

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

যে মূল্যবান তার জন্য বোনাস স্ট্রিট ক্রেডিট নেয়।

ব্যাখ্যা

    ¡ȯ       Repeatedly apply the function to the right to the list of all
             previous values and collect the results in an infinite list.
          ↔  Reverse the list of previous results.
        ↑2   Take the first two values (last two results).
      F-     Compute their difference (using a fold).
   t         Discard the first element.
V<0          Find the first index of a negative value.


2

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

`yy-y0<~]N2-&

এটি নেতিবাচক ইনপুট (সর্বশেষ দুটি পরীক্ষার কেস) পরিচালনা করে।

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

ব্যাখ্যা

`        % Do...while
  yy     %   Duplicate top two elements. Implicit inputs first time
  -      %   Subtract
  y      %   Duplicate from below: push previous term
  0<~    %   Is it 0 or greater? This is the loop condition
]        % End. Proceed with next iteration if top of the stack is true
N        % Push number of elements in stack
2-       % Subtract 2
&        % Specify that the next function, namely implicit display, should
         % only display the top of the stack

2

ব্রেন-ফ্লাক , 142 90 বাইট

((()){{}<(({}({}))[({}[{}])({})])([(({})<(())>)](<>)){({}())<>}{}{((<{}>))<>{}}{}<>{}>}<>)

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

খুব ছোট নয়। পিছনে দিকে ইনপুট নেয়।

ব্যাখ্যা

(
 (())   #Push 1
 {      #Until 0
  {}    #Pop (+1 to counter)
  <(({}({}))[({}[{}])({})])  #tn = tn-1 - tn-2
  ([(({})<(())>)](<>)){({}())<>}{}{((<{}>))<>{}}{}<>{}>  #Greater than 0?
 }      #End loop
 <>     #Get rid of everything
)       #Push result


1

গণিত, 55 বাইট

(t=1;While[Last@LinearRecurrence[{-1,1},#,t++]>0];t-2)&

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

এবং এখন নিয়মিত বিরক্তিকর পদ্ধতি @ টোটালিউম্যান দ্বারা man

গণিত, 25 বাইট

If[#2<0,1,1+#0[#2,#-#2]]&

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


এফওয়াইআই, নিয়মিত বিরক্তিকর পদ্ধতির অর্ধেকেরও কম দীর্ঘ
সম্পূর্ণরূপে

1
@totallyhuman প্রকৃতপক্ষে বিরক্তিকর ... তুমি বাইট সংরক্ষণ করতে পারবেন #1করার#
J42161217


1

সি (জিসিসি) , 32 27 26 বাইট

-৫ বাইটস পুরোপুরি মানবিকভাবে সিসিসি-এর অপব্যবহারের জন্য ধন্যবাদ (এটিও টিসিসি-তে কাজ করে বলে মনে হচ্ছে)
-১ বাইট ধন্যবাদ প্রিন্সপলকাকে

f(a,b){a=b<0?:1+f(b,a-b);}

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




0

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

1 এর পরিবর্তে সত্য ফিরে আসে ।

f=(a,b)=>b<0||1+f(b,a-b)

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


1
@totallyhuman তারপরে আপনার f(b)(a-b)এত সঞ্চয় করার দরকার নেই।
মিঃ এক্সকোডার

তাহলে কি a<0? (আরও 1 জন যেতে হবে)
ব্যবহারকারী 202729

আপডেট: আপনাকে আর নেতিবাচক ইনপুট সমর্থন করার প্রয়োজন নেই, তবে আপনি যদি তা করেন তবে এটি দুর্দান্ত।
সিগস্ট্যাকফুল্ট

0

পাইথ , 11 বাইট

এটি একটি পুনরাবৃত্ত ফাংশন যা দুটি আর্গুমেন্ট গ্রহণ করে Gএবং H। প্রদত্ত ইনপুটটিতে ফাংশনটি আসলে কল করার জন্য লিঙ্কটি কিছুটা সংশোধিত হয়েছে।

M|<H0hgH-GH

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


0

এপিএল (ডায়ালগ) , 23 বাইট

2∘{0>-/⍵:⍺⋄(⍺+1)∇-⍨\⌽⍵}

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

কিভাবে?

2∘ - 2 এর প্রাথমিক সংগ্রহকারীর সাথে,

-/⍵ - যদি পরবর্তী শব্দ

0> - 0 এর নিচে

- সঞ্চয়কারীকে ফিরিয়ে দাও অন্যথায়,

(⍺+1) - সঞ্চালক বৃদ্ধি

- এবং সাথে পুনরাবৃত্তি

-⍨\⌽⍵ - শেষ দুটি আইটেম বিপরীত এবং পৃথক।

      {⍵} 8 2
8 2
      {⌽⍵} 8 2
2 8
      {-⍨\⌽⍵} 8 2
2 6


0

ডিসি , 24 বাইট

?[dsb-1rlbrd0<a]dsaxz1-p

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

ব্যাখ্যা

?                         # read input                | 71 120
 [dsb-1rlbrd0<a]          # push string               | [string] 71 120
                dsa       # copy top to register a    | [string] 71 120
                   x      # execute the string        | -5 27 1 1 1 1
                    z     # push length of stack      | 6 -5 27 1 1 1 1
                     1-   # decrement top by 1        | 5 -5 27 1 1 1 1
                       p  # print top

 # string in register a:

  dsb                     # copy top to register b    | 71 120
     -                    # subtract                  | 49
      1                   # push 1                    | 1 49
       r                  # swap top two elements     | 49 1
        lb                # load register b           | 71 49 1
          r               # swap top two elements     | 49 71 1
           d0<a           # if top < 0 execute register a

0

জেড 80 এসেম্বল, 10 বাইট

এই সংস্করণটি কার্যটির "স্ট্রিট ক্রেডিট" সংস্করণ করার চেষ্টা করে। তবে, প্রস্তাবিত পরীক্ষার ক্ষেত্রে যেখানে t1 = -314, t2 = 73 এই প্রোগ্রামটি উত্তর "0" উত্পন্ন করে, যা সত্যি বলতে "2" এর চেয়ে কিছুটা বেশি জ্ঞান অর্জন করে।

SumacLen:
        xor a           ; HL = t[1], DE = t[2], A is the counter
Loop:   bit 7,h
        ret nz          ; stop if HL is negative
        inc a
        sbc hl,de       ; HL = t[3], DE = t[2]
        ex de,hl        ; HL = t[2], DE = t[3]
        jr Loop

জাজএক্স স্পেকট্রাম 48 কে পরীক্ষার জন্য এসজেসপ্লাস এসেমব্লার ব্যবহার করে লিখিত পরীক্ষার প্রোগ্রামটি এখানে ডাউনলোড করা যায় । একটি সংকলিত স্ন্যাপশট উপলব্ধ


সম্ভবত নন-বোনাস সংস্করণটি এর Loop: ret cপরিবর্তে ব্যবহার করে?
নিল

হ্যাঁ, এইচ এর সাইন বিটটি পরীক্ষা করার দরকার নেই। "বিট,, এইচ" মুছে ফেলা যায় এবং "ইনট এ" এর ঠিক সামনে চলে আসার সাথে "রেট সি" দ্বারা প্রতিস্থাপন করা হয় "রেট এনজেড"। মোট 8 টি বাইট
ইন্ট্রোস্পেক

হ্যাঁ; 2ফলাফলের সত্যিই শুধু আমার প্রোগ্রামের সাথে একটি জিনিস।
সাইনস্ট্যাকএফএল্ট

আপনি কি বলতে চান যে 0সেই পরীক্ষার ক্ষেত্রে এটি একটি গ্রহণযোগ্য উত্তর? অথবা আপনি কি বোঝাতে চেয়েছেন যে আমার প্রোগ্রামটি আউটপুটে পরিবর্তন করা ভাল 2?
ইন্ট্রোস্পেক

0

জাভা (ওপেনজেডিকে 8) , 85 75 বাইট

(b,c)->{int d,k=1;for(;;){if(c<0)break;else{d=c;c=b-c;b=d;k++;}}return k;};

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

ungolfed:

(b,c)->{
    int d,k=1;
    for(;;){
        if(c<0)
            break;
        else{
            d=c;
            c=b-c;
            b=d;
            k++;
        }
    }
    return k;
};

1
আমি বিশ্বাস করি এটি ল্যাম্বডা হিসাবে ছোট হবে।
আলু 44

@ আলু 44 সত্যই, তবে এটি করার জন্য আমার কাছে গতকাল সময় ছিল না, তবে আমি এখন এটি করেছি এবং 10 বাইট সংরক্ষণ করেছি।
লুকা এইচ



0

পার্ল 6 ,24 19 বাইট

-5 বাইট ব্র্যাড গিলবার্ট বি 2 গিলসকে ধন্যবাদ।

{+(|@_,*-*...^0>*)}

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

ব্যাখ্যা : প্রথম বন্ধনীগুলির পুরো বিষয়টি হ'ল প্রশ্নের ক্রম ( |@_প্রথম 2 টি পদ (= দুটি পরামিতি)), *-*এমন একটি ফাংশন যা দুটি যুক্তি গ্রহণ করে এবং তাদের পার্থক্যটি ফিরিয়ে দেয়, এবং * <0থামার শর্তটি (0 এর চেয়ে কম শব্দ) । আমরা শেষ শব্দটি বাদ ^দিয়ে ...)। তারপরে আমরা +অপারেটরের দ্বারা সংখ্যার প্রসঙ্গটি জোর করি , যা ক্রমের দৈর্ঘ্য দেয়।



@ ব্র্যাডগিলবার্টবাগিলস: আপনাকে ধন্যবাদ গল্ফিংয়ের সাথে আমার একটি বড় বিরতি ছিল, তাই আমি কিছুটা মরিচা পড়েছি। আমি কি পাবেন না, যদিও, কেন আপনি স্থান দিতে হবে * <0*, but why you don't need it in 0> * `...
Ramillies

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