ত্রিকোণমিতি শুরু করা যাক!


20

পরিচিতি:

সাইন এর xসূত্র দ্বারা দেওয়া হয়:

sin(x) = x - x^3/3! + x^5/5! - x^7/7! + x^9/9! - x^11/11! // and more follows...

কোসাইন এর xসূত্র দ্বারা দেওয়া হয়:

cos(x) = 1 - x^2/2! + x^4/4! - x^6/6! + x^8/8! - x^10/10! // and more follows...

টাস্ক:

এর মান দেওয়া xএবং n, একটি প্রোগ্রাম (কোন ফাংশন, ইত্যাদি) আউটপুট মান লিখুন sin(x)এবং cos(x)সঠিক অবধি nউপরে সূত্র শর্তাবলী। ধরুন যে xরেডিয়ানে রয়েছে।

ইনপুট:

x n

একটি দশমিক সংখ্যা x(3 দশমিক স্থান পর্যন্ত) এবং একটি পূর্ণসংখ্যা n। ইনপুট অবশ্যই স্টিডিন বা প্রম্পট ডায়ালগ বাক্সে থাকতে হবে (যদি আপনার ভাষা স্ট্যান্ডিন সমর্থন করে না)

আউটপুট:

[sin(x)]
[cos(x)]

উভয় মান sin(x)এবং cos(x)6 দশমিক স্থানে বৃত্তাকার হতে হবে। যদি sin(x)হয় 0.5588558855(10 দশমিক সংখ্যা), এটি বৃত্তাকার দিতে হবে 0.558856(6 দশমিক সংখ্যা)। এই উইকি নিবন্ধের সারণির সারণীর পঞ্চম কলাম "" নিকটেতম বৃত্তাকার "হিসাবে বর্ণিত হিসাবে গোলটি অবশ্যই নিকটতম স্থানে স্থান নিতে হবে ।

সীমাবদ্ধতাসমূহ:

1 <= x <= 20
1 <= n <= 20

নমুনা:

----
5 3

10.208333
14.541667
----
8.555 13

0.765431
-0.641092
----
9.26 10

-3.154677
-8.404354
----
6.54 12

0.253986
0.967147
----
5 1

5.000000
1.000000
----
20 20

-5364.411846
-10898.499385
----

মন্তব্য:

  1. স্ট্যান্ডার্ড লুফোলগুলি নিষিদ্ধ।
  2. অন্তর্নির্মিত গণিত ফাংশন এবং ত্রিকোণমিতির অপারেটরগুলি (পাপ, কোস, ট্যান, ইত্যাদি), ফ্যাকটোরিয়াল এবং ক্ষতিকারক ব্যবহার করা যায় না। কম্পিউটিংয়ের ফলাফল অনুমানের জন্য sin(x)এবং cos(x)--ষ্ঠ দশমিক অঙ্কের জন্য আপনি বিল্ট-ইন রাউন্ডিং ফাংশনটি ব্যবহার করতে পারেন ।
  3. ভুল ইনপুট পরিচালনা করার দরকার নেই।
  4. প্রোগ্রামটিতে কেবল ASCII টি অক্ষর ব্যবহার করা যেতে পারে, চীনা ইউনিকোড যা কোড সংকোচনের অনুমতি দেয় তা নয়।
  5. আপনার প্রোগ্রামটি অবশ্যই শেষ করতে হবে এবং ইনপুটটির 3 সেকেন্ডের মধ্যে আউটপুট প্রদর্শন করবে।
  6. কোডের ব্যাখ্যা সহ আপনার উত্তর অবশ্যই অজলিত কোডের সাথে অবশ্যই আবশ্যক (যদি কোডটি তাত্ক্ষণিকভাবে আপনার ভাষার সাথে পরিচিত না-হওয়া, বিশেষত গল্ফস্ক্রিপ্ট, জে ইত্যাদি) প্রোগ্রামারদের কাছে স্পষ্ট না হয়)।
  7. একটি অনলাইন সংকলক যেখানে আপনার প্রোগ্রাম পরীক্ষা করা যেতে পারে একটি লিঙ্ক অন্তর্ভুক্ত করুন।

স্কোরিং:

অক্ষরের মধ্যে সর্বনিম্ন কোড দৈর্ঘ্যের উত্তর, সাদা স্থান, ট্যাব ইত্যাদিসহ জয়! 21 মে 2014 এ বিজয়ী ঘোষিত হবে।

সম্পাদনা : 21/05/14 বিজয়ী হয় CJam ভাষা ব্যবহার aditsu । রানার আপ জে জাজোবসকে জ ভাষার সাথে অনুসরণ করে এবং দ্বিতীয় রানার আপ হ'ল পার্ল ভাষার সাথে প্রিমো । সবাইকে অভিনন্দন!


