সোমবার মিনি-গল্ফ # 1: ফিরোনাচি সলভারের বিপরীতে


28

সোমবার মিনি-গল্ফ: সংক্ষিপ্ত চ্যালেঞ্জগুলির একটি সিরিজ , প্রতি সোমবার পোস্ট করা (আশাবাদী!)।

বিখ্যাত ফিবোনাচি সিক্যুয়েন্স হিসাবে একই পদ্ধতি ব্যবহার করে একটি ফিবোনাকির মতো সিকোয়েন্স পাওয়া যায় ; অর্থাৎ প্রতিটি নম্বর F (n) সিক্যুয়েন্স ( F (n) = F (n-1) + F (n-2) ) এর আগের দুটি সংখ্যা যোগ করে বা পরবর্তী দুটি সংখ্যা ( F ) বিয়োগ করে পাওয়া যাবে (এন) = এফ (এন + 2) - এফ (এন + 1) )। মূল পার্থক্য হ'ল এই অনুক্রমগুলি যে কোনও দুটি সংখ্যা দিয়ে শুরু করতে পারে। এই সিকোয়েন্সগুলির শূন্য সূচকটি বিতর্কিত, তবে আপাতত, আমরা এই নিয়মটি ব্যবহার করব:

  • ফিবোনাকির মতো সিকোয়েন্সের 0 তম সংখ্যাটি শেষ সংখ্যা যা পূর্ববর্তী সংখ্যার চেয়ে ছোট।

উদাহরণস্বরূপ, ফিবানচি ক্রম হিসেবে লেখা যেতে পারে 1, 0, 1, 1, 2, 3, 5..., তাই ক্রমানুসারে 0th সংখ্যা নির্জন হয় 0

চ্যালেঞ্জ

চ্যালেঞ্জের লক্ষ্যটি হ'ল কোনও প্রোগ্রাম বা ফাংশন লিখুন যা কোনও বিন্যাসে তিনটি পূর্ণসংখ্যার মধ্যে লাগে:

  • A এবং B , যে দুটি সংখ্যা দিয়ে একটি অনুক্রম তৈরি করা শুরু করবে।
  • এন , আউটপুটে ফলাফলের ক্রমের দৈর্ঘ্য।

এবং 0 তম থেকে শুরু করে ক্রমের প্রথম এন সংখ্যাগুলি আউটপুট করে ।

বিস্তারিত

  • , বি এবং এন যেকোন ক্রম এবং ফর্ম্যাটে নেওয়া যেতে পারে, যতক্ষণ না তারা দৃশ্যমান পৃথক হয়। আপনি যদি অন্য কোনও অর্ডার / ফর্ম্যাট ব্যবহার করেন তবে দয়া করে এটি কী তা নির্দিষ্ট করুন।
  • আপনি ধরে নিতে পারেন যে , বি এবং এন সবসময় ধনাত্মক পূর্ণসংখ্যার হয়।
  • আপনি ধরে নিতে পারেন যে এন 100 এর বেশি নয় এবং ফলাফলটি ক্রমটি ধারণ করবে না x >= 2^31
  • যদি B এর চেয়ে বড় হয় , তবে বি ক্রমের 0 তম সংখ্যা।
  • আউটপুট অবশ্যই স্পেস, কমা এবং / অথবা নিউলাইন দ্বারা পৃথক করা উচিত।
  • একটি trailing স্থান বা সম্পর্কে newline অনুমতি নয়, তবে না একটি trailing কমা।

টেস্ট-মামলা

উদাহরণ 1:

8 13 10

8 13পূর্বের চেয়ে বড় সংখ্যা না পাওয়া পর্যন্ত পিছনে কাজ করা , আমরা পেয়েছি 13 8 5 3 2 1 1 0 1। সুতরাং, 0এই ক্রম 0 নম্বর। এটি থেকে এগিয়ে কাজ করে, আমরা প্রিন্ট আউট 0এবং পরবর্তী 9 জন সদস্য:

0 1 1 2 3 5 8 13 21 34

উদাহরণ 2:

23 37 5

আবার 0 তম সংখ্যাটি সন্ধান করতে পিছনে কাজ করা, আমরা খুঁজে পাই 37 23 14 9 5 4 1 3। এবার চতুর্থ সংখ্যাটি 1, সুতরাং আমরা পরবর্তী চার সদস্যের সাথে এটি প্রিন্ট আউট করব:

1 4 5 9 14

উদাহরণ 3:

4 3 8

এটির সাথে, 0 তম সংখ্যাটি খুঁজে পেতে আমাদের পিছনে কাজ করতে হবে না, কারণ এর 3চেয়ে ছোট 4:

3 7 10 17 27 44 71 115

