উচ্চ যথার্থ ধাতব মানে Me


13

পটভূমি

ধাতব মানে , বিখ্যাত দিয়ে শুরু সুবর্ণ গড় , প্রত্যেক প্রাকৃতিক নম্বর (ধনাত্মক পূর্ণসংখ্যা) জন্য নির্দিষ্ট করা, এবং প্রতিটি এক একটি অযৌক্তিক ধ্রুবক (এটা অসীম অ আবর্তক দশমিক সম্প্রসারণ আছে) হয়।

একটি প্রাকৃতিক সংখ্যার জন্য ধাতব গড়টি হল চতুষ্কোণ সমীকরণের মূল

শিকড় সর্বদা হয়

তবে ধাতব গড়টি সাধারণত ধনাত্মক মূল হিসাবে দেওয়া হয়। সুতরাং এই প্রশ্নের জন্য এটি দ্বারা সংজ্ঞায়িত করা হবে:

জন্য ফলাফলের বিখ্যাত সুবর্ণ অনুপাত হল:


চ্যালেঞ্জ

আপনার কোডে ২ টি ইনপুট নেওয়া উচিত: এন এবং পি ( ক্রমটি যতক্ষণ না এটি সুসংগত হিসাবে ততক্ষণ গুরুত্বপূর্ণ নয়)

  • n একটি প্রাকৃতিক সংখ্যা যা ধাতব মানে বোঝায়
  • পি হ'ল একটি প্রাকৃতিক সংখ্যা যা কতগুলি দশমিক দশমিক যথাযথ স্থান নির্দেশ করে

আপনার কোডে দশম স্থানের নির্ভুলতার জন্য n ম ধাতবিক গড় আউটপুট হওয়া উচিত।

বৈধতা

আপনার কোডটি বৈধ যদি এটি 1 থেকে 65,535 পর্যন্ত এন এবং পি এর মানগুলির জন্য কাজ করে।

আপনাকে অবশ্যই ফর্মের দশমিক আউটপুট দিতে হবে

অঙ্ক (গুলি)। ডিজিট (গুলি) (ফাঁকা ছাড়াই)

উদাহরণস্বরূপ, 9 দশমিক স্থানে সোনার গড়

1,618033988

গোলটি না করে শেষ অঙ্কটি প্রদর্শন করুন, কারণ এটি আরও দশমিক দশমিক প্রসারণে প্রদর্শিত হবে। সোনালি গড়ের পরবর্তী অঙ্কটি একটি 7, তবে উদাহরণের চূড়ান্ত 8 টি 9 পর্যন্ত গোল করা উচিত নয়।

দশমিক অঙ্কের সংখ্যা অবশ্যই পি হতে হবে যার অর্থ কোনও চলমান শূন্যগুলিও অবশ্যই অন্তর্ভুক্ত থাকতে হবে।

ফর্মের উত্তর

বৈধ নয় - আপনার অবশ্যই একটি দশমিক প্রসারণ ব্যবহার করা উচিত।

আপনি 1 টি পর্যন্ত শীর্ষস্থানীয় নিউলাইন এবং 1 টি পর্যন্ত অবধি নতুন লাইনের আউটপুট পেতে পারেন। আপনি অঙ্কগুলি এবং একক পয়েন্ট / সম্পূর্ণ স্টপ / পিরিয়ড ছাড়াও কোনও ফাঁকা জায়গা বা অন্য কোনও অক্ষর আউটপুট নাও করতে পারেন।

স্কোর

এটি স্ট্যান্ডার্ড কোড গল্ফ: আপনার স্কোরটি আপনার কোডের বাইট সংখ্যা।


লিডারবোর্ড

( মার্টিনের লিডারবোর্ড স্নিপেট ব্যবহার করে )

উত্তর:


17

ডিসি, 12

?kdd*4+v+2/p
  • ? স্ট্যাকের উপর n এবং p টিপুন
  • k নির্ভুলতা সেট পি
  • dd দুবার নকল করুন (মোট তিনটি অনুলিপি)
  • * গুন করা n * এন
  • 4+ 4 যোগ করুন
  • v বর্গমূল নিন
  • + এন যুক্ত করুন (স্ট্যাকের সর্বশেষ অনুলিপি)
  • 2/ 2 দ্বারা ভাগ করুন
  • p ছাপা

