একটি নিয়মিত বহুভুজের ক্ষেত্রফল গণনা করুন


19

একটি পূর্ণসংখ্যা দেওয়া হয়েছে n, যেখানে 3 <= n < 2^32, n1 এর এপোথেম দিয়ে নিয়মিত-ক্ষেত্রের ক্ষেত্রফল গণনা করুন ; সূত্র যা জন্য n * tan(π / n)। যারা এপোথেমটি জানেন না তাদের জন্য:

নিয়মিত বহুভুজটির এপোথেম হল কেন্দ্র থেকে এর এক পাশের মধ্যবিন্দুতে একটি রেখাংশ।

n8 দশকের কম স্থান না নিয়ে ভাসমান বিন্দু হিসাবে -gon এর ক্ষেত্রফল আউটপুট করুন ।

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

3
5.1961524227

6
3.4641016151

10
3.2491969623

20
3.1676888065

99
3.1426476062

1697
3.1415962425

15000
3.1415926995

দ্রষ্টব্য: উপরের পরীক্ষার ক্ষেত্রে আপনার আউটপুট দেওয়ার প্রয়োজনের চেয়ে আরও 2 টি সংখ্যা অন্তর্ভুক্ত রয়েছে।

উত্তর:


9

গণিত, 16 বাইট

