এক সাইন অফ গ্রেটেস্ট


24

ভূমিকা

সাইন (পাপ) , কোসাইন (কোস) , ট্যানজেন্ট (ট্যান) , কোটজেন্ট (খাট) , সেকেন্ট (সেকেন্ড) , এবং কোসেক্যান্ট (সিসিএস) এর কথা প্রত্যেকেরই শোনা গেছে । প্রায় প্রতিটি কোণে সেগুলি রয়েছে।

অনেক কম পরিচিত, বা মনে হয় exsecant (exsec) , excosecant (excsc) , versine (versin) , এবং coversine (CVS) । প্রায় প্রতিটি কোণে সেগুলি রয়েছে। এমন কিছু রয়েছে যা আরও কম পরিচিত, তবে আমরা কেবল এগুলি বদ্ধ থাকব।

আমি এঙ্গেল for এর জন্য একটি ভিজ্যুয়ালাইজেশন তৈরি করেছি, যা 45 ° °


চ্যালেঞ্জ

এমন একটি প্রোগ্রাম তৈরি করুন যা nডিগ্রিগুলিতে একটি কোণের একটি ইনপুট নেয় এবং ফলাফল দেয়:

  1. কোণের সাইন n

  2. কোণের কোসাইন n

  3. কোণের স্পর্শক n

  4. কোণের সেকেন্ড n

  5. নিম্নলিখিতগুলির মধ্যে কমপক্ষে একটি এই তালিকা থেকে প্রতিটি অতিরিক্ত আইটেম সর্বাধিক -25% এর জন্য বোনাস -5% উপার্জন করবে।

    • কোণ থেকে দূরে n

    • কোণের কোসেক্যান্ট n

    • কোণের অজুহাত n

    • কোণ কোণ n

    • কোণ কোণ n

    • কোণের cotangent n

আপনার স্কোর যদি বোনাস প্রয়োগের পরে দশমিক হয়, তবে নিকটতম পুরো সংখ্যা পর্যন্ত গোল করুন।


ইনপুট

আপনি STDIN বা কোনও ফাংশন কলের মাধ্যমে আপনার ইনপুট গ্রহণ করতে পারেন। একটি একক যুক্তি,, nপাস করা হবে।

n সর্বদা সম্পূর্ণ পূর্ণসংখ্যা হবে যা 0 এর চেয়ে বড় তবে 90 এর চেয়ে কম বা সমান।


আউটপুট

45 ° সাইন এর আউটপুট উদাহরণ এখানে ° সমস্ত আউটপুট আইটেম অবশ্যই এই ফর্ম্যাটে থাকতে হবে। আইটেম ক্রম কিছু যায় আসে না।

sine: 0.70710678118

দশমিকের পরে সমস্ত আইটেমের অবশ্যই 4 নম্বর থাকতে হবে (দশ হাজারের যথাযথতা) রাউন্ডিংয়ের কয়েকটি উদাহরণ নীচে দেওয়া হল।

0 -> 0.0000
1 -> 1.0000
0.2588190451 -> 0.2588
5.67128181962 -> 5.6713
10 -> 10.0000
12.4661204396 -> 12.4661

যে কোনও অস্তিত্বহীন / অপরিজ্ঞাত ফলাফলের 0 এ ডিফল্ট হওয়া উচিত।


উদাহরণ

myprogram(60)

sine: 0.8660
cosine: 0.5000
tangent: 1.7321
secant: 2.0000
exsecant: 1.0000
cosecant: 1.1547
excosecant: 0.1547
versine: 0.5000
coversine: 0.1340
cotangent: 0.5774

স্কোরবোর্ড

আপনার স্কোর বোর্ডে উপস্থিত হওয়ার জন্য, এটি এই ফর্ম্যাটে হওয়া উচিত:

# Language, Score

বা আপনি যদি বোনাস অর্জন করেন:

# Language, Score (Bytes - Bonus%)

স্ট্রাইকথ্রুগুলি কোনও সমস্যার কারণ হবে না।


আউটপুট ক্রম কি ব্যাপার?
জাকুব

