সংখ্যার অবিরত ভগ্নাংশটি দ্বিগুণ করুন


21

আপনার কাজটি হল, প্রদত্ত x, আউটপুট 2*x। সহজ !? তবে একটি ধরা আছে: xএকটি (সম্ভবত অসীম) অবিরত ভগ্নাংশ হিসাবে দেওয়া হবে এবং আউটপুটটি অবশ্যই একটি অবিরত ভগ্নাংশ হবে। ইনপুটটি এমন একটি আসল বীজগণিত সংখ্যা হিসাবে গ্যারান্টিযুক্ত যার ডিগ্রি সর্বাধিক 2 হয়।

ইনপুট : অবিরত ভগ্নাংশ x। এটি 3 ভাগে বিভক্ত: পূর্ণসংখ্যা অংশ, উপসর্গ এবং পুনরাবৃত্তি অংশ। পূর্ণসংখ্যার অংশটি একটি একক পূর্ণসংখ্যা নিয়ে গঠিত। উপসর্গ এবং পুনরাবৃত্তি অংশটি ধনাত্মক পূর্ণসংখ্যার অ্যারেগুলি (সম্ভবত খালি) রয়েছে যা অবিরত ভগ্নাংশের উপসর্গ এবং পুনরাবৃত্তি অংশটি বর্ণনা করে। উদাহরণস্বরূপ, ইনপুটটি (3, [1], [2, 4])অবিরত ভগ্নাংশকে উপস্থাপন করে [3; 1, 2, 4, 2, 4, ...]

যদি পুনরাবৃত্তি করা অংশটি খালি থাকে তবে এটি যৌক্তিক সংখ্যা নির্দেশ করে। উদাহরণস্বরূপ, (3, [1, 2], [])উপস্থাপন করে [3; 1, 2] = 11/3। আপনি একটি মূলদ সংখ্যা (অর্থাত উভয় ফরম গ্রহণ করতে হবে (3, [1, 1, 1], []), যা [3; 1, 1, 1] = 11/3এছাড়াও বৈধ ইনপুট থাকবে)।

আউটপুট : ইনপুট হিসাবে একই বিন্যাসে দ্বিগুণ ইনপুট এর অবিরত ভগ্নাংশ আউটপুট। যদি আউটপুটটি যৌক্তিক হয় তবে আপনি অবিরত ভগ্নাংশের কোনও রূপকেই আউটপুট দিতে পারেন। যতক্ষণ উত্তর সঠিক উত্তরের সমান হয় ততক্ষণ ঠিক আছে; কোনও "সংক্ষেপণ" প্রয়োজন হয় না, তাই অসীম অংশটি "নিবন্ধিত" হতে পারে (উদাহরণস্বরূপ [1; 4, 2, 3, 2, 3...]লিখিত হতে পারে (1, [4], [2, 3])বা (1, [4, 2, 3], [2, 3]))। সমস্ত উত্তর সঠিক হতে হবে।

পরীক্ষার কেস : সঠিক ফর্ম কলাম সুবিধার জন্য দেওয়া হয়।

Input               Exact Form       Output
(0, [] [])          0                (0, [] []) or (-1, [1], [])
(-5, [1, 1], [])    -4.5             (-9, [], []) or (-10, [1], [])
(3, [1, 2], [])     11/3             (7, [3], []) or (7, [2, 1], [])
(1, [], [2])        sqrt(2)          (2, [], [1, 4])
(-1, [2], [2, 1])   -1/sqrt(3)       (-2, [1, 5], [2, 6])

এবং পরিশেষে একটি সামান্য বড় পরীক্ষা ক্ষেত্রে স্পষ্টতা নিশ্চিত করার: (0, [1], [6, 1, 3, 1, 42, 1, 3, 1, 6, 2]) --> (1, [], [1, 2, 1, 8, 1, 20, 1, 8, 1, 2, 1, 2])

সবচেয়ে কম কোড জয়!

ইঙ্গিত : আপনি এখানে বর্ণিত ক্রমাগত ভগ্নাংশগুলির চেয়ে বরং সরল পদ্ধতিতে গণিত সম্পাদন করতে পারেন । একটি অবিচ্ছিন্ন ভগ্নাংশ দ্বিগুণ করা এই অ্যালগরিদমের কেবলমাত্র একটি বিশেষ কেস (যদিও অবিরত ভগ্নাংশ পুনরাবৃত্তি হবে তখন জটিল অংশটি সন্ধান করতে পারে)।



@ পাভেল নং, আপনাকে অবশ্যই পূর্ণসংখ্যা, উপসর্গ এবং পুনরাবৃত্তি অংশগুলির পরিবর্তে পুরোপুরি ইনপুট নির্দিষ্ট করতে সক্ষম হতে হবে Sqrt[2]
soktinpk

দুঃখিত, এটি আমার পক্ষ থেকে একটি ভুল ছিল। ইনপুট হিসাবে প্রকৃত অবিরত ভগ্নাংশের সাথে এখানে লিঙ্কটি রয়েছে: tio.run/##y00syUjNTSzJTE78n2b73zk/ryQzrzQ1xa0oMbkkMz8v2kjLrSg/…
পাভেল

1
[3; 1, 1, 1](3, [1, 1, 1], [])আমরা যে ইনপুট ফর্ম্যাটটি ব্যবহার করছি তা হতে পারে - তাই কেবল স্পষ্টতা নিশ্চিত করার জন্য প্রশ্নের অবশ্যই সেই ফর্ম্যাটে (তৃতীয় অনুচ্ছেদে) উল্লেখ করা উচিত।
- মনিকা

