একটি সংক্ষিপ্ত ক্রম সাজান


17

f(n) = f(n-1)+f(n-2)শুরু করে পুনরাবৃত্ত সম্পর্কের উপর ভিত্তি করে একটি ক্রম বিবেচনা করুন f(1) = x1, f(2) = x2। কারণ x1 = 2, x2 = 1, ক্রমটি এর শুরু হয়:

2  1  3  4  7  11  18  29  47  76  123  199  322  521  843

এটিকে স্ট্রিংয়ের সাথে যুক্ত করে দেবে:

213471118294776123199322521843

এখন, এই তালিকাটি সবচেয়ে ছোট সম্ভাব্য সংখ্যায় দেয় যা দেয় y(n) > y(n-1)। প্রথম সংখ্যাটি, তারপর দ্বিতীয় ইত্যাদি দিয়ে শুরু করুন প্রথম আউটপুট নম্বরটি সর্বদা একক অঙ্কের হওয়া উচিত। প্রয়োজনীয় সংখ্যা শূন্য সহ সর্বশেষ সংখ্যাটি প্যাড করুন।

2 13 47 111 829 4776 12319 93225 218430

আপনি যে (x1, x2)কোনও সুবিধাজনক বিন্যাসে ইনপুট হিসাবে দুটি নম্বর পাবেন , এবং চ্যালেঞ্জটি হল সাজানো তালিকার আউটপুট করা।

নিয়মাবলী:

  • ফাংশন এবং প্রোগ্রাম ঠিক আছে
  • প্রাথমিক অনুক্রমের ঠিক 15 নম্বর থাকবে (শেষ সংখ্যাটি হবে f(15))।
  • x1এবং x2অ-নেতিবাচক (শূন্য সম্ভব)।
  • আউটপুট যে কোনও সুবিধাজনক বিন্যাসে হতে পারে
  • আউটপুট ভেক্টরটি yঅবশ্যই তৈরি করতে হবে y2 > y1
    • প্রথমে সবচেয়ে ছোট সম্ভব y1, তারপরে সবচেয়ে ছোট সম্ভব y2, তারপরে আরও y3অনেক কিছু।
  • x1 = x2 = 0তারপরে যদি 15 জিরো আউটপুট হয় (অন্য আউটপুট হিসাবে একই বিন্যাসে, অর্থাত্ নয় 000000000000000)।

উদাহরণ :

Input: 1 1
Output: 1  12  35  81  321  345  589  1442  3337 7610

Input: 3 2
Output: 3  25  71  219  315  0811 3121  23435 55898 145300
                             |
                             Optional leading zero 
Input: 0 0
Output: 0  0  0  0  0  0  0  0  0  0  0  0  0  0  0

বাইটের মধ্যে সংক্ষিপ্ততম কোডটি জয়ী। যদি সম্ভব হয় তবে কোনও অনলাইন দোভাষীকে একটি লিঙ্ক অন্তর্ভুক্ত করুন।


"ক্ষুদ্রতম সম্ভাব্য সংখ্যা" বলতে কী বোঝায়? সবচেয়ে ছোট গড়? সবচেয়ে ছোট? অন্যকিছু?
isaacg

@ আইসাকগ সুতরাং নবম সংখ্যাটি (এন -১) এর চেয়েও বেশি।
নিকেল

1
আমার প্রশ্নটি পরিষ্কার করতে, সঠিক বিভাজনটি কী হবে 5467? 54 67? 5 46 70?
isaacg


3
0 টি জিনিসটি বরং বিরক্তিকর এবং অপ্রয়োজনীয় ব্যতিক্রম বলে মনে হচ্ছে।
মার্টিন এেন্ডার

উত্তর:


1

পাইথ, 56 বাইট