উদাহরণ 4:

29 47 11

ফলাফল:

1 3 4 7 11 18 29 47 76 123 199

স্কোরিং

এটি , তাই বাইট জেতে সংক্ষিপ্ততম বৈধ কোড। টাইব্রেকার আগের পোস্ট জমা দিতে যান। বিজয়ী পরের সোমবার, 28 সেপ্টেম্বর নির্বাচন করা হবে। শুভকামনা!

সম্পাদনা: আপনার বিজয়ী, জ্যাকুবকে অভিনন্দন, আশ্চর্যজনক 23 বাইটের জন্য পাইথটি ব্যবহার করে !


10
আপনার তৈরি করা [সোমবার-মিনি-গল্ফ] ট্যাগটি আমি সরিয়েছি। আমি মনে করি না যে আমাদের চ্যালেঞ্জগুলির কমবেশি স্বেচ্ছাসেবী দলের জন্য ট্যাগ তৈরি করা উচিত। ট্যাগটি আপনাকে চ্যালেঞ্জ সম্পর্কে সত্যই কিছু বলে না এবং আপনি যদি এই সমস্তগুলি সন্ধান করতে চান তবে অনুসন্ধান বারে বাক্যাংশটি অনুসন্ধান করতে পারে। বিকল্পভাবে, আপনি যদি প্রতিটি ভবিষ্যতের কিস্তিতে এই প্রথম চ্যালেঞ্জের একটি লিঙ্ক অন্তর্ভুক্ত করেন তবে সেগুলি সাইডবারের "লিঙ্কযুক্ত প্রশ্ন" এর অধীনে লিঙ্ক করা হবে।
মার্টিন এন্ডার

@ মার্টিনবাটনার ঠিক আছে, ধন্যবাদ; আমি এটা মনে রাখব.
ETH প্রোডাকশনস

আমি কীভাবে ইনপুট নিতে পারি তা কীভাবে চাই (একটি অজগর তালিকার আক্ষরিক [8, 13, 10])?
নীল

3
চ্যালেঞ্জ বর্তমানে একটি প্রোগ্রাম লিখুন বলে । তার মানে কি এই যে কার্যগুলি অনুমোদিত নয়? (সিসি @ লুইসমেন্ডো)
ডেনিস

3
@ ডেনিস দুঃখিত, আমার মন কেড়ে গেছে। কার্যাদিও অনুমোদিত allowed যে ইশারা জন্য ধন্যবাদ!
ETH প্রোডাকশনস

উত্তর:


12

পাইথ, 23 বাইট

AQWgHGA,-HGG)VvwHA,H+GH

এটি অনলাইনে ব্যবহার করে দেখুন: বিক্ষোভ বা পরীক্ষার স্যুট

পাইথ প্রোগ্রামিংয়ের বেশ অস্বাভাবিক স্টাইল। কখনও কখনও ফাংশনাল প্রোগ্রামিং এর ডাউনসাইড থাকে।

ব্যাখ্যা:

AQWgHGA,-HGG)VvwHA,H+GH  Q = input list of the two starting numbers
AQ                       G, H = Q (unpacking Q)
  WgHG                   while H >= G:
      A,-HGG                G, H = [H - G, G]
            )            end while
              vw         read a number from input
             V           for N in range(^):
                H           print H
                 A,H+GH     G, H = [H, G + H]

12

রেটিনা , 65 54 বাইট

+`(1*),\1(1*)
$2,$1
+`(1*)(,1*);1\B
$1$2$2$1;
^1*,|;1
<empty>

এখানে, <empty>একটি খালি ট্রেলিং লাইন উপস্থাপন করে। -sপতাকা সহ একক ফাইল হিসাবে কোড চালান ।

ইনপুট ফর্ম্যাটটি

A,B;N

যেখানে সংখ্যাগুলি অ্যানারিতে প্রতিনিধিত্ব করা হয় । আউটপুটটি অবিচ্ছিন্নভাবে কমা দ্বারা বিযুক্ত তালিকা। এই ক্ষেত্রে:

8 13 10

হবে

11111111,1111111111111;1111111111

এবং ফলন

,1,1,11,111,11111,11111111,1111111111111,111111111111111111111,1111111111111111111111111111111111

ব্যাখ্যা