(মোড দ্রষ্টব্য: মন্তব্যগুলি নুড। দয়া করে আপনার যে কোনও হারানো তথ্যের জন্য আমাকে পিং করুন যা আমার আগাম সতর্কবার্তা দেখে মনে হচ্ছে, সবকিছুই যদিও প্রশ্নটিতে
পৌঁছেছে

প্রথম অনুচ্ছেদে, এটি "সাইন" হওয়া উচিত, "পাপ"
নয়

Is "নিকটতম গোল" এখনও একটি প্রয়োজন, অথবা আমরা কোনো বিল্ট-ইন সুবিধা rounding ব্যবহার করতে পারি? যেমন শূন্যের দিকে গোল?
ডিজিটাল ট্রমা

mod 2piইনপুটগুলিকে দ্রুত রূপান্তর করতে অপারেশনের সমতুল্য প্রয়োজন বরং দরকারী হবে - এই ফাংশনগুলির সাথে ডিল করার সময় আসল বিশ্বটি ব্যবহার করে এমন অনেক উন্নতি এটি। (আসলে মোড পাই এবং সাইন সচেতনতা)।
ফ্লোরিস

1
@ ফ্লোরিস আমি এটি কখনই জানতাম না। ঠিক আছে, আমরা এখন কিছুই করতে পারি না, নিয়মগুলি ইতিমধ্যে অনেক পরিবর্তন হয়ে গেছে, এবং উত্তরদাতাদের আরও বিরক্ত করতে আমি এগুলি পরিবর্তন করতে চাই না। যদিও পরামর্শ জন্য ধন্যবাদ!
গৌরাঙ্গ ট্যান্ডন

উত্তর:


6

সিজেম - 42

rd:X;1_ri2*,1>{_2%2*(*/X*_}/;]2/z{:+6mO}/p

এটি অনলাইনে http://cjam.aditsu.net এ চেষ্টা করুন

ব্যাখ্যা:

rইনপুট থেকে একটি টোকেন
dরূপান্তরিত
:Xকরে ভেরিয়েবল এক্সকে ডাবল অ্যাসাইনমেন্টে রূপান্তর
;করে স্ট্যাকের
11 টি রাখে স্ট্যাকের প্রথম মানটি (প্রথম শব্দটি)
_1 টি সদৃশ
rকরে পরবর্তী টোকেনটি (এন)
iপূর্ণসংখ্যায় রূপান্তরিত করে
2*,1>{...}/এক ধরণের লুপ থেকে 1 2 * n যাও - 1:
- 2*তা বৃদ্ধি পায় 2 দ্বারা
- ,(শেষ মান) 0 থেকে একটি অ্যারের তোলে -1
- 1>অ্যারের প্রথম আইটেম সরিয়ে ফেলা হবে (0)
- {...}/executes অ্যারের মধ্যে প্রতিটি আইটেমের জন্য ব্লক
_সদৃশ "লুপ ভেরিয়েবল "(আসুন একে কে বলি)
2%2*(সমান / বিজোড় থেকে -১/১ তে রূপান্তর করে:
- 2%মডুলো 2 (-> 0/1)
- 2 (-> 0/2) 2*দ্বারা গুণিত হয়
-(হ্রাস (-> -1/1)
*গুণিত হয়, এভাবে প্রতিটি দ্বিতীয় বার সাইন পরিবর্তন
/করে কে বা-কে দ্বারা স্ট্যাকের শব্দটি বিভক্ত করে; এটি "/ কে!" সাইন
X*চেঞ্জের সাথে একসাথে গণনার অংশ এক্স দ্বারা গুণিত হয়; এটি গণনার "এক্স ^ কে" অংশ; আমরা সিরিজের পরবর্তী শব্দটি পেয়েছি
_পরবর্তী পুনরাবৃত্তির
;(লুপের পরে) নিম্নলিখিত শব্দটির গণনা করার জন্য ব্যবহৃত শব্দটি নকল করে শেষ নকল করা শব্দটি
]অ্যারে স্ট্যাকের শর্তাদি সংগ্রহ করে
এই মুহুর্তে আমাদের একটি অ্যারে রয়েছে [ 1 এক্স-এক্স ^ 2/2! -X ^ 3/3! X ^ 4/4! X ^ 5/5! ...] কোস (এক্স) এবং পাপ (এক্স) এর জন্য আমাদের প্রয়োজনীয় সমস্ত শর্তাদি অন্তর্ভুক্ত করে
2/আন্তঃবাহিত এই অ্যারেটিকে জোড়ায় বিভক্ত করে
zম্যাট্রিক্স স্থানান্তর করে, ফলে কোস (এক্স) এর শর্তাবলীর সাথে অ্যারে এবং পাপ (এক্স) এর শর্তাবলী সহ অ্যারে যেমন "ম্যাট্রিক্স সারি"
{...}/প্রতিটি অ্যারে আইটেম (ম্যাট্রিক্স সারি) এর জন্য ব্লকটি কার্যকর করে:
- :+উপাদান যুক্ত করে একসাথে ম্যাট্রিক্স সারির
- 6mO6 দশমিক রাউন্ডে
এই মুহুর্তে আমাদের স্ট্যাকের উপর কাঙ্ক্ষিত কোস (এক্স) এবং সিন (এক্স) রয়েছে
pএকটি নতুন লাইনের
পরে স্ট্যাকের (পাপ (এক্স)) এর শেষ আইটেমের প্রতিনিধিত্ব মুদ্রণ করে প্রোগ্রামের শেষে, স্ট্যাকের বাকি বিষয়বস্তু (কোস (এক্স)) স্বয়ংক্রিয়ভাবে মুদ্রিত হয়।


1
আমাকে এমন ভাষায় পরিচয় করানোর জন্য +1 যা আমি কখনও শুনিনি এবং সম্ভবত কখনও ব্যবহার করব না।
অ্যালেক্স এ।

@ অ্যালেক্স ধন্যবাদ, সিজেম কিছুটা স্টেরয়েডগুলিতে গল্ফস্ক্রিপ্টের মতো
অ্যাডিতু

প্রশ্ন পোস্ট করার পরে আমি নিয়ম পরিবর্তন করতে পছন্দ করি না, তবে আমি কোড-সংক্ষেপণ-অনুমোদন-ইউনিকোড অক্ষরগুলিকে অস্বীকার করেছি, কারণ আমি জানি না যে কোডটি সঙ্কোচন করতে ইউনিকোড অক্ষর ব্যবহার করা যেতে পারে। এখন কেবলমাত্র ASCII অক্ষর ব্যবহার করা যেতে পারে। আপনার পোস্ট সম্পাদনা করুন। অসুবিধার জন্য দুঃখিত.
গৌরাঙ্গ ট্যান্ডন

পছন্দ করুন আপনি কী ভাবেন যে এই সমস্যার জন্য সম্ভবত চীনা চরিত্রগুলি ব্যবহার করা যেতে পারে? যাইহোক, সম্পাদিত।
অ্যাডিটসু

18

পার্ল - 72 বাইট

$~=<>=~$"+$'*2;$_=1-$_*$`/$~--/$~*$`for($,,$;)x$';printf'%f
%f',$`*$,,$;

অথবা, কমান্ড লাইন বিকল্পগুলি 1 বাইট হিসাবে প্রতিটি 70 বাইটে গণনা করা হচ্ছে :

#!perl -n
$-=/ /+$'*2;$_=1-$_*$`/$---/$-*$`for($,,$;)x$';printf'%f
%f',$`*$,,$;

অথবা, যদি আপনি আমাকে পার্ল 5.8, 63 বাইটে অনুমতি দেবেন :

#!perl -p
$.+=$'<</ /;$_=1-$_*$`/$.--/$.*$`for($_=$#='%f
',$\)x$';$_*=$`

তবে কেন আপনি হবে।

সম্পাদনা করুন : নতুন নিয়ম মেনে চলুন। %fডিফল্টরূপে 6 টি জায়গায় গোল করে, কীভাবে সুবিধাজনক!


অ্যালগরিদম

পাপের জন্য টেলর সিরিজ পরীক্ষা করা (এক্স) :

এটি দেখা যায় যে প্রতিটি শব্দটি প্রতিটি ধারাবাহিক শব্দকে সমানভাবে ভাগ করে দেয়। এ কারণে, এটি অনায়াসে নেস্টেড মতপ্রকাশে রূপান্তরিত হতে পারে:

কোস (এক্স) একইভাবে রূপান্তর করে, শীর্ষস্থানীয় এক্স ছাড়াই এবং ডিনোমিনেটর পদগুলি আরও ছোট হয়।

অতিরিক্তভাবে, এই নেস্টেড এক্সপ্রেশনটি বিপরীত পুনরাবৃত্ত এক্সপ্রেশন হিসাবে সংশোধন করা যেতে পারে:

সঙ্গে গুলি = 0 এবং পাপ (x) এর = এক্স · গুলি 1 , যা পরিণামে কি ব্যবহার করা হয়।


Ungolfed

<> =~ m/ /;          # read one line from stdin, match a space
                     # prematch ($`) is now x, postmatch ($') is now n
($x, $n) = ($`, $'); # reassign, for clarity
$i = 2*$n + 1;       # counting variable (denominators)

for (($s, $c)x$n) {  # iterate over $s and $c, n times each
  # compute the next term of the recursive expression
  # note: inside this loop $_ is not the _value_
  # of $s and $c alternately, it _is_ $s and $c

  $_ = 1 - $_ * $x**2 / $i-- / $i;
}

# formated output
printf("%f\n%f", $x*$s, $c);

নমুনা ব্যবহার

$ echo 5 3 | perl sin-cos.pl
10.208333
14.541667

$ echo 8.555 13 | perl sin-cos.pl
0.765431
-0.641092

$ echo 9.26 10 | perl sin-cos.pl
-3.154677
-8.404354

$ echo 6.54 12 | perl sin-cos.pl
0.253986
0.967147

$ echo 5 1 | perl sin-cos.pl
5.000000
1.000000

$ echo 20 20 | perl sin-cos.pl
-5364.411846
-10898.499385

আপনি যদি অনলাইনে এটি পরীক্ষা করতে চান তবে আমি কমপাইলনলাইন.কম ব্যবহার করার পরামর্শ দিচ্ছি । এরপরে কোডটি এবং তারপরে বাক্সটিতে অনুলিপি main.plকরুন ।STDINExecute Script


2
ইনপুট পার্স করার কী বিভ্রান্তিকর উপায় ... আমি কি এটি আমার সমাধানটিতে ব্যবহার করতে পারি? :)
তাল

@ টাল মুক্ত মনে হয়।
প্রিমো

2
আমি মনে করি পার্ল (এবং বিশেষত আপনার কোড) "আপনার ভাষার সাথে পরিচিত-না প্রোগ্রামারদের কাছে তাত্ক্ষণিকভাবে স্পষ্ট নয়" হিসাবে গণ্য হয়েছে
অ্যাডিটসু

1
@ অ্যাডিটসু একমত আমি কিছু ক্লিনার কোড এবং অ্যালগরিদমের ব্যাখ্যা যুক্ত করব।
primo

2
এই উত্তরটি সত্যিই অত্যন্ত শিক্ষামূলক ছিল!
তাল

10

পাইথন 3 (102) / পাইথন 2 (104)

পাইথন 3 (102)

x,n=map(float,input().split())
k=2*n
t=1
while k>1:k-=1;t=1+t*1j*x/k
print('%.6f\n'*2%(t.imag,t.real))

পাইথন 2.7 (104)

x,n=map(float,raw_input().split())
k=2*n
t=1
while k>1:k-=1;t=1+t*1j*x/k
print'%.6f\n'*2%(t.imag,t.real)

মূলত একই কোড। আমরা দুটি চরিত্রের জন্য প্যারেনের প্রয়োজন না থেকে সংরক্ষণ করি printতবে চারটি প্রয়োজন থেকে হারাতে পারি raw_input

নমুনা রান

আপনি এই চালাতে পারেন এখানে

>>>
20 20
-5364.411846
-10898.499385

কোড ব্যাখ্যা

মূল ধারণাটি হ'ল 2*nশর্তাদি গণনা করা e^(ix), এবং তারপরে sinএবং cosমানগুলি আনুমানিকরূপে পেতে কল্পিত এবং বাস্তব অংশ নেওয়াn শর্তগুলির সাথে । আমরা টেলর সিরিজের ছাঁটাই ব্যবহার করি:

e^(ix)≈sum_{k=0}^{2n-1} (i*x)^k/k!

এটি আই * x এর ক্ষেত্রে বহুপদী, তবে প্রতিটি শর্তের যোগফলের দ্বারা এর মান গণনা করার পরিবর্তে, আমরা একটি পরিবর্তিত হর্ণারের পদ্ধতি ব্যবহার করি ক্রমটি গণনা করার ব্যবহার করি (বিপরীতে পুনরাবৃত্তভাবে সংজ্ঞায়িত)

t_{2n} = 1
t_k = 1 + t_{k+1}*i*x/k,

যা দেয় t_1 পছন্দসই মানকে সমান করে।

পাইথন স্ট্রিং ফর্ম্যাটিং ক্রিয়াকলাপগুলি 6 দশমিক সংখ্যা পর্যন্ত বৃত্তাকার মান প্রদর্শন করতে ব্যবহৃত হয়।

সম্পাদনা করুন: নতুন নিয়ম অনুসারে 6 টি সংখ্যায় গোল করা হয়েছে। অন্য কোনও পরিবর্তনের দরকার পড়েনি।


কোনও অনলাইন পাই 3 ইন্টারপ্রেটারের জন্য আইডোন চেষ্টা করুন :)
হ্যারি বিডল

@ ব্রিটিশ কলর ধন্যবাদ! আমি এটি পোস্টে যুক্ত করেছি।
xnor

আপনার উত্তর আপডেট করুন। প্রশ্নে বিশদ দেখুন। ধন্যবাদ।
গৌরাঙ্গ ট্যান্ডন

8

জে 98 70 69 58

যদিও আরও অভিনব ফাংশন ব্যবহার করে এটি সম্ভবত কিছুটা ছোট করা যেতে পারে ... মন্তব্যগুলি স্বাগত:

exit echo 0j6":,.-/(($%&(*/)1+i.@[)"0~i.@,&_2)/".}:stdin''

নোট 2: ইওএফ পাওয়ার পরে ইনপুট শেষ হয় (লিনাক্সে সিটিআরএল-ডি)। সম্পাদনা: একটি সুন্দর মধ্যে exponentiation এবং গৌণিক যোগদানের, আরো জে পর পুরো: ($ %&(*/) >:@i.@[ )। Y এর এক্স রেপ্লিকেশনগুলির অ্যারে এবং 1 থেকে y পর্যন্ত সংখ্যার একটি অ্যারে নিতে এটি নীচে ফোটে। প্রতিটি গুণ এবং ফলাফল ভাগ। এটি সদৃশ থেকে মুক্তি পাবে*/

আলগোরিটিহ্মশার্ককে ধন্যবাদ, আরও 7 টি অক্ষর বন্ধ।

পেছনের নতুন লাইনের হাত থেকে মুক্তি পাওয়ার জন্য কাটা মুছে ফেলা হয়েছে।

দীর্ঘতর সংস্করণ, যার জন্য কাঁটাচামচ সম্পর্কে জানার প্রয়োজন।

NB. recursive Factorial
f=: */@>:@i.      NB. multiply all from 1 to n
NB. Exponential
e=: */@$          NB. replicate y x times, take the product.
NB. the x t y is the Nth (general) term without sign of the joint series
t=: (e % f@[)"0  NB. pretty straight forward: divide by (x!) on the exponential

NB. Piece the parts together, from right to left:
NB. read from stdin, cut the linefeed off , make the 2 n terms in 2 columns, which
NB. effectively splits out pair and odd terms, put in the minuses, put in rows
NB. instead of columns, echo, exit
exit echo 0j6&": ,. (-/) (i.@(,&_2)@{: t {.) , (". ;. _2) stdin''

কোনও অনলাইন জে ইন্টারপ্রিটার নেই, তবে এটি কয়েক বছর থেকে এটি মুক্ত উত্স; এই নির্দেশাবলী দিয়ে ইনস্টলেশন সহজ:

http://www.jsoftware.com/jwiki/System/Installation/J801

#Jsoftware এ irc.freenode.org- এ, একটি জে বটও রয়েছে।

কমান্ডলাইন থেকে কোনও ফাইল চালানো হলেই স্টিডিন কাজ করে, অন্যথায় ক এবং কমান্ডলাইনে পাস হওয়া সংখ্যার stdin ''সাথে প্রতিস্থাপন 'a b;'করুন।


5
আমি ভালোবাসি যে এটি দিয়ে শুরু হয়exit
ডিজিটাল ট্রমা

আপনার উত্তর আপডেট করুন। প্রশ্নে বিশদ দেখুন। ধন্যবাদ।
গৌরাঙ্গ ট্যান্ডন

Dec দশমিক স্থানের জন্য আপডেট হয়েছে। যদি অন্য কিছু থাকে তবে দয়া করে নির্দিষ্ট করুন। ধন্যবাদ
jpjacobs

আপনি অপসারণ করতে পারেন &থেকে 0j6&":একটি গৃহস্থালি সংরক্ষণ করুন। এছাড়াও, অন্য 6 এর জন্য আবারও (i.@(,&_2)@{:($%&(*/)>:@i.@[)"0{.)লেখা যেতে পারে(($%&(*/)1+i.@[)"0~i.@,&_2)/
অ্যালগরিদমশর্ক

এই কাজগুলি T.(এন-টার্ম টেলর সিরিজের আনুমানিক ফাংশন) জন্য চিৎকার করে, তবে আমি মনে করি এটি একটি মানক লুফোল হিসাবে ভারবোটেন।
FUZxxl

6

পার্ল, 120 108 104 89 85

<>=~/ /;$c=$t=1;for(1..2*$'-1){$t*=$`/$_;$_%2?$s:$c+=$_&2?-$t:$t}printf"%f\n"x2,$s,$c

Ungolfed:

<> =~ / /;
$cosine = $t = 1;
for (1.. 2*$' - 1){
  $t *= $` / $_;
  ($_%2 ? $sine : $cosine) += $_&2?-$t:$t
}
printf "%.6f\n" x2, $sine, $cosine

প্রথম লাইনটি ইনপুটটি পড়ে এবং একটি স্থান সন্ধান করতে রেজেক্স ব্যবহার করে; এটি স্বয়ংক্রিয়ভাবে মানটিকে $ `এবং স্পেসের পরে $ 'এর পরে রাখে।

এখন আমরা 1 থেকে লুপ করছি 2*n-1$tআমাদের পদটি, যা লুপটি বারবার গুণিত করে xএবং লুপের সূচক ( $_) দ্বারা ভাগ করে । লুপটি 0 এর পরিবর্তে 1 থেকে শুরু হয় কারণ কোসাইনটি 1 থেকে শুরু করা হয়েছিল, যা আমাকে শূন্য দ্বারা বিভাজনে মোকাবেলা করতে বাঁচিয়েছিল।

আপডেট করার পরে $t , trinary অপারেটর আয় হয় $sineবা $cosine, তার উপর নির্ভর করে কিনা সূচক বিজোড় বা এমনকি, এবং যোগ করে $tএটি এর মান। $_&2?-$t:$tএই মানটি যুক্ত করতে হবে বা বিয়োগ করবে কিনা তা যাদু সূত্রের পরিসংখ্যান (মূলত কিছুটা দিকনির্দেশনা ব্যবহার করে এবং সূচক এবং 2তে "যোগ, যোগ, বিয়োগ, বিয়োগ" এর পুনরাবৃত্তি ক্রম উত্পন্ন করতে)।

আপনি এই কোডটি এখানে পরীক্ষা করতে পারেন compileonline.com


দয়া করে আপনার আউটপুটটি সংশোধন করুন 20 20
গৌরাঙ্গ ট্যান্ডন

1
আমি তোমার জন্য লুপ থেকে যেতে হবে পারে মনে 1..$n*2-1পরিবর্তে, 1..$n। যখন আমি এখানে আছি ... $sপুরোপুরি সূক্ষ্মভাবে বামে অবিচ্ছিন্ন, যেমন একটি সংখ্যার প্রসঙ্গে undefমূল্যায়ন করা 0হয়। তিন নিয়োগ প্রথম বন্ধনী দরকার নেই: $_&1?$s:$c+=$t। একটি ট্রেলিং নিউলাইন যুক্ত করার ফলে "%.8f\n%.8f"সংক্ষিপ্ত করা যেতে পারে "%.8f\n"x2
primo

@ প্রিমো ধন্যবাদ, আমি তাদের কয়েকটি সম্পর্কে জানতাম না। এবং এখন এটি এমনকি সঠিক ফলাফল উত্পাদন করে।
তাল

@ টাল আমার আনন্দ। এছাড়াও, কিছুটা ভাল যাদু: $t*(1-($_&2))=> $_&2?-$t:$t
প্রিমো

আপনার উত্তর আপডেট করুন। প্রশ্নে বিশদ দেখুন। ধন্যবাদ।
গৌরাঙ্গ ট্যান্ডন

5

ফরট্রান: 89 109 125 102 101 98 বাইট

complex*16::t=1;read*,x,n;do k=2*n-1,1,-1;t=1+t*(0,1)*x/k;enddo;print'(f0.6)',aimag(t),real(t);end

আমি অন্তর্নিহিত টাইপিংয়ের অপব্যবহার করি, তবে দুর্ভাগ্যক্রমে এরকম কোনও অন্তর্নিহিত জটিল ধরণের উপস্থিত নেই, তাই আমাকে সেই এবং জটিলটি নির্দিষ্ট করতে হয়েছিল iগফর্ট্রান প্রাকৃতিকভাবে 8 দশমিক স্থানে আউটপুট কাটায়, তাই আমরা সেই অনুকরণে ভাল। দুর্ভাগ্যক্রমে, আউটপুট দেওয়ার আমার আসল পদ্ধতিটি print*,tচশমা পূরণ করতে পারেনি তাই আমাকে কাল্পনিক এবং আসল উপাদানগুলিকে আউটপুট করতে 16 টি অক্ষর যুক্ত করতে হয়েছিল এবং প্রয়োজনীয় 8 দশমিক জায়গায় আঘাত করতে হয়েছিল।

ভেন্টোরোর ধন্যবাদ, আমি আউটপুট এবং লুপের মধ্যে 23 বাইট সংরক্ষণ করতে সক্ষম হয়েছি। এবং অন্য একটি চরিত্র সঠিক উত্তর এবং ফর্ম্যাট আউটপুট পেতে। এবং আরও 3read বিবৃতিতে

Ungolfed,

complex*16::t=1
read*,x,n
do k=2*n-1,1,-1
   t=1+t*(0,1)*x/k
enddo
print'(f0.6)',aimag(t),real(t)
end

আপনার উত্তর আপডেট করুন। প্রশ্নে বিশদ দেখুন। ধন্যবাদ!
গৌরাঙ্গ ট্যান্ডন

1
@ গৌরাঙ্গট্যান্ডন: আপনার সম্ভবত সমস্যার বিবরণ পরিবর্তন করা উচিত।
কাইল কানস

আমি জানি, এবং আমি চাই না, তবে আমি এটি সাহায্য করতে পারি না। প্রকৃতপক্ষে, 5 টি উত্তর পরীক্ষার পরে, দেখা গেল যে তাদের প্রায় সকলেই বিভিন্ন ফলাফল দিচ্ছিল (এটি সত্যই নিঃসংশ্লিষ্ট ছিল)। আমি অন্য কিছু পদ্ধতি অনুসরণ করতে পারতাম, তবে এটি বর্তমান উত্তরগুলির অ্যালগরিদমের সম্পূর্ণ পরিবর্তনের পুনরুদ্ধার করতে পারে। এই এক আমি খুঁজে বের করতে পারেন সেরা।
গৌরাঙ্গ ট্যান্ডন

2
আমি জানি যে আমার কাজটি পুরোপুরি কাজ করে, তাই আমার চেকটি পুরোপুরি পাওয়া উচিত : ডি;)
কাইল কানোস

4

সি, 120

double s,c,r,x;main(i,n){for(scanf("%lf %d",&x,&n),r=1;i<n*2;s+=r,r*=-x/i++)c+=r,r*=x/i++;printf("%.8lf\n%.8lf\n",s,c);}

একটি বাইট সংরক্ষণ করতে, সাইন মান আপডেট করে এমন স্টেটমেন্টগুলি এর ভিতরে স্থাপন করা হয় for() স্টেটমেন্টগুলি স্টেটমেন্টের , তবে বাস্তবে কোসাইন মান আপডেট করে এমন বন্ধনীর পরের বিবৃতিগুলির পরে কার্যকর করা হয়। (আমার ধারণা আমি প্রোগ্রামের আউটপুটটিতে চূড়ান্ত নিউলাইন চরিত্রটি সরিয়ে আরও কয়েকটা বাইট সংরক্ষণ করতে পারি save)

গ্লোবাল ভেরিয়েবল s, c, rএবংx পরোক্ষভাবে শুন্যতে সক্রিয়া করা হয়, এবং iসেখানে কমান্ড লাইন প্রদান করা কোন যুক্তি আছে যতদিন 1 একটি মান থাকবে। দুর্ভাগ্যবশতprintf() দশমিকের 6 টি জায়গায় ডিফল্ট, সুতরাং আউটপুট ফর্ম্যাটটি কিছুটা ভার্জোজ।

Ungolfed:

জিনিসগুলি কিছুটা পরিষ্কার করে দেওয়া হয়েছে এমন আদেশটি তৈরি করতে এখানে কিছুটা পুনর্বিন্যাসের কোড রয়েছে:

double s,c,r,x;
main(i,n) {
    scanf("%lf %d",&x,&n);
    r=1;
    for(;i<n*2;) {
        c+=r;
        r*=x/i++;
        s+=r;
        r*=-x/i++;
    }
    printf("%.8lf\n%.8lf\n",s,c);
}

নমুনা আউটপুট:

$ echo 1.23 4 | ./sincos
0.94247129
0.33410995

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

http://ideone.com/URZWwo


3

পাইথন> = 2.7.3, 186 184 211 200 182 170 টি অক্ষর

নরক হিসাবে কিন্ডা সহজ। সাইন এবং কোসাইনের জন্য প্যারামিটারাইজড প্রশ্ন থেকে সূত্র ব্যবহার করে।

অনলাইন দোভাষী পাওয়া যাবে এখানে এখানে

x,n=map(eval,raw_input().split())
f=lambda n:n<2and 1or n*f(n-1.)
for i in[1,0]:print"%.6f"%sum((1-j%2*2)*reduce(lambda o,p:o*p,[x]*(i+2*j),1)/f(i+2*j)for j in range(n))

সম্পাদনা করুন: সমস্ত বিধিনিষেধ সহ বৈধ সংস্করণ

সম্পাদনা 2:round পাইথন ২.7.১ এ অবৈধ ফাংশন আউটপুটের কারণে আইডোন.কম-এ অনলাইন অনুবাদককে পরিবর্তন করা হয়েছে

Edit3: গেছে যে আমি অপ্রয়োজনীয় ইনলাইন ব্যবহার করেছি + গোলাকারটিকে স্ট্রিং ফর্ম্যাটে পরিবর্তন করা হয়েছে (xnor থেকে চুরি হয়েছে))

সম্পাদনা 4:join কার্যকরী নয় প্রধান forলুপ দ্বারা প্রতিস্থাপন


হ্যালো অ্যাভেল, আমি সম্প্রতি এমন নিয়মগুলি সম্পাদনা করেছি যা এখন বিল্ট-ইন অপারেটরগুলিকে ক্ষয়ক্ষতির জন্য অনুমতি দেয় না (এটি **আমি মনে করি যা করছে)। সুতরাং, আমি মনে করি আপনাকে নিজের উত্তরটি সম্পাদনা করতে হবে। অসুবিধার জন্য দুঃখিত. আমি ভুল হলে আমাকে সংশোধন করুন।
গৌরাঙ্গ টন্ডন

1
আমি আরও সংশোধনসহ নিষ্প্রয়োজন xnor এর উত্তর :)
avall