পরীক্ষা ক্ষেত্রে:

$ dc -f metalmean.dc <<< "1 9"
1.618033988
$

7
কাজের জন্য সঠিক সরঞ্জাম।
ডেনিস

5
@ ডেনিস এটি প্রথমবারের মতো হয়ে উঠেছে সিজে্যামের কাছে অন্য কোনও কিছুর চেয়ে প্রায় 3 গুণ দীর্ঘ সময় ;-)
ডিজিটাল ট্রমা

2

আর, 116 বাইট

library(Rmpfr);s=scan();n=mpfr(s[1],1e6);r=(n+(4+n^2)^.5)/2;t=toString(format(r,s[2]+2));cat(substr(t,1,nchar(t)-1))

এটি STDIN থেকে দুটি পূর্ণসংখ্যা পড়ে এবং ফলাফলটি STDOUT এ মুদ্রণ করে। আপনি এটি অনলাইনে চেষ্টা করতে পারেন ।

অবহেলিত + ব্যাখ্যা:

# Import the Rmpfr library for arbitrary precision floating point arithmetic
library(Rmpfr)

# Read two integers from STDIN
s <- scan()

# Set n equal to the first input as an mpfr object with 1e6 bits of precision
n <- mpfr(s[1], 1e6)

# Compute the result using the basic formula
r <- (n + sqrt(4 + n^2)) / 2

# Get the rounded string representation of r with 1 more digit than necessary
t <- toString(format(r, s[2] + 2))

# Print the result with p unrounded digits
cat(substr(t, 1, nchar(t) - 1))

আপনার যদি Rmpfrলাইব্রেরি ইনস্টল না থাকে তবে আপনি পারবেন install.packages("Rmpfr")এবং আপনার সমস্ত স্বপ্ন সত্য হবে।


1

গণিত, 50 বাইট

