নিকটতম ফিবোনাচি নম্বরটি সন্ধান করুন


30

আমরা সবাই বিখ্যাত ফিবোনাচি সিকোয়েন্সের সাথে পরিচিত , যা শুরু হয় 0এবং 1, এবং প্রতিটি উপাদানই পূর্ববর্তী দুটির যোগফল। এখানে প্রথম কয়েকটি পদ রয়েছে (OEIS A000045 ):

0, 1, 1, 2, 3, 5, 8, 13, 21, 34, 55, 89, 144, 233, 377, 610, 987, 1597, 2584

ধনাত্মক পূর্ণসংখ্যা দেওয়া , এই নিয়মের অধীনে, ফিবোনাচি অনুক্রমের নিকটতম সংখ্যাটি ফিরিয়ে দিন:

  • নিকটস্থ ফিবানচি সংখ্যা দেওয়া পূর্ণসংখ্যা সঙ্গে ক্ষুদ্রতম পরম পার্থক্য সঙ্গে ফিবানচি নম্বর হিসাবে সংজ্ঞায়িত করা হয়। উদাহরণস্বরূপ, 34সবচেয়ে নিকটতম ফিবোনাচি সংখ্যাটি 30, কারণ |34 - 30| = 4এটি দ্বিতীয় নিকটতমটির চেয়ে ছোট, যার 21জন্য |21 - 30| = 9

  • প্রদত্ত পূর্ণসংখ্যা যদি ফিবোনাচি অনুক্রমের হয় তবে নিকটতম ফিবোনাচি সংখ্যাটি হুবহু। উদাহরণস্বরূপ, নিকটতম ফিবোনাচি সংখ্যাটি 13হুবহু 13

  • টাই করার ক্ষেত্রে, আপনি উভয়ই ইনপুটটির নিকটতম বা কেবল উভয়কেই আউটপুট দেয় এমন ফিবোনাচি সংখ্যার মধ্যে একটি আউটপুট বেছে নিতে পারেন। উদাহরণস্বরূপ, যদি আপনার ইনপুট 17নিচেরগুলির মধ্যে সকল বৈধ আছেন: 21, 13বা 21, 13। আপনি যদি তাদের উভয়কে ফেরত দেন তবে দয়া করে ফর্ম্যাটটি উল্লেখ করুন।

ডিফল্ট লুফোলস প্রয়োগ হয়। আপনি কোনও স্ট্যান্ডার্ড পদ্ধতিতে ইনপুট নিতে এবং আউটপুট সরবরাহ করতে পারেন । আপনার প্রোগ্রাম / ফাংশনটি কেবল 10 8 অবধি মানগুলি পরিচালনা করতে হবে ।


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

ইনপুট -> আউটপুট

1 -> 1
3 -> 3
4 -> 3 বা 5 বা 3, 5
6 -> 5
7 -> 8
11 -> 13
17 -> 13 বা 21 বা 13, 21
63 -> 55
101 -> 89
377 -> 377
467 -> 377
500 -> 610
1399 -> 1597

স্কোরিং

এটি , তাই প্রতিটি ভাষার বাইটের মধ্যে সংক্ষিপ্ততম কোডটি জয়ী!



এফডাব্লুআইডাব্লু, বৃহত ইনপুটগুলির জন্য দক্ষতার সাথে এটি করার জন্য এখানে কিছু পাইথন কোড রয়েছে, সেই সাথে একটি স্ক্রিপ্ট যা বিভিন্ন অ্যালগরিদমের সময় নির্ধারণের জন্য ব্যবহার করা যেতে পারে।
প্রধানমন্ত্রী 2Ring

0 কে কি ধনাত্মক পূর্ণসংখ্যা হিসাবে বিবেচনা করা হয়?
অ্যালিক্স আইজেনহার্ট

@AlixEisenhardt নং ইতিবাচক পূর্ণসংখ্যাn বোঝা n ≥ 1
মিঃ এক্সকডার

উত্তর:


21

পাইথন 2 , 43 বাইট

f=lambda n,a=0,b=1:a*(2*n<a+b)or f(n,b,a+b)

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

একটানা ফিবোনাচি সংখ্যার জোড় দিয়ে ইট্রেট করে (a,b)যতক্ষণ না এটি পৌঁছে যায় যেখানে ইনপুটটি nতাদের মিডপয়েন্টের চেয়ে কম (a+b)/2, তারপরে ফিরে আসে a

প্রোগ্রাম হিসাবে লিখিত (47 বাইট):

n=input()
a=b=1
while 2*n>a+b:a,b=b,a+b
print a

একই দৈর্ঘ্য :

f=lambda n,a=0,b=1:b/2/n*(b-a)or f(n,b,a+b)

15

নিম , 5 বাইট

f𝐖𝕖S𝕔

ব্যাখ্যা:

f       Push infinite Fibonacci list
 𝐖                     93
  𝕖     Select the first ^ elements
        This is the maximum amount of elements we can get before the values overflow
        which means the largest value we support is 7,540,113,804,746,346,429
   S𝕔   Closest value to the input in the list

নিমের নবীনতম সংস্করণে এটি 3 বাইটে গল্ফ করা যেতে পারে:

