আনুমানিক আমার স্কোয়ারগুলি


10

টেকম্যাথ দ্বারা এই ভিডিও দ্বারা অনুপ্রাণিত

যেকোন সংখ্যার বর্গমূলের একটি সংখ্যার xসাথে পূর্ণসংখ্যার বর্গমূল s(যেমন বৃহত্তম বৃহত্তম পূর্ণসংখ্য যেমন s * s ≤ x) এবং তারপরে গণনা করে পাওয়া যাবে s + (x - s^2) / (2 * s)। আসুন আমরা এইটিকে প্রায় বলি S(x)। (দ্রষ্টব্য: এটি নিউটন-রাফসন পদ্ধতির এক ধাপ প্রয়োগের সমতুল্য)।

যদিও এটিতে উদ্ভটতা রয়েছে, যেখানে এস (এন ^ 2 - 1) সর্বদা √ (n ^ 2) থাকবে তবে সাধারণত এটি খুব নির্ভুল হবে। কিছু বড় ক্ষেত্রে, এর> 99.99% নির্ভুলতা থাকতে পারে।

ইনপুট এবং আউটপুট

যে কোনও কনভেনিয়েন্ট ফর্ম্যাটে আপনি একটি নম্বর নেবেন।

উদাহরণ

ফর্ম্যাট: ইনপুট -> আউটপুট

2 -> 1.50
5 -> 2.25
15 -> 4.00
19 -> 4.37               // actually 4.37       + 1/200
27 -> 5.20
39 -> 6.25
47 -> 6.91               // actually 6.91       + 1/300
57 -> 7.57               // actually 7.57       + 1/700
2612 -> 51.10            // actually 51.10      + 2/255
643545345 -> 25368.19    // actually 25,368.19  + 250,000,000/45,113,102,859
35235234236 -> 187710.50 // actually 187,710.50 + 500,000,000/77,374,278,481

বিশেষ উল্লেখ

  • আপনার আউটপুটটি অবশ্যই কমপক্ষে নিকটতম শততমকে গোল করতে হবে (যেমন উত্তরটি যদি 47.2851 হয় তবে আপনি 47.29 আউটপুট দিতে পারেন)

  • উত্তরটি পুরো সংখ্যা হলে আপনার আউটপুটে নিম্নলিখিত শূন্যগুলি এবং দশমিক বিন্দু থাকতে হবে না (যেমন, 125.00 এছাড়াও 125 এবং 125.0 হিসাবে আউটপুট করা যায়)

  • আপনাকে 1 এর নীচে কোনও সংখ্যা সমর্থন করতে হবে না।

  • আপনাকে অ-পূর্ণসংখ্যার ইনপুটগুলি সমর্থন করতে হবে না। (উদাঃ 1.52 ইত্যাদি ...)

বিধি

স্ট্যান্ডার্ড লুফোলগুলি নিষিদ্ধ।

এটি একটি , তাই বাইট জেতে সংক্ষিপ্ত উত্তর।



3
দ্রষ্টব্য:s + (x - s^2) / (2 * s) == (x + s^2) / (2 * s)
জংহোয়ান মিনিট


এটি কি কমপক্ষে 2 টি সংখ্যার সঠিক হওয়া দরকার?
সম্পূর্ণরূপে

@totallyhuman হ্যাঁ 47.2851 47.28 হিসাবে প্রতিনিধিত্ব করা যেতে পারে, তবে আর ভুল নয়।
স্টান স্ট্রাম

উত্তর:


2

জেলি ,  8  7 বাইট

অলিভিয়ার গ্রাগোয়ারের সরলিকৃত গাণিতিক সূত্রকে -1 বাইট ধন্যবাদ - তাদের জাভা উত্তর দেখুন

÷ƽ+ƽH

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

কিভাবে?

÷ƽ+ƽH - Link: number, n
 ƽ     - integer square root of n  -> s
÷       - divide                    -> n / s
    ƽ  - integer square root of n  -> s
   +    - add                       -> n / s + s
      H - halve                     -> (n / s + s) / 2