+`(1*),\1(1*)
$2,$1

প্রথমত, আমরা কমাতে Aএবং B0 তম এবং -1 ম উপাদানটি। +রেটিনা বলে যতক্ষণ না পারেন Regex ম্যাচিং স্টপ বা প্রতিকল্পন স্ট্রিং পরিবর্তন নেই এই Regex প্রতিকল্পন পুনরায় রাখা। রেজেক্স Aগ্রুপটি 1 এর সাথে ক্যাপচার করে (1*)এবং তারপরে এটি নিশ্চিত করে যে এটি 2 গ্রুপের সাথে ক্যাপচার করার সময় Bকমপক্ষে তত বড় This এটি নিশ্চিত করে যে এই লুপটি একবারে বন্ধ হয়ে যায় ।AB-A\1(1*)A>B

প্রতিকল্পন কেবল সক্রিয় A,Bমধ্যে B-A,Aথেকে ম্যাচ সেটিং দ্বারা $2,$1

+`(1*)(,1*);1\B
$1$2$2$1;

এখন আমরা ইতিমধ্যে স্ট্রিংয়ে প্রয়োজনীয় আউটপুটটির প্রথম সংখ্যা পেয়েছি (পাশাপাশি এটির আগে একটি, যা আমাদের পরে ছাড়িয়ে নিতে হবে)। এই প্রতিস্থাপনটি এখন নেওয়া 1থেকে শেষ দুটি সংখ্যার যোগফল হিসাবে আরও একটি সংখ্যা যুক্ত করে N। কারণ আমাদের ইতিমধ্যে একটি সংখ্যা রয়েছে আমরা কেবল এটির ঘটতে চাই N-1\Bকমপক্ষে ;11স্ট্রিংয়ের শেষে এখনও আছে কিনা তা নিশ্চিত করে আমরা এটি করি । যদি আমরা সিকোয়েন্সের শেষ দুটি মানগুলিকে কল করি Cএবং Dতারপর রেজেক্স Cগ্রুপ 1 এবং ,Dগ্রুপ দুটিতে ক্যাপচার করে । আমরা যারা সঙ্গে ফিরে লিখুন $1$2। তারপরে আমরা এটিও $2$1অনুবাদ করি যা অনুবাদ করে ,D+C। মনে রাখবেন যে আমরা যে এককটির সাথে মিলেছি তা আবার লিখব 1নাNএর ফলে এটি হ্রাস পাচ্ছে।

^1*,|;1
<empty>

পরিশেষে, আমাদের ক্রমটির -১ ম উপাদানটি থেকে মুক্তি পাওয়া দরকার, পাশাপাশি যে বাকী অংশগুলি ;1রয়েছে N, আমরা কেবল সেগুলির মধ্যে কোনওটির সাথে মেলে এবং খালি স্ট্রিংয়ের মাধ্যমে এটি প্রতিস্থাপন করে করি।


7

পাইথন 2, 93 87 67 61 60 বাইট

i,j,l=input()
while j/i:i,j=j-i,i
exec"i,j=j,i+j;print i;"*l

ইনপুট পান (আক্ষরিক অজগর তালিকার হিসাবে [8,10,13])

0 তম মেয়াদে কাজ করে

তারপরে দৈর্ঘ্য না হওয়া পর্যন্ত সংযোজনগুলির ক্রম মুদ্রণ করুন


1
দুর্দান্ত পদ্ধতি। সূচক-কম লুপের জন্য for _ in[1]*l:এটি করা কিছুটা খাটোexec"stuff;"*l
xnor

@ এক্সনর: এটি আমার কাছে উল্লেখযোগ্যভাবে দীর্ঘ হয়।
পুনরাবৃত্ত

তুলনা for _ in[1]*l:stuffকরার জন্য exec"stuff;"*l। @xnor লুপের জন্য স্টাফের অংশটি রাখেনি। বা for _ in[1]*l:থেকেexec";"*l
নীল

2
আপনি প্রতিস্থাপন করতে পারেন j>=iসঙ্গে j/i। সবেমাত্র খুঁজে পেয়েছি! (কারণ আপনি ধরে নিতে পারেন যে এ, বি এবং এন সবসময় ধনাত্মক পূর্ণসংখ্যার )
mbomb007

6

সিজেম, 26 23 বাইট

3 বাইট সঞ্চয় করার জন্য ডেনিসকে ধন্যবাদ।

q~{_@\-_g)}g\@{_@+_p}*t

ক্রমে ইনপুট নেয় N B A(কোনও ধরণের সাদা স্থান দ্বারা পৃথক)। ফলাফলটিকে একটি নিউলাইন-বিচ্ছিন্ন তালিকা হিসাবে মুদ্রণ করে এবং একটি ত্রুটি দিয়ে শেষ হয়

এটি এখানে পরীক্ষা করুন।

ব্যাখ্যা

0 তম উপাদানটি খুঁজতে গিয়ে এটি আরও এক ধাপ এগিয়ে যায়। এটি হ'ল এটির মান একবারে নেতিবাচক হলে তা সমাপ্ত হয়।

