স্কোয়ারে স্কোয়ার


10

ধনাত্মক পূর্ণসংখ্যার ইনপুট দেওয়া n, একটি প্রোগ্রাম লিখুন যা নিম্নলিখিত প্রক্রিয়াটি সম্পূর্ণ করে।

  • nএকটি নিখুঁত বর্গক্ষেত্রের চেয়ে ক্ষুদ্রতম ধনাত্মক পূর্ণসংখ্যার সন্ধান করুন এবং এটি nঅন্য কোনও সংখ্যার সংমিশ্রণ । এর অঙ্কগুলির ক্রম nপরিবর্তন করা যাবে না। nএকটি নিখুঁত বর্গক্ষেত্র উত্পাদন করতে সংযোগযুক্ত নম্বর কল করা যেতে পারে r_1
  • যদি r_1নিখুঁত বর্গক্ষেত্র না r_1হয় তবে প্রক্রিয়াটির নতুন ইনপুট হিসাবে উপরের প্রক্রিয়াটি পুনরাবৃত্তি করুন । r_kএকটি নিখুঁত বর্গক্ষেত্র না হওয়া পর্যন্ত পুনরাবৃত্তি করুন s
  • এর মান মুদ্রণ করুন sqrt(s)

ইনপুট যে কোনও বিন্যাসে নেওয়া যেতে পারে। আপনি nএটি ধনাত্মক পূর্ণসংখ্যা বলে ধরে নিতে পারেন । যদি কারও শুরুর r_kশূন্য (এবং r_k≠ 0) থাকে তবে শূন্যটিকে উপেক্ষা করা যায়।


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

এখানে কিছু পরীক্ষার মামলা রয়েছে। প্রক্রিয়া উপরের পদক্ষেপগুলি প্রদর্শন করে।

Input:   23
Process: 23, 2304, 4
Output:  2

Input:   10
Process: 10, 100, 0
Output:  0

Input:   1
Process: 1, 16, 6, 64, 4
Output:  2

Input:   5
Process: 5, 529, 29, 2916, 16
Output:  4

Input:   145
Process: 145, 145161, 161, 16129, 29, 2916, 16
Output:  4

Input:   1337
Process: 1337, 13373649, 3649, 36493681, 3681, 368102596, 2596, 25969216, 9216
Output:  96

এটি কোড গল্ফ। স্ট্যান্ডার্ড বিধি প্রয়োগ। সংক্ষিপ্ত উত্তর (বাইটে) জিতেছে।

উত্তর:


2

পাইথ, 26 বাইট

LsI@b2 fy=sh.fys+QZ1\0)@Q2

পরীক্ষা স্যুট

আউটপুট একটি ভাসা হিসাবে। ইনট হিসাবে আউটপুট পছন্দসই হয়, এটি 1 অতিরিক্ত বাইট হবে।

ব্যাখ্যা:

LsI@b2 fy=sh.fys+QZ1\0)s@Q2
                               Q = eval(input())
L                              def y(b): return
   @b2                         Square root of b
 sI                            Is an integer.
       f              )        Find the first positive integer T that satisfies
           h.f     1\0         Find the first digit string Z that satisfies
                +QZ            Concatenation of Q and Z
               s               Converted to an integer
              y                Is a pergect square.
          s                    Convert the string to an integer
         =                     Assign result to the next variable in the code, Q
        y                      Repeat until result is a perfect square
                               (The space) Discard return value
                        @Q2    Take square root of Q and print.

2

এমএটিএল , 35 44.0 বাইট

XK``x@2^tVKVXf1=a~]VKVnQ0h)UXKX^t1\

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

XK        % implicit input: n. Copy to clipboard K
`         % do...while. Each iteration applies the algorithm
  `       %   do...while. Each iteration tests a candidate number
    x     %     delete top of stack
    @2^   %     iteration index squared
    t     %     duplicate
    V     %     convert to string                
    K     %     paste from clipboard K: n or r_k
    V     %     convert to string  
    Xf    %     find one string within another. Gives indices of starting matches, if any 
    1=a~  %     test if some of those indices is 1. If not: next iteration
  ]       %   end. We finish with a perfect square that begins with digits of n or r_k
  V       %   convert to string
  K       %   paste from clipboard K: n or r_k
  VnQ0h   %   index of rightmost characters, as determined by r_k
  )       %   keep those figures only
  U       %   convert to number. This is the new r_k
  XK      %   copy to clipboard K, to be used as input to algorithm again, if needed
  X^      %   square root
  1\      %   fractional part. If not zero: apply algorithm again
          % implitic do...while loop end
          % implicit display

2

পাইথন 2, 98

i=input();d=o=9
while~-d:
 n=i;d=o+1;o=i=0
 while(n*d+i)**.5%1:i=-~i%d;d+=9*d*0**i
