বর্গমূল থেকে শুধুমাত্র ++ ব্যবহার করে গণনা করুন


13

আপনার কাজটি হ'ল সংখ্যা পরিবর্তন করতে কোনও গাণিতিক অপারেটর ব্যবহার না করে একটি ধনাত্মক পূর্ণসংখ্যার বর্গমূল নির্ধারণ করা যেমন:

  • একটি ভেরিয়েবল সেট করা হচ্ছে (উদাঃ স্কোয়ারট রুট = 5)
  • সংযোজন (এ + বি)
  • বিয়োগ (AB)
  • গুণ (এ * বি)
  • বিভাগ (এ / বি)
  • স্কোয়ার, কিউব, চতুর্থ ইত্যাদি শিকড়
  • সূচক

তুলনা অপারেটর (যেমন <,>, ==, ইত্যাদি) এই প্রশ্নের উদ্দেশ্যগুলির জন্য "গাণিতিক অপারেটর" হিসাবে বিবেচিত হয় না এবং যতক্ষণ না তারা ভেরিয়েবলের মান পরিবর্তন করে না allowed

আপনি যে একমাত্র অপারেটরটি ব্যবহার করতে পারবেন তা হ'ল ++। নিম্নলিখিত ব্যতিক্রমগুলি স্থানে রয়েছে:

  • আপনি যদি চান, আপনি 0 এ সেট করে কোনও চলকটি সূচনা করতে পারেন।
  • যদি আপনার ভাষাতে ++ সিনট্যাক্স অন্তর্ভুক্ত না থাকে তবে আপনি একটি সমমানের বাক্য গঠন যেমন foo + = 1 বা foo = foo + 1 ব্যবহার করতে পারেন
  • বর্গমূলকে দশমিকের (কম-সহস্র স্থান) ছাড়িয়ে কমপক্ষে 6 টি অঙ্কে গণনা করতে হবে এবং দশমিকের পুরো সংখ্যা হিসাবে আউটপুট করা উচিত (উদাহরণস্বরূপ আমি 2 ইনপুট দিলে এটি 14142135624 বা 1414213 হিসাবে গোলের উপর নির্ভর করে বেরিয়ে আসতে পারে) । উপরে বা নীচে গোল করা গুরুত্বপূর্ণ নয়।

ব্যবহারকারী-সংজ্ঞায়িত ফাংশন অনুমোদিত নয়। এছাড়াও, গোটো সহ সিমুলেটিং ফাংশনগুলিও অনুমোদিত নয়।

আমি প্রত্যেকে যা জমা দেয় তা দেখতে আগ্রহী! শুভ কোডিং!

শোধন

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

স্পষ্টকরণ # 2

তুলনামূলক অপারেটরদের অনুমতি দেওয়া হয়েছে তা পরিষ্কার করুন।

স্পষ্টকরণ # 3

সংখ্যা পরিবর্তন করার জন্য সংযোজন, বিয়োগ, গুণ, বিভাগ এবং ফাংশনগুলিকে একেবারেই অনুমোদিত নয় , সেগুলি ভেরিয়েবলে সংরক্ষণ করা হয় কিনা তা নির্বিশেষে। আমি দুঃখিত যে এটি কয়েকটি বিদ্যমান উত্তরকে অকার্যকর করে দিয়েছে, তবে ট্রোল উত্তরগুলি রোধ করার জন্য "সংখ্যা পরিবর্তন" সহ এই অপারেটরদের এই গ্রুপটি সংজ্ঞায়িত করতে চেয়েছিলাম (উদাঃ আমি কেবল sqrt () ফাংশনটি ব্যবহার করেছি, আপনি কেবল যুক্তটি নিষিদ্ধ করেছেন, গুণ, ভাগ এবং বিয়োগ) t বিভ্রান্তির জন্য দুঃখিত.

বর্ণনালীকরণ # 4

আমাদের কমপক্ষে 5 টি সংখ্যা প্রয়োজন তা পরিষ্কার করুন। 10 টি সংখ্যার কারণে কোডটি দীর্ঘ সময়ের জন্য চালিত হয়েছিল।


1
না, - অনুমোদিত নয়, বিভ্রান্তির জন্য দুঃখিত! আমি প্রাথমিকভাবে ++ এবং - করার পরিকল্পনা করেছিলাম তবে শেষ মুহুর্তে আমি গ্রহণ করার সিদ্ধান্ত নিয়েছিলাম।
iggyvolz

