केवल ++ का उपयोग करके वर्गमूल की गणना करें


13

आपका कार्य किसी भी गणितीय संचालक का उपयोग किए बिना संख्या को बदलने के लिए एक सकारात्मक पूर्णांक के वर्गमूल की गणना करना है, जैसे:

  • एक चर सेट करना (उदा। स्क्वायररूट = 5)
  • जोड़ (A + B)
  • घटाव (एबी)
  • गुणा (A * B)
  • प्रभाग (ए / बी)
  • वर्ग, घन, चौथा, आदि जड़ें
  • घातांक

तुलना ऑपरेटरों (जैसे <,>, ==, आदि) को इस प्रश्न के प्रयोजनों के लिए "गणितीय ऑपरेटर" नहीं माना जाता है और उन्हें तब तक अनुमति दी जाती है जब तक वे एक चर के मूल्य को नहीं बदलते हैं।

एकमात्र ऑपरेटर जिसे आप उपयोग करने में सक्षम हैं वह ++ है। निम्नलिखित अपवाद जगह में हैं:

  • यदि आप चाहें, तो आप किसी चर को 0 पर सेट करके आरंभ कर सकते हैं।
  • यदि आपकी भाषा में ++ सिंटैक्स शामिल नहीं है, तो आप बराबर सिंटैक्स का उपयोग कर सकते हैं, जैसे foo + = 1 या foo = poo + 1
  • वर्गमूल की गणना दशमलव (सौ-हज़ार जगह) से कम से कम 6 अंकों से की जानी चाहिए और इसे दशमलव की पूरी संख्या के रूप में आउटपुट किया जाना चाहिए (उदाहरण के लिए, यदि मैं 2 इनपुट करता हूँ तो यह 14142135624 या 14142 मीटर के आधार पर बाहर आ सकता है)। । ऊपर या नीचे गोलाई महत्वपूर्ण नहीं है।

उपयोगकर्ता-परिभाषित कार्यों की अनुमति नहीं है। इसके अलावा, गोटो के साथ अनुकरण कार्यों की भी अनुमति नहीं है।

मुझे यह देखने में दिलचस्पी है कि हर कोई क्या देखता है! हैप्पी कोडिंग!

स्पष्टीकरण

उस संख्या को स्पष्ट करें कि संख्या एक धनात्मक पूर्णांक है। कोड बनाने के लिए आपका स्वागत है जो किसी भी संख्या को करेगा लेकिन यह आवश्यक नहीं है।

वर्गीकरण # 2

तुलना ऑपरेटरों को अनुमति दी जाती है कि स्पष्ट करें।

वर्गीकरण # 3

इसके अलावा, घटाव, गुणा, भाग और परिवर्तन संख्या के कार्यों की अनुमति नहीं है सब पर , वे एक चर या नहीं करने के लिए सहेजा जाता है या कुछ भी हो। मुझे खेद है कि यह एक जोड़े के मौजूदा उत्तरों को अमान्य करता है, लेकिन मेरा मतलब है कि ट्रोल उत्तरों को रोकने के लिए ऑपरेटरों के इस समूह को "संख्या बदल दें" (उदाहरण के लिए। मैंने अभी sqrt () फ़ंक्शन का उपयोग किया है, आप केवल इसके अतिरिक्त निषिद्ध हैं।) गुणा, भाग और घटाव)। गलतफहमी के लिए खेद है।

वर्गीकरण # 4

स्पष्ट करें कि हमें कम से कम 5 अंक चाहिए। 10 अंकों के कारण कोड लंबे समय तक चलता है।


1
नहीं, - अनुमति नहीं है, भ्रम के लिए खेद है! मैंने मूल रूप से ++ और - की योजना बनाई है, लेकिन मैंने अंतिम मिनट में बाहर निकालने का फैसला किया है।
iggyvolz

5
"संख्या बदलने के लिए किसी भी गणितीय ऑपरेटरों का उपयोग किए बिना" - मुझे लगता है कि इसे स्पष्टीकरण की आवश्यकता हो सकती है। क्या आपका मतलब है कि इन ऑपरेटरों का उपयोग किया नहीं किया जा सकता सब पर , या, कि वे इस्तेमाल किया जा सकता है, लेकिन तभी जब परिणाम एक चर को सहेजा नहीं गया है, जैसे while r*r<n*10e20:r+=1- काफी तुच्छ। इसके अलावा, आप आवश्यक आउटपुट को 10 ^ 8 या उससे कम करने पर विचार कर सकते हैं। पहला, क्योंकि 10 ^ 10 2 ^ 31 से बड़ा है, और दूसरा, क्योंकि यह उच्च वृद्धि में थोड़ा समय लगेगा।
प्रिमो