print'%d'%n**.5

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


যেহেতু আমরা ভাসমান অপব্যবহারের অঞ্চলে থাকি ... while x**.5%1:সম্ভবত?
Sp3000

@ Sp3000 ধন্যবাদ! আমি এখন আরও কিছুটা গল্ফ করেছি।
grc

@ আম্পোরা শুধুমাত্র আদর্শ লিঙ্কটি প্রক্রিয়াটি প্রিন্ট করেছে, তবে আমি এখন এটি পরিবর্তন করেছি।
grc

1

পাইথন, 200 198 178 বাইট

import math
def r(i):
 j=int(i**.5)+1
 while str(j*j)[:len(str(i))]!=str(i):j+=1
 return int(str(j*j)[len(str(i)):])
q=r(int(input()))
while math.sqrt(q)%1!=0:q=r(q)
print(q**.5)

আপনি সংক্ষিপ্ত করে সংখ্যক বাইট সংরক্ষণ করতে math.sqrtপারেন m
আর্কটরাস

@ আম্পোরা আঃ হ্যাঁ, 2 বাইট সংরক্ষণ করা হয়েছে
ThereGoesMySanity

1

ব্র্যাচল্যাগ , 26 বাইট

{~a₀X√ℕ∧YcX∧Yh?∧Ybcℕ≜!}ⁱ√ℕ

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

শেষ পরীক্ষার কেস টিআইও লিঙ্কে বাদ দেওয়া হয়েছিল কারণ এটি কার্যকর করতে একা এক মিনিটেরও বেশি সময় নেয়। আমি এটি আমার ল্যাপটপে চালিয়েছি এবং সঠিক ফলাফলটি দুই ঘণ্টারও বেশি সময়ে অর্জন করা হয়েছিল।

{                             The input
 ~a₀                          is a prefix of
    X√                        X, the square root of which
      ℕ                       is a whole number.
       ∧YcX                   Y concatenated is X.
           ∧Yh?               The input is the first element of Y.
               ∧Yb            The rest of Y,
                  c           concatenated,
                      }       is the output
                   ℕ          which is a whole number.
                    ≜         Make sure that it actually has a value,
                     !        and discard all choice points.
{                     }ⁱ      Keep feeding that predicate its own output until
                        √     its output's square root
                         ℕ    is a whole number
                              which is the output.

দ্বিতীয় ইন-শেষটি যখন প্রাথমিক ইনপুটটি ইতিমধ্যে একটি নিখুঁত বর্গক্ষেত্রের জন্য প্রয়োজনীয়, সুতরাং এটির জন্য প্রথম নিখুঁত বর্গক্ষেত্র যা উপসর্গ হিসাবে রয়েছে এটি নিজেই এবং !এটি নিশ্চিত করে নেওয়া উচিত যে বৃহত সংক্ষিপ্ত বর্গক্ষেত্রের পরিবর্তে ব্যাকট্র্যাকিং পুনরাবৃত্তি হবে, তবে কেন প্রয়োজনীয় তা আমি সত্যিই জানি না , আমি কেবল জানি যে এটি 5 ছাড়া একটি ভুল উত্তর দেয় produces


(পার্সারের একটি বাগের জন্য ধন্যবাদ, নামযুক্ত ভেরিয়েবল এবং গুলিগুলির যে ভয়ঙ্কর জগাখিচুড়ি স্যান্ডউইচ ব্যবহার করার চেয়ে আসলে খাটো))
সম্পর্কিত নয় স্ট্রিং

0

পার্ল 6 , 101 বাইট

my&q={$^k;$_=({++($||=$k.sqrt.Int)**2}.../^$k/)[*-1];+S/$k//}
put (q(get),&q...!(*.sqrt%1))[*-1].sqrt
my &q = {
  $^k; # declare placeholder parameter
  # set default scalar to:
  $_ = ( # a list
    # code block that generates every perfect square
    # larger than the input
    { ++( $ ||= $k.sqrt.Int )**2 }
    ...   # produce a sequence
    /^$k/ # ending when it finds one starting with the argument
  )[*-1]; # last value in sequence

  # take the last value and remove the argument
  # and turn it into a number to remove leading zeros
  +S/$k//
}

put (     # print the result of:
  q(get),     # find the first candidate
  &q          # find the rest of them
  ...         # produce a sequence
  !(*.sqrt%1) # ending with a perfect square
)[*-1]        # last value in sequence
.sqrt         # find the sqrt

0

ES7, 116 বাইট

n=>{do{for(i=n;!(r=(''+Math.ceil((i*=10)**0.5)**2)).startsWith(+n););n=r.replace(+n,'');r=n**0.5}while(r%1);return r}

হ্যাঁ, আমি সম্ভবত ব্যবহার করে একটি বাইট সংরক্ষণ করতে পারি eval

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