इंटनर्स से स्क्वायर रूट की दूरी


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}]&

इसे ऑनलाइन आज़माएं!

व्याख्या

परिणाम इस रूप में होने चाहिए m2±1 के लिए कुछ mN । Inequations सुलझाने m2+1mkऔरmm21kपर हम पाते हैं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)

इसे ऑनलाइन आज़माएं!

Alephalpha के फॉर्मूले के आधार पर , यदि हम 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

05AB1E , 16 बाइट्स

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

पोर्ट ऑफ @alephalpha का गणित का उत्तर , @ सोक के पाइथ उत्तर से प्रेरणा लेकर , इसलिए इन दोनों को उभारना सुनिश्चित करें!

इसे ऑनलाइन आज़माएं या सभी परीक्षण मामलों को सत्यापित करें

स्पष्टीकरण:

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 के कभी-विषम सिंटैक्स से जानने की कोशिश कर रहा था।
मैजिक ऑक्टोपस Urn

3

जावास्क्रिप्ट (ईएस 7),  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+(,-)@*:

एनबी। यह छोटा संस्करण केवल @ alephalpha के सूत्र का उपयोग करता है।

इसे ऑनलाइन आज़माएं!

39 बाइट्स, मूल, जानवर बल

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

इसे ऑनलाइन आज़माएं!

सभी परीक्षण मामलों को संभालता है


3

जाप , 18 16 बाइट्स

झबरा से -2 बाइट्स

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

इसे ऑनलाइन आज़माएं!


अर्नुल्ड के समाधान का उपयोग करके कम हो सकता है
एएससीआईआई-केवल


ओह ... बेशक मैं इसका उल्टा कर सकता था: | यह भी %1 &&बुरा है, यकीन है कि अगर Arnauld के समाधान का उपयोग कम होगा (शायद नहीं)
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
@KevinCruijssen दो तत्वों का क्रम महत्वपूर्ण नहीं है क्योंकि हम न्यूनतम ले रहे हैं, हालांकि मैं 3 बाइट्स में जोड़ी बनाने का एक तरीका नहीं सोच सकता। - ... dहालांकि इसे बदलने के लिए एक अच्छी पकड़ , जो मुझे एक बाइट बचाता है! साभार
सोक

@KevinCruijssen इसके अलावा दुर्भाग्य से एक भी बाइट न्यूनतम या अधिकतम कार्य नहीं है: o (
सोक

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
@ धन्यवाद धन्यवाद, यह चुनौती नियमों के अनुसार अनुमति दी गई लगती है। (हालांकि फ्लोटिंग-पॉइंट नंबर हमेशा तर्कसंगत होते हैं, निश्चित रूप से।)
nwellnhof

2

एपीएल (Dyalog यूनिकोड) , 27 बाइट्स SBCS

⌊/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;}

पोर्ट ऑफ एम्बोडिमेंटऑफइग्नोरेंस का सी # .NET उत्तर।

इसे ऑनलाइन आज़माएं।

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

MathGolf , 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 को चुना है , लेकिन महत्वपूर्ण हिस्सा वास्तविक बाइट्स है जो स्रोत कोड को परिभाषित करते हैं।
13

वर्णों की संख्या और बाइट्स की संख्या का एक अच्छा उदाहरण यह उत्तर है। यहां, 'ԓ'चरित्र वास्तव में 2 बाइट्स हैं, लेकिन बाकी 1 बाइट वर्ण हैं।
अधिकतम

1

फोर्थ (gforth) , 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 बाइट्स

मैं alephalpha के रूप में एक ही दृष्टिकोण की तुलना में कुछ भी terser प्राप्त करने में कामयाब नहीं है
- अपने गणित के उत्तर को बढ़ाता हूं !

²;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

हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.