মোটরোলা 68000 সমাবেশ - 34 বাইট
(জিএনইউ এসেম্বলারের সিনট্যাক্স)
| short min_fib_partition(long N asm("%d2"), long *out asm("%a0"))
min_fib_partition:
| Generate Fibonacci numbers on the stack (-1, 1, 0, 1, 1, 2, 3, ..., 1134903170).
moveq #-1, %d0 | A = -1
moveq #1, %d1 | B = 1
generate_loop:
move.l %d0, -(%sp) | Push A to the stack.
exg.l %d0, %d1 | A' = B
add.l %d0, %d1 | B' = A + B
bvc.s generate_loop | Stop when signed long overflows.
| Go back up the stack, partitioning N using the greedy algorithm.
moveq #0, %d0 | Initialize return value (number of terms).
subtract_loop:
move.l (%sp)+, %d1 | Pop a Fibonacci number F off the stack.
cmp.l %d1, %d2 | If N < F, continue to smaller Fibonacci number.
blt.s subtract_loop
addq.w #1, %d0 | Increment the term count.
move.l %d1, (%a0)+ | Append F to the output array.
sub.l %d1, %d2 | N -= F
bne.s subtract_loop | Continue if N has not yet reached zero.
| Clear the stack by searching for that -1.
clear_stack_loop:
tst.l (%sp)+
bge clear_stack_loop
done:
rts
36 → 34: ওভারফ্লো বদলে কাউন্টিং দ্বারা তৈরি ফিবানচি জেনারেটরের স্টপ, এবং স্থির 0ক্ষেত্রে তাই এটি আউটপুট [0]বদলে []। যাইহোক, Nএখন একটি নেতিবাচক ক্র্যাশ পাস ।
শীর্ষে মন্তব্যটি হ'ল এই ফাংশনের সি প্রোটোটাইপ, কোন পরামিতিগুলি কোথায় যায় তা সনাক্ত করার জন্য একটি ভাষা বর্ধন ব্যবহার করে (ডিফল্টরূপে, তারা স্ট্যাকের দিকে যায়)।
আমার টিআই-89 , এর 10MHz প্রসেসরের সাথে, 1 - 1,000,000 এ এই ফাংশনটি চালাতে 5 মিনিট সময় নেয়।
যদিও গল্ফস্ক্রিপ্ট সমাধানের তুলনায় মেশিন কোডটি বর্তমানে (কম) কম বাইট, এটি সম্ভবত সংক্ষিপ্ততম সমাধান হিসাবে গ্রহণ করা অন্যায় হবে কারণ:
আপনার যদি টিআই-89/92 / ভি 200 থাকে তবে আপনি এখানে পুরো প্রকল্পটি ডাউনলোড করতে পারেন (পুরানো):
https://rapidshare.com/files/154945328/minfib.zip
আপনাকে প্রকৃত ফাইল দেওয়ার জন্য র্যাপিডশেয়ারকে ভাগ্যবান শুভকামনা। এই বড় ফাইলগুলির জন্য কি কেউ ভাল হোস্ট সম্পর্কে জানেন? 8940 বাইট একটি ভয়ঙ্কর প্রচুর।