বিপরীত স্পর্শের যোগফলের স্পর্শক সন্ধান করুন


16

পটভূমি

এটি দেখানো যেতে পারে যে কোনও পূর্ণসংখ্যার জন্য k >= 0, f(k) = tan(atan(0) + atan(1) + atan(2) + ... + atan(k))একটি যুক্তিযুক্ত সংখ্যা।

লক্ষ্য

একটি সম্পূর্ণ প্রোগ্রাম বা ফাংশন লিখুন যা দেওয়া হলে k >= 0, f(k)একক হ্রাস ভগ্নাংশ হিসাবে আউটপুট (সংখ্যার এবং ডিনোমিনিটারটি কপিরাইম হয়)।

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

প্রথম কয়েকটি মান

f(0) = (0,1)
f(1) = (1,1)
f(2) = (-3,1)
f(3) = (0,1)
f(4) = (4,1)
f(5) = (-9,19)
f(6) = (105,73)

বিধি

  • স্ট্যান্ডার্ড লুফোলগুলি নিষিদ্ধ।
  • ইনপুট এবং আউটপুট যে কোনও সুবিধাজনক বিন্যাসে থাকতে পারে। আপনি f(k)স্ট্রিং হিসাবে আউটপুট করতে পারেন numerator/denominator, দুটি পূর্ণসংখ্যা, একটি ভগ্নাংশ বা যৌক্তিক বস্তু ইত্যাদির দ্বিগুণ হিসাবে, যদি আপনি কোনও স্ট্রিং আউটপুট করেন তবে দুটি পূর্ণসংখ্যা দিন, তার 3/2পরিবর্তে আউটপুট দিন 1 1/2
  • এটি কোড-গল্ফ, সংক্ষিপ্ত উত্তর (বাইটে) জিতেছে।

1
ইনপুট / আউটপুট মানগুলি কী তা আপনি নিজের পরীক্ষার ক্ষেত্রে আরও উল্লেখ করতে পারেন?
ইয়ান এইচ।

1
পূর্ণসংখ্যাগুলি কি ডিগ্রি বা রেডিয়ানের মধ্যে রয়েছে?
এরিক দি আউটগলফার


4
atan(0)মেয়াদ অপ্রয়োজনীয়।
অ্যাডাম

3
@ pizzapants184 f (0) = tan∑∅ = tan 0 = 0
Adám

উত্তর:



11

গণিত, 28 বাইট

Fold[+##/(1-##)&,0,Range@#]&

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

একটি দীর্ঘ, কিন্তু আরও আকর্ষণীয় পদ্ধতির (32 বাইট):

Im@#/Re@#&@Product[1+n I,{n,#}]&

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


+1 o'_'oম্যাথমেটিকা ​​এবং এর বিল্ট-ইনসo'_'o
মিঃ এক্সকোডার

3
@ মিঃ এক্সকোডার আসলে এই ক্ষেত্রে নয়। ওপি সিরিজ সংক্ষেপটি চতুরতার সাথে ব্যবহার করছে (যদি আমি কোডটি সঠিকভাবে পড়ি) read
অ্যাডাম

11

পাইথন 2 ,76 72 বাইট

from fractions import*
f=lambda k:Fraction(k and(k+f(k-1))/(1-k*f(k-1)))

পরিচয় ব্যবহার করুন:

tan(A + B) = (tan(A) + tan(B)) / (1 - tan(A) * tan(B))

আমাদের আছে:

f(k) = 0                                    if k = 0
     = (k + f(k - 1)) / (1 - k * f(k - 1))  if k > 0

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

লুইস মেন্ডোকে ধন্যবাদ, 4 টি বাইট সংরক্ষণ করুন।


1
আশা করি আপনি কিছু মনে করবেন না: আমি একটি টিও লিঙ্ক যুক্ত করেছি।
মিঃ এক্সকোডার

@ লুইসমেডো এলজিটিএম, সম্পাদিত।
tsh

3

এপিএল (ডায়ালগ) , 14 বাইট

ছোট ইনপুটটির জন্য ⎕FR←1287( 128 বিট এফ লোটিং-পয়েন্ট আর ইরেসেন্টেশন ) প্রয়োজন। kসঠিক যুক্তি হিসাবে গ্রহণ করে ।

1(∧÷,)3○¯3+.○⍳

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

 একের মধ্য দিয়ে পূর্ণসংখ্যা k(0 = আর্টিকান 0 হিসাবে শূন্যের প্রয়োজন হয় না)

¯3+.○ আরকাস স্পর্শকতের যোগফল

3○ স্পর্শক

1() বাম আর্গুমেন্ট হিসাবে 1 এবং উপরের ডান যুক্তি হিসাবে নিম্নলিখিত ট্যাসিট ফাংশন প্রয়োগ করুন:

 সর্বনিম্ন সাধারণ একাধিক (1 এবং সঠিক যুক্তি); সংখ্যক দেয়

÷ দ্বারা বিভক্ত

, উপসংহার (1 এবং সঠিক যুক্তি); সংখ্যক এবং ডিনোমিনেটর দেয়



2

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

f=n=>n?([a,b]=f(n-1),g=(a,b)=>a?g(b%a,a):b,c=g(d=b*n+a,e=b-n*a),[d/c,e/c]):[0,1]

একটি [সংখ্যক, ডিনোমিনেটর] জোড়া দেয়। ব্যাখ্যা: f(n-1) = a/bতাহলে চলুন f(n) = atan(tan(n)+tan(a/b)) = (n+a/b)/(1-n*a/b) = (b*n+a)/(b-n*a)। এরপরে এটি ভগ্নাংশটিকে তার সর্বনিম্ন শর্তে হ্রাস করতে থাকবে।

অনলাইন ES6 পরিবেশ



1

05 এ বি 1 ই , 33 26 বাইট

0X)Iƒ©`N*+®`sN*-‚D¿D_i\¤}/

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