1
आप कभी भी किसी भी चर को "बदलना" क्यों चाहेंगे ? आप लोगों के सोचने के अजीब तरीके हैं ...
काउंटरल्विस

4
मैं इस सवाल को बंद करने के लिए झंडी दिखा रहा हूं। प्रश्न के लिए बहुत अधिक मौलिक परिवर्तन। आपको यह प्रश्न वास्तव में सैंडबॉक्स के माध्यम से मान्य होना चाहिए अन्यथा आप जवाब देने के प्रयास में निवेश करने वाले लोगों को निराश करेंगे।
अभिजीत

3
आवश्यक अंकों की संख्या कम करना समय / स्मृति सीमा के बिना अर्थहीन है। मेरा कोड 5 अंकों को संभाल सकता है, लेकिन मेरी मशीन में पर्याप्त रैम नहीं है।
डेनिस

जवाबों:


13

अजगर ६६

print'%.0f'%reduce(lambda a,b:abs(a)+1e10j,range(-2,input())).real

उत्पादन

>>> print'%.0f'%reduce(lambda a,b:abs(a)+1e10j,range(-2,input())).real
121
110000000000
>>> print'%.0f'%reduce(lambda a,b:abs(a)+1e10j,range(-2,input())).real
1000
316227766017

यह समाधान परिणाम प्राप्त करने के लिए एक जटिल विमान पर थियोडोरस के सर्पिल का उपयोग करता है ।


2
मुझे लगता है कि इसमें लिपटने की आवश्यकता होगी int(...*1e10), अन्यथा बहुत अच्छा होगा। हालाँकि, absएक जटिल मूल्य लेना कम या ज्यादा sqrtभेस में है।
प्रिमो

1
@primo मुझे नहीं लगता कि आप की अनुमति है *1e10...
Cruncher

@primo: 1e10 से गुणा करने के बजाय, मैंने थोड़ा अलग मार्ग लिया। और यद्यपि मैं इस बात से सहमत हूं कि अनुपस्थिति भेस में sqrt हो सकती है, फिर भी मैं इसे पूरी तरह से कानूनी महसूस करता हूं जैसा कि वर्तमान में समस्या में कहा गया है।
अभिजीत

मैं एक नीच, और इसके काफी निराशाजनक देखता हूं। मुझे इस उत्तर की बहुत उम्मीद थी, इसलिए किसी भी व्यक्ति ने जो अपमानित किया, कृपया एक टिप्पणी छोड़ दें।
अभिजीत

9
@iggyvolz: मुझे वास्तव में आश्चर्य है कि आप अपने प्रश्न का विस्तार करते रहे और अधिक प्रतिबंधों को जोड़ते रहे। लोग उत्तर लिखने के लिए समय और प्रयास का निवेश करते हैं और आप उनसे अपेक्षा नहीं कर सकते हैं कि वे मानस हैं।
अभिजीत

6

पायथन, 184 वर्ण

निम्नलिखित पायथन समाधान केवल वेतन वृद्धि ऑपरेटर और कोई अन्य अंकगणितीय ऑपरेटर का उपयोग नहीं करता है। हालांकि, आवश्यक सटीकता (10 अंक) के साथ, इसे चलाने के लिए एक असंभव समय लगता है। आप को कम करके कम परिशुद्धता (3 अंक) के साथ यह परीक्षण कर सकते हैं 1e20करने के लिए 1e6

import sys;t=0
for _ in range(int(sys.argv[1])):
 for _ in range(int(1e20)):t+=1
q=0
while 1:
 z=0
 for _ in range(q):
  for _ in range(q):z+=1
 if z>=t:break
 q+=1
print(q)

Ungolfed:

import sys

# t = N * 100000000000000000000 (magnitude of twice the precision)
t = 0
for _ in range(int(sys.argv[1])):
    for _ in range(int(1e20)):
        t += 1
q = 0
while True:
    # z = q * q
    z = 0
    for _ in range(q):
        for _ in range(q):
            z += 1
    if z >= t:
        break
    q += 1
print(q)

मैंने प्रश्न को स्पष्ट किया, आप इसे जितने चाहें उतने अंक तक कर सकते हैं (कम से कम 5)। मैं अजगर से परिचित नहीं हूँ, लेकिन मैं यह मान रहा हूँ कि int () सिर्फ एक प्रकार का ढलाईकार है? यदि हां, तो यह ठीक है क्योंकि यह संख्या के मूल्य को नहीं बदलता है।
iggyvolz