q~      e# Read and evaluate input, pushing N, B and A on the stack.
{       e# do while...
  _@\-  e#   B, A = A, B-A
  _W>   e#   Check if A is still non-negative.
}g
\@      e# Reorder N B A into A B N.
{       e# Run the following N times...
  _@+   e#   A, B = B, A+B
  _p    e#   Print B.
}*
t       e# The last A, B are still on the stack. We remove them by trying to
        e# execute a ternary operator: it pops the first two values but then
        e# terminates the program with an error, because there is no third value.

q~{_@\-_g)}g\@{_@+_p}*t( N B A) তিনটি বাইট সংরক্ষণ করে।
ডেনিস

আমি নিজে সিজেমে এটি সমাধান করার চেষ্টা করার সময় উদাহরণস্বরূপ 1 টি থেকে ইনপুটটি নিয়ে আমার সমস্যা হয়েছিল। এখন আমি দেখতে পাচ্ছি যে এই সমাধানটিও প্রত্যাশিত আউটপুট দেয় না। এখানে ত্রুটি কোথায়? আমি মনে করি B>Aএটি পরীক্ষা করার পরিবর্তে এটির জন্য B not smaller than Aকিছু পরীক্ষা করতে হবে তবে আমি কীভাবে সিজেমে এটি করতে পারি তা বুঝতে পারি না figure সম্পাদনা: ডেনিসের সমাধান সঠিক আউটপুট প্রিন্ট করে।
Cabbie407

ঠিক আছে, আমি আমার সমাধানে এটি সমাধান করেছি।
Cabbie407

@ ক্যাবি 407 আপনি সঠিক, আমার <!পরিবর্তে ব্যবহার করা উচিত ছিল >
মার্টিন ইন্ডার

আহ ঠিক আছে. আমি !এই যেখানে এটি রাখা হবে । আমি এটির কাজ করার জন্য কেবল একটি যোগ করেছি;)
ক্যাব্বি 407

5

ল্যাবরেথ , 58 54 49 46 44 বাইট

বিটওয়াইজ অবহেলা ব্যবহারের পরামর্শ দেওয়ার জন্য স্প 3000কে ধন্যবাদ, যা দুটি বাইট সংরক্ষণ করেছিল।

??#"{=
  ;  -
@"~~:}
~""
?
"}}:=
(   +
{{\!:

ইনপুট ফর্ম্যাট হয় B A N। আউটপুট একটি নতুন লাইন পৃথক তালিকা।

ব্যাখ্যা

(কিছুটা পুরানো) মৌলিক ধারণাটি এখনও একই, তবে কোডের বিন্যাসটি এখন অন্যরকম)

এটি আমার সিজেএম উত্তরের মতো একই ধারণাটি ব্যবহার করে (সুতরাং ক্রেডিটগুলি এখনও ডেনিসে যায়): সিক্যুয়েন্সটিকে পিছনে অনুসরণ করার পরে আমরা কোনও নেতিবাচক মান না পাওয়া পর্যন্ত থামি না (যা আমাদের ক্রমটির -1 ম এবং -2 তম উপাদানটি রেখে যায়)। তারপরে, আমরা প্রথম মানটি মুদ্রণের আগে এগুলি যুক্ত করা শুরু করি ।

এটি নিফটি ল্যাবরেথ গল্ফিং ট্রিকস ব্যবহার করে। কোডগুলিতে বিভাগগুলিতে চলুন:

?"
}

আইপি শুরু হতে ?চলেছে (যা পড়ে A)। উপর "(ক নো অপ) এটি একটি কানাগলি হিট, তাই এটি প্রায় একবছর, নির্বাহ ?আবার (পড়া B)। শেষ পর্যন্ত, সহায়ক স্ট্যাকের }দিকে চলে Bযায়। মৃত প্রান্তটি বোকাদের উপর একটি বাইট সংরক্ষণ করে

?
?
}