ব্যাখ্যা

0X)                          # initialize stack with [0,1]
   Iƒ                        # for N in range [0 ... input] do:
     ©                       # store a copy of the current pair in the register
      `                      # push the pair separately to the stack
       N*                    # multiply the denominator with N
         +                   # add the numerator
          ®`s                # push the denominator then the numerator to the stack
             N*              # multiply the numerator by N
               -             # subtract it from the denominator
                D¿D          # get 2 copies of the greatest common divisor
                   0Qi  }    # if the gcd equals 0
                      \¤     # replace it with the denominator
                         /   # divide the pair with this number


1

ক্যাসিও-বেসিক, 35 বাইট

tExpand(tan(sum(seq(tan⁻¹(n),n,0,k

তান -1 টি ট্রিগ কীবোর্ডের মতো প্রবেশ করাতে হবে; বা -1 abc> ম্যাথ কীবোর্ড থেকে আলাদা প্রবেশ করা যেতে পারে। Fx-CP400 এর ম্যানুয়াল অনুসারে এটি একক দ্বি-বাইট অক্ষর (764)।

ফাংশন, kআর্গুমেন্ট হিসাবে যুক্ত করতে কোডের জন্য 34 বাইট, +1 বাইট ।

ব্যাখ্যা

seq(tan-1(n),n,0,k)tan-1(n)0 থেকে কে পর্যন্ত সমস্ত মান উত্পন্ন করে ।

sumএগুলি সমস্ত একসাথে যুক্ত করে, তারপরে tanতাদের স্পর্শকাতর কাজ করে।

tExpand তারপরে এগুলিকে একক ভগ্নাংশে পরিণত করবে।


@ অ্যাডাম এটি ক্যাসিও, টিআই নয়, সুতরাং এটি একইভাবে করা হয়নি।
নম্বরমানিয়াক

উইকিপিডিয়া অনুসারে , এবং ¹প্রতিটি দুটি বাইট হয়; E5CCএবং E5C1
Adám

@ আদম ওহ সুন্দর, আমি বুঝতে পারিনি যে নিবন্ধটি বিদ্যমান! তবে এটি একটি fx-CP400, 9860G নয়; আমি কেবল ম্যানুয়ালটি পরীক্ষা করে দেখেছি, এবং সুপারস্ক্রিপ্ট -1 আসলে একটি একক অক্ষর, কোড 764; সুতরাং এটি একটি একক দুটি বাইট চরিত্র।
নম্বরমানিয়াক

0

জুলিয়া 0.6.0 40 বাইট

k->rationalize(tan(sum(x->atan(x),1:k)))

এটি প্রশ্নের সরাসরি বাস্তবায়ন। যৌক্তিকতার সূক্ষ্মতা কখনও কখনও অদ্ভুত হতে পারে তবে সময়টি 99% এর সাথে কাজ করে।

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