fS𝕔

অসীম তালিকাগুলি কেবল তাদের সর্বাধিক মান পর্যন্ত যেতে পুনরায় কাজ করা হয়েছে wor

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


2 অক্ষর আছে যখন এই 5 বাইট কিভাবে? এবং প্রথম এবং দ্বিতীয় সমাধানের মধ্যে পার্থক্য কী?
শে

1
আপনি কি বাইট বা অক্ষর গণনা করছেন? এটি প্রদর্শিত হয় প্রথম 15 বাইট এবং দ্বিতীয় 7 বাইট।
নাটোয়ামি

এটির কিছুটা নিজস্ব কোডপেজ থাকতে পারে যার মধ্যে প্রতিটি চরিত্রের নিজস্ব বাইট মানে প্রথমটি হ'ল 5 বাইট উত্তর দ্বিতীয়টি 3 বাইট। উভয়ের মধ্যে পার্থক্য হ'ল প্রথমটি প্রথম 93 টি উপাদানগুলির ম্যানুয়ালটি নির্বাচন করে যখন একটি নতুন সংস্করণে দ্বিতীয় স্নিপেট স্বয়ংক্রিয়ভাবে ভাষাগুলির int আকার হ্যান্ডেল করতে পারে এমন সর্বোচ্চ সম্ভাব্য মানটি নির্বাচন করে
রোমান গ্রাফ

1
@Cairdcoinheringaahing আমার প্রায়শই লোকেরা আমার প্রোগ্রামগুলি দেখতে না পারায় সমস্যা হয়। স্ক্রিনশট
Okx

1
@ ওক্স ঠিক আছে, আকর্ষণীয়, আমি অনুমান করতাম না have
নাটোয়ামি


8

আর , 70 67 64 62 60 বাইট

-২ বাইট ধন্যবাদ জিউরিওকে!

-2 আরও বাইটস জ্যুরিওর ধন্যবাদ (ছেলে সে কি গল্ফ করতে পারে!)

F=1:0;while(F<1e8)F=c(F[1]+F[2],F);F[order((F-scan())^2)][1]

যেহেতু আমাদের কেবল মানগুলি আপ করতে হবে তাই 10^8এটি কাজ করে।

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

স্টিডিনের nকাছ থেকে পড়ে। whileলুপ Fibonacci সংখ্যা উত্পন্ন F(ক্রম হ্রাস মধ্যে); টাই হওয়ার ক্ষেত্রে বৃহত্তরটি ফিরে আসে। এটি বেশ কয়েকটি সতর্কবার্তা ট্রিগার করবে কারণ while(F<1e8)কেবলমাত্র Fসতর্কতার সাথে প্রথম উপাদানটির বিবৃতিটি মূল্যায়ন করে

মূলত আমি ব্যবহার করেছি F[which.min(abs(F-n))], নির্বোধ পন্থা, তবে @ ডিঝুরিও প্রস্তাব করেছেন (F-n)^2যেহেতু আদেশটি সমান হবে এবং orderতার পরিবর্তে হবে which.minorderএর ইনপুটটিকে ক্রমবর্ধমান ক্রমে রাখার জন্য সূচকের একটি ক্রম ফেরত দেয়, যদিও আমাদের [1]কেবল প্রথম মানটি পাওয়া দরকার।

দ্রুত সংস্করণ:

F=1:0;n=scan();while(n>F)F=c(sum(F),F[1]);F[order((F-n)^2)][‌​1]

শুধুমাত্র শেষ দুটি ফাইবোনাকি নম্বর সংরক্ষণ করে


1
সুন্দর. -2 বাইটF=1:0;n=scan();while(n>F)F=c(F[1]+F[2],F);F[order((F-n)^2)][1]
jজুরিও

1
আর বাইট একই সংখ্যক দ্রুত সংস্করণF=1:0;n=scan();while(n>F)F=c(sum(F),F[1]);F[order((F-n)^2)][1]
djhurio

1
@jjurio সুন্দর! আপনাকে অনেক ধন্যবাদ.
জিউসেপে

1
আমি এই পছন্দ। -2 বাইট আবারF=1:0;while(F<1e8)F=c(F[1]+F[2],F);F[order((F-scan())^2)][1]
djhurio

ফাইবনামগুলি তৈরি করতে একটি বিল্টিন ব্যবহার করা সংক্ষিপ্ত:numbers::fibonacci(x<-scan(),T)
JAD

6

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

f=(n,x=0,y=1)=>y<n?f(n,y,x+y):y-n>n-x?x:y
<input type=number min=0 value=0 oninput=o.textContent=f(this.value)><pre id=o>0

অগ্রাধিকার অনুসারে গোল হয়।


আমি যে সংস্করণটিতে কাজ করছিলাম তার প্রায় অভিন্ন। কমপক্ষে আপনি একই পরিবর্তনশীল নামগুলি ব্যবহার করেন নি বা আমাকে ফ্রি আউট করা উচিত।
Grax32

@ গ্র্যাক্স হু, এখন আপনি এটি উল্লেখ করেছেন, বিজনেস ক্যাট আমাকে এতে মারধর করেছে ...
নীল