LsgM.:sMb2?sQsM.WyHX_1Z`0u?yGX_1GHaGHjkhM.u,eNsN14QYmZ15

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

ব্যাখ্যা:

প্রথমে আমরা পরীক্ষা করে নিই যে ইনপুটটি ঠিক আছে কিনা 0, 0। যদি তা হয় তবে 15 জিরো মুদ্রণ করুন।

অন্যথায়, আমরা ক্রম উত্পাদন, সঙ্গে jkhM.u,eNsN14Q। এটি ফিবোনাচি ক্রমের জন্য পাইথ অ্যালগরিদমের সাথে সমান।

পরবর্তী, আমরা এই স্ট্রিং উপর হ্রাস। সঞ্চালকটি স্ট্রিংগুলির একটি তালিকা যা বিভক্ত ক্রমের প্রতিটি সংখ্যাকে উপস্থাপন করে। প্রতিটি হ্রাস পদক্ষেপ এ, আমরা পরবর্তী অক্ষরে নিয়ে এবং চেক অনুক্রমে সঁচায়ক থাকা অবস্থায় সাহায্যকারী ফাংশন ব্যবহার করে y, সঙ্গে সংজ্ঞায়িত LsgM.:sMb2, যা truthy হয় iff ইনপুট অর্ডার বাইরে। যদি এটি ক্রমযুক্ত হয় তবে আমরা পরবর্তী অক্ষরটিকে তার নিজস্ব নম্বর হিসাবে তালিকায় যুক্ত করব। যদি তা না হয়, আমরা শেষ স্ট্রিংয়ের শেষে পরবর্তী অক্ষরটি যুক্ত করি। এটি সম্পন্ন হয় u?yGX_1GHaGH ... Y

এর পরে, আমরা লুপ করার সময় একটি কার্যকরী সঞ্চালন করি। চালকের তালিকার ক্রম না হওয়া অবধি লুপটি চলতে থাকবে, সাহায্যকারী ফাংশনটি পুনরায় ব্যবহার করে। প্রতিটি পদক্ষেপে, 0তালিকার শেষ স্ট্রিংয়ের শেষে একটি যুক্ত করা হয়। এটি সম্পন্ন হয় .WyHX_1Z`0

অবশেষে, স্ট্রিংগুলি পূর্ণসংখ্যায়, সহ sMএবং মুদ্রিত রূপান্তরিত হয় ।


পাইথ, 51 বাইট