SetAccuracy[Floor[(#+Sqrt[4+#^2])/2,10^-#2],#2+1]&

একটি বেনামী ফাংশন যা লাগে নির্ধারণ nএবং pযাতে। দশমিক আউটপুট পেতে আমার যা দরকার তা দিয়ে আমি Floorগোলটি রোধ করতে ব্যবহার SetAccuracyকরি।


@ আর্কিন্দে দুর্ভাগ্যক্রমে আমি মেশিনের যথার্থ নম্বরগুলি ব্যবহার করতে পারি না, যেহেতু তারা পরিচালনা করতে সক্ষম হবে না p>15
2012campion

1

সিজেম, 35 বাইট

1'el+~1$*_2#2$2#4*+mQ+2/1$md@+s0'.t

রাউন্ডআপ পি প্রথম, তারপর এন

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

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

আমরা কেবল প্রশ্নপত্র থেকে সূত্র গনা এন × 10 পি , পূর্ণসংখ্যা এবং দ্বারা বিভক্ত ফলাফলের ভগ্ন অংশ পেতে 10 পি , প্যাড প্রাপ্ত নেতৃস্থানীয় শূণ্যসমূহ সঙ্গে ভগ্ন অংশ পি সংখ্যা এবং প্রিন্ট অংশের একটি বিন্দু দ্বারা পৃথকীকৃত।

1'e  e# Push 1 and 'e'.
l+   e# Read a line from STDIN and prepend the 'e'.
~    e# Evaluate. This pushes 10**p (e.g., 1e3 -> 1000) and n.
1$*  e# Copy 10**p and multiply it with n.
_2#  e# Copy n * 10**p and square it.
2$   e# Copy 10**p.
2#4* e# Square and multiply by 4.
+    e# Add (n * 10**p)**2 and 4 * 10**2p.
mQ   e# Push the integer part of the square root.
+2/  e# Add to n * 10**p and divide by 2.
1$md e# Perform modular division by 10**p.
@+s  e# Add 10**p to the fractional part and convert to string. 
0'.t e# Replace the first character ('1') by a dot.

1

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

আমি এখন যেমন উত্তরগুলি দেখছি, দেখে মনে হচ্ছে সিজেএম উত্তরগুলি এটির মতো একই বেসিক পদ্ধতিটি ব্যবহার করে। এটি উত্তরটির জন্য গণনা করে n*10**pএবং পরে দশমিক পয়েন্টে যুক্ত করে। বর্গমূলের পূর্ণসংখ্যার অংশটি গণনা করার কারণে এটি অবিশ্বাস্যভাবে অক্ষম fficient

n,p=input()
e=10**p;r=0
while(n*n+4)*e*e>r*r:r+=1
s=str((n*e+r-1)/2);print s[:-p]+'.'+s[-p:]

1

পিএইচপি, 85 78 বাইট

echo bcdiv(bcadd($n=$argv[bcscale($argv[2])],bcsqrt(bcadd(4,bcpow($n,2)))),2);

এটি বিসি ম্যাথের গাণিতিক এক্সটেনশন ব্যবহার করে যা কিছু সিস্টেমে উপলব্ধ ছিল না। কমান্ড লাইন বিকল্পটি নির্দিষ্ট করে সংকলনের সময় এটি অন্তর্ভুক্ত করা দরকার --enable-bcmath। এটি সর্বদা উইন্ডোজে উপলব্ধ এবং এটি ওএসএক্সের সাথেও বান্ডিল পিএইচপি সংস্করণে অন্তর্ভুক্ত বলে মনে হয়।

আপডেট :

আমি @ ব্ল্যাকহোল দ্বারা প্রস্তাবিত সমস্ত হ্যাকগুলি তাদের মন্তব্যে প্রয়োগ করেছি (আপনাকে ধন্যবাদ!) তারপরে আমি $nএর প্রথম ব্যবহারের সূচনাটি (তিনটি আরও বাইট সংরক্ষিত) চেপে ধরলাম এবং এখন কোডটি উপরের কোড বক্সের একক লাইনে ফিট করে।


@কৃষ্ণ গহ্বর. 85, প্রকৃতপক্ষে। আমি সম্ভবত 86 টি পড়েছি (কিছুটা বড় নির্বাচন করেছি) এবং ভুল করে 68 লিখেছি। এখনই স্থির।
axiac

1
সমস্যা নেই :). উপায় দ্বারা আপনার 1 বাইট কম থাকতে পারে: চারপাশে প্রথম বন্ধনী সরিয়ে ফেলুন echo, এর পরে কেবল একটি জায়গা রেখে দিন।
ব্ল্যাকহোল

1
এবং যেহেতু আপনি bcscaleপ্রত্যাবর্তনের প্রত্যাশা করছেন true, আপনি $n=$argv[bcscale($argv[2])];আরও 2 বাইট ব্যবহার এবং সংরক্ষণ করতে পারেন ।
ব্ল্যাকহোল

এটি একটি দুর্দান্ত হ্যাক।
axiac

কোডের গ্লানিতা একটি শিল্প: পি। ওহ, শেষটি: bcpow($n,2)পরিবর্তে bcmul($n,$n)আপনাকে 1 বাইট সংরক্ষণ করে।
ব্ল্যাকহোল

1

জে, 27 বাইট

4 :'}:":!.(2+x)-:y+%:4+*:y'

ব্যাখ্যা:

4 :'                      '   | Define an explicit dyad
                       *:y    | Square y
                     4+       | Add 4
                   %:         | Square root
                 y+           | Add y
               -:             | Half
      ":!.(2+x)               | Set print precision to 2+x
    }:                        | Remove last digit, to fix rounding

এটিকে কল করুন:

    9 (4 :'}:":!.(2+x)-:y+%:4+*:y') 1
1.618033988

আরেকটি, সামান্য শীতল সমাধান:

4 :'}:":!.(2+x){.>{:p._1,1,~-y'

যা বহুবর্ষীয় x ^ 2 - এনএক্স - এর মূলগুলি গণনা করে - 1. দুর্ভাগ্যক্রমে, জে যেভাবে ফলাফলকে ফর্ম্যাট করে সেটি পছন্দসই মূলটিকে কিছুটা দীর্ঘতর করে তুলবে।

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