(ঠিক আছে, প্রায় ... আমি আমার সংস্করণটি 0 দিয়ে কাজ করেছি, কারণ কেন নয়?)
নীল

f=(n,x=0,y=1)=>x*(2*n<x+y)||f(n,y,x+y)যেহেতু আপনাকে 0 দিয়ে কাজ করতে হবে না, আপনি আরও কিছুটা গল্ফ করতে পারেন।
অ্যালিক্স আইজেনহার্ট

6

জেলি , 9 7 বাইট

-2 বাইটস @ এরিকথ আউটগল্ফারকে ধন্যবাদ

‘RÆḞạÐṂ

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

গল্ফিং টিপস স্বাগত :) ইনপুট জন্য একটি int লাগে এবং একটি অন্তর্ভুক্ত তালিকা প্রদান।

            ' input -> 4
‘           ' increment -> 5
 R          ' range -> [1,2,3,4,5]
  ÆḞ        ' fibonacci (vectorizes) -> [1,1,2,3,5,8]
     ÐṂ     ' filter and keep the minimum by:
    ạ       ' absolute difference -> [3,3,2,1,1,4]
            ' after filter -> [3,5]

আপনি অপসারণ করতে পারেন µḢ
এরিক আউটগল্ফার

@ এরিকথিউটগল্ফার এইভাবে বলেছেন: "আপনি যদি এটির বিষয়ে চিন্তা করেন তবে এটি করার একটি উপায় আছে", বা যেমন "আপনি যদি আক্ষরিকভাবে কেবল তাদের পিছনে রেখে যান তবে এটি এখনও কার্যকর হয়"?
nmjcman101

যেমন "এটি বিধি দ্বারা অনুমোদিত"। : পি
এরিক আউটগল্ফার

আহ। ধন্যবাদ! (ফিলার পাঠ্য)
nmjcman101


5

x86-64 মেশিন কোড, 24 বাইট

31 C0 8D 50 01 92 01 C2 39 FA 7E F9 89 D1 29 FA 29 C7 39 D7 0F 4F C1 C3

উপরের কোডের বাইটগুলি 64-বিট x86 মেশিন কোডে একটি ফাংশন সংজ্ঞায়িত করে যা নির্দিষ্ট ইনপুট মানটির নিকটতম ফিবোনাচি নম্বরটি খুঁজে পায়, n

ফাংশনটি সিস্টেম ভি AMD64 কলিং কনভেনশন অনুসরণ করে (Gnu / ইউনিক্স সিস্টেমে স্ট্যান্ডার্ড), যেমন একমাত্র পরামিতি ( n) EDIনিবন্ধনে পাস হয় এবং ফলাফলটি EAXরেজিস্টারে ফিরে আসে ।

অবহেলিত সমাবেশ মেমোনমিক্স:

; unsigned int ClosestFibonacci(unsigned int n);
    xor    eax, eax        ; initialize EAX to 0
    lea    edx, [rax+1]    ; initialize EDX to 1

  CalcFib:
    xchg   eax, edx        ; swap EAX and EDX
    add    edx, eax        ; EDX += EAX
    cmp    edx, edi
    jle    CalcFib         ; keep looping until we find a Fibonacci number > n

    mov    ecx, edx        ; temporary copy of EDX, because we 'bout to clobber it
    sub    edx, edi
    sub    edi, eax
    cmp    edi, edx
    cmovg  eax, ecx        ; EAX = (n-EAX > EDX-n) ? EDX : EAX
    ret

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

কোডটি মূলত তিনটি ভাগে বিভক্ত:

  • প্রথম অংশটি খুব সহজ: এটি কেবল আমাদের কার্যকরী নিবন্ধগুলি সূচনা করে। EAX0 এ সেট করা হয়েছে, এবংEDX তে সেট করা হয় এবং 1 তে সেট করা হয়।
  • পরের অংশটি এমন একটি লুপ যা পুনরাবৃত্তভাবে ইনপুট মানের উভয় পাশের ফিবোনাচি সংখ্যা গণনা করে n। এই কোডটি বিয়োগফল সহ আমার ফিবোনাচি প্রয়োগের উপর ভিত্তি করে তৈরি হয়েছে , তবে… ওম ... বিয়োগের সাথে নয়। :-) বিশেষত, এটি দুটি ভেরিয়েবল ব্যবহার করে ফিবোনাচি সংখ্যা গণনা করার একই কৌশল ব্যবহার করে। এখানে, এগুলি EAXএবং EDXনিবন্ধগুলি রয়েছে। এই পদ্ধতির এখানে অত্যন্ত সুবিধাজনক, কারণ এটি আমাদের সংলগ্ন ফিবোনাচি সংখ্যা দেয়। প্রার্থী সম্ভাব্য চেয়ে কম n অধিষ্ঠিতEAX , এবং প্রার্থী তার চেয়ে বেশি সম্ভাব্য greater n অধিষ্ঠিত হওয়ারEDX। আমি এই লুপটির অভ্যন্তরে কোডটি তৈরি করতে সক্ষম হয়ে কতটা গর্বিত তা নিয়ে আমি বেশ গর্বিত (এবং আরও সুড়সুড়িযুক্ত যে আমি এটি স্বাধীনভাবে পুনরায় আবিষ্কার করেছি এবং কেবল পরে বুঝতে পেরেছি যে এটি উপরে লিঙ্কযুক্ত বিয়োগ জবাবের সাথে কতটা মিল ছিল)।

  • একবার আমাদের কাছে প্রার্থী ফিবোনাকির মানগুলি পাওয়া যায় EAXএবং EDXএটি কোনটির কাছাকাছি (নিখুঁত মানের দিক দিয়ে) তা নির্ধারণ করার একটি ধারণাগতভাবে সাধারণ বিষয় n। বাস্তবিক একটি পরম মান গ্রহণ খরচ হবে পথ অনেকগুলি বাইট, তাই আমরা subtractions একটি সিরিজ না। পেনাল্টিমেট শর্তাধীন-সরানোর নির্দেশের ডান দিকের মন্তব্যটি এখানে যুক্তিটি যথাযথভাবে ব্যাখ্যা করেছে। এটি হয় স্থানান্তরিত EDXহয় EAX, বা EAXএকা ছেড়ে যায়, যাতে ফাংশনটি RETজ্বলে উঠলে নিকটতম ফিবোনাচি নম্বরটি ফিরে আসে EAX

