পূর্ণসংখ্যা থেকে স্কোয়ার রুট দূরত্ব


20

প্রদত্ত একটি দশমিক সংখ্যা k, ক্ষুদ্রতম পূর্ণসংখ্যা এটি nযেমন যে বর্গমূল nমধ্যে kএকটি পূর্ণসংখ্যা হয়। তবে দূরত্বটি ননজারো হওয়া উচিত - nনিখুঁত বর্গক্ষেত্র হতে পারে না।

প্রদত্ত kদশমিক সংখ্যা বা ভগ্নাংশ (যেটি আপনার পক্ষে সহজ) যেমন 0 < k < 1, ক্ষুদ্রতম ধনাত্মক পূর্ণসংখ্যার আউটপুট দেয় nযাতে বর্গমূলের nনিকটতম পূর্ণসংখ্যার nপার্থক্য কম বা সমান হয় kতবে ননজারো হয় না ।

এর iবর্গমূলের নিকটতম পূর্ণসংখ্যা যদি হয় তবে nআপনি প্রথমটি nকোথায় খুঁজছেন 0 < |i - sqrt(n)| <= k

বিধি

  • সমস্যাটি তুচ্ছ করতে আপনি কোনও ভাষার পূর্ণসংখ্যার সংখ্যা অপর্যাপ্ত প্রয়োগ করতে পারবেন না।
  • অন্যথায়, আপনি ধরে নিতে পারেন k করবে না উদাহরণস্বরূপ, ভাসমান পয়েন্ট রাউন্ডিং।

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

.9         > 2
.5         > 2
.4         > 3
.3         > 3
.25        > 5
.2         > 8
.1         > 26
.05        > 101
.03        > 288
.01        > 2501
.005       > 10001
.003       > 27888
.001       > 250001
.0005      > 1000001
.0003      > 2778888
.0001      > 25000001
.0314159   > 255
.00314159  > 25599
.000314159 > 2534463

কমা পৃথকীকরণ পরীক্ষার ইনপুট:

0.9, 0.5, 0.4, 0.3, 0.25, 0.2, 0.1, 0.05, 0.03, 0.01, 0.005, 0.003, 0.001, 0.0005, 0.0003, 0.0001, 0.0314159, 0.00314159, 0.000314159

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

উত্তর:


18

ওল্ফ্রাম ভাষা (গণিত) , 34 বাইট