এখন যে লুপটি অনুক্রমের শুরুটি আবিষ্কার করে:

)(:{
"  -
" "`?...
=}""

)((বৃদ্ধি-হ্রাস) একটি নো-অপ, কিন্তু এটা তা নিশ্চিত করার জন্য স্ট্যাকের উপরে মোড় ইতিবাচক (যেমন যে আইপি পূর্ব সক্রিয়) প্রয়োজন। :সদৃশ A, {প্যাচসমূহ Bপ্রধান স্ট্যাকের ফিরে, -নির্ণয় A-B। আমরা আসলে যা চাই তা B-Aতাই, তাই `মানটিকে অবহেলা করে।

এটি এখন চার দিকের মোড়। নেতিবাচক ফলাফলের জন্য, আইপি প্রোগ্রামের পরবর্তী অংশে ?পড়া Nএবং সরানোর দিকে বাম দিকে ঘুরবে । যদি ফলাফলটি শূন্য হয়, আইপি দক্ষিণে অগ্রসর হতে থাকে, কোণায় ঘুরিয়ে নেয় এবং লুপে থাকে। ফলাফলটি ইতিবাচক হলে, আইপি একটি ডান-টার্ন (পশ্চিম) নেয়, কোণায় ঘুরে এবং অন্য ডান-মোড় নেয় (আবার পশ্চিম দিকে) তাই এটি লুপে থেকে যায়। আমি মনে করি এটি অ-নেতিবাচক (বা ইতিবাচক থেকে ধনাত্মক) মানের থেকে নেতিবাচক পার্থক্য করার জন্য, এটি একটি সাধারণ প্যাটার্নে পরিণত হতে পারে:

                v
                "
               """>negative
non-negative <"""

কমপক্ষে আমি এখনও এই মামলার জন্য আরও কমপ্যাক্ট / দরকারী বিন্যাস খুঁজে পাইনি।

যাই হোক, যখন Aঅ নেতিবাচক, লুপ চালিয়ে }প্যাচসমূহ Aঅক্জিলিয়ারী স্ট্যাক এবং =অদলবদল Aএবং B

একবার Aনেতিবাচক হয়, ?পড়ে Nএবং আমরা দ্বিতীয় লুপ মধ্যে সরানো:

 }:=+:
 }   !
?"({{\