টাইয়ের ক্ষেত্রে, দুটি প্রার্থীর মানের মধ্যে ছোটটি ফিরে আসে, যেহেতু আমরা নির্বাচনটি করার CMOVGপরিবর্তে ব্যবহার করেছি CMOVGE। আপনি যদি অন্য আচরণকে পছন্দ করেন তবে এটি একটি তুচ্ছ পরিবর্তন। উভয় মান প্রত্যাবর্তন একটি অ-স্টার্টার, যদিও; শুধুমাত্র একটি পূর্ণসংখ্যার ফলাফল, দয়া করে!


এনএএসএম তালিকা কোডগল্ফ উত্তরের জন্য দুর্দান্ত, কারণ তারা মেশিন কোড বাইটগুলিকে কিছুটা সংক্ষিপ্তভাবে মূল মন্তব্য উত্সের সাথে মিশ্রিত করে। আমি nasm foo.asm -l /dev/stdout | cut -b -28,$((28+12))-সাম্প্রতিক উত্তরে মেশিন কোড এবং উত্সের মধ্যে কিছু কলামগুলি ছাঁটাই করতাম ।
পিটার

1
32-বিট কোডে, আপনি xor eax,eax/ cdq/ দিয়ে 5 এর পরিবর্তে 4 টি বাইটে eax = 0 এবং edx = 1 পেতে পারেন inc edx। সুতরাং আপনি একটি 32-বিট কাস্টম-কলিং-কনভেনশন সংস্করণ তৈরি করতে পারেন যা একটি বাইট সংরক্ষণ করেছে।
পিটার কর্ডস

আমি এটি করতাম, @ পিটার, তবে "সমাবেশ" বা "মেশিন কোড" এ জমা দেওয়ার বিষয়ে এখানে অনেক বিভ্রান্তি রয়েছে। স্পষ্টতই কিছু অভিজ্ঞ ব্যবহারকারী বজায় রেখেছেন যে পার্থক্য রয়েছে, এবং মেশিন কোডের বাইটগুলি গণনা করার জন্য আপত্তি জানালেন যে সমাবেশের মেমোনমিক্স ব্যবহার করে উপস্থাপন করা হয়েছে for স্বাভাবিকভাবেই, আমি এটি নির্বোধ বলে মনে করি, কারণ "অ্যাসেমব্লি" মেশিন বাইটগুলির কেবল একটি স্মৃতিচারণমূলক উপস্থাপনা, তবে আমি তার চেয়ে বেশি অচল হয়ে পড়েছিলাম। আমি খুঁজে পেয়েছি যে পৃথক উপস্থাপনাটি কম ঘর্ষণ তৈরি করে, যদিও আমি ব্যক্তিগতভাবে এটি পছন্দ করি না।
কোডি গ্রে

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

আহা হ্যাঁ, কোনও পুরানো রেজিস্টার কলিং কনভেনশন আপনার পক্ষে কাজ করে। আমার অতি সাম্প্রতিক codegolf উত্তর প্রয়োজন মধ্যে পয়েন্টার edi/ esiজন্য lodsb/ stosb, এবং শুধুমাত্র x86-64 'সিস যে (মজার বিষয় আছে কারণ কিছু ফাংশন memset / আমার মনে তাদের args পাস যে কারণে উদ্দেশ্যমূলকভাবে, এবং আমি সময় পছন্দ করেছে এ জিসিসি অনুমান ইনলাইন স্ট্রিং অপ্স করতে)।
পিটার

4

পাওয়ারশেল , 80 74 বাইট

param($n)for($a,$b=1,0;$a-lt$n;$a,$b=$b,($a+$b)){}($b,$a)[($b-$n-gt$n-$a)]

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