Min[⌈.5/#+{-#,#}/2⌉^2+{1,-1}]&

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

ব্যাখ্যা

ফলাফলটি কিছু মি N এর জন্য অবশ্যই ফর্ম মি2±1 হতে হবে । বৈষম্য সমাধান মিএনm2+1mkএবংmm21k, আমরাএম1- কে 2 পাইm1k22k এবংm1+k22kযথাক্রমে 2 কে । তাই ফলmin(1k22k2+1,1+k22k21)


8

পাইথন , 42 বাইট

lambda k:((k-1/k)//2)**2+1-2*(k<1/k%2<2-k)

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

আলেফালফার সূত্রের ভিত্তিতে, শর্তের মাধ্যমে আমরা মি2-1 বা মি2+ +1 কেস করছি কিনা তা স্পষ্টভাবে যাচাই করছেk<1/k%2<2-k

পাইথন 3.8 একটি ইনলাইন অ্যাসাইনমেন্ট সহ একটি বাইট সংরক্ষণ করতে পারে।

পাইথন 3.8 , 41 বাইট

lambda k:((a:=k-1/k)//2)**2-1+2*(a/2%1<k)

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

এগুলি আমার পুনরাবৃত্ত সমাধান সমাধান করে:

50 বাইট

f=lambda k,x=1:k>.5-abs(x**.5%1-.5)>0 or-~f(k,x+1)

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


4

05 এ বি 1 ই , 16 বাইট

nD(‚>I·/înTS·<-ß

পোর্ট অফ @alephalpha এর ম্যাথামেটিকাল উত্তর থেকে অনুপ্রেরণা সঙ্গে @Sok এর Pyth উত্তর , তাই নিশ্চিত তাদের উভয়ের ভোট দিন করতে!

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

ব্যাখ্যা:

n                 # Take the square of the (implicit) input
                  #  i.e. 0.05 → 0.0025
 D(‚              # Pair it with its negative
                  #  i.e. 0.0025 → [0.0025,-0.0025]
    >             # Increment both by 1
                  #  i.e. [0.0025,-0.0025] → [1.0025,0.9975]
     I·           # Push the input doubled
                  #  i.e. 0.05 → 0.1
       /          # Divide both numbers with this doubled input
                  #  i.e. [1.0025,0.9975] / 0.1 → [10.025,9.975]
        î         # Round both up
                  #  i.e. [10.025,9.975] → [11.0,10.0]
         n        # Take the square of those
                  #  i.e. [11.0,10.0] → [121.0,100.0]
          TS      # Push [1,0]
            ·     # Double both to [2,0]
             <    # Decrease both by 1 to [1,-1]
              -   # Decrease the earlier numbers by this
                  #  i.e. [121.0,100.0] - [1,-1] → [120.0,101.0]
               ß  # Pop and push the minimum of the two
                  #  i.e. [120.0,101.0] → 101.0
                  # (which is output implicitly)

ঝরঝরে, সূত্রটি ব্যবহার করেছে এমন উত্তরটির সংযোগের জন্য ধন্যবাদ। আমি মানসিক জিমন্যাস্টিকগুলি 05AB1E এর সর্বদা-বিজোড় সিনট্যাক্স থেকে সূত্রটি বের করার চেষ্টা করছিলাম।
ম্যাজিক অক্টোপাস উরন

3

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

f=(k,n)=>!(d=(s=n**.5)+~(s-.5))|d*d>k*k?f(k,-~n):n

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

(খুব বেশি পুনরাবৃত্তির প্রয়োজন এমন পরীক্ষার ক্ষেত্রে ব্যর্থ হয়)


অ-পুনরাবৃত্ত সংস্করণ,  57  56 বাইট

k=>{for(n=1;!(d=(s=++n**.5)+~(s-.5))|d*d>k*k;);return n}

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

বা 55 বাইটের জন্য :

k=>eval(`for(n=1;!(d=(s=++n**.5)+~(s-.5))|d*d>k*k;);n`)

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

(তবে এটি একটি উল্লেখযোগ্যভাবে ধীর)


3

জে , 39 29 বাইট

[:<./_1 1++:*:@>.@%~1+(,-)@*:

বিশেষ দ্রষ্টব্য। এই সংক্ষিপ্ত সংস্করণটি সহজভাবে @ আলেফালফার সূত্রটি ব্যবহার করে।

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

39 বাইটস, আসল, ব্রুট ফোর্স

2(>:@])^:((<+.0=])(<.-.)@(-<.)@%:)^:_~]

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

সমস্ত পরীক্ষার কেস পরিচালনা করে


3

জাপট , 18 16 বাইট

শেগি থেকে -2 বাইট

_=¬u1)©U>½-½aZ}a

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


আরনাউল্ডের সমাধানটি ব্যবহার করে সংক্ষিপ্ত হতে পারে
এএসসিআইআই-কেবল


ওহ ... অবশ্যই আমি এর বিপরীত হতে পারে: | এছাড়াও এটি %1 &&ন্যক্কারজনক, নিশ্চিত নয় যে আর্নাউল্ডের সমাধানটি ব্যবহার করা আরও কম হবে (সম্ভবত না)
ASCII-

16 বাইট পুনরায় নির্ধারণের দ্বারা Z¬u1করতে Zফাংশনের শুরুতে।
শেগি

অন্য পদ্ধতিটি 26:[1,-1]®*U²Ä /U/2 c ²-Z} rm
ASCII-

3

পাইথ, 22 21 বাইট

hSm-^.Ech*d^Q2yQ2d_B1