আমরা জানি যে Nইতিবাচক, তাই আমরা বাম-টার্ন (উত্তর) নিয়ে আইপি-র উপর নির্ভর করতে পারি। লুপ বডি এখন সহজভাবে:

}}:=+:!\{{(

কথায় আছে: উভয় Nএবং Aসহায়ক স্ট্যাকের দিকে সরানো । সদৃশ B, সাথে অনুলিপি Aএবং Aঅন্যান্য অনুলিপি যোগ করুন B। এর বর্তমান মানটি মুদ্রণের জন্য এটি আবার নকল করুন B। একটি নতুন লাইন প্রিন্ট করুন। মূল স্ট্যাক এবং হ্রাস এ ফিরে যান Bএবং Nফিরে যান N

যদিও Nইতিবাচক, আইপি অধিকার-টার্ন (উত্তর) লুপ অব্যাহত নিতে হবে। একবার Nশূন্যে পৌঁছে গেলে কোডটি অভিনব উপায়ে শেষ হয়:

আইপি সোজা এগিয়ে চলেছে (পশ্চিমে)। ?চেষ্টা অন্য পূর্ণসংখ্যা পড়তে, কিন্তু আমরা ইতিমধ্যে ফাইলের শেষে পৌঁছে গেছেন তাই এটি আসলে পাহাড় জমে 0পরিবর্তে। `এটিকে উপেক্ষা করার চেষ্টা করে, তবে তা এখনও শূন্য। সুতরাং আইপি এখনও পশ্চিমে চলে যায়, কোণায় ঘুরিয়ে নেয় এবং তারপরে নীচের দিকে অগ্রসর হয় @যা প্রোগ্রামটি বন্ধ করে দেয়।

আমি অবাক হয়েছি যে আমি যদি @তিনটি "চারদিকে `কমপ্লেড নো-অপ্সে (যেমন )() রুপান্তরিত করে এমনকি আরও সস্তা পজিশনে (বর্তমানে এটির জন্য 3 সাদা বর্ণের অক্ষর ব্যয় হয় ) রাখতে পারি তবে আমি এখনও সেই কাজটি করতে পারিনি।


5

সি, 105 102 100 বাইট

main(a,b,n,t){for(scanf("%d%d%d",&a,&b,&n);t=b-a,t>=0;a=t)b=a;for(;n--;b=t)t=a+b,printf("%d ",a=b);}

2 বাইট বন্ধ করে গল্ফ করার জন্য @ C0deH4cker কে ধন্যবাদ!

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


4

মতলব / অক্টাভ, 115 125 বাইট

function x=f(x,n)
while x(2)>=x(1)
x=[abs(x(1)-x(2)) x];end
x=x([2 1]);for k=1:n-1
x=[x(1)+x(2) x];end
x=x(n:-1:1);

ফাংশন হিসাবে বলা উচিত f([8 13],10)

উদাহরণ (মতলব):

>> f([8 13],10)
ans =
     0     1     1     2     3     5     8    13    21    34

অথবা এটি অনলাইনে চেষ্টা করুন (অক্টেভ)


নিয়ম অনুসারে, আপনি ইনপুটটি পরিবর্তন করতে পারেন, তাই f([a b],n)অনুমতি দেওয়া উচিত।
বেকার

@ বেকার ধন্যবাদ! আমি এটি করতে যাচ্ছিলাম ... তবে তারপরে আমি "ইনপুট এবং আউটপুট স্পেস, কমা বা নিউলাইন দ্বারা পৃথক করা যেতে পারে" এই নিয়মটি পড়েছিলাম এবং বিভ্রান্ত হয়ে পড়েছিলাম। আমি স্পষ্টতার জন্য জিজ্ঞাসা করব
লুইস মেন্ডো

হ্যাঁ, আমি জানিনা x=f(x,n)ফাংশনে শিরোনাম গণনা করা হয়েছে ...
বেকার

@AlexA। আমি এই নিয়ম সম্পর্কে লুইসের মন্তব্যের জবাব দিচ্ছিলাম "ইনপুট এবং আউটপুট ফাঁকা স্থান, কমা বা নিউলাইন দ্বারা পৃথক করা যেতে পারে" এবং অপের "এ, বি, এবং এন যতক্ষণ না কোনও ক্রম এবং ফর্ম্যাটে নেওয়া যেতে পারে" দৃশ্যমান পৃথক। " যেহেতু A এবং B আর ফাংশন শিরোনামে দৃশ্যমানভাবে পৃথক হবে না, আমি প্রশ্ন করছিলাম যে কেবলমাত্র 2 টি ফাংশন যুক্তি থাকা জায়েয হবে কিনা।
বেকার

3

হাস্কেল, 67 65 56 বাইট

a#b|a>b=b:scanl(+)(a+b)(a#b)|1>0=(b-a)#a
n%a=take n.(a#)

পরামর্শের জন্য @ নিমিকে ধন্যবাদ

এটি একটি টার্নারি ইনফিক্স ফাংশনটি সংজ্ঞায়িত করে %, যা ফর্ম্যাটটিতে ডাকা হয় , (n%a)bউদাহরণস্বরূপ:

> (10%8)13
[0,1,1,2,3,5,8,13,21,34]

ব্যাখ্যা

বাইনারি পোতা ফাংশন #, প্রথম লাইনে সংজ্ঞায়িত দুটি পূর্ণসংখ্যার লাগে aএবং bএবং অসীম ফেরৎ ফিবানচি মত ক্রম যেখানে aএবং bপরপর উপাদান হিসাবে দেখা যায়।

a#b                                       -- Define a#b:
   |a>b=                                  -- if a>b, then a#b is
        b:                                -- the sequence that starts with b and
          scanl(+)     (a#b)              -- continues with the sums of prefixes of a#b
                  (a+b)                   -- plus the additional term a+b;
                            |1>0=(b-a)#a  -- otherwise, it's (b-a)#a.

ফাংশনটি %কেবল প্রথম nউপাদানগুলির গ্রহণ করে a#b


এর সাথে আপনি ফিবোনাচি ক্রম তৈরি করতে পারেন let f=a:scanl(+)(a+b)f in f (-> পূর্ণ #: a#b|a>b=let f=a:scanl(+)(a+b)f in f|1>0=(b-a)#aএবং দুটি বাইট সংরক্ষণ করুন)
নিমি

@ নিমি ধন্যবাদ; আমি আপনার ধারণা নিয়ে দৌড়েছি এবং মোট 9 বাইট সংরক্ষণ করেছি।
Zgarb

3

> <>, -V = 32 বাইটের জন্য 33 31 + 1

&:{:@(?v:}-$&
-1;!?:&<$+{oan::$&

দশমিক সংখ্যা পার্সিং> <>> তে অপ্রয়োজনীয় হওয়ায় ইনপুটটি অবশ্যই স্ট্যান্ডের উপর চাপ দেওয়া উচিত pushed

ব্যাখ্যা:

অপারেশনের পরে আমি স্ট্যাকটি উপস্থাপন করব। এটি [এফ (এন), এফ (এন + 1), এন] দিয়ে শুরু হয়

প্রথম লাইনগুলি সিরিয়কে তার 0 তম পর্বে চলে যায়:

& removes N from the stack to put it into a register. [F(n), F(n+1)]
:{:@ move the stack and duplicate items to get [F(n+1), F(n), F(n+1), F(n)]
(?v compares the two top items of the stack and branch to the second line if F(n+1) < F(n) [F(n+1), F(n)]
:} move the stack and duplicate its top to get [F(n), F(n+1), F(n)]
- substracts the two top items and put the result on top of the stack [F(n), F(n+1) - F(n)]
$ switchs the top two values of the stack. [F(n+1) - F(n), F(n)]
& retrieve the value from the register. iteration complete, since [F(n+1) - F(n), F(n), N] can also be read as [F(n-1), F(n), N]

দ্বিতীয় লাইনটি এন শর্তাদি প্রিন্ট না করা অবধি সিরিয় উপরে যায়:

< changes the code pointer direction to the left [F(0), F(-1)]
& retrieves the stored value back from the stack [F(0), F(-1), N]
:?!; copies N to compare it to 0, stops if it is [F(0), F(-1), N]
1- decreases it [F(0), F(-1), N-1]
& stores it back [F(0), F(-1)]
$:: makes the stack [F(-1), F(0), F(0), F(0)]
n{ prints the top of the stack then left shifts it [F(0), F(0), F(-1)]
ao displays a line feed (ascii character 0x0a) [F(0), F(0), F(-1)]
+ adds the two top values [F(0), F(-1) + F(0)]
$ switch the two top values. iteration complete since [F(-1) + F(0), F(0)] which can be read as [F(1), F(0)]

00.প্রথম লাইনে পরিবর্তন করে আপনার বাইট গণনা 2 টি হ্রাস করতে সক্ষম হওয়া উচিত &। তাত্ত্বিকভাবে, !কাজ করা উচিত তবে আমি মনে করি যে> <> দীর্ঘতম প্রস্থের প্রস্থের সাথে মেলে লাইনগুলির প্রস্থকে প্যাড করে (সম্পাদনা করুন: যার কারণে আমি আপনাকে 00.প্রথম স্থানে নিয়েছি )।
কোলে

হ্যাঁ, আমি সে সম্পর্কে খুব বেশি নিশ্চিত নই, আমি এখানে লোকদের ব্যবহার করতে দেখেছি! এমনভাবে যা স্পেসগুলি উপেক্ষা করে। আমি জানি ফিশাল্যাংগ্রোয়েজ ডট কম-এ অনলাইন অনুবাদক সেভাবে কাজ করে না, তবে অজগর দোভাষী হতে পারে। এবং কৌশলটি যেভাবেই হোক না কেন, ধন্যবাদ!
অ্যারন

অনলাইন অনুবাদক সাথে কাজ করে !বা ?(লাইন শেষে) যদি এটা দীর্ঘতম লাইনে আছেন। আপনি এটির মতো কিছু দিয়ে এটি চেষ্টা করতে পারেন 1n!এবং এটি ত্রুটিযুক্ত হবে, তবে এর নীচে কোনও লাইন যদি এর চেয়ে দীর্ঘ কিছু থাকে তবে এটি পছন্দ lorumipsumকরবে না।
কোলে

"আউটপুট অবশ্যই স্পেস, কমা এবং / অথবা নিউলাইন দ্বারা পৃথক করা উচিত।" দুঃখিত, তবে আপনাকে অন্য সংস্করণটি ব্যবহার করতে হবে। ভাল চাকরি, যদিও!
ETH প্রোডাকশনস

এটি ঠিক করা হয়েছে, আমি 2 বাইট সংরক্ষণের জন্য জায়গাগুলির পরিবর্তে \ n ব্যবহার করেছি
হারুন

2

জাভা, 113 78 76 বাইট

এর জন্য ক্রেডিট ইটিএইচ প্রডাকশনে যায় প্রদানের অ্যালগরিদম আমি এই উত্তর ব্যবহার করুন।

(a,b,n)->{for(;a<=b;b-=a)a=b-a;for(;n-->0;b+=a,a=b-a)System.out.println(b);}

চেষ্টা এখানে করুন

ব্যাখ্যা:

(a,b,n)->{
    for (;a<=b;b=b-a)a=b-a;  //Compute previous terms while a <= b
    for (;n-->0;b=a+b,a=b-a) //Compute and print next terms while n > 0
    System.out.println(b);   //Print term
}

আসল পন্থা, 113 93 বাইট

আরও গোল্ফ লাগছে;)

String a(int a,int b,int n){return n<0?a+" "+a(b,a+b,n+1):n>0?a>b?a(b,a+b,-n):a(b-a,a,n):"";}

চেষ্টা কর এখানে

ব্যাখ্যা:

String a(int a, int b, int n){
    return 
    n < 0 ?                           //If n < 0
        a + " " + a(b, a + b, n + 1)  //Return a + next terms and increment n.
    :                                 //Else
        n > 0 ?                       //If n > 0
            a > b ?                   //If a > b
                a(b, a + b, -n)       //Negate n and return terms.
            :                         //If a <= b
                a(b - a, a, n)        //Generate previous term.
        :                             //If n == 0
            ""                        //Return nothing.
    ;
}

3
কি? জাভা কি জেএসের চেয়ে খাটো?!? কিছু করার আছে যা আমি ভুল করছি ....
ETH প্রচারগুলি

@ এথ প্রডাকশনগুলি আমি আসলে আপনার অ্যালগরিদমটি অনুলিপি করেছি (এবং তারপরে এটি গল্ফড করে): পি
দ্য নম্বরওনে

আমার সাথে এটি ঠিক আছে, আমি আপনার কিছু উন্নতি নিয়েছি;) আমি ভুলে গেছি প্রতিটি আইটেম আলাদাভাবে মুদ্রণ জেএসে বৈধ ছিল।
ETH প্রোডাকশনগুলি

আপনি সংক্ষিপ্ত b=b-aকরতে পারেন b-=aএবং এর সাথে একই a=b+a। এটি 2 বাইট সাশ্রয় করবে
জাভিয়ের ডিয়াজ

ভার্বোস ভাষা জমা দেওয়ার জন্য +1 এত ছোট। সাধারণত জাভা জমা দিন সবচেয়ে দীর্ঘ!
ড্যাঙ্কমেস

2

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

এটি সর্বাধিক গল্ফ করা হয়েছে। আমরা দেখব.

(a,b,n)=>{while(a<=b)b-=a=b-a;for(;n--;console.log(a=b-a))b+=a}

Ungolfed:

function f(a,b,n) {
  // repeat until we find the 0th item...
  while (a <= b) {  // if a = 5, b = 8:
    a = b - a;      // a = (8 - 5) = 3
    b = b - a;      // b = (8 - 3) = 5
  }
  // repeat n times...
  while (n-- > 0) { // if a = 5, b = 8:
    b += a;         // b = (8 + 5) = 13
    a = b - a;      // a = (13 - 5) = 8
    console.log(a); // print out each item
  }
}

1

গণিত 112

শেষ পর্যন্ত এটি গল্ফ হবে

z[a_, b_, n_] := (
  f[0] := Min[a, b];
  f[1] := Max[a, b];
  f[x_] := f[x - 1] + f[x - 2];
  f /@ Range[n]
  )

1

সিজেম, 40 বাইট

l~:A;{_@_@)<}{_@\-\}w\{A(:A0>}{_p_@+}w\;

শিশুর পদক্ষেপ. এটি আমার প্রথম সিজেএম প্রোগ্রাম, তাই আমি গর্বিত এটি আদৌ কার্যকর হয়।

এটি উদাহরণগুলির মতো একই আকারে ইনপুট নেয়।

আমি এখন দেখেছি { ... }*কনস্ট্রাক্ট ব্যবহার করে এটিকে 33 বাইটে কমাতে পারব ।

l~:A;{_@_@)<}{_@-z\}w\A{_p_@+}*;;

এবং আমি স্টারটি পরিষ্কার করতে এবং একটি ত্রুটি তৈরি করতে টের্নারি অপারেটরটি ব্যবহার করে আরও একটিকে কমাতে পেরেছিলাম।


1

রুবি, 141 বাইট

def u a,b,n,z=""
n<1 ? z.chop : u(b,a+b,n-1,z+"#{a} ")
end 
def d a,b,z=0
a.abs>b ? z : d(b-a,a,[a,b]) 
end 
def f a,b,n
x,y=d a,b 
u x,y,n
end 

ফাঁসি

f ফাংশনটি পছন্দসই আউটপুট তৈরি করে, যুক্তির নামগুলি প্রশ্ন থেকে পরিবর্তনশীল নামের সাথে মেলে

f(8,13,10) # returns => "0 1 1 2 3 5 8 13 21 34"

কিছুই চালাক নয়:

  • u ( আপ) ) ফাংশনটি পুনরাবৃত্তি ব্যবহার করে a, b দিয়ে শুরু হওয়া ফিবোনাচি অনুক্রমের n উপাদানগুলিকে গণনা করে
  • d ( নিচে) ) ফাংশনটি পুনরাবৃত্তি ব্যবহার করে দুটি শেষ উপাদান প্রদত্ত 0 তম এবং 1 ম উপাদানকে সন্ধান করে
  • f ( ফিবোনাচি ) ফাংশন দুটি একসাথে রাখে


0

রুবি, 81 75 73

a,b,n=23,37,5;while(c=b-a)<a;b,a=a,c;end;p a;[*2..n].map{b=c+a;c,a=a,b;p b}

রেঞ্জ.ম্যাপের সাথে লুপটির পরিবর্তে 6 বাইট দ্বারা সংক্ষিপ্ত

a,b,n=23,37,5;while(c=b-a)<a;b,a=a,c;end;p a;[*2..n].map{p b=c+a;c,a=a,b}

মুদ্রণ বিবৃতি মুভিং দ্বারা আরও 2 বাইট সংরক্ষণ করা




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