একটি ফ্র্যাক্টাল সিকোয়েন্সের সমষ্টি রূপান্তরকারী


16

পটভূমি

একটি ফ্র্যাক্টাল সিকোয়েন্স হ'ল একটি পূর্ণসংখ্যা ক্রম যেখানে আপনি প্রতিটি পূর্ণসংখ্যার প্রথম উপস্থিতিটি সরাতে পারেন এবং আগের মতো একই ক্রম দিয়ে শেষ করতে পারেন।

খুব সাধারণ একটি ক্রমকে কিম্বারলিংয়ের প্যারাফ্রেসগুলি বলা হয় । আপনি ইতিবাচক প্রাকৃতিক সংখ্যা দিয়ে শুরু করুন:

1, 2, 3, 4, 5, 6, 7, 8, 9, ...

তারপরে আপনি কিছু ফাঁকা ফাঁকে:

1, _, 2, _, 3, _, 4, _, 5, _, 6, _, 7, _, 8, _, 9, ...

এবং তারপরে আপনি বারবার শূন্যস্থানটি নিজেই ক্রমটি পূরণ করুন (ফাঁকাগুলি সহ):

1, 1, 2, _, 3, 2, 4, _, 5, 3, 6, _, 7, 4, 8, _, 9, ...
1, 1, 2, 1, 3, 2, 4, _, 5, 3, 6, 2, 7, 4, 8, _, 9, ...
1, 1, 2, 1, 3, 2, 4, 1, 5, 3, 6, 2, 7, 4, 8, _, 9, ...
1, 1, 2, 1, 3, 2, 4, 1, 5, 3, 6, 2, 7, 4, 8, 1, 9, ...

এটাই আমাদের ফ্র্যাক্টাল ক্রম! এবার আসুন আংশিক অঙ্কগুলি:

1, 2, 4, 5, 8, 10, 14, 15, 20, 23, 29, 31, 38, 42, 50, 51, 60, ...

কিন্তু যদি আমরা এই প্রক্রিয়াটি পুনরাবৃত্তি করি? নতুন ক্রমটি "ফ্র্যাক্টালাইজ" (যেমন উপরের পদক্ষেপগুলি থেকে প্রাপ্ত আংশিক অঙ্কগুলি):

1, _, 2, _, 4, _, 5, _, 8, _, 10, _, 14, _, 15, _, 20, _, 23, ...
1, 1, 2, _, 4, 2, 5, _, 8, 4, 10, _, 14, 5, 15, _, 20, 8, 23, ...
1, 1, 2, 1, 4, 2, 5, _, 8, 4, 10, 2, 14, 5, 15, _, 20, 8, 23, ...
1, 1, 2, 1, 4, 2, 5, 1, 8, 4, 10, 2, 14, 5, 15, _, 20, 8, 23, ...
1, 1, 2, 1, 4, 2, 5, 1, 8, 4, 10, 2, 14, 5, 15, 1, 20, 8, 23, ...

এবং আবার আংশিক পরিমাণ গ্রহণ করুন:

1, 2, 4, 5, 9, 11, 16, 17, 25, 29, 39, 41, 55, 60, 75, 76, 96, ...

ধুয়ে ফেলুন, পুনরাবৃত্তি করুন। দেখা যাচ্ছে যে এই প্রক্রিয়াটি রূপান্তর করে। যতবার আপনি এই প্রক্রিয়াটি পুনরাবৃত্তি করবেন ততবার ক্রমের বৃহত্তর উপসর্গ স্থির থাকবে। অসীম পরিমাণ পুনরাবৃত্তির পরে, আপনি OEIS A085765 দিয়ে শেষ করবেন ।

মজাদার ঘটনা: মূল ক্রমটি যতক্ষণ না শুরু হয় ততক্ষণ আমরা প্রাকৃতিক সংখ্যাগুলি থেকে শুরু না করলেও এই প্রক্রিয়াটি একই ক্রমে রূপান্তরিত হবে 1। যদি মূল ক্রমটি অন্য কোনও সাথে শুরু হয় তবে xআমরা তার x*A085765পরিবর্তে পেতে চাই ।

চ্যালেঞ্জ

ধনাত্মক পূর্ণসংখ্যা দেওয়া হয়েছে N, Nরূপান্তরিত অনুক্রমের তম উপাদানটিকে আউটপুট দিন ।

আপনি STDIN (অথবা নিকটতম বিকল্প), কমান্ড-লাইন আর্গুমেন্ট বা ফাংশন আর্গুমেন্টের মাধ্যমে ইনপুট নিয়ে কোনও প্রোগ্রাম বা ফাংশন লিখতে পারেন এবং ফলাফলটি STDOUT (বা নিকটতম বিকল্প), ফাংশন রিটার্ন মান বা ফাংশন (আউট) প্যারামিটারের মাধ্যমে আউটপুট করতে পারেন।

আপনি সূচক N0- বা 1-ভিত্তিক কিনা তা চয়ন করতে পারেন ।

পরীক্ষার কেস

ক্রমটি এর সাথে শুরু হয়:

1, 2, 4, 5, 9, 11, 16, 17, 26, 30, 41, 43, 59, 64, 81, 82, 108, 117, 147, 151, 192, 203, 246, 248, 307, 323, 387, 392, 473, 490, 572, 573, 681, 707, 824, 833, 980, 1010, 1161, 1165, 1357, 1398, 1601, 1612, 1858, 1901, 2149, 2151, 2458, 2517

সুতরাং ইনপুট 5ফলাফল আউটপুট হতে হবে 9

এখানে একটি নির্দোষ সিজেএম রেফারেন্স বাস্তবায়ন যা প্রথম Nসংখ্যা উত্পন্ন করে ( Nএসটিডিআইএন দেওয়া )। মনে রাখবেন যে আপনার কোডটি Nপুরো উপসর্গটি নয়, কেবলমাত্র তম উপাদানটি প্রদান করবে।