এটি অনলাইনে চেষ্টা করুন এখানে করুন , বা এখানে সমস্ত পরীক্ষার কেস একবারে যাচাই করুন

আরেকটি বন্দর আলেফালফের আরও একটি উত্তরের উত্তর , তাদের একটি উত্সাহ দেওয়ার বিষয়টি নিশ্চিত করুন!

hSm-^.Ech*d^Q2yQ2d_B1   Implicit: Q=eval(input())
                  _B1   [1,-1]
  m                     Map each element of the above, as d, using:
           ^Q2            Q^2
         *d               Multiply by d
        h                 Increment
       c      yQ          Divide by (2 * Q)
     .E                   Round up
    ^           2         Square
   -             d        Subtract d
 S                      Sort
h                       Take first element, implicit print

সম্পাদনা: কেভিন ক্রুইজসেনকে ধন্যবাদ, একটি বাইট সংরক্ষণ করা হয়েছে


1
আমি পাইথকে জানি না, তবে [-1,1]3 বাইটেও কি তৈরি করা সম্ভব , বা 4 বাইট হয়ে যাওয়ার জন্য আপনার কি অতিরিক্ত বিপরীত দরকার? যদি এটি 3 বাইটে সম্ভব হয় তবে আপনি এটি করতে পারেন এবং তারপরে *_dটু *dএবং টু পরিবর্তন করতে +dপারেন -d। এছাড়াও, পাইথের কি বাছাই করা এবং প্রথমে গ্রহণের পরিবর্তে ন্যূনতম বিল্টিন নেই?
কেভিন ক্রুইজসেন

1
@ কেভিন ক্রুইজসেন দু'টি উপাদানের ক্রম গুরুত্বপূর্ণ নয় কারণ আমরা ন্যূনতম নিচ্ছি, যদিও আমি 3 বাইটে জুটি তৈরির উপায় সম্পর্কে ভাবতে পারি না। - ... dযদিও এটির পরিবর্তনে একটি ভাল ক্যাচ , এটি আমার একটি বাইট বাঁচায়! ধন্যবাদ
সোক

@ কেভিন ক্রুজসেন এছাড়াও দুর্ভাগ্যক্রমে একটি একক বাইট ন্যূনতম বা সর্বাধিক কার্যকারিতা নেই: ও (
২ok

1
আহ, অবশ্যই আপনি মান উপর মানচিত্র, তাই এটি ব্যাপার এটা যদি না [1,-1]বা [-1,1]। আমি তুলনা করা হয় *dএবং -dআমার 05AB1E উত্তর, যেখানে আমি একটি মানচিত্র ব্যবহার করবেন না, কিন্তু অন্য 2D অ্যারের সঙ্গে বিয়োগ করতে পারেন / গুণ / থেকে একটি 2D অ্যারে, তাই আমি একটি মানচিত্র প্রয়োজন হবে না সঙ্গে। আমি খুশি আমি এই ক্ষেত্রে একটি বাইট সংরক্ষণ করতে সাহায্য করতে পারে। :) এবং আমার 05AB1E উত্তরের অনুপ্রেরণার জন্য ধন্যবাদ।
কেভিন ক্রুইজসেন

3

পার্ল 6 , 34 33 29 বাইট

-1 বাইট ধন্যবাদ গ্রিমিকে

{+(1...$_>*.sqrt*(1|-1)%1>0)}

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


-1 বাইট >=সঙ্গে প্রতিস্থাপন >। পূর্ণসংখ্যার স্কোয়ার শিকড় হয় হয় পূর্ণসংখ্যা বা অযৌক্তিক, সুতরাং সাম্যতার ক্ষেত্রে সম্ভবত ঘটতে পারে না।
গ্রিমি

1
@ গ্রিমি ধন্যবাদ, চ্যালেঞ্জের নিয়ম অনুসারে এটি অনুমোদিত হতে পারে বলে মনে হচ্ছে। (যদিও ভাসমান-পয়েন্ট সংখ্যাগুলি সর্বদা যৌক্তিক, অবশ্যই))
নয়েলহেনফ