5
"সংখ্যা পরিবর্তন করতে কোনও গাণিতিক অপারেটর ব্যবহার না করে" - আমি মনে করি এর স্পষ্টতা দরকার হতে পারে। আপনি কি এটি বলতে না যে, এই অপারেটর ব্যবহার করা যাবে না এ সব , বা, তারা ব্যবহার করা যেতে পারে, কিন্তু শুধুমাত্র যদি ফলাফলের একটি পরিবর্তনশীল এ সংরক্ষিত হয় না, যেমন while r*r<n*10e20:r+=1- মোটামুটি তুচ্ছ। এছাড়াও, আপনি প্রয়োজনীয় আউটপুট 10 ^ 8 বা আরও কমিয়ে আনতে বিবেচনা করতে পারেন। প্রথমত, কারণ 10 ^ 10 2 ^ 31 এর চেয়ে বড় এবং দ্বিতীয়, কারণ এটি উচ্চতর করতে কিছুটা সময় নেয় take
প্রিমো

1
আপনি কেন কখনও কোনও পরিবর্তনকে "পরিবর্তন" করতে চান? আপনার প্রতিবন্ধী ছেলেরা অদ্ভুতভাবে চিন্তাভাবনা করে ...
জবাব দেওয়া বন্ধ করে দিয়েছে

4
আমি এই প্রশ্নটি বন্ধ করতে পতাকা বদ্ধ করছি। প্রশ্নের অনেক মৌলিক পরিবর্তন। আপনার অবশ্যই এই প্রশ্নটি স্যান্ডবক্সের মাধ্যমে বৈধ হওয়া উচিত বা অন্যথায় আপনি উত্তর দেওয়ার প্রচেষ্টা বিনিয়োগকারীদের হতাশ করবেন।
অভিজিৎ

3
প্রয়োজনীয় সংখ্যাগুলির সংখ্যা হ্রাস করা সময় / স্মৃতির সীমা ছাড়াই অর্থহীন। আমার কোডটি 5 অঙ্কগুলি পরিচালনা করতে পারে তবে আমার মেশিনে পর্যাপ্ত র‌্যাম নেই।
ডেনিস

উত্তর:


13

পাইথন 66

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
@ প্রিমো আমি মনে করি না যে আপনি *1e10...
ক্র্যাঞ্চ

@ প্রিমো: 1e10 দ্বারা গুণ করার পরিবর্তে আমি কিছুটা ভিন্ন পথ নিয়েছি। এবং যদিও আমি সম্মত হই যে অ্যাবসগুলি ছদ্মবেশে স্কয়ার্ট হতে পারে তবে তবুও সমস্যাটিতে বর্ণিত হিসাবে এটি সম্পূর্ণরূপে আইনী মনে করি।
অভিজিৎ

আমি একটি ডাউনভোট দেখছি এবং এটি বেশ হতাশাব্যঞ্জক। আমার এই উত্তরটির জন্য উচ্চ প্রত্যাশা ছিল, সুতরাং যে কেউ হ্রাস পেয়েছে, দয়া করে একটি মন্তব্য ছেড়ে দিন।
অভিজিৎ

9
@ জিগিভোলজ: আমি সত্যিই অবাক হয়েছি যে আপনি আপনার প্রশ্নটি প্রসারিত এবং আরও বিধিনিষেধ যোগ করেছেন। লোকেরা উত্তর লেখার জন্য সময় এবং প্রচেষ্টার জন্য বিনিয়োগ করে এবং আপনি সেগুলি মনস্তাত্ত্বিক হওয়ার প্রত্যাশা করতে পারেন না।
অভিজিৎ

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) আমি অজগরটির সাথে পরিচিত নই, তবে আমি ধরে নিচ্ছি যে অন্তর্নিহিত () কেবল একটি টাইপ কাস্টার? যদি তা হয় তবে তা ঠিক আছে কারণ এটি সংখ্যার মান পরিবর্তন করে না।
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

কিছু নির্দিষ্ট মানের জন্য একটি উত্তর নির্ধারণ করতে খুব বেশি সময় লাগতে পারে তবে এটি অবশ্যই কাজ করবে। আমি ব্যবহার করার সময় *এবং -, এগুলি কোনও মান পরিবর্তন করে না , কেবল s=s+1প্রকৃতপক্ষে কিছু পরিবর্তন করে।