12
পেডেন্ট্রি এগিয়ে: "প্রতিটি কোণে সেগুলি রয়েছে" - সত্য নয়; উদাহরণস্বরূপ, 90 ডিগ্রির বিজোড় গুণকগুলির একটি স্পর্শক নেই। (এটি আমার কাছে অত্যন্ত উদ্ভট বলে মনে হচ্ছে যে শূন্যের আউটপুট দেওয়ার জন্য আপনার অস্তিত্বের প্রয়োজন নেই del আপনি কি এমন একটি প্রোগ্রাম ব্যবহার করতে পারেন যা ইচ্ছাকৃতভাবে এমন বিভ্রান্তিমূলক জবাব দিয়েছে?) এছাড়াও, আপনি কেন কোসেক্যান্ট এবং কোটজেন্ট হিসাবে বিবেচিত তা জানতে আগ্রহী হব? সেকেন্ডের চেয়ে বেশি অস্পষ্ট হওয়া; আমার এ-লেভেলের গণিত ক্লাসে আমরা একই সাথে তিনটি সম্পর্কে শিখেছি।
হামারাইট

মূলধন স্থির হয় ছোট হাতের? আমি আউটপুট 'সাইন,
কোসিন

পুরো প্রোগ্রাম বনাম ইনপুট কোনও ফাংশন কলের মাধ্যমে
edc65

1
কোণ ইনপুট কি আসলেই greater than 00 এর অনুমতি নেই?
edc65

উত্তর:


8

সিজেম, 94 89 85 81 80 বাইট

"sine tangent secant"S/{"co"1$+}%rd90/_i33Yb@[P*2/__ms\mc@mt]_Wf#W%+?.{d": %.4f"e%N}

কোডটি 84 বাইট দীর্ঘ এবং 5% বোনাসের জন্য যোগ্য ( কোটজেন্ট এবং কোসেক্যান্ট )।

সিজেএম ইন্টারপ্রেটারে এটি অনলাইনে চেষ্টা করুন ।

কিভাবে এটা কাজ করে

"sine tangent secant" e# Push that string.
S/                    e# Split it at spaces.
{"co"1$+}%            e# For each chunk, append a copy to the string "co", pushing
                      e# ["sine" "cosine" "tangent" "cotangent" "secant" "cosecant"].
rd90/                 e# Read a Double from STDIN and divide it by 90.
_i                    e# Push a copy and cast it to integer.
33Yb                  e# Push 33 in base 2, i.e., [1 0 0 0 0 1].
@                     e# Rotate the Double on top of the stack.
[                     e#
  P*2/                e# Multiply by Pi and divide by 2.
  __                  e# Push two copies of the result.
  ms                  e# Compute the sine of the topmost copy.
  \mc                 e# Swap and compute the cosine of the next copy.
  @mt                 e# Rotate and compute the tangent of the original.
 ]                    e#
 _Wf#                 e# Copy the array and raise all Doubles to the power -1.
                      e# This computes cosecant, secant and cotangent.
 W%                   e# Reverse their order.
 +                    e# Append to the original array.
 ?                    e# Select 33Yb if the integer part of the input divided by 90 is
                      e# (i.e., if the input is 90), the constructed array otherwise.
 .{                   e# For each function name and result:
   d                  e# Cast to Double (needed for 33Yb).
   ": %.4f"           e# Push a format string containing ": " and a 4-decimal float.
   e%                 e# Apply the formatting to the Double on the stack.
   N                  e# Push a linefeed.
 }                    e#

6

জুলিয়া, 162 - 10% = 144 বাইট

n->for z=zip(split("sine cosine tangent secant exsecant cosecant cotangent"),[sind,cosd,tand,secd,i->secd(i)-1,cscd,cotd]) @printf("%s: %.4f\n",z[1],z[2](n))end

Ungolfed:

function f(n)
    # Construct a vector of names
    s = split("sine cosine tangent secant exsecant cosecant cotangent")

    # Construct a vector of functions
    o = [sind, cosd, tand, secd, i -> secd(i) - 1, cscd, cotd]

    # Print each in a loop
    for z = zip(s, o)
        @printf("%s: %.4f\n", z[1], z[2](n))
    end
end

এটি কি আমি বা আপনার "ফোল্ডোলেড" সংস্করণটির অতিরিক্ত লুপ রয়েছে?
ডেভিড আরেনবার্গ

আপনি তাত্পর্যপূর্ণ এবং কুটিজ না করে আরও ভাল থাকবেন।
lirtosiast

@ ডেভিড আরেনবুর্গ লম্বা সংস্করণে একই সংখ্যক লুপ রয়েছে, এটি সংক্ষিপ্ত সংস্করণের চেয়ে আলাদাভাবে লেখা হয়েছে।
অ্যালেক্স এ।