2

এপিএল (ডায়ালগ ইউনিকোড) , 27 বাইট এসবিসিএস

⌊/0~⍨¯1 1+2*⍨∘⌈+⍨÷⍨1(+,-)×⍨

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

এক যুক্তি নিয়ে মোনাডিক ট্রেন। এটি আলেফালফের উত্তরের একটি বন্দর ।

কিভাবে:

⌊/0~⍨¯1 1+2*⍨∘⌈+⍨÷⍨1(+,-)×⍨  Monadic train

                         ×⍨  Square of the argument
                   1(+,-)    1 ± that (returns 1+k^2, 1-k^2)
                 ÷⍨          divided by
               +⍨            twice the argument
             ∘⌈              Ceiling
          2*⍨                Squared
     ¯1 1+                   -1 to the first, +1 to the second
  0~⍨                        Removing the zeroes
⌊/                           Return the smallest

2

সি # (ভিজ্যুয়াল সি # ইন্টারেক্টিভ সংকলক) , 89 85 71 বাইট

k=>{double n=2,p;for(;!((p=Math.Sqrt(n)%1)>0&p<k|1-p<k);n++);return n;}

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

-4 বাইট কেভিন ক্রুইজসেনকে ধন্যবাদ!


n++লুপটি রেখে আপনি একটি বাইট সংরক্ষণ করতে পারেন , যাতে -1প্রত্যাবর্তন থেকে অপসারণ করা যায়:k=>{double n=1,p;for(;Math.Abs(Math.Round(p=Math.Sqrt(0d+n))-p)>k|p%1==0;n++);return n;}
কেভিন ক্রুইজসেন

এছাড়াও, 0d+ক্যান সরানো যেতে পারে, তাই না?
কেভিন ক্রুইজসেন

@ কেভিন ক্রুইজসেন হ্যাঁ এটি করতে পারি, আমি ভুলে গিয়েছিলাম nইতিমধ্যে একটি দ্বিগুণ ছিল
অজ্ঞতার


1

জাভা 8, 85 বাইট

n->{double i=1,p;for(;Math.abs(Math.round(p=Math.sqrt(i))-p)>n|p%1==0;i++);return i;}

অবরুদ্ধকরণের বন্দর সি # .নাইট উত্তর।

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

Math.roundঅন্যথায় এই হতে পারে, কিন্তু দুর্ভাগ্যবশত এটি একই বাইট গোনা আছে:

n->{double i=1,p;for(;Math.abs((int)((p=Math.sqrt(i))+.5)-p)>n|p%1==0;i++);return i;}

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


1

ম্যাথগল্ফ , 16 বাইট

²_b*α)½╠ü²1bαm,╓

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

এই সমাধানের বিশাল ফ্যান নয়। এটি 05AB1E সমাধানের একটি বন্দর যা বেশিরভাগ উত্তর ব্যবহার করছে একই সূত্রের ভিত্তিতে।

ব্যাখ্যা

²                  pop a : push(a*a)
 _                 duplicate TOS
  b                push -1
   *               pop a, b : push(a*b)
    α              wrap last two elements in array
     )             increment
      ½            halve
       ╠           pop a, b, push b/a
        ü          ceiling with implicit map
         ²         pop a : push(a*a)
          1        push 1
           b       push -1
            α      wrap last two elements in array
             m     explicit map
              ,    pop a, b, push b-a
               ╓   min of list

প্রতিটি প্রতীক byteকোড গল্ফিং হিসাবে বিবেচনা করা হয়? কারণ আপনার কয়েকটি চরিত্রের একক বাইটের চেয়ে বেশি প্রয়োজন। আমি
নীট