সুতরাং কেবল যাচাই করা হচ্ছে: আমরা A085765N এর পদটি আউটপুট করছি , তাই না?
গ্যামারকর্পস

@ গ্যামারকর্পস হ্যাঁ
মার্টিন এন্ডার

উত্তর:


7

সিজেএম ( 23 22 বাইট)

আংশিক যোগফলগুলি ফ্র্যাক্টাল সিকোয়েন্সের সম সূচকগুলিতে দেওয়া হয়, এটি A086450 । A086450 এর সংজ্ঞা হিসাবে সেখানে দেওয়া পুনরাবৃত্তি এই বাস্তবায়নগুলির ভিত্তি।

একটি সুস্পষ্ট "স্ট্যাক" ব্যবহার করা (ভয়েসের উদ্ধৃতিগুলিতে এটি LIFO নয়) ব্যবহার করে:

{),){2md~)\),>+$)}h+,}

অনলাইন ডেমো

ব্যবচ্ছেদ

{         e# Anonymous function body; for clarify, pretend it's f(x)
          e# We use a stack [x_0 ... x_i] with invariant: the result is sum_j f(x_j)
  ),      e# Initialise the stack to [0 ... x]
  )       e# Uncons x, because our loop wants one value outside the stack
  {       e# Loop. Stack holds [x_0 ... x_{i-1}] x_i
    2md   e# Split x_i into (x_i)/2 and (x_i)%2
    ~)\   e# Negate (x_i)%2 and flip under (x_i)/2
    ),>   e# If x_i was even, stack now holds [x_0 ... x_{i-1}] [0 1 ... (x_i)/2]
          e# If x_i was odd, stack now holds [x_0 ... x_{i-1}] [(x_i)/2]
    +     e# Append the two arrays
    $     e# Sort to get the new stack
    )     e# Uncons the greatest element in the new stack
  }h      e# If it is non-zero, loop
          e# We now have a stack of zeroes and a loose zero
  +,      e# Count the total number of zeroes, which is equivalent to sum_j f(0)
}

23 বাইটে স্মৃতিচারণ সহ অনেক বেশি দক্ষ পন্থা রয়েছে:

{2*1a{2md~)\){j}%>:+}j}

অনলাইন ডেমো


1
আমি নিশ্চিত যে কিছু ভাষাগুলি রয়েছে যার হিসাবে এটি প্রয়োগ করা আরও কম হবে f(0) = 1; f(n) = f(n/2) + (n % 2 ? 0 : f(n-2)); return f(2*x)তবে আমি সিজেমে সেই পদ্ধতির সাহায্যে সঞ্চয় পাওয়ার কোনও উপায় খুঁজে পাচ্ছি না।
পিটার টেলর

9

পাইথন 2, 55 49 42

কী চলছে তা আমার কোনও ধারণা নেই তবে ওইআইএস পৃষ্ঠা থেকে ম্যাপেল সূত্রটি বীট করা শক্ত বলে মনে হচ্ছে। এটি 0-ভিত্তিক সূচক ব্যবহার করে।

f=lambda n,t=0:n<1or f(n/2,n%2)-~-t*f(n-1)

-২ বাইটের জন্য @ পিটারটেলরকে ধন্যবাদ।


আপনি যদি পারফরম্যান্সের বিষয়ে চিন্তা না করেন তবে 6 টি অক্ষর দ্বারা অপ্টিমাইজ করা সহজ। প্রথমগুলির পরে অংশগুলি orকার্যকরভাবে হয় g(n,1) = f(n/2,n%2); g(n,0) = f(n-1) + g(n,1); যাতে আপনি g(n,1)f=lambda n,t=0:n<1or f(n/2,n%2)+0**t*f(n-1)
পিটার টেলর


2

টেমপ্লেটগুলি ক্ষতিকারক হিসাবে বিবেচিত , 124

Fun<If<A<1>,Add<Ap<Fun<Ap<If<Sub<A<1>,Mul<I<2>,Div<A<1>,I<2>>>>,A<0>,A<0,1>>,Div<A<1>,I<2>>>>,A<1>>,Ap<A<0>,Sub<A<1>,T>>>,T>>

এটি একটি বেনামে ফাংশন। আমার পাইথন ওইআইএস পৃষ্ঠায় ম্যাপেল সূত্রের উত্তর দেওয়ার মতোই কমবেশি একই রকম , আমি মডুলাস প্রয়োগ করি নি, সুতরাং আমাকে এন% 2 এর পরিবর্তে এনএন / 2 * 2 ব্যবহার করতে হয়েছিল।

সম্প্রসারিত:

Fun<If<
    A<1>,
    Add<
        Ap<
            Fun<Ap<
                If<
                    Sub<
                        A<1>,
                        Mul<
                            I<2>,
                            Div<A<1>,I<2> >
                        >
                    >,
                    A<0>,
                    A<0,1>
                >,
                Div<A<1>,I<2>>
            >>,
            A<1>
        >,
        Ap<
            A<0>,
            Sub<A<1>, T>
        >
    >,
    T
>> 


0

মতলব 108 103

আমি এই সত্যটি ব্যবহার করছি যে পছন্দসই সিরিজটি https://oeis.org/A086450 এর আংশিক যোগফল

তবে এই বাস্তব পুনরাবৃত্তির জন্য আমার বাস্তবায়নের জটিলতা অনুকূল থেকে অনেক দূরে।

n=input('')+1;
z=zeros(1,n);z(1)=1;
for k=1:n;
z(2*k)=z(k);
z(2*k+1)=sum(z(1:k+1));
end;
disp(sum(z(1:n)))
আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.