LsgM.:sMb2?sQsM.WyHX_1Z`0hf!yT_./jkhM.u,eNsN14QmZ15

আমি বিশ্বাস করি এটি কাজ করে তবে এটি পরীক্ষা করা খুব ধীর - এটি স্ট্রিংকে বিভক্ত করার জন্য একটি জোর বল সমাধান solution


আমি Xফাংশনে কিছু উন্নতি করব , তবে উপরের কোডটি পাইথের সংস্করণে কাজ করে যা প্রশ্ন পোস্ট হওয়ার সময় সবচেয়ে সাম্প্রতিক ছিল।


5

জাভাস্ক্রিপ্ট ES6, 127 135

(a,b)=>eval("for(n=r=[],v=13,o=a+n+b;v--;a=b,b=t)o+=t=b+a;for(d of o+'0'.repeat(99))(n+=d)>+v&&(r.push(v=n),n='');+v?r:[...o]")

পরীক্ষা

F=(a,b)=>eval("for(n=r=[],v=13,o=a+n+b;v--;a=b,b=t)o+=t=b+a;for(d of o+'0'.repeat(99))(n+=d)>+v&&(r.push(v=n),n='');+v?r:[...o]")

// less golfed

U=(a,b)=>{
  for(n=r=[], o=a+n+b, v=13; v--; a=b, b=t)
    o+= t= b+a;
  for(d of o+'0'.repeat(99))
    if ((n+=d) > +v)
      r.push(v=n), n='';
  return +v ? r : [...o]
}

function test(){
  var i = I.value.match(/\d+/g)
  O.textContent = i.length > 1 ? F(+i[0],+i[1]) : ''
}
test()
A,B : <input id=I value='0 1' oninput='test()'>
<pre id=O></pre>


X1 = 0, x2> 0, যেমন ইনপুট "0 1" এর জন্য একটি ত্রুটি রয়েছে।
flornquake

@ ফ্লোরকোকে স্থির বাইট গণনাটি একই থাকে, কিছুটা শূন্য ফিলিং কোড হ্রাস করে
edc65

2

জাভাস্ক্রিপ্ট ES6, 187 180 187 184 182 179 175 172 165 160 155 154 বাইট

(a,b)=>eval('d=""+a+b;for(i=-12,j=1;++i<99;)i<2?(c=b,d+=b=a+b,a=c,r=a?[d[0]]:"0,".repeat(15)):(f=+d.slice(j,i))>r[r.length-1]?(r.push(f),j=++i-1):d+=0;r')

এটি পরীক্ষার ক্ষেত্রে 1,1এবং 3,2পরীক্ষার ক্ষেত্রে আমি একই রকম ফলাফল পাই । 0,0অতিরিক্ত 26 বাইট নিয়েছে ...

ডি-গল্ফ + ইএস 5 + ডেমোতে রূপান্তরিত:

function s(a, b) {
  d = "" + a + b;
  for (i = -12, j = 1; ++i < 99;)
    i < 2 ?
      (c = b, d += b = a + b, a = c, r = a ? [d[0]] : "0,".repeat(15))
    : (f = +d.slice(j, i)) > r[r.length - 1] ?
      (r.push(f), j = ++i - 1)
      : d += 0;
  return r
}
document.write(
   s(1,1)+"<br>"+
   s(3,2)+"<br>"+
   s(0,0)
)


কেন এটি আরও সংখ্যা তৈরি করে? এবং এটি ঠিক করা সহজ হওয়া উচিত নয়? প্রয়োজন হয় n <= 15
স্টিভি গ্রিফিন

@Stewie কিন্তু হেই, প্রথম 12 এবং দ্বিতীয় 11. চেয়ে ছোট 15. যে উত্পাদন করে
nicael

প্রাথমিক ক্রমটির f(n) = f(n-1)+f(n-2)যথাযথ 15 এর সর্বাধিক মান রয়েছে output
স্টিভি গ্রিফিন

@ স্টেউই ঠিক আছে, তাই ঠিক 15 হওয়া উচিত, তাই না? তারপরে, এন <= 15 দ্বারা আপনি কি বোঝাচ্ছেন যে ইনপুট সংখ্যা 15 এর চেয়ে কম?
নিকেল

প্রাথমিক ক্রমানুসারে মান রয়েছে তা গণনা 15. শুরু মান হয় f(1)=x1এবং f(2)=x2আউটপুট মান রয়েছে তা গণনা ইনপুট মান উপর ভিত্তি করে নির্ধারণ করা হয় 15 চেয়ে বেশী হতে পারে। জন্য 3 2এটা 10. হতে হবে
Stewie গ্রিফিন

1

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

(a,b)=>(k=[...Array(15).keys(y="")],p=-1,z=k.map(_=>0),a|b?[...k.map(f=n=>n--?n?f(n)+f(n-1):b:a).join``,...z].map(d=>+(y+=d)>p?(p=y,y=" ",p):"").join``:z.join` `)

ব্যাখ্যা

(a,b)=>(
  k=[...Array(15).keys(y="")],     // k = array of numbers 0 to 14, initialise y
  p=-1,                            // initialise p to -1 so that 0 is greater than p
  z=k.map(_=>0),                   // z = array of 15 zeroes
  a|b?[                            // if a and b are not 0
      ...k.map                     // for range 0 to 14
      (f=n=>n--?n?f(n)+f(n-1):b:a) // recursive sequence function (0 indexed)
      .join``,                     // join result of f(0) to f(14) as a string
      ...z                         // append zeroes for padding
    ].map(d=>                      // for each digit of concatenated result
      +(y+=d)                      // append the digit to the current number y
      >p?(                         // if the current number is greater than the previous p
        p=y,                       // set previous to the current number
        y=" ",                     // reset y (with space as a separator)
        p                          // output the current number (with space at the start)
      ):""                         // else add nothing to the output
    )
    .join``                        // return the output as a string
  :z.join` `                       // return a bunch of zeroes if a and b are 0
)

পরীক্ষা


1

গণিত, 192 বাইট

f[{0,0}]:=0~Table~15
f@l_:=(t=0;q={};If[#>0,q~Join~{10^⌈Log10[t/#]⌉#},q]&[Last@#]&@FoldList[If[#>t,AppendTo[q,t=#];0,#]&[10#+#2]&,0,Flatten@IntegerDigits@SequenceFoldList[#+#2&,l,Range@13]])

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

f[{2, 1}]
(* {2, 13, 47, 111, 829, 4776, 12319, 93225, 218430} *)
f[{3, 2}]
(* {3, 25, 71, 219, 315, 811, 3121, 23435, 55898, 145300} *)
f[{0, 0}]
(* {0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0} *)

ফাংশন নামের দৈর্ঘ্য আমাকে হত্যা করছে।


1

হাস্কেল, 165 159 152 142 141 বাইট

w=take 15
x#y=x:scanl(+)y(x#y)
0%0=w[0,0..]
x%y=g(-1)(w(x#y)++0%0>>=show)(-1)
g _""_=[]
g b l@(h:t)a|b>a=b:g 0l b|1<2=g(max 0b*10+read[h])t a

ব্যবহারের উদাহরণ: 3 % 2-> [3,25,71,219,315,811,3121,23435,55898,145300]

অনলাইন ডেমো (একটি mainমোড়ক সহ)।

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

w=take 15
x#y=x:scanl(+)y(x#y)              -- fibonacci sequence generator for x and y

0%0=w[0,0..]                      -- special case 0%0
x%y=g(-1)(w(x#y)++0%0>>=show)(-1) -- calculate fib sequence, add some extra 0 and
                                  -- flatten all digits into a single string.
                                  -- start calculating the resulting sequence

g _""_=[]                         -- if we don't have digits left, stop.
                                  -- the final 0 in the second parameter is ignored.
g b l@(h:t)a
  |b>a=b:g 0l b                   -- if the current number is greater than the
                                  -- previous one, take it and start over.
  |1<2=g(max 0b*10+read[h])t a    -- otherwise add the next digit and retry.
                                  -- The "max" fixes the initial call with -1.

0

পাওয়ারশেল, 167 166 বাইট

param($x,$w)if($w-lt($x-eq0)){"0`n"*15;exit}[char[]]("$x"+-join(0..13|%{$w;$w=$x+($x=$w)}))|%{$z+="$_";if(+$z-gt$y){($y=$z);$z=""}};if($z){while(+$z-lt$y){$z+="0"}$z}