7 বাইট: ÷ƽ+ƽHপ্রথমবার জেলি ব্যবহার করার চেষ্টা করছি যাতে আমার ভুল হতে পারে। আমি যদি জানতাম যে আমি কীভাবে সংরক্ষণ করতে পারি ƽতবে এটির পুনরাবৃত্তি না করা। এটি অন্য একটি বাইট সংরক্ষণ করতে পারে।
অলিভিয়ার গ্রাগোয়ার

ধন্যবাদ @ অলিভিয়ারগ্রোওয়ের! ƽɓ÷⁹+Hপূর্ণসংখ্যার মূলকে পুনরায় গণনা করতে পারে না, তবে এটি 7. ɓটি অদলবদল যুক্ত একটি নতুন ডায়াডিক চেইন শুরু করে এবং তারপরে সেই শৃঙ্খলার ডান যুক্তি (অর্থাৎ ফলাফল ƽ) বোঝায় । ƽɓ÷+⁹Hএখানেও কাজ করবে।
জোনাথন অ্যালান


4

জাভা (ওপেনজেডিকে 8) , 32 বাইট

n->(n/(n=(int)Math.sqrt(n))+n)/2

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

ব্যাখ্যা

কোডটি এর সমান:

double approx_sqrt(double x) {
  double s = (int)Math.sqrt(x);  // assign the root integer to s
  return (x / s + s) / 2
}

পিছনে গণিত:

s + (x - s²) / (2 * s)  =  (2 * s² + x - s²) / (2 * s)
                        =  (x + s²) / (2 * s)
                        =  (x + s²) / s / 2
                        =  ((x + s²) / s) / 2
                        =  (x / s + s² / s) / 2
                        =  (x / s + s) / 2

এটি স্পেসিফিকেশনটি হ্যান্ডেল করে না বলে মনে হচ্ছে: আপনার আউটপুটটি অবশ্যই কমপক্ষে নিকটতম
শততমকে

2
ভাল, এটি নিকটতম শততমের চেয়ে কম গোলাকার, সুতরাং এটি সম্পূর্ণ বৈধ।
অলিভিয়ার গ্রাগোয়ার 21

আহ, আমি আমার ভুল বোঝাবুঝি।
আইয়ব

4

পাইথন 2 , 47 ... 36 বাইট

-৩ বাইট @
জংহওয়ানমিনকে ধন্যবাদ -১ বাইট
@ হাইপারনিউট্রিনো -২ বাইট ধন্যবাদ
@ জোনাথানফ্রেচ -৩ বাইট ধন্যবাদ @ অলিভিগ্রগ্রোয়ারকে ধন্যবাদ

def f(x):s=int(x**.5);print(x/s+s)/2

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


-2 বাইট: s+(x-s*s)/s/2থেকে(x+s*s)/s/2
জংহওয়ান মিন

-2 একটি ফাংশন ব্যবহার করে বাইটস
হাইপারনিউটারিনো

@ হাইপারনিউট্রিনো আমি কেবল -১ বাইট
পাই

ওহ দুঃখিত, আমি ঘটনাক্রমে পরীক্ষার পরে একটি চরিত্র মুছে
ফেলেছিলাম

আপনি বাদ যাবে না +.0এবং প্রতিস্থাপন /s/2সঙ্গে /2./s, দুই বাইট সংরক্ষণ?
জোনাথন ফ্রেচ


3

আর, 43 বাইট 29 বাইট

x=scan()
(x/(s=x^.5%/%1)+s)/2

নতুন সমীকরণের জন্য @ জিউস্প্পকে ধন্যবাদ এবং পূর্ণসংখ্যা বিভাগ সমাধান সহ 12 বাইট গল্ফ করতে সহায়তা করুন। স্ক্যানের জন্য ফাংশন কলটি অদলবদল করে, আমি আরও কিছু দম্পতি বাইট গল্ফ করেছি।

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


1
35 বাইট ; আরও সাধারণভাবে, আপনি টিআইওর "শিরোনাম" ক্ষেত্রটি ব্যবহার করতে পারেন এবং f <- ফাংশনটি বরাদ্দ করতে একটি রাখতে পারেন। তবুও, দুর্দান্ত সমাধান, আপনি যখন সুযোগ পাবেন তখন আপনি আর-তে গল্ফ করার টিপসটি পড়েছেন তা নিশ্চিত করুন !
জিউসেপে



2

জাভাস্ক্রিপ্ট (ES7), 22 বাইট