Iterative সমাধান। ইনপুট নেয় $n, সেট $a,$bহয়ে যায় 1,0এবং তারপরে $aইনপুট থেকে বড় না হওয়া পর্যন্ত ফিবোনাকির সাথে লুপ করে। এই মুহুর্তে, আমরা ($b,$a)বুলিয়ান উপর ভিত্তি করে সূচক তৈরি করি যে প্রথম উপাদানটির $nমধ্যে পার্থক্য রয়েছে $nএবং দ্বিতীয়টি এবং দ্বিতীয় উপাদানের চেয়ে বেশি whether এটি পাইপলাইনে রেখে গেছে, আউটপুট অন্তর্ভুক্ত।


4

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

f=(n,k,y)=>(g=k=>x=k>1?g(--k)+g(--k):k)(k)>n?x+y>2*n?y:x:f(n,-~k,x)

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


4

জাভাস্ক্রিপ্ট (বাবেল নোড) , 41 বাইট

f=(n,i=1,j=1)=>j<n?f(n,j,j+i):j-n>n-i?i:j

ওভসের দুর্দান্ত পাইথন উত্তরের উপর ভিত্তি করে

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

Ungolfed

f=(n,i=1,j=1)=> // Function f: n is the input, i and j are the most recent two Fibonacci numbers, initially 1, 1
 j<n?           // If j is still less than n
  f(n,j,j+i)    //  Try again with the next two Fibonacci numbers
 :              // Else:
  j-n>n-i?i:j   //  If n is closer to i, return i, else return j

এটি আমার উত্তরে মন্তব্য করা হয়েছিল তবে এটি কাজ করা বন্ধ করে দেবে 0(এটির দরকার নেই এমন নয়; আমি কেবল এটিই চাই):f=(n,i=1,j=1)=>n+n<i+j?i:f(n,j,j+i)
নিল

4

পাইথন, 74 বাইট

import math
r=5**.5
p=r/2+.5
lambda n:round(p**int(math.log(n*2*r,p)-1)/r)

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

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

সকল কে ≥ 0 এর জন্য, যেহেতু | φ - কে / √5 | <1/2, এফ কে = φ কে / √5 + φ - কে / √5 = বৃত্তাকার (φ কে / √5)। সুতরাং ফেরত মান থেকে পরিবর্তন এফ - 1 থেকে এফ ঠিক যেখানে = log φ ( এন ⋅2√5) - 1, বা এন = φ + 1 টি / (2√5), যা 1/4 মধ্যে এফ কে + 1/2 = ( এফ কে - 1 + এফ কে ) / 2।


অভিশাপ, আমি জানতাম এরকম কিছু সম্ভব হওয়া উচিত। সাবাশ! (+1)
স্টিমি রুট




3

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

import math
def f(n):d=5**.5;p=.5+d/2;l=p**int(math.log(d*n,p))/d;L=[l,p*l];return round(L[2*n>sum(L)])

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

দুঃখের বিষয়, ল্যাম্বদার পরিবর্তে একটি ডিএফ ব্যবহার করতে হয়েছিল ... সম্ভবত এখানে উন্নতির আরও অনেক জায়গা রয়েছে।

আসল (ভুল) উত্তর:

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

lambda n:r(p**r(math.log(d*n,p))/d)
import math
d=5**.5
p=.5+d/2
r=round

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

আমার প্রথম পিপিসি জমা। ফিবোনাকির সংখ্যাগুলি পুনরাবৃত্তভাবে গণনা করা বা তাদের পূর্বনির্ধারিত করার পরিবর্তে, এই কোডটি কীভাবে এন-থাই ফিবোনাচি সংখ্যাটি 5 এর মূল দ্বারা বিভক্ত স্বর্ণের অনুপাতের n-th পাওয়ারের নিকটতম পূর্ণসংখ্যার হয়।


সুন্দর কাজ! PPCG করার :) স্বাগতম
musicman523

আপনার কোডের বাইট গণনাটি মোটামুটি গণনা করার জন্য আমার কাছে মনে হয় আপনাকে ল্যাম্বডা সরবরাহ করতে হবে, অন্যান্য পাইথনের উত্তরে দেখানো হয়েছে। তবে এই অ্যালগরিদম সর্বদা n ব্যাপ্তির জন্য সঠিকভাবে কাজ করে না (1, 1 + 10 ** 8)। উদাহরণস্বরূপ, এন = 70 89 টি প্রত্যাবর্তন করে তবে 55 টি ফিরে আসবে Here পরীক্ষার উদ্দেশ্যে, আপনি nearest_fib_PM2Rপ্রশ্নটিতে আমার মন্তব্যে লিঙ্কিত ফাংশনটি ব্যবহার করতে পছন্দ করতে পারেন ।
পিএম 2 রিং

@ পিএম 2 রিং আপনি ঠিক বলেছেন, আমি একটি বোকা ভুল করেছি ... আমার এখন একটি সঠিক সমাধান আছে, তবে আরও অনেকগুলি বাইট সহ। ল্যাম্বডা হিসাবে, আমি বিশ্বাস করি আপনি ভুল বলেছেন। আমি বিশ্বাস করি ল্যাম্বডাকে প্রদত্ত উত্তরগুলি কেবল এটি করা কারণ তারা পুনরাবৃত্তি ব্যবহার করে। অন্যান্য পাইথন 3 টি উত্তর প্রথম ল্যাম্বডাকে বরাদ্দ করে না।
স্টিমাইরুট