বাদ দিয়ে একটি বাইট সংরক্ষণ করেছেন $sভেরিয়েবলটি সরিয়ে এবং কেবল আউটপুট লুপটি সরাসরি খাওয়ানোর করা হয়েছে।

অবহেলিত এবং মন্তব্য করেছেন:

param($x,$w)           # Take input parameters as x and w
if($w-lt($x-eq0)){     # If x=0, ($x-eq0)=1, so $w-lt1 implies w=0 as well
  "0`n"*15             # Print out 15 0's separated by newlines
  exit                 # And exit program
}                      # otherwise ...
[char[]](              # Construct the sequence string as a char-array
"$x"+-join(            # Starting with x and concatenated with a joined array
  0..13|%{             # Loop
    $w                 # Add on w
    $w=$x+($x=$w)      # Recalculate for next loop iteration
  }
))|%{                  # Feed our sequence as a char-array into a loop
  $z+="$_"             # z is our output number, starts with the first digit
  if(+$z-gt$y){        # If z is bigger than y (initialized to 0)
    ($y=$z)            # Set y equal to z and print it
    $z=""              # Reset z to nothing to start building the next number
  }
}
if($z){                # If there is remaining digits, we need to pad zeroes
  while(+$z-lt$y){     # Until z is bigger than y
    $z+="0"            # Tack on a zero
  }
  $z                   # Print the final number
}

0

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

{$_=@=(|@_,*+*...*)[^15].join.comb;.sum??[.shift,{last if !@$_;until (my$a~=.shift//0)>$^b {};$a}...*]!!$_} # 107

ব্যবহার:

# give it a lexical name for ease of use
my &code = {...}

# use 「eager」 because the anonymous block returns a lazy array
# and 「say」 doesn't ask it to generate the values
say eager code 2, 1;
# [2 13 47 111 829 4776 12319 93225 218430]
say eager code 1, 1;
# [1 12 35 81 321 345 589 1442 3337 7610]
say eager code 3, 2;
# [3 25 71 219 315 0811 3121 23435 55898 145300]
say eager code 0, 0;
# [0 0 0 0 0 0 0 0 0 0 0 0 0 0 0]
say eager code 0, 1;
# [0 1 12 35 81 321 345 589 1442 3337 7000]

ব্যাখ্যা

( @_) স্খলিত ( |) এ আর্গুমেন্ট দিয়ে শুরু করে ক্রমানুসারে একটি ফিবোনাচি তৈরি করে

|@_,*+*...*

এই ক্রমের প্রথম 15 উপাদান নেয়

(…)[^15]

এটি একটি একক স্ট্রিং ( .join) এ সংযুক্ত করে পৃথক অক্ষরগুলির ক্রম ( .comb) এর মধ্যে বিভক্ত করে এবং সংরক্ষণ করে যে "ডিফল্ট" স্কেলারে ( $_) প্রথমে একটি বেনামে অ্যারে ( @) সংরক্ষণ করে প্রথমে একটি পরিবর্তনীয় অ্যারেতে ক্রমটি চাপিয়ে দেওয়ার পরে )

$_=@=(…)[^15].join.comb;

এটি ডিফল্ট স্কেলারে মানগুলির যোগফল খুঁজে পায় এবং যদি এটি শূন্য হয় তবে ডিফল্ট স্কেলারটি ফিরে আসে, এতে 15 টি শূন্যের অ্যারে থাকবে

.sum??  !!$_

যদি যোগফল শূন্য না হয় তবে এটি ডিফল্ট স্কেলারের প্রথম উপাদানটি সরিয়ে প্রথমে একটি তালিকা তৈরি করে

.shift,  

বাকী মানগুলি তৈরি করার পরে, পূর্ববর্তী মানগুলির তুলনায় এটি পরীক্ষা করা ( $^b)
যদি ডিফল্ট স্কেলারটি মান থেকে যায় তবে পরিবর্তে 0 ব্যবহার করুন ( //0)

…,{  ;until (my$a~=.shift//0)>$^b {};$a}...*

যখন ডিফল্ট স্কেলারে কোনও উপাদান নেই তখন থামানো ping

…,{last if !@$_;  }...*

কেন সেখানে একটা জায়গা থাকতে হবে until (my$a...? কি (একটি বিশেষ বিভেদক না?
বিড়াল

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