@iggyvolz: सही, आपको आवश्यकता है कि स्ट्रिंग तर्क मान (कमांड लाइन पर निर्दिष्ट) को पूर्णांक में परिवर्तित करें। एक सादे समारोह की आवश्यकता नहीं होगी।
ग्रेग हेविल जिल

2

फोरट्रान 73

read*,t;s=0;do while(abs(s*s/1e10-t)>1e-10);s=s+1;enddo;print*,s/1e5;end

वास्तव में कुछ मूल्यों के लिए एक उत्तर निर्धारित करने के लिए एक loooong लग सकता है, लेकिन यह सुनिश्चित करने के लिए काम करेगा। जब मैं उपयोग करता हूं *और -, ये कोई मूल्य नहीं बदल रहे हैं , केवल s=s+1वास्तव में कुछ भी बदलता है।


वाह, लगता है कि मैंने स्थिर मूल्यों को बदलने के लिए ऑपरेटरों का उपयोग करने के बारे में नहीं सोचा था। यह पूरी तरह से ठीक है और +1 (यदि मेरे पास 15 प्रतिष्ठा है)
iggyvolz

यह *ऑपरेटर का उपयोग करता है , जो स्पष्ट रूप से अनुमति नहीं है। या मैं किसी तरह दिए गए प्रतिबंधों को गलत समझ रहा हूं?
ग्रेग हेविल जिल

@GregHewgill: ओपी राज्यों, संख्या को बदलने के लिए किसी भी गणितीय ऑपरेटरों का उपयोग किए बिना ; ये ऑपरेटर कोई मान नहीं बदल रहे हैं।
काइल कानोस

7
लेकिन यह अभी भी *नंबर बदलने के लिए ऑपरेटर का उपयोग कर रहा है , आप कहीं भी परिणाम नहीं बचा रहे हैं। यदि ओपी केवल असाइनमेंट्स को छोड़ना चाहता है (इसके अलावा s=s+1), तो सभी अस्वीकृत गणित ऑपरेटरों का उल्लेख क्यों करें?
ग्रेग हेविल

1
@iggyvolz: 20 घंटे बाद नियम बदलना खराब रूप है। कृपया ऐसा न करें और सैंडबॉक्स का उपयोग करने के बजाय अपनी समस्या में किंक को बाहर निकालें।
काइल कानोस

2

सीजेएम, 26 बाइट्स

q~,1e20,m*,:N!{)_,_m*,N<}g

इसे ऑनलाइन आज़माएं। कोड पेस्ट करें , इनपुट में वांछित पूर्णांक टाइप करें और रन पर क्लिक करें । ऐसा करने से पहले मैं बदलने का सुझाव 1e10करने के लिए 1e4हालांकि।

जावा दुभाषिया हैंडल 1e6इनपुट "2" के बारे में 15 सेकंड में साथ। राम 1e20की एक बड़ी राशि की आवश्यकता होगी ।

उदाहरण

$ cjam <(echo 'q~,1e2,m*,:N!{)_,_m*,N<}g') <<< 4; echo
20
$ cjam <(echo 'q~,1e2,m*,:N!{)_,_m*,N<}g') <<< 2; echo
15
$ cjam <(echo 'q~,1e4,m*,:N!{)_,_m*,N<}g') <<< 4; echo
200
$ cjam <(echo 'q~,1e4,m*,:N!{)_,_m*,N<}g') <<< 2; echo
142
$ cjam <(echo 'q~,1e6,m*,:N!{)_,_m*,N<}g') <<< 4; echo
2000
$ cjam <(echo 'q~,1e6,m*,:N!{)_,_m*,N<}g') <<< 2; echo
1415

पृष्ठभूमि

चूंकि हमें गणितीय संचालकों को संख्याएँ बदलने की अनुमति नहीं है, इसलिए हम सरणियों को बदलने के लिए सेटवाइज़ ऑपरेटरों का उपयोग करने जा रहे हैं।

कोड 1e20 द्वारा इनपुट ("i") को "गुणा" करके शुरू होता है, लेकिन बिना किसी वास्तविक गुणा के। इसके बजाय, हम एक सरणी को "i" पूर्णांकों से धकेलते हैं, एक सरणी जिसमें 1e20 पूर्णांक होते हैं, उनके कार्टेशियन उत्पाद लेते हैं और उनकी लंबाई की गणना करते हैं।