N[Tan[Pi/#]#,9]&

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

অবশ্যই গণিত এই জন্য অন্তর্নির্মিত আছে

Area@*RegularPolygon

Area@RegularPolygonহওয়া উচিত Area@*RegularPolygon; এটি এখন যেমন আছে, এটি একটি ভেরিয়েবলের মধ্যে ক্যাপচার করা যায় না। যে, f = Area@RegularPolygon; f[3]কাজ করে না। প্রাসঙ্গিক মেটা আলোচনা
JungHwan Min

@ জংহওয়ানমিন ঠিক আছে, আমি এটি ঠিক করেছি ((যদিও আমি এটি উত্তর হিসাবে পোস্ট করি নি I আমি মজাদার জন্য বিল্ট-ইনগুলি
দেখিয়েছিলাম


6

আসলে , 5 বাইট

╦/Tß*

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


কিভাবে?

╦ / Tß * সম্পূর্ণ প্রোগ্রাম।

Pi পাই পুশ
 ইনপুট দ্বারা / ভাগ করুন।
  টি স্পর্শক।
   ß * ইনপুট দ্বারা গুণ করুন।
        সুস্পষ্টভাবে আউটপুট।

বিকল্প: ß╦/T*ও_ও আসলে জেলিকে মারছে !!!



হ্যাঁ, আমি জানি ... @ এরিথিউটগল্ফার পাইথের 3 বাইট বিল্ট ইনগুলি যদিও> <<
মিঃ এক্সকোডার

3
" প্রকৃতপক্ষে জেলিকে মারধর করে !!! " এর জন্য +1 এই শৃঙ্খলা কখনই বৃদ্ধ হয় না। ;)
কেভিন ক্রুইজসেন

4

x87 মেশিন কোড, 11 বাইট

D9 EB
DA 31
D9 F2
DD D8
DA 09
C3

উপরের কোডের বাইটগুলি একটি ফাংশন সংজ্ঞায়িত করে যা একটি নিয়মিত এন-গনের ক্ষেত্রফলকে 1 এর এপোথেম দিয়ে গণনা করে It এটি এই গণনাটি করতে x87 এফপিইউ নির্দেশাবলী (x86 প্রসেসরের ক্লাসিক ভাসমান-পয়েন্ট ইউনিট) ব্যবহার করে।

একটি স্ট্যান্ডার্ড x86 রেজিস্টার-ভিত্তিক কলিং কনভেনশন অনুসরণ করুন (এই ক্ষেত্রে, __fastcall), ফাংশনের যুক্তিটি পূর্ণসংখ্যার দিকে নির্দেশক, যা ECXরেজিস্টারে পাস করা হয় । ফাংশনটির ফলাফলটি একটি ভাসমান-পয়েন্টের মান, x87 এর ভাসমান-পয়েন্ট স্ট্যাকের (রেজিস্টার ST0) শীর্ষে ফিরে আসে ।

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

অবহেলিত সমাবেশ মেমোনমিক্স:

D9 EB  fldpi                  ; load constant PI at top of FPU stack
DA 31  fidiv DWORD PTR [ecx]  ; divide PI by integer input (loaded from pointer
                              ;   in ECX), leaving result at top of FPU stack
D9 F2  fptan                  ; compute tangent of value at top of FPU stack
DD D8  fstp  st0              ; pop junk value (FPTAN pushes 1.0 onto stack)
DA 09  fimul DWORD PTR [ecx]  ; multiply by integer input (again, loaded via ECX)
C3     ret                    ; return control to caller

আপনি দেখতে পাচ্ছেন যে এটি মূলত প্রদত্ত সূত্রের কেবল একটি সরল গণনা,
      ফলাফল = এন * ট্যান (π / n)
কেবল আকর্ষণীয় বিষয়গুলির মধ্যে দু'টি উল্লেখ করে:

  • এক্স 87 এফপিইউতে ধ্রুবক মান পিআই ( FLDPI) লোড করার জন্য একটি নিবেদিত নির্দেশনা রয়েছে । এটি খুব কমই ব্যবহৃত হয়েছিল, এমনকি দিনে ফিরে (এবং সম্ভবত এখন খুব কম) তবে এটি আপনার বাইনারিটিতে কোনও ধ্রুবককে এম্বেড করা এবং লোড করার চেয়ে আকারে খাটো।
  • ক্যালকুলেট স্পর্শক করার x87 FPU নির্দেশ, FPTAN, ইনপুট রেজিস্টার (FPU স্ট্যাকের শীর্ষ) ফলাফল নিয়ে মান প্রতিস্থাপন কিন্তু এছাড়াও FPU স্ট্যাকের উপরে সম্মুখের একটি ধ্রুবক 1.0 push কর্মের। এটি 8087 এর সাথে পিছনের সামঞ্জস্যের জন্য করা হয় (কেন আমি 8087 এ এটি করা হয়েছিল তা আমার কোনও ধারণা নেই; সম্ভবত একটি বাগ)। এর অর্থ আমাদের এই অপ্রয়োজনীয় মানটিকে স্ট্যাকের বাইরে পপ করতে হবে। এটি করার দ্রুত এবং সংক্ষিপ্ততম উপায়টি হ'ল একটি সাধারণ FSTP st0, যেমন আমরা এখানে ব্যবহার করি। আমরা একটি গুণ ও পপও করতে পারতাম , যেহেতু ১.০ দ্বারা গুণ করলে ফলাফল পরিবর্তন হবে না, তবে এটি ২ বাইট (কোডের আকারে কোনও জয় নয়) সম্ভবত আরও ধীরে ধীরে কার্যকর হবে এবং এর মধ্যে অপ্রয়োজনীয় অনির্দিষ্টতার পরিচয় দিতে পারে ফলাফল.

যদিও একজন আধুনিক প্রোগ্রামার বা সংকলক এসআইএসই (এবং পরবর্তী) ইনস্রোডাকশন সেটটি ব্যবহার করবে বয়স্ক x87 এর পরিবর্তে, এটি প্রয়োগের জন্য আরও কোডের প্রয়োজন হবে, কারণ এই নতুন আইএসএগুলিতে ট্যানজেন্ট গণনা করার জন্য একক নির্দেশনা নেই।









2

var'aq , 51 বাইট

'Ij latlh HeHmI' tam boqHa''egh qojmI' boq'egh cha'

ব্যাখ্যা

'Ij        - read from STDIN
latlh      - duplicate top of stack
HeHmI'     - push PI onto stack
tam        - swap first 2 elements on stack
boqHa''egh - divide
qojmI'     - take tangent
boq'egh    - multiply
cha'       - print


2

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

x=>x*Math.tan(Math.PI/x)

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

o.innerText=(f=
x=>x*Math.tan(Math.PI/x)
)(+i.value);oninput=_=>o.innerText=f(+i.value)
<input id=i min=3 type=number value=3><pre id=o>


1

পাইথন 2 , 45 বাইট

from math import*
n=input()
print n*tan(pi/n)

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



এর মতো চ্যালেঞ্জগুলিতে আমি কেবল ফুটারে মুদ্রণ রেখে বাইট সংরক্ষণ করতে ল্যাম্বডা ব্যবহার করা সত্যিই অপছন্দ করি ... সুতরাং: 44 বাইটস
সাইমন

4
@ সিমন কেন? ফাংশনগুলি একটি বৈধ জমা - আপনি হয় কোনও মান আউটপুট করতে পারেন, বা এটি কোনও ফাংশন থেকে ফিরে আসতে পারেন। ফুটারে মুদ্রণের প্রয়োজন নেই।
স্টিফেন

1

পাইথ , 9 বাইট

*.tc.n0Q2

পরীক্ষা স্যুট.


কিভাবে?

* .tc.n0Q2 সম্পূর্ণ প্রোগ্রাম। প্রশ্ন মানে ইনপুট।

    .n0 পাই। 
   সি দ্বারা বিভক্ত:
       প্রশ্ন ইনপুট।
 .t 2 স্পর্শক।
* প্রশ্ন ইনপুট দ্বারা গুণ করুন।
             সুস্পষ্টভাবে আউটপুট।




1

পার্ল, 14 + 16 = 30

perl -MMath::Trig -ple'$_*=tan(pi/$_)'

প্রোগ্রামটি যথাযথভাবে 14 বাইট, এবং 16 কমান্ড লাইন সুইচগুলির জন্য



0

আইবিএম / লোটাস নোট সূত্রের ভাষা, 13 বাইট

a*@Tan(@Pi/a)

সূত্রযুক্ত ক্ষেত্রের সমান ফর্মের নামের একটি ক্ষেত্রের মাধ্যমে নেওয়া ইনপুট। টিআইও উপলব্ধ নেই তাই নীচে প্রদর্শিত সমস্ত পরীক্ষার কেসের স্ক্রিনশট:

এখানে চিত্র বর্ণনা লিখুন





0

3
দুর্ভাগ্যক্রমে, এটি একটি সম্পূর্ণ প্রোগ্রাম নয়, কোনও ফাংশন নয়। পরিবর্তে এটি একটি স্নিপেট, যা এখানে অনুমোদিত নয়। যাইহোক, আমি মনে করি আপনি n=>এটিকে একটি তীর ফাংশন করতে শুরু করতে পারেন (এটি একটি চিমটি নুন দিয়ে নিন, আমি সি # জানি না) যা বৈধ।
কেয়ার্ড কোইনরিঙ্গিংহিংহ

আপনি স্নিপেটটি এ-তে System.Func<T, T>রাখতে পারেন যা একটি floatইনপুট হিসাবে এবং অন্যটি আউটপুট হিসাবে নেয়। ঘোষণাটি এর মতো দেখাবে System.Func<float, float> f = n=>n*Math.Tan(Math.PI/n);:, যেখানে বাইট্যাক্ট শুরু হবে n=>। আমার উদাহরণে আমি আপনার 2 বন্ধনী সংরক্ষণের জন্য বন্ধনী দুটি বাদ দিয়েছি;)
ইয়ান এইচ।

0

আরপিএনগল্ফ 0.6 / 0.7 , 12 বাইট

tbp-1mBsdmcc

আরপিএনগল্ফ, আমার নতুন স্ট্যাক-ভিত্তিক ভাষা ব্যবহার করে আমার প্রথম পোস্ট!

এটি একটি সম্পূর্ণ প্রোগ্রাম যা স্ট্যান্ডার্ড ইনপুট থেকে একটি পূর্ণসংখ্যা পড়ে এবং আউটপুটটিকে স্ট্যান্ডার্ড আউটপুট (কোনও পেছনের নিউলাইন ছাড়াই) প্রিন্ট করে।

ব্যাখ্যা:

tb              # push user input from STDIN as int
  p             # duplicate top of stack
   -1           # push -1
     mB         # pop i, push inverse cosine of i
       s        # swap top two items on the stack
        d       # pop b, pop a, push a/b
         mc     # pop i, push tangent of i
           c    # pop b, pop a, push a*b
# RPNGolf implicity prints the stack upon normal exit
আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.