@ থমাসকওয়া আমি জানি, তবে আমি যেভাবেই জিতব না। : পি
অ্যালেক্স এ।

5

পাইথ, 66 - 10% = 59.4 বাইট

j+V+Jc"sine secant tangent")+L"co"Jsmm%": %.4f"^.t.td7k^_1k3,Q-90Q

সাইন, সেকেন্ড এবং স্পর্শক গণনা করে। তারপরে, সহ-কার্যগুলি সূত্রের মাধ্যমে সহজেই গণনা করা হয় coF(x) = F(90 - x)


এটি কি অপরিশোধিত জন্য 0 দেয়?
lirtosiast

@ থমাসকওয়া এমনটি ভাববেন না।
orlp

1
তারপরে এটি বর্তমানে অবৈধ।
lirtosiast

5

গণিত (এই মুহূর্তে অবৈধ), 134 121 104

শুধু মজা করার জন্য, অবশ্যই এটি অনেকটা গল্ফ করা যেতে পারে

f[n_]:=(a={Sin,Cos,Tan,Sec,Cot,Csc};TableForm[N[#@n,4]&/@a,TableHeadings->{ToString[#]<>":"&/@a,None}])

এবং এটিতে 5% বোনাস (খাট এবং সিসিএস) হওয়া উচিত, সুতরাং এটির পরিমাণ 99 টি

উদাহরণ আউটপুট:

উদাহরণ আউটপুট


আপনি আরও ফাংশন যোগ করে একটি ভাল স্কোর পাবেন না?
গর্বিত হাসেলেলার

@ দম্পতি হাসেল্লার, আমি চেষ্টা করতে পারি, তবে সম্ভবত আমি লাভের চরিত্রগুলির চেয়ে বেশি হারাব
উইজার্ড অফ মেনলো

4
এটি কি পুরোপুরি ফাংশনগুলির নাম লিখবে, বা এর জন্য 0ব্যবহার করবে sec(90)?
lirtosiast


আমি এই অনুষ্ঠানের আসল ফাংশনের নামগুলিতে সত্যিই সন্দেহ করি
ডেভিড আরেনবুর্গ

4

জাভাস্ক্রিপ্ট (ES6), 173 (182 - 5%)

স্পষ্টতার পরে সংশোধিত সম্পাদনা করুন , এখন বোনাস 5%

সম্পাদনা বুঝতে পেরেছে যে কোণটি 0 হতে পারে না

// TEST - redefine alert
alert=x=>O.innerHTML=x

r=(a=prompt(i=0))*(M=Math).PI/180,V=_=>[s=M.sin(r),c=M.cos(r),(f=a-90)&&s/c,c/s,f&&1/c,1/s][i++].toFixed(4);
alert(`sine
tangent
secant`.replace(/.+/g,h=>h+`: ${V()}
co${h}: ${V()}`))

/* More bonus, but too longer 
r=(a=prompt(i=0))*(M=Math).PI/180,V=_=>[s=M.sin(r),c=M.cos(r),1-c,1-s,(f=a-90)&&s/c,c/s,f&&1/c,1/s][i++].toFixed(4);
alert(`sine
versine
tangent
secant`.replace(/.+/g,h=>h+`: ${V()}
co${h}: ${V()}`))
*/
<pre id=O></pre>


4

জাভাস্ক্রিপ্ট ES6, 154 148 (198 - 25%)

(n=0)=>[S='sine',(O='co')+S,T='tangent',C='secant',X=O+C,O+T,V='ver'+S,O+V,'ex'+C,'ex'+X].map((q,i)=>q+': '+[s=Math.sin(n),c=Math.cos(n),t=s/c,e=1/c,o=1/s,1/t,1-c,1-s,e-1,o-1][i].toFixed(4)).join`
`

Ungolfed:

(n=0)=>          // function declaration, accepts number, defaults to 0
  [              // create array of trig function names
    S='sine',    // sine
    (O='co')+S,  // cosine
    T='tangent', // tangent
    C='secant',  // secant
    X=O+C,       // cosecant
    O+T,         // cotangent
    V='ver'+S,   // versine
    O+V,         // coversine
    'ex'+C,      // exsecant
    'ex'+X       // excosecant
  ].map((q,i)=>  // map over names
                 // append ": <value rounded to 4 decimals>" to function name:
    q+': '+[s=Math.sin(n),c=Math.cos(n),t=s/c,e=1/c,o=1/s,1/t,1-c,1-s,e-1,o-1][i].toFixed(4)
  ).join`        // add newline between each function
`

আপনি কি আপনার শিরোনামে "জাভাস্ক্রিপ্ট ইএস 6" এর পরে কমা যুক্ত করতে পারেন যাতে আপনার স্কোরটি সঠিকভাবে বিশ্লেষণ করতে পারে?
জ্যাচ গেটস

3

আর, 122 136 134 বাইট

n=scan()*pi/180;write(paste0(c("sine","cosine","tangent","secant","versine"),sprintf(": %.4f",c(sin(n),r<-cos(n),tan(n),1/r,1-r))),"")

ব্যবহারের উদাহরণ

> n=scan()*pi/180;write(paste0(c("sine","cosine","tangent","secant","versine"),sprintf(": %.4f",c(sin(n),r<-cos(n),tan(n),1/r,1-r))),"")
1: 60
2: 
Read 1 item
sine: 0.8660
cosine: 0.5000
tangent: 1.7321
secant: 2.0000
versine: 0.5000

2
scan()/(180/pi)-> scan()*pi/180?
lirtosiast

3

পার্ল, 182 177 (236 - 25%)

-n(দারোয়ান স্কোর 1 বাইট যোগ) দিয়ে চালান ।

$b=$_==90;$_/=57.296;$c=cos;$s=sin;sub f{printf"%s: %.4f\n",@_}$T=tangent;f$T,$b?0:$s/$c;f co.$T,$c/$s;$S=sine;f $S,$s;f co.$S,$c;$C=secant;f$C,$b?0:1/$c;f co.$C,1/$s;f ex.$C,$b?0:1-1/$c;f exco.$C,1/$s-1;$V=ver.$S;f$V,1-$c;f co.$V,1-$s

অভিনব কিছু না। এটা তোলে সুবিধা নেয় -nঅন্তর্নিহিত ইনপুট জন্য, $_আপনি একটি ডিফল্ট আর্গুমেন্ট হিসাবে sinএবং cos, এবং স্ট্রিং জন্য barewords। "অপরিজ্ঞাত = 0" বিধিটি টার্নারি অপারেটরটি ব্যবহারের ক্ষেত্রে হার্ডকোডযুক্ত ?:(এটি কেবল 90 for এর জন্য প্রযোজ্য)।

আমি কেবল একটা বিষয় learend দৃশ্যত, আপনি থাকতে পারে না (বা না পারে কল একটি সাবরুটিন নামে) s(অথবা m, y, tr): sub s {print 1}; sউৎপাদনের Substitution pattern not terminated at -e line 1


কোনও কারণে, আপনার স্কোরটি এমনকি অতিশয় বিশ্লেষণ করা হয়েছে।
লাইফ উইলার্টস

"পার্ল" এর পরে আপনি কী কমা যুক্ত করতে পারবেন যাতে আপনার স্কোরটি সঠিকভাবে বিশ্লেষণ করা যায়?
জ্যাচ গেটস

3

পাইথন 3, 282 (375 - 25%)

ভাসমান-পয়েন্ট ত্রুটিগুলি দ্বারা ত্রুটি পরিচালনা করা কিছুটা জটিল হয়ে উঠল; যথা, cos(90)শূন্যের পরিবর্তে খুব অল্প সংখ্যায় এসেছিল।

এটি কখনই শীর্ষস্থানীয় উত্তর হতে চলেছে না তবে আমি মনে করতে চাই যে এটি কোনও অ-গল্ফযুক্ত ভাষায় স্বল্পতম বৈধ সমস্ত কার্যকারিতা উত্তর হতে পারে যা ডিফল্ট নেমস্পেসে ট্রিগ ফাংশন না রাখে । ;-)

import math as m
def p(q,r):print(q+':','%.4f'%r)
def a(n):
 n=n*m.pi/180
 C,S=round(m.cos(n),8),m.sin(n)
 A=S,1,0,C,1,S,C,0,C,S,1,C,0,1,S,1,C,-1,1,S,C,1,1,S,1
 def t():
  nonlocal A;u,v,w,x,y,*A=A;z=-1 if w>0 else 1
  try:return z*u/v+w,z*x/y+w
  except:return 0,0
 def q(y,x=''):J,K=t();p(x+y,J);p(x+'co'+y,K)
 q('sine');q('tangent');s='secant';q(s);q(s,'ex');q('versine')

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

>>> a(60)
sine: 0.8660
cosine: 0.5000
tangent: 1.7321
cotangent: 0.5774
secant: 2.0000
cosecant: 1.1547
exsecant: 1.0000
excosecant: 0.1547
versine: 0.5000
coversine: 0.1340

'.4f'%(r)খাটো হবে না ?
xebtl

@ এক্সবেটল: ধন্যবাদ আমি ভুলে যেতে চাই যে%-ফর্ম্যাটিং এখনও বিদ্যমান!
টিম পেডারিক

3

পার্ল, 165 (193 - 15%)

আমি ধারণা থেকে পুরোপুরি ভিন্ন এই আশা নতুন উত্তর জমা am অন্যান্য করুন। আমার প্রথম প্রয়াসটি প্রতিস্থাপন করা আরও উপযুক্ত কিনা দয়া করে আমাকে জানান।

$p=atan2 1,0;$b=$_-90;%h=qw(sine $s tangent $b?$s/$c:0 secant $b?1/$c:0 versine 1-$c);$_/=90/$p;sub e{$c=cos;$s=sin}e;sub f{eval"printf'$x$_: %.4f
',$h{$_}"for keys%h}f;$b=1;$_=$p-$_;e;$x=co;f

দিয়ে চালান -n(1 বাইট যুক্ত)।

Ungolfed:

# π/2
$p=atan2 1,0;

# trouble?
$b=$_-90;

# Construct a hash whose keys are the “base” function names,
# and whose values are the corresponding expressions in terms of sin and cos
%h=qw(sine $s tangent $b?$s/$c:0 secant $b?1/$c:0 versine 1-$c);

# Thanks to ‘-n’, input is in $_; convert to radians
$_/=90/$p;

# Compute sin and cos in a reusable way
sub e{$c=cos;$s=sin}
e;

sub f {
   eval "printf '$x$_: %.4f
', $h{$_}" 
      for keys %h
}

f;

# Now the “co” functions
# No trouble here
$b=1;

# x ← π/2 - x
$_=$p-$_;

e;
$x=co;
f

যেহেতু এটি "কো" চারটি কাজ করে, তাই আমি মনে করি এটি একটি 3 * 5% = 15% বোনাসের জন্য যোগ্যতা অর্জন করে।


3

পার্ল, 100 95 94 বাইট

হু, লোটা পার্ল উত্তর দেয়।

$_=<>;printf"sine: %.4f\ncosine: %.4f\ntangent: %.4f\nsecant: %.4f\n",sin,cos,(sin)/cos,1/cos

হ্যাঁ, এবং আপনি এই সোজাসুজি পদ্ধতির :-) দিয়ে বেশ ভাল করছেন। আপনি এর -nপরিবর্তে (1 বাইটের জন্য গণনা) ব্যবহার করে কিছু বাইট ছাঁটাই করতে পারেন $_=<>। তবে আপনাকে ডিগ্রি থেকে রেডিয়ানে রূপান্তর করতে হবে এবং আপনি 90 ° কেস নির্ধারিত হিসাবে পরিচালনা করছেন না। (পরেরটির সাথে, দেখে মনে হচ্ছে আপনি এখানে উত্তরের মধ্যে খুব কমই একা রয়েছেন।)
xebtl

এছাড়াও, মনে রাখবেন যে কোড গল্ফের পূর্বপুরুষ ছিলেন পার্ল গল্ফ :-)
xebtl

আমি এখানে একটু বিভ্রান্ত ... এটি রেডিয়ান ব্যবহার করে। আমার কি ডিগ্রি ব্যবহার করার কথা ছিল?
একটি স্প্যাগেটো

2

হাস্কেল, 159 = 186 - 15% বাইট

s x=zipWith(\a b->a++": "++show b)(concatMap(\n->[n,"co"++n])$words"sine tangent versine secant")$map($(x*pi/180))[sin,cos,t,(1/).t,(1-).cos,(1-).sin,e.t,e.(1/).t]
e=sqrt.(+1).(^2)
t=tan

আমার চতুর নামকরণের স্কিমটি রাখার জন্য কোনও প্রাক্তন জিনিস নেই এবং যেহেতু আমি কীভাবে সংক্ষিপ্ত করতে জানি না (\x->x-1)(-1)শুধু একটি সংখ্যা।

আপনি যদি আমাকে mapM_ putStrLnলাইনগুলিকে সুন্দর করে তুলতে চান তবে দয়া করে অভিযোগ করুন ।


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