বাহ, অনুমান আমি স্থির মান পরিবর্তনের জন্য অপারেটরগুলি ব্যবহার করার কথা ভাবি নি। এটি পুরোপুরি ঠিক আছে এবং +1 (যদি আমার
উত্সাহের

এটি *অপারেটর ব্যবহার করে , যা বেশ পরিষ্কারভাবে অনুমোদিত নয়। বা আমি কি কোনওভাবে প্রদত্ত বিধিনিষেধগুলিকে ভুল বুঝছি?
গ্রেগ হিউগিল

@ গ্রেগ হিউগিল: ওপি জানিয়েছে, সংখ্যা পরিবর্তন করতে কোনও গাণিতিক অপারেটর ব্যবহার না করে ; এই অপারেটররা কোনও মান পরিবর্তন করছে না।
কাইল কানোজ

7
তবে এটি এখনও *একটি নম্বর পরিবর্তন করতে অপারেটরটি ব্যবহার করছে , আপনি ফলাফলটি কোথাও সংরক্ষণ করছেন না। যদি ওপি কেবল অ্যাসাইনমেন্টগুলি (অন্য ব্যতীত s=s+1) অস্বীকার করতে চায় , তবে কেন সমস্ত অস্বীকৃত পাটিগণিত অপারেটরগুলির কথা উল্লেখ করুন?
গ্রেগ হিউগিল

1
@ আইগিভোলজ: ২০ ঘন্টা পরে নিয়ম পরিবর্তন করা খারাপ রূপ। দয়া করে এটি করবেন না এবং পরিবর্তে আপনার সমস্যার কিঙ্কসটি ব্যবহার করতে স্যান্ডবক্স ব্যবহার করুন ।
কাইল কানোজ

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

পটভূমি

যেহেতু আমরা গাণিতিক অপারেটরগুলিকে সংখ্যা পরিবর্তন করার অনুমতি দিচ্ছি না তাই আমরা অ্যারে পরিবর্তন করতে সেটওয়াইড অপারেটর ব্যবহার করব।

কোডটি "ইনপুট (" i ") দ্বারা 1e20 দ্বারা" গুণ "দ্বারা শুরু করা হয় তবে কোনও আসল গুণ ছাড়াই। পরিবর্তে, আমরা “i” পূর্ণসংখ্যাযুক্ত একটি অ্যারে, 1e20 পূর্ণসংখ্যার সমন্বিত একটি অ্যারে চাপি, তাদের কার্টেসিয়ান পণ্যটি গ্রহণ করি এবং এর দৈর্ঘ্য গণনা করি।

তারপরে, আমরা শূন্য এবং বর্ধনের দিকে চাপ দিই যতক্ষণ না নিজেই পূর্ণসংখ্যার পণ্যটি (উপরে হিসাবে গণনা করা হয়) এর চেয়ে আর ছোট হয় না i * 1e20। এটি বর্গমূলকে বৃত্তাকার করে তোলে causes

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

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, যা পরিষ্কারভাবে একটি অ হয় ++গণিত অপারেটর ...
nneonneo

@ এনিউনিও এটি তৃতীয় সম্পাদনার আগে পোস্ট করা হয়েছিল, এবং আমি এখনও এটি পরিবর্তন করিনি
ousurous

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 যোগ করে এবং স্কালার ++কোনওভাবেই অপারেটর নেই। আমি অন্তর্ধারার স্ট্রিমটি তালিকার সাথে প্রতিস্থাপন করে দুটি অক্ষর সংরক্ষণ করতে পারি, তবে তারপরে এটির স্মৃতিশক্তি চলে যায়। যেমনটি লেখা হয়েছে, আমি মনে করি এটি কেবলমাত্র প্রক্রিয়াজাতকরণের সময় মেমরির ব্যবহার নয় sc


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

পিএইচপি, 124 বাইট

এটি একটি বিস্তৃত অ্যালগরিদম। এটি কেবলমাত্র সংখ্যার চেষ্টা করে যতক্ষণ না number সংখ্যার বর্গক্ষেত্রটি "লক্ষ্য" সংখ্যার চেয়ে বড় না হয় (যা ইনপুট বার 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 এর উপরে একটি সংখ্যা দিয়ে এটি চেষ্টা করার পরামর্শ দিবেন না।

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