x=>(s=x**.5|0)/2+x/s/2

আমাদের সত্যিকার অর্থে একটি মধ্যবর্তী পরিবর্তনশীল দরকার নেই, সুতরাং এটি আসলে এটির মতো আবারও লেখা যেতে পারে:

x=>x/(x=x**.5|0)/2+x/2

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


2

সি, 34 বাইট

@ অলিভার গ্রাওগোয়ারকে ধন্যবাদ!

s;
#define f(x)(x/(s=sqrt(x))+s)/2

শুধুমাত্র floatইনপুট দিয়ে কাজ করে।

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

সি,  41   39  37 বাইট

s;
#define f(x).5/(s=sqrt(x))*(x+s*s)

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

সি,  49   47   45  43 বাইট

s;float f(x){return.5/(s=sqrt(x))*(x+s*s);}

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


দুটি বাইট বাঁচানোর জন্য @ জংহওয়ান মিনকে ধন্যবাদ!


1
47 বাইট ; সম্পাদনা করুন: আপনাকে ধন্যবাদ, তবে এটি খুঁজে পাওয়ার জন্য @ জংহোয়ানমিনকে কৃতিত্ব দিন।
স্ট্যান স্ট্রাম



2

এডাব্লুকে , 47 44 38 বাইট

{s=int($1^.5);printf"%.2f",$1/2/s+s/2}

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

দ্রষ্টব্য: টিআইওর মতো \nআউটপুট প্রিটিটিয়ার করার জন্য 2 টি অতিরিক্ত বাইট রয়েছে । :)

স্কোয়ারটি ব্যবহার করতে স্কোয়ার্ট ব্যবহার করতে কিছুটা প্রতারণার মতো মনে হয়, সুতরাং এখানে আরও কয়েকটি বাইটের একটি সংস্করণ রয়েছে যা তা নয়।

{for(;++s*s<=$1;);s--;printf("%.3f\n",s+($1-s*s)/(2*s))}

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


1
ভাল আপনি বলতে পারেন যে এটি ডাব্লুওয়াকওয়ার্ড। আমি নিজেকে দেখাতে হবে। সম্পাদনা: মূলত আমি পরিকল্পনা করছিলাম যে স্কয়ারটি ব্যবহার বন্ধ করে দেওয়া উচিত, তবে এর অনেকগুলি উত্তর রয়েছে এবং আমি যদি তা পরিবর্তন করি তবে আমার আসল ধারণাটি কাজ করে তবে আমি নির্যাতন করব।
স্ট্যান স্ট্রাম

'এডাব্লু কে' পাংস মজাদার :)
রবার্ট বেনসন

পরিবর্তে sqrt($1)আপনি ব্যবহার করতে পারেন$1^.5
Cabbie407

ধন্যবাদ @ ক্যাবি 407 জানি না কেন আমি এটি ভাবিনি।
রবার্ট বেনসন

1
আপনাকে স্বাগতম. কিছু অন্যান্য জিনিস: আপনার \nআউটপুট পাওয়ার দরকার নেই, খালি প্রিন্টফের জন্য প্রথম বন্ধনী প্রয়োজন নেই এবং সূত্রটি ছোট করা যেতে পারে s/2+$1/s/2, যার ফলস্বরূপ {s=int($1^.5);printf"%.2f",s/2+$1/s/2}। এই মন্তব্যটি অভদ্র মনে হলে দুঃখিত।
ক্যাবি 407

1

র‌্যাকেট , 92 বাইট

মন্তব্য বিভাগে টিপটির জন্য @ জংহওয়ান মিনকে ধন্যবাদ জানাই