@ ওয়েল অন 20 20, আমি আউটপুট পাই -5364.4118142500001। এটি 8 দশমিক স্থির করতে চাই।
গৌরাঙ্গ টন্ডন

এটি repl.it পাইথন সংস্করণ কারণ 2.7.1। যদি আপনি এটিকে আদর্শ কোড.কম (পাইথন ২.7.৩) এ চালান তবে এটি সঠিকভাবে কাজ করে। আইডোন.ন.জেসওয়াইএনএনকে
এভেল

এটি এখন দুর্দান্ত কাজ করে! +1
গৌরাঙ্গ ট্যান্ডন

3

জাভাস্ক্রিপ্ট - 114 অক্ষর

y=(z=prompt)().split(' ');for(x=l=s=+y[0],c=d=1;--y[1];c+=l*=-x/++d,s+=l*=x/++d);z(s.toFixed(6)+'\n'+c.toFixed(6))

জেমসের দুর্দান্ত উত্তরের উপর ভিত্তি করে। একই অ্যালগরিদম, প্রথম ধাপে সি = 1 এবং এস = এক্স এর সূচনা সহ এড়ানো হবে। আউটপুট জন্য অ্যারের পরিবর্তে 2 টি ভার্স ব্যবহার করা লুপকে সহজ করে।