फिर, हम शून्य और वृद्धि को तब तक धक्का देते हैं जब तक कि पूर्णांक के उत्पाद को स्वयं (ऊपर के रूप में गणना) से छोटा नहीं किया जाता है i * 1e20। यह वर्गमूल को गोल करने का कारण बनता है।

यह काम किस प्रकार करता है

q~     " Read for STDIN and interpret. ";
,      " Push an array containing that many integers. ";
1e20,  " Push the array [ 0   …   1e20 - 1]. ";
m*,:N  " Get the length of the cartesian product and save it in “N”. ";
!      " Logical NOT. Since the input is a positive integer, this pushes 0. " ;
{      " ";
  )    " Increment the integer on the stack.";
  _,   " Push an array containing that many integers. ";
  _m*, " Get the length of the cartesian product of the array by itself. ";
  N<   " If the product is smaller than the target value, push 1; otherwise push 0. ";
}g     " Repeat the loop if the result was 1. ";

1

कोबरा - 62

तीसरे संपादन से पहले पोस्ट किया गया, अब मान्य नहीं है।

न केवल यह छोटा है, लेकिन अगर यह अतिप्रवाह रहित होना चाहिए n < Decimal.maxValue

def f(n)
    r,e=0d,10000000000
    while r/e*r/e<n,r+=1
    print r

लेकिन आपने इस्तेमाल किया r/e*r/e, जो स्पष्ट रूप से एक गैर- ++गणित ऑपरेटर है ...
nnonneo

@nneonneo इसे तीसरे संपादन से पहले पोस्ट किया गया था, और मैंने इसे अभी तक नहीं बदला है
8urous

0

स्कैला, 117

val z=BigInt(readLine+"0000000000")
print(Stream.from(1)find(x=>(BigInt(0)/:Stream.fill(x,x)(1).flatten){_+_}>=z)get)

इनपुट के रूप में 2 के लिए भी समय की एक उचित मात्रा में खत्म नहीं होता है, लेकिन यह काम करता है। आप देख सकते हैं कि मैं कर रहा हूँ _+_, लेकिन वह केवल कभी 1 जोड़ता है, और स्काला के पास ++वैसे भी ऑपरेटर नहीं है । मैं सूची के साथ आंतरिक स्ट्रीम को प्रतिस्थापित करके दो वर्णों को सहेज सकता था, लेकिन तब यह स्मृति से बाहर चला जाएगा। जैसा कि लिखा गया है, मुझे लगता है कि यह केवल प्रोसेसिंग के समय में है, मेमोरी के उपयोग के लिए नहीं।


0

हास्केल, 70 बाइट्स

s i|r<-[1..i]=foldl1(.)[(+1)|j<-r,k<-r]
f i=[j-1|j<-[0..],s j 0>=i]!!1

fपूर्णांक वर्गमूल को सबसे बड़ी संख्या ज्ञात करता है जिसका वर्ग इनपुट से कम या उसके बराबर है। मैट्रिक्स के s iप्रत्येक तत्व के लिए एक से बढ़ कर समारोह में वृद्धि (i,i)। (फोन पर टाइप किया गया हो सकता है इसलिए टाइपोस)।


0

PHP, 124 बाइट्स

यह एक संपूर्ण एल्गोरिथ्म है। यह केवल संख्याओं की कोशिश करता है जब तक कि उस संख्या का वर्ग "लक्ष्य" संख्या (जो कि इनपुट समय 1E number of decimalsवर्ग (2 दशमलव परिणाम के लिए 10.000 है) से बड़ा है। तब यह उस अंतिम संख्या को प्रिंट करता है।

for(;$a++<$z=$argv[1];)for(;$$a++<1e6;)$g++;for(;$b++<$g;$i=$x=0)for(;$i++<$b;)for($j=0;$j++<$b;)if(++$x>=$g)break 3;echo$b;

इस तरह से चलाएं ( -dकेवल सौंदर्य संबंधी कारणों के लिए जोड़ा गया):

php -d error_reporting=32757 -r 'for(;$a++<$z=$argv[1];)for(;$$a++<1e6;)$g++;for(;$b++<$g;$i=$x=0)for(;$i++<$b;)for($j=0;$j++<$b;)if(++$x>=$g)break 3;echo"$b\n";' 2

3 से अधिक दशमलव या 10 से ऊपर की संख्या के साथ इसे आज़माने की सलाह न दें।

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