2
আউটপুটটি কীভাবে হ্রাস করা উচিত তাতে কী বাধা রয়েছে? যেমন (-2, [1, 5, 2], [6, 2])ইনপুট জন্য গ্রহণযোগ্য আউটপুট হবে (-1, [2], [2, 1])? কীভাবে (-2, [1, 5, 2, 6, 2, 6], [2, 6])?
পিটার টেলর

উত্তর:


7

ওল্ফ্রাম ভাষা (গণিত) , 44 বাইট

ContinuedFraction[2FromContinuedFraction@#]&

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

গণিতের একটি বিল্টিন আছে! হ্যাঁ! গণিতের বিল্টিনটি বেশ দীর্ঘ। ওহো।

গণিতের অবিরত ভগ্নাংশগুলি দেখতে দেখতে ভাল লাগে {integer, ...prefix, {...repeating}}

-১ জংহওয়ান মিনকে ধন্যবাদ


4
আপনি বাদ দিতে পারেন *কারণ ম্যাথমেটিকার ডিফল্ট ডিলিমিটার, যদি এটি না থাকে তবে Times
জংহওয়ান মিন

3
যখন আপনার ভাষা স্ক্র্যাবল স্কোরিং থেকে ছাগলের স্বীকৃতি পর্যন্ত সমস্ত কিছুর জন্য অন্তর্নির্মিত থাকে , তখন তাদের কিছু নাম প্রয়োজনবোধে "সুপার দীর্ঘ" হতে হবে। :)
সূন্দর - মনিকা

1
@ সুন্দর নো, গণিতের কেবলমাত্র 5000 ডলার বিল্টইন রয়েছে। প্রতিটি বিল্টিনকে সর্বাধিক 2 বাইট তৈরি করা সম্ভব (Mthmtca দেখুন)
ব্যবহারকারী 202729

@ ব্যবহারকারী202729 তবে ম্যাথামেটিকা ​​এতটা জনপ্রিয় হতে পারত না যদি তা করত: পি
এমবম্ব007

3

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

(n,f,r)=>eval(`f=[0,...f];e=i=[0,2,1,0];o=j=[];k=[];m={};while([a,b,c,d]=e,c|d&&o)i*m[s=i+m+(e=c*d&&(q=a/c|0)==(b/d|0)?(o.push(q),[c,d,a-c*q,b-d*q]):1/(++i,[p,...f]=f+f?f:(i=r[0],r),p)?[b,a+b*p,d,c+d*p]:[b,b,d,d])]?k+(o=k)?o=0:(m={})[s]=1:m[s]=1;[2*n+j.shift(),j,k]`)

3 টি আর্গুমেন্ট গ্রহণ করে (n = পূর্ণসংখ্যার অংশ, চ = উপসর্গ, আর = পুনরাবৃত্তি অংশ)। অ্যারেতে তিনটি অংশ আউটপুট করে।এটি অনলাইন চেষ্টা করুন!

ব্যাখ্যা

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

নেতিবাচক অব্যাহত ভগ্নাংশগুলি প্রথমটি ব্যতীত সমস্ত পদগুলির জন্য ইতিবাচক মান ধরে রাখতে পারে তা নিশ্চিত করতে নেতৃস্থানীয় শব্দটি পৃথকভাবে গণনা করা হয়।

কোনও পুনরাবৃত্ত চক্রটির জন্য অপেক্ষা করার সময় মিথ্যা ইতিবাচক প্রতিরোধের জন্য, অনুসন্ধান সারণীটি নিম্নলিখিতভাবে ডেটা সংরক্ষণ করে: <index of input repeating part><delimiter><matrix values>

নোট করুন যে গল্ফ করা সংস্করণটি eval1 বাইট সংরক্ষণের জন্য ব্যবহার করে।

(n, f, r) => {
    f = [0, ...f];                       // use a 0 to chop off the integer part
    e = i = [0,2,1,0];                   // e: matrix with starting values to handle doubling
                                         // 0 + 2x
                                         // ------
                                         // 1 + 0x
                                         // i: tracks index of repeating part; until the function loops through the
                                         // repeating part, i is equivalent to NaN
    o = j = [];                          // o: alias for group of terms currently being computed
                                         // j: output array of non-repeating terms
    k = [];                              // k: output array of repeating terms
    m = {};                              // lookup table
    while ([a,b,c,d] = e, c | d && o)    // destructure matrix
                                         // c | d stops loop if both a/c and b/d equal infinity
        i * m[s = i + m + (              // m also serves as the delimiter; JS will stringify it as "[object Object]"
                                         // if i equals a value that is coerced to NaN, this multiplication
                                         // will be falsy
            e = c * d && (q=a/c|0) == (b/d|0) // checks if either c or d is 0 to avoid converting an Infinity value to 0 using the bitwise or
                ? (o.push(q), [c, d, a - c*q, b - d*q]) // append the output term and compute the new matrix
                : 1/(++i, [p, ...f] = f+f ? f : (i=r[0], r), p) // 1/(... p) checks if p is a valid number
                                         // f+f is a short way to check length of f; if f is an empty
                                         // array, f+f = '' (which is falsy)
                                         // if f is empty, try to replace with r
                                         // if r is empty, the value of i will be set to undefined (e.g. NaN)
                    ? [b, a + b*p, d, c + d*p]
                    : [b,b,d,d]
            )
        ]                                // checks if matrix has been cached in lookup table
            ? k+(o=k)                    // if the repeating part of the output has a value...
                ? o=0                    // o serves as a flag to halt the loop
                : (m={})[s] = 1          // reset lookup table to only hold the first duplicate matrix
            : m[s] = 1;                  // otherwise flag a matrix as seen
    return [2*n + j.shift(), j, k]       // add the doubled integer part to the first term
}
আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.