ভাল প্রশ্ন! গল্ফিংয়ের একটি "বাইট" কোনও প্রোগ্রাম সঞ্চয় করার জন্য প্রয়োজনীয় ন্যূনতম ফাইল আকারের সাথে সম্পর্কিত। এই বাইটগুলি কল্পনা করতে ব্যবহৃত পাঠ্যটি কোনও বাইট হতে পারে। আমি আমার স্ক্রিপ্টগুলি ভিজ্যুয়ালাইজ করার জন্য কোড পৃষ্ঠা 437 নির্বাচন করেছি, তবে গুরুত্বপূর্ণ অংশটি আসল বাইটগুলি যা উত্স কোডটি সংজ্ঞায়িত করে।
ম্যাক্সবি

অক্ষরের সংখ্যা এবং বাইটের সংখ্যা পৃথক হওয়ার একটি উত্তম উদাহরণ হ'ল এই উত্তর। এখানে, 'ԓ'চরিত্রটি আসলে 2 বাইট, তবে বাকী 1 টি বাইট অক্ষর।
ম্যাক্সবি

1

ফোর্থ (গফোর) , 76 বাইট

: f 1 begin 1+ dup s>f fsqrt fdup fround f- fabs fdup f0> fover f< * until ;

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

ব্যাখ্যা

1 এ একটি কাউন্টার শুরু করে এবং এটি লুপে বাড়িয়ে তোলে। প্রতিটি পুনরুক্তি এটি পরীক্ষা করে যে কাউন্টারটির বর্গমূলের নিরঙ্কুশ মান - নিকটতম পূর্ণসংখ্যা k এর চেয়ে কম

কোড ব্যাখ্যা

: f                   \ start a new word definition
  1                   \ place a counter on the stack, start it at 1
  begin               \ start and indefinite loop
    1+                \ add 1 to the counter
    dup s>f           \ convert a copy of the counter to a float
    fsqrt             \ get the square root of the counter
    fdup fround f-    \ get the difference between the square root and the next closes integer
    fabs fdup         \ get the absolute value of the result and duplicate
    f0>               \ check if the result is greater than 0 (not perfect square)
    fover f<          \ bring k to the top of the float stack and check if the sqrt is less than k
    *                 \ multiply the two results (shorter "and" in this case)
  until               \ end loop if result ("and" of both conditions) is true
;                     \ end word definition

1

জেলি , 13 বাইট

আমি আলেফালফের মতো একই পদ্ধতির চেয়ে তেমন কিছু পাওয়ার ব্যবস্থা করতে পারি নি
- তার গাণিতিকের উত্তরটি উপরে উঠুন !

²;N$‘÷ḤĊ²_Ø+Ṃ

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

কিভাবে?

²;N$‘÷ḤĊ²_Ø+Ṃ - Link: number, n (in (0,1))
²             - square n        -> n²
   $          - last two links as a monad:
  N           -   negate        -> -(n²)
 ;            -   concatenate   -> [n², -(n²)]
    ‘         - increment       -> [1+n², 1-(n²)]
      Ḥ       - double n        -> 2n
     ÷        - divide          -> [(1+n²)/n/2, (1-(n²))/n/2]
       Ċ      - ceiling         -> [⌈(1+n²)/n/2⌉, ⌈(1-(n²))/n/2⌉]
        ²     - square          -> [⌈(1+n²)/n/2⌉², ⌈(1-(n²))/n/2⌉²]
          Ø+  - literal         -> [1,-1]
         _    - subtract        -> [⌈(1+n²)/n/2⌉²-1, ⌈(1-(n²))/n/2⌉²+1]
            Ṃ - minimum         -> min(⌈(1+n²)/n/2⌉²-1, ⌈(1-(n²))/n/2⌉²+1) 

1

জাপট , 14 বাইট

_=¬aZ¬r¹©U¨Z}a

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

_=¬aZ¬r¹©U¨Z}a     :Implicit input of integer U
_                  :Function taking an integer Z as an argument
 =                 :  Reassign to Z
  ¬                :    Square root of Z
   a               :    Absolute difference with
    Z¬             :      Square root of Z
      r            :      Round to the nearest integer
       ¹           :  End reassignment
        ©          :  Logical AND with
         U¨Z       :  U greater than or equal to Z
            }      :End function
             a     :Return the first integer that returns true when passed through that function

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