Ungolfed

y = ( z = prompt)().split(' ');
for ( 
    x = l = s = +y[0], /* init to value x, note the plus sign to convert from string to number */
    c = d = 1;
    --y[1]; /* No loop variable, just decrement counter */
    c += (l *= -x / ++d), /* Change sign of multiplier on each loop */
    s += (l *= x / ++d) 
); /* for body is empty */
z(s.toFixed(6) + '\n' + c.toFixed(6))     

গৌণ টাইপো: এটি অসলোফড কোডে হবে s += (l *= x / ++d)এবং না s += (l* = x / ++d)
গৌরাঙ্গ ট্যান্ডন

1
@ গৌরাঙ্গট্যান্ডন স্থির হয়েছে
edc65

2

জাভাস্ক্রিপ্ট (ECMAScript 6 খসড়া) - 97 96 টি অক্ষর

একটি পুনরাবৃত্ত সমাধান:

f=(x,n,m=1,i=0,s=x,c=1)=>i<2*n?f(x,n,m*=-x*x/++i/++i,i,s+m*x/++i,c+m):[s,c].map(x=>x.toFixed(8))

আউটপুট:

f(0.3,1)
["0.29550000", "0.95500000"]

f(0.3,24)
["0.29552021", "0.95533649"]

যদিও রাউন্ডিং সম্পর্কিত ধারণাটি পূরণ করে না।
মার্টিন এন্ডার