(λ(x)(let([s(integer-sqrt x)])(~r(exact->inexact(/(+ x(* s s))(* 2 s)))#:precision'(= 2))))

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

Ungolfed

(define(fun x)
  (let ([square (integer-sqrt x)])
    (~r (exact->inexact (/ (+ x (* square square)) (* 2 square)))
        #:precision'(= 2))))

1

পাওয়ারশেল , 54 বাইট

param($x)($x+($s=(1..$x|?{$_*$_-le$x})[-1])*$s)/(2*$s)

এটি অনলাইন চেষ্টা করুন! অথবা কিছু পরীক্ষার কেস যাচাই করুন

ইনপুট নেয় $xএবং তারপরে অনুরোধ করা ঠিক তেমনটি করে। |?অংশ পূর্ণসংখ্যা সর্বোচ্চ খুঁজে বের করে, যখন ছক হল -lকানা অনুলিপি করুন-চেয়ে-or- eইনপুট গণদেবতা $x, তাহলে আমরা প্রয়োজনীয় গণনার সঞ্চালন। আউটপুট জড়িত।


কি দারুন. উইন্ডোজ পাওয়ারশেল
স্টান স্ট্রাম

@ স্ট্যানস্ট্রাম আপনি একা নন, লোল। : ডি
অ্যাডমবর্কবার্ক

1

কাস্তে , 9 বাইট

½Ṡ§+K/(⌊√

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

এই উত্তরে এখনও কুরুচিপূর্ণ কিছু আছে, তবে আমি এর থেকে আরও ছোট সমাধান খুঁজে পাচ্ছি না।

ব্যাখ্যা

আমি নিউটনের অ্যালগরিদমের একটি পদক্ষেপ বাস্তবায়ন করছি (যা প্রকৃতপক্ষে এই প্রশ্নের প্রস্তাবিত সমতুল্য)

½Ṡ§+K/(⌊√
  §+K/       A function which takes two numbers s and x, and returns s+x/s
 Ṡ           Call this function with the input as second argument and
      (⌊√    the floor of the square-root of the input as first argument
½            Halve the final result

আমি মনে করি আপনি পরিবর্তে প্রকৃত বিভাগ চান÷
H.PWiz ২

@ এইচ.পি.উইজ হুফ, আমি আপনাকে ধন্যবাদ, ধন্যবাদ। অন্যান্য সমাধানগুলি অনুসন্ধানের জন্য এটি একটি পরীক্ষা থেকে অবশেষ ছিল
লিও

1

পাইট , 11 10 বাইট

←Đ√⌊Đ↔⇹/+₂

ব্যাখ্যা

code                explanation                        stack
←                   get input                          [input]
 Đ                  duplicate ToS                      [input,input]
  √⌊                calculate s                        [input,s]
    Đ               duplicate ToS                      [input,s,s]
     ↔              reverse stack                      [s,s,input]
      ⇹             swap ToS and SoS                   [s,input,s]
       /            divide                             [s,input/s]
        +           add                                [s+input/s]
         ₂          halve                              [(s+input/s)/2]
                    implicit print

এটি কেবলমাত্র দেখেছি এবং যতক্ষণ না বুঝেছিলাম এটি পাইথ নয় এটি বেশ ভাল সময় ছিল। দুর্দান্ত উত্তর।
স্টান স্ট্রাম

হ্যাঁ, এটি একটি সামান্য ভাষা আমি কিছুক্ষণের জন্য ভাবছিলাম এবং ঠিক বাস্তবে তৈরি করার সিদ্ধান্ত নিয়েছি।
মুডকিপ ২০১২

টস কি টপ-অফ-স্ট্যাক ... এবং যদি তাই হয় তবে এসওএস কী?
স্টান স্ট্রাম


ভাল লাগল, আমি দেখতে পাচ্ছি কিনা আমি এই ভাষায় অনুধাবন করতে পারি কিনা; আমি এটা পছন্দ করি!
স্টান স্ট্রাম

1

মিল্কিওয়ে , 17 14 বাইট

অলিভিয়ার গ্রাগোয়ারের সূত্রটি ব্যবহার করে -3 বাইট

^^':2;g:>/+2/!

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

ব্যাখ্যা

code              explanation                   stack layout

^^                clear preinitialized stack    []
  ':              push input and duplicate it   [input, input]
    2;            push 2 and swap ToS and SoS   [input, 2, input]
      g           nth root                      [input, s=floor(sqrt(input))]
       :          duplicate ToS                 [input, s, s]
        >         rotate stack right            [s, input, s]
         /        divide                        [s, input/s]
          +       add                           [s+input/s]
           2/     divide by 2                   [(s+input/s)/2]
             !    output                        => (s+input/s)/2

সিলের পরিবর্তে মেঝে হওয়া উচিত নয়?
মুডকিপ ২০১২

@ মুডকিপ ২০১২ আপডেট হয়েছে, ধন্যবাদ
ওভস

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