3

ট্যাক্সি, 2321 বাইট

Go to Post Office:w 1 l 1 r 1 l.Pickup a passenger going to The Babelfishery.Go to The Babelfishery:s 1 l 1 r.Pickup a passenger going to Trunkers.Go to Trunkers:n 1 l 1 l.0 is waiting at Starchild Numerology.1 is waiting at Starchild Numerology.Go to Starchild Numerology:w 1 l 2 l.Pickup a passenger going to Bird's Bench.Pickup a passenger going to Cyclone.Go to Cyclone:w 1 r 4 l.[a]Pickup a passenger going to Rob's Rest.Pickup a passenger going to Magic Eight.Go to Bird's Bench:n 1 r 2 r 1 l.Go to Rob's Rest:n.Go to Trunkers:s 1 l 1 l 1 r.Pickup a passenger going to Cyclone.Go to Cyclone:w 2 r.Pickup a passenger going to Trunkers.Pickup a passenger going to Magic Eight.Go to Zoom Zoom:n.Go to Trunkers:w 3 l.Go to Magic Eight:e 1 r.Switch to plan "b" if no one is waiting.Pickup a passenger going to Firemouth Grill.Go to Firemouth Grill:w 1 r.Go to Rob's Rest:w 1 l 1 r 1 l 1 r 1 r.Pickup a passenger going to Cyclone.Go to Bird's Bench:s.Pickup a passenger going to Addition Alley.Go to Cyclone:n 1 r 1 l 2 l.Pickup a passenger going to Addition Alley.Pickup a passenger going to Bird's Bench.Go to Addition Alley:n 2 r 1 r.Pickup a passenger going to Cyclone.Go to Cyclone:n 1 l 1 l.Switch to plan "a".[b]Go to Trunkers:w 1 l.Pickup a passenger going to Cyclone.Go to Bird's Bench:w 1 l 1 r 1 l.Pickup a passenger going to Cyclone.Go to Rob's Rest:n.Pickup a passenger going to Cyclone.Go to Cyclone:s 1 l 1 l 2 l.Pickup a passenger going to Sunny Skies Park.Pickup a passenger going to What's The Difference.Pickup a passenger going to What's The Difference.Go to What's The Difference:n 1 l.Pickup a passenger going to Magic Eight.Go to Sunny Skies Park:e 1 r 1 l.Go to Cyclone:n 1 l.Pickup a passenger going to Sunny Skies Park.Pickup a passenger going to What's The Difference.Go to Sunny Skies Park:n 1 r.Pickup a passenger going to What's The Difference.Go to What's The Difference:n 1 r 1 l.Pickup a passenger going to Magic Eight.Go to Magic Eight:e 1 r 2 l 2 r.Switch to plan "c" if no one is waiting.Go to Sunny Skies Park:w 1 l 1 r.Pickup a passenger going to The Babelfishery.Go to Cyclone:n 1 l.Switch to plan "d".[c]Go to Cyclone:w 1 l 2 r.[d]Pickup a passenger going to The Babelfishery.Go to The Babelfishery:s 1 l 2 r 1 r.Pickup a passenger going to Post Office.Go to Post Office:n 1 l 1 r.

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

মন্তব্য সহ অন গল্ফড:

[ Find the Fibonacci number closest to the input ]
[ Inspired by: https://codegolf.stackexchange.com/q/133365 ]


[ n = STDIN ]
Go to Post Office: west 1st left 1st right 1st left.
Pickup a passenger going to The Babelfishery.
Go to The Babelfishery: south 1st left 1st right.
Pickup a passenger going to Trunkers.
Go to Trunkers: north 1st left 1st left.


[ Initialize with F0=0 and F1=1 ]
0 is waiting at Starchild Numerology.
1 is waiting at Starchild Numerology.
Go to Starchild Numerology: west 1st left 2nd left.
Pickup a passenger going to Bird's Bench.
Pickup a passenger going to Cyclone.
Go to Cyclone: west 1st right 4th left.


[ For (i = 1; n > F(i); i++) { Store F(i) at Rob's Rest and F(i-1) at Bird's Bench } ]
[a]
Pickup a passenger going to Rob's Rest.
Pickup a passenger going to Magic Eight.
Go to Bird's Bench: north 1st right 2nd right 1st left.
Go to Rob's Rest: north.
Go to Trunkers: south 1st left 1st left 1st right.
Pickup a passenger going to Cyclone.
Go to Cyclone: west 2nd right.
Pickup a passenger going to Trunkers.
Pickup a passenger going to Magic Eight.
Go to Zoom Zoom: north.
Go to Trunkers: west 3rd left.
Go to Magic Eight: east 1st right.
Switch to plan "b" if no one is waiting.

[ n >= F(i) so iterate i ]
Pickup a passenger going to Firemouth Grill.
Go to Firemouth Grill: west 1st right.
Go to Rob's Rest: west 1st left 1st right 1st left 1st right 1st right.
Pickup a passenger going to Cyclone.
Go to Bird's Bench: south.
Pickup a passenger going to Addition Alley.
Go to Cyclone: north 1st right 1st left 2nd left.
Pickup a passenger going to Addition Alley.
Pickup a passenger going to Bird's Bench.
Go to Addition Alley: north 2nd right 1st right.
Pickup a passenger going to Cyclone.
Go to Cyclone: north 1st left 1st left.
Switch to plan "a".


[b]
[ F(i) > n which means n >= F(i-1) and we need to figure out which is closer and print it]
Go to Trunkers: west 1st left.
Pickup a passenger going to Cyclone.
Go to Bird's Bench: west 1st left 1st right 1st left.
Pickup a passenger going to Cyclone.
Go to Rob's Rest: north.
Pickup a passenger going to Cyclone.
Go to Cyclone: south 1st left 1st left 2nd left.
Pickup a passenger going to Sunny Skies Park.
Pickup a passenger going to What's The Difference.
Pickup a passenger going to What's The Difference.
[ Passengers:n, n, F(i-1) ]
Go to What's The Difference: north 1st left.
Pickup a passenger going to Magic Eight.
[ Passengers:n, n-F(i-1) ]
Go to Sunny Skies Park: east 1st right 1st left.
Go to Cyclone: north 1st left.
Pickup a passenger going to Sunny Skies Park.
Pickup a passenger going to What's The Difference.
[ Passengers: n-F(i-1), F(i-1), F(i) ]
Go to Sunny Skies Park: north 1st right.
Pickup a passenger going to What's The Difference.
[ Passengers: n-F(i-1), F(i), n ]
Go to What's The Difference: north 1st right 1st left.
[ Passengers: n-F(i-1), F(i)-n ]
Pickup a passenger going to Magic Eight.
Go to Magic Eight: east 1st right 2nd left 2nd right.
Switch to plan "c" if no one is waiting.

[ If no one was waiting, then {n-F(i-1)} < {F(i)-n} so we return F(i-1) ]
Go to Sunny Skies Park: west 1st left 1st right.
Pickup a passenger going to The Babelfishery.
Go to Cyclone: north 1st left.
Switch to plan "d".

[c]
[ Otherwise {n-F(i-1)} >= {F(i)-n} so we return F(i) ]
[ Note: If we didn't switch to plan c, we still pickup F(i) but F(i-1) will be the *first* passenger and we only pickup one at The Babelfishery ]
[ Note: Because of how Magic Eight works, we will always return F(i) in the event of a tie ]
Go to Cyclone: west 1st left 2nd right.
[d]
Pickup a passenger going to The Babelfishery.
Go to The Babelfishery: south 1st left 2nd right 1st right.
Pickup a passenger going to Post Office.
Go to Post Office: north 1st left 1st right.


2

ডিসি, 52 বাইট

si1d[dsf+lfrdli>F]dsFxli-rlir-sdd[lild-pq]sDld<Dli+p

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

রান ব্যবহার করে ইনপুট নেয় ?

ইনপুট মান, -1 বাইট হিসাবে স্ট্যাকের শীর্ষ ধরে নিতে সম্পাদিত।

ইনপুট রেজিস্টারে সংরক্ষণ করা হয় i। তারপরে আমরা ফিবোনাচি সিক্যুয়েন্স শুরু করার জন্য স্ট্যাকের উপর 1 এবং 1 রেখেছি এবং আমরা এর থেকে বেশি কোনও মান না চাপানো পর্যন্ত সিকোয়েন্সটি তৈরি করি i। এই মুহুর্তে আমাদের স্ট্যাকের ফিবোনাচি সিকোয়েন্সে দুটি সংখ্যা রয়েছে: একটি যা এর চেয়ে কম বা সমান iএবং এর চেয়ে বড় একটি i। আমরা এগুলিকে তাদের স্বতন্ত্র পার্থক্যের সাথে রূপান্তর করি iএবং তারপরে পার্থক্যের তুলনা করি। শেষ পর্যন্ত আমরা পার্থক্যটি যোগ বা বিয়োগ করে ফিবোনাচি নম্বরটি পুনর্গঠন করি i

ওফস, আমি ভুল ক্রমে দুটি রেজিস্টার লোড করছি এবং তারপরে অদলবদল করে, একটি বাইট নষ্ট করছি।


ফাংশন অনুমোদিত।
ক্যালকুলেটরফলাইন

ধন্যবাদ, আমি বারবার এটি চ্যালেঞ্জের পাঠ্যে মিস করেছি।
brhfl

2

সি # (.নেট কোর) , 63 56 বাইট

-1 বাইট @ নীল ধন্যবাদ

-6 বাইট @ নেভায়ে ধন্যবাদ

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

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


কি for(;b<n;a=b,b+=c)c=a;একটি বাইট সংরক্ষণ করবেন?
নীল

আপনি cব্যবহার করে অপসারণ করতে পারেন b+=a,a=b-a(6 বাইট সংরক্ষণ করা উচিত)।
নেভায়ে


2

হেক্সাগনি , 37 বাইট

?\=-${&"*.2}+".|'=='.@.&}1.!_|._}$_}{

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

ungolfed:

   ? \ = - 
  $ { & " * 
 . 2 } + " .
| ' = = ' . @
 . & } 1 . !
  _ | . _ }
   $ _ } { 

ভেঙ্গে পড়া:

start:
? { 2 ' * //set up 2*target number
" ' 1     //initialize curr to 1

main loop:
} = +     //next + curr + last
" -       //test = next - (2*target)
branch: <= 0 -> continue; > 0 -> return

continue:
{ } = &   //last = curr
} = &     //curr = next


return:
{ } ! @   //print last

অন্য কয়েকটি পোস্টারের মতো, আমি বুঝতে পেরেছিলাম যে শেষ এবং কররের মিডপয়েন্টটি যখন লক্ষ্যের চেয়ে বেশি হয়, তখন দুটির মধ্যে ছোটটি সবচেয়ে কাছের হয় বা কাছের জন্য বাঁধা হয়।

মিডপয়েন্টটি (শেষ + কার্ল) / 2 এ রয়েছে। আমরা এটি সংক্ষিপ্ত করতে পারি কারণ পরবর্তীটি ইতিমধ্যে শেষ + কার্ল, এবং এর পরিবর্তে যদি আমরা আমাদের টার্গেট পূর্ণসংখ্যটিকে 2 দিয়ে গুণ করি তবে আমাদের কেবল এটি পরীক্ষা করতে হবে (পরের - 2 * লক্ষ্য)> 0, তারপরে শেষ ফিরে আসুন।


2

ব্র্যাচল্যাগ , 22 বাইট

;I≜-.∧{0;1⟨t≡+⟩ⁱhℕ↙.!}

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

সত্যই আমি এখানে যা করেছি তা একসাথে পেস্ট করা ফাটালাইজের ক্লাসিকটি রিটার্ন সবচেয়ে নিকটতম মৌলিক সংখ্যা সমাধান এবং আমার নিজের কি আমি একটি ফিবোনাকি নম্বর? সমাধান। ভাগ্যক্রমে, পরেরটি ইতিমধ্যে আউটপুট ভেরিয়েবলের উপর কাজ করে; দুর্ভাগ্যক্রমে, এটিতে একটি প্রয়োজনীয় কাটাও অন্তর্ভুক্ত রয়েছে যা +2 বাইটের জন্য পৃথক করতে হয়, সুতরাং এটি কেবল পছন্দসই পয়েন্টটি বাদ দেয় , অক্ষত রেখে ।



1

জাভা 7, 244 234 বাইট

 String c(int c){for(int i=1;;i++){int r=f(i);int s=f(i-1);if(r>c && s<c){if(c-s == r-c)return ""+r+","+s;else if(s-c > r-c)return ""+r;return ""+s;}}} int f(int i){if(i<1)return 0;else if(i==1)return 1;else return f(i-2)+f(i-1);}

আপনি জাভা 8 ব্যবহার করবেন না এবং এটিকে ল্যাম্বডায় রূপান্তর করবেন না কেন? আপনি staticজাভা with এর সাথে
লেগে থাকতে চাইলে আপনিও

আপনার কোডে আপনার দুটি ত্রুটি রয়েছে ( r>c&&s<cহওয়া উচিত r>=c&&s<=c, s-cহওয়া উচিত c-s), আপনি প্রয়োজন নেই শ্বেত স্পেস অপসারণ করতে, ব্যবহার করতে int f(int i){return i<2?i:f(--i)+f(--i);}, সি-তে টার্নারি অপারেটরের সাথে একক রিটার্ন স্টেটমেন্ট ব্যবহার করতে পারেন এবং c-s==r-cউভয়ই মান ফেরত দেওয়ার জন্য বিশেষ হ্যান্ডলিং সরিয়ে ফেলতে পারেন ।
নেভায়ে

@ নেভায়ে আমি ত্রুটিটি দেখতে পাচ্ছি না, আমি এটি ব্যর্থ না করে পরীক্ষা করেছি
0x45




1

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

{(0,1,*+*...*>$_).sort((*-$_).abs)[0]}

এটা পরীক্ষা করো

{   # bare block lambda with implicit parameter 「$_」

  ( # generate Fibonacci sequence

    0, 1,  # seed the sequence
    * + *  # WhateverCode lambda that generates the rest of the values
    ...    # keep generating until
    * > $_ # it generates one larger than the original input
           # (that larger value is included in the sequence)

  ).sort(           # sort it by
    ( * - $_ ).abs  # the absolute difference to the original input
  )[0]              # get the first value from the sorted list
}

সম্ভাব্য গতি বাড়ানোর জন্য .tail(2)আগে যুক্ত করুন .sort(…)

টাই করার ক্ষেত্রে এটি সর্বদা দুটি মানের থেকে ছোটটি ফিরিয়ে দেয় কারণ sortএটি একটি স্থিতিশীল বাছাই। (দুটি মান যা একইভাবে তাদের ক্রম বজায় রাখতে পারে)


1

পাইথ, 19 বাইট

JU2VQ=+Js>2J)hoaNQJ

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

ব্যাখ্যা

JU2VQ=+Js>2J)hoaNQJ
JU2                  Set J = [0, 1].
   VQ=+Js>2J)        Add the next <input> Fibonacci numbers.
              oaNQJ  Sort them by distance to <input>.
             h       Take the first.

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