@ এম.বয়েটনার স্থির হয়েছে
এমটি 0

1
এটি ইনপুট ফর্ম্যাট এবং no functionsপ্রয়োজনীয়তা পূরণ করে না ।
এভল

আপনার উত্তর আপডেট করুন। প্রশ্নে বিশদ দেখুন। ধন্যবাদ।
গৌরাঙ্গ ট্যান্ডন

2

সি, 114

মন্তব্য করার জন্য অপর্যাপ্ত খ্যাতি, তবে আরও স্ক্যাইমিশ অফিশের সি উত্তরটি , ডাবল এবং স্পেসগুলি সরিয়ে ফ্লোট ব্যবহার করে 7 বাইট হ্রাস, এবং 'আর' এর প্রদত্ত ঘোষণা এবং আরম্ভের সংমিশ্রণ

float s,c,r=1,x;main(i,n){for(scanf("%f%d",&x,&n);i<n*2;s+=r,r*=-x/i++)c+=r,r*=x/i++;printf("%.8f\n%.8f\n",s,c);}

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


প্রোগ্রামিং ধাঁধা এবং কোড গল্ফ স্বাগতম। আপনার উত্তরটি @ স্ক্যামিমোসোসিফ্রিজের সামান্য উন্নতি বলে স্বীকার করার জন্য ভাল হয়েছে (আমি এখনও আমার সম্পাদনায় এটি ভুল বানান করতে পেরেছি।) উত্তরের "উপরে" উল্লেখ না করা ভাল কারণ প্রতিবার সম্পাদনা করার সাথে সাথে আদেশটি পরিবর্তিত হয়। বিটিডাব্লু, আমি rঘোষণার সূচনাটি লক্ষ্য করেছি । floatপ্রয়োজনীয় নির্ভুলতা দেয় কিনা তা পরীক্ষা করে দেখিনি n't
স্তর নদী সেন্ট

@ স্টিভেরিলিলও আমি ভাবেন নি floatযে প্রয়োজনীয় নির্ভুলতা দেবে, তবে এটি কার্যকর হয় :) এবং পিপিসি, ইউজার 2702245 এ আপনাকে স্বাগতম!
গৌরাঙ্গ ট্যান্ডন

তখন কি floatভেরিয়েবলের সাথে ভুল উত্তর পাওয়া ঠিক আমার পক্ষে হয়? জন্য x=5এবং n=3, আমি পেতে sin(x)=10.20833206এবং cos(x)=14.54166412:-( (ইন্টেল কোর মানিকজোড়, যদি আপনার আশ্চর্যজনক মনে হয়)
খুঁতখুঁতে ossifrage

আপনি কি আমাকে উত্তর উত্তরে একটি মন্তব্যে রূপান্তর করতে চান?
ডুরকনব

@Doorknob মে পাশাপাশি এখন এটি ছেড়ে :-)
খুঁতখুঁতে ossifrage

2

জিএনইউ বিসি, ব্যাশ দ্বারা চালিত, 128 বাইট

অনেক বেশি বাইট দশমিক স্থান নির্ধারণ করে এবং নিকটতম নিকটস্থ রাউন্ডিং ব্যয় করেছে। ওহ ভাল, এখানে এটি যাইহোক:

bc -l<<<"m=1000000
w=s=$1
c=1
for(p=2;p/2<$2;s+=w){w*=-1*$1/p++
c+=w
w*=$1/p++}
s+=((s>0)-.5)/m
c+=((c>0)-.5)/m
scale=6
s/1
c/1"

আউটপুট:

/ ./trig.sh 5 3
10.208333
14.541667
/ ./trig.sh 8.555 13
.765431
-.641092
/ ./trig.sh 9.26 10
-3,154677
-8,404354
/ ./trig.sh 6.54 12
.253986
.967147
/ ./trig.sh 5 1
5.000000
1.000000
/ ./trig.sh 20 20
-5364,411846
-10898,499385
$ 

লিনাক্স কমান্ড-লাইন সরঞ্জাম, 97 ইউনিকোড অক্ষর

ওপির অনুরোধে ইউনিকোড হ্যাক উত্তর সরানো হয়েছে। আপনি আগ্রহী হলে সম্পাদনা ইতিহাস দেখুন।


প্রশ্ন পোস্ট করার পরে আমি নিয়ম পরিবর্তন করতে পছন্দ করি না, তবে আমি কোড-সংক্ষেপণ-অনুমোদন-ইউনিকোড অক্ষরগুলিকে অস্বীকার করেছি, কারণ আমি জানি না যে কোডটি সঙ্কোচন করতে ইউনিকোড অক্ষর ব্যবহার করা যেতে পারে। এখন কেবলমাত্র ASCII অক্ষর ব্যবহার করা যেতে পারে। আপনার পোস্ট সম্পাদনা করুন। অসুবিধার জন্য দুঃখিত
গৌরাঙ্গ ট্যান্ডন

@ গৌরাংট্যান্ডন এটি আসলেই সংকোচনের নয় - ইউনিকোড সংস্করণটি আসলে আরও বেশি বাইট (তবে কম অক্ষর) নেয়। তবে আমি আপনার অনুভূতির সাথে একমত - আমি বাইট গণনা ব্যবহার করে কঠোরভাবে স্কোর করা পছন্দ করি তবে আপনার ওপিতে চীনা চরিত্র সম্পর্কে কিছুটা প্রতিহত করতে পারিনি।
ডিজিটাল ট্রমা


@ ওয়াল ওফস আমার জন্য 4 বাইট খরচ।
ডিজিটাল ট্রমা

1

রুবি, 336

সম্ভবত এখানে সবচেয়ে দীর্ঘতম, তবে আমি নিশ্চিত যে এটি আরও ছোট করা যেতে পারে :(

def f(n)
n==0 ? 1: 1.upto(n).inject(:*)
end
def p(x,y)
i=1
return 1 if y==0 
y.times {i *= x}
i
end
def s(x,n)
a = 0.0
for k in 0...n
a += p(-1,k) * p(x.to_f, 1+2*k)/f(1+2*k)
end
a.round(8)
end
def c(x,n)
a= 0.0
for k in 0...n
a +=p(-1,k) * p(x.to_f, 2*k)/f(2*k)
end
a.round(8)
end
x = gets.chomp
n = gets.chomp.to_i
puts s(x,n), c(x,n)

1

জাভাস্ক্রিপ্ট (ES6) - 185 অক্ষর

i=(h,n)=>n?h*i(h,n-1):1;q=x=>x?x*q(x-1):1;p=(a,j,n)=>{for(c=b=0,e=1;c++<n;j+=2,e=-e)b+=e*i(a,j)/q(j);return b.toFixed(6)}
_=(y=prompt)().split(" ");y(p(_[0],1,_[1])+"\n"+p(_[0],0,_[1]))

একটি ফাংশন ব্যবহার করে q , গৌণিক জন্য iexponentiation জন্য, এবং pউভয় সম্পাদন জন্য sinএবং cos। Jsbin.com এ চালান। কোনও পরিবর্তন ছাড়াই ঠিক সূত্রটি ব্যবহার করে।

সম্পাদনা : 8দশমিক স্থান দশমিক জায়গায় পরিবর্তন করা হয়েছে 6। 15 / মে / 14

অবহেলিত কোড :

/*Note that `name=args=>function_body` is the same as `function name(args){function_body} */

// factorial
function fact(x) {
    return x > 1 ? x * fact(x - 1) : 1
}

// Exponentiation
function expo(number, power){
    return power > 0 ? number * expo(number, power - 1) : 1;
}

function sin_and_cos(number, starter, terms) {
    for (count = sum = 0, negater = 1;
            count++ < terms;
            starter += 2, negater = -negater) 

        sum += (negater * expo(number, starter)) / fact(starter);

    // to 6-decimal places
    return sum.toFixed(6);
}

input = (out = prompt)().split(" ");

out(sin_and_cos(input[0], 1,input[1]) 
        + "\n" +                
        sin_and_cos(input[0], 0, input[1]));

1

জাভাস্ক্রিপ্ট - 133 অক্ষর

y=(z=prompt)().split(" "),s=[0,0],l=1;for(i=0;i<y[1]*2;i++){s[i%2]+=i%4>1?-1*l:l;l*=y[0]/(i+1)}z(s[1].toFixed(6));z(s[0].toFixed(6));

Ungolfed

var y = prompt().split(" ");

var out = [0,0]; // out[1] is sin(x), out[0] is cos(x)
var l = 1; // keep track of last term in series
for (var i=0; i < y[1] * 2; i++) {
    out[i % 2] += (i % 4 > 1) ? -1 * l : l;
    l *= y[0] / (i + 1);
}

prompt(out[1].toFixed(6));
prompt(out[0].toFixed(6));

ইনপুট দুটি স্পেস-বিভাজিত পূর্ণসংখ্যার হতে হবে, দুটি ভিন্ন সংলাপ বাক্সে নয়। দয়া করে এটি ঠিক করুন।
গৌরাঙ্গ ট্যান্ডন

@ গৌরাগট্যান্ডন স্থির করেছেন - এটি দেখানোর জন্য ধন্যবাদ
জেমস

1

গণিত, 96 টি অক্ষর

{{x,n}}=ImportString[InputString[],"Table"];Column@{Im@#,Re@#}&@Fold[1+I#x/#2&,1,2n-Range[2n-1]]

ইনপুট ফর্ম্যাটটি x,nআমার কেমন লাগে?
গৌরাঙ্গ ট্যান্ডন

@GaurangTandon এটা x n
আলেফাল্ফ

ঠিক আছে, স্পষ্ট করার জন্য ধন্যবাদ।
গৌরাঙ্গ ট্যান্ডন

1

রুবি - 160 152 140 চর

পুনরাবৃত্তি এবং এই পুনরাবৃত্তিমূলক বাস্তবায়নের জন্য পাপ (x, 2n + 1) = 1 + কোস (এক্স, 2 এন - 1), পাপ (এক্স, এন) এবং কোস (এক্স, এন) হয়ে ওঠা জন্য নির্ধারিত সিরিজটি ব্যবহার করে x এবং পাপ x

p=->x,n{n<1?1:x*p[x,n-1]}
f=->n{n<2?1:n*f[n-1]}
c=->x,n{n<1?1:p[x,n]/f[n]-c[x,n-2]}
x,n=gets.split.map &:to_f
n*=2
puts c[x,n-1]+1,c[x,n-2]

সম্পাদনা: মন্তব্যকারীদের দ্বারা অবদান (নীচে পড়ুন)।


1
আপনি lambdas ব্যবহার করে অক্ষরের একটি অনেক সংরক্ষণ করতে পারেন: p=->x,n{...}, f=->n{...}ইত্যাদি, এবং তারপর প্রথম বন্ধনী পরিবর্তে বর্গাকার বন্ধনী ব্যবহার মত তাদের ডাকতে p[x,n-1]। এছাড়াও, আমি মনে করি collectঠিক উপনাম হল map, যা অনেক খাটো, এবং যেহেতু আপনি শুধুমাত্র একটি সদস্য কল ম্যাপিং হয়ে গেলে, আপনি যে খাটো করতে পারেন gets.split.map &:to_f
মার্টিন এন্ডার

@ মার্টিনবাটনার ধন্যবাদ! এই যোগ করবে! (আশা করি আপনার মন্তব্যটি এখানে বলেছে যে এই সমাধানটি কেবল আমার নয়, তবে কোলাব) সত্যি কথা বলতে: আমি
রুবিতেও
আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.