বর্গ অঙ্কের অঙ্কগুলির সাথে পূর্ণসংখ্যাগুলি ফেরত দিন


31

ভূমিকা এবং .ণ

কোনও সংখ্যা 11 বা 3 দ্বারা বিভাজ্য কিনা তা পরীক্ষা করার জন্য আমরা আমাদের অসাধারণ নিয়মগুলি জানি এবং ভালোবাসি যা সংখ্যার অঙ্কগুলির চেয়ে কিছুটা চালাক যোগফল। এখন এই চ্যালেঞ্জটি আপনাকে ডিজিটের যোগফল গণনা করে প্রয়োজনীয় ফলাফলটি একটি নিখুঁত পূর্ণসংখ্যা বর্গক্ষেত্র কিনা তা পরীক্ষা করে এটি একটি নতুন স্তরে নিয়ে যায়, যার মধ্যে সাধারণত কোনও পরিচালনা খুব ছোট করা যায় না। যেহেতু এই সম্পত্তিটি কোনও সংখ্যার দিকে তাকানোর সময় দেখতে খুব শক্ত, তাই আমরা এটি চাই যে সংখ্যার সম্পূর্ণ তালিকার জন্য এটি করা হোক যাতে আমরা মানুষের কাজ বাঁচাতে পারি। সুতরাং এটি এখন আপনার চ্যালেঞ্জ!

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

সবিস্তার বিবরণী

ইনপুট

আপনার ইনপুটটি কোনও মানক I / O ফর্ম্যাটে অ-নেতিবাচক পূর্ণসংখ্যার তালিকা।
আপনার ভাষার প্রয়োজন অনুসারে আপনি তালিকা ফর্ম্যাটটি চয়ন করতে পারেন

আউটপুট

আউটপুটটি কোনও মানক I / O ফর্ম্যাটে পূর্ণসংখ্যার একটি তালিকা।

কি করো?

ইনপুট তালিকা যার জন্য ডিজিটের যোগফল থেকে পূর্ণসংখ্যা আউট ফিল্টার নয় (একটি পূর্ণসংখ্যা এর) এএ বর্গক্ষেত্র।
উপাদানের ক্রম পরিবর্তন করা হতে পারে, যেমন যদি আপনি পেতে [1,5,9]আপনি পারে না আসতে[9,1]

সম্ভাব্য কোণার কেস

0 হয় একটি অ-নেতিবাচক পূর্ণসংখ্যা এবং এইভাবে একটি বৈধ ইনপুট এবং 0 একটি বৈধ পূর্ণসংখ্যা রুট, একটি পূর্ণসংখ্যা বর্গ হিসাবে 0 গন্য যেমন হয়।
খালি তালিকাটি একটি বৈধ ইনপুট এবং আউটপুটও।

কে জিতলো?

এটি কোড-গল্ফ তাই বাইটের সংক্ষিপ্ত উত্তরটি জিতেছে!
স্ট্যান্ডার্ড নিয়ম অবশ্যই প্রয়োগ করা হয়।

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

[1,4,9,16,25,1111] -> [1,4,9,1111]
[1431,2,0,22,999999999] -> [1431,0,22,999999999]
[22228,4,113125,22345] -> [22228,4,22345]
[] -> []
[421337,99,123456789,1133557799] -> []

ধাপে ধাপে উদাহরণ

Example input: [1337,4444]
Handling first number:
Sum of the digits of 1337: 1+3+3+7=14
14 is not an integer square, thus will be dropped!
Handling second number:
Sum of the digits of 4444: 4+4+4+4=16
16 is an integer square because 4*4=16, can get into the output list!
Example output: [4444]

11
চমৎকার প্রথম চ্যালেঞ্জ, এবং সাইটে আপনাকে স্বাগতম!
ডিজেএমসিএমহেম

ভবিষ্যতের চ্যালেঞ্জগুলির জন্য স্যান্ডবক্সটি নোট করুন । এটি এমন এক জায়গায় যেখানে আমরা তাদেরকে মূল সাইটে রাখার আগে আমরা চ্যালেঞ্জগুলি রেখেছি যাতে ওরে পর্যালোচনা করা যায় এবং তাদের বিষয়বস্তু অনুসন্ধান করা যায় যাতে তারা (আশা করা যায়) মূলত আরও ভালভাবে পাবে। যদিও এটি একটি খারাপ প্রশ্ন নয় (যদিও আমি আসলে এটি বেশ পছন্দ করি)
ব্লু

@ মুডিফিশ, আমি এটি সম্পর্কে পড়েছি এবং সেখানে পোস্টিংয়ের বিষয়টি বিবেচনা করেছি তবে সিদ্ধান্ত নেওয়ার সিদ্ধান্ত নিয়েছি, কারণ আমি আত্মবিশ্বাসী ছিলাম যে এখানে আমি ভয়াবহভাবে ভুল / করণীয় কিছুই করতে পারব না :) অবশ্যই আমার যদি কিছুটা সন্দেহ থাকে তবে কিছু থাকতে পারে আমি মিস করছি আমি সেখানে পোস্ট করব।
SEJPM

12
যদিও এটি স্যান্ডবক্স এড়ানোর জন্য পুরোপুরি ঠিক আছে, আপনি যদি সেখানে পোস্ট করেন তবে আমি আপনাকে পরামর্শ দিয়েছিলাম যে আপনি কেবলমাত্র একটি পৃথক পূর্ণসংখ্যা পরীক্ষা করার বিষয়ে চ্যালেঞ্জটি তৈরি করেন। আকর্ষণীয় কাজটি পরীক্ষা, কোনও কাজটি ফিল্টার দিয়ে মোড়ানো বিশেষ আকর্ষণীয় নয়। এটি যা করতে পারে তা হ'ল প্রকারভেদ ভাষাগুলিতে যে ধরণের অ্যারে নেই সেগুলি চ্যালেঞ্জকে যথেষ্ট পরিমাণে আরও কঠিন করে তুলছে। এটি কিছুটা কঠোর মনে হতে পারে তবে এটি এখনও একটি দুর্দান্ত প্রথম পোস্ট। কেবল বলছিলাম যে স্যান্ডবক্স রয়েছে কারণ আপনি যতটা নিশ্চিত যে আপনি কোনও কিছুই মিস করেন নি, আপনি কিছু মিস করেছেন।
FryAmTheEggman

1
@ ফ্রাইআম দ্য এজিগম্যান আমি ম্যাথমেটিকার পক্ষে বলতে পারি যে এই ফাংশনটিকে তালিকাভুক্ত করে তোলা বিষয়গুলিকে কিছুটা তুচ্ছ-তুচ্ছভাবে জটিল করে তোলে, তাই এটি একেবারে বিরক্তিকর নয়।
LLlAMnYP

উত্তর:



5

গণিত, 39 36 বাইট

একটি বেনামী ফাংশন:

Select[AtomQ@√Tr@IntegerDigits@#&]

LLlAMnYP একটি বাইট সংরক্ষণ করেছে। ধন্যবাদ!

মার্টিন Ender প্রতিস্থাপন তিনটি সংরক্ষিত IntegerQসঙ্গে AtomQ। চতুর! (ফলাফলটি সঠিক হবে, সুতরাং এটির যৌগিক প্রকাশটি ফিরে আসে Sqrt[5]যেমন এর যুক্তিটি বর্গাকার না হয় isn't)


এর ...Digits@#&পরিবর্তে একটি বাইট সংরক্ষণ করা হবে...Digits[#]&
LLlAMnYP


4

ব্র্যাচল্যাগ ভি 2, 8 বাইট

{ẹ+√ℤ&}ˢ

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

ব্যাখ্যা

{ẹ+√ℤ&}ˢ
{     }ˢ  Map the following operation over {the input}, discarding elements that error:
 ẹ         Split into a list of digits
  +        Sum that list
   √       Take its square root
    ℤ      Assert that the result is an integer
     &     Return to the original value

এর &অর্থ এই যে উপাদানগুলির আউটপুট ইনপুট তালিকার মতো একই, তবে ব্লকের ইনপুটটি বর্গ সংখ্যা না হলে উইল ত্রুটিযুক্ত হয়ে যায়, তাই আমরা বর্গক্ষেত্রের অংকযুক্ত অঙ্কগুলি ফেলে দেওয়া উপাদানগুলির সাথে ইনপুট তালিকাটি পাই।

মনে রাখবেন যে প্রথমে এখানে ভাসমান পয়েন্টের অসম্পূর্ণতা সমস্যা মনে হতে পারে (কিছু খুব বড় অ-বর্গাকার পূর্ণসংখ্যার বৃত্তাকার কারণে পূর্ণসংখ্যার বর্গাকার শিকড় থাকে)। যাইহোক, ব্র্যাচলগ বিগনাম পাটিগণিতকে সমর্থন করে এবং বাস্তবে এর ব্যবহারটি বাস্তবায়নের ক্ষেত্রে এই আচরণটি প্রমাণিত করে : একটি সংখ্যা যা একটি নিখুঁত বর্গ হয় তার বর্গমূলটি পূর্ণসংখ্যার হিসাবে রিপোর্ট করা হবে, তবে এমন একটি সংখ্যা যা একটি নিখুঁত বর্গ নয় (তবে যথেষ্ট পরিমাণে এটির কাছাকাছি স্কোয়ার রুট ইন্টিগ্রাল) এর স্কোয়ার রুটটি অবিচ্ছেদ্য মান সহ ভাসমান হিসাবে রিপোর্ট করা হবে। সুবিধার্থে, কেবল পূর্ববর্তী ধরণের রিটার্ন মানকে অনুমতি দেয়, পরবর্তীগুলির জন্য দৃ failure়তা ব্যর্থতা দেয়।



3

সিজেম, 14 বাইট

একটি বাইট বাঁচানোর জন্য @ ফ্রিআমএটিজিমনকে ধন্যবাদ!

{{Ab:+mq_i=},}

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

এটি একটি নামবিহীন ব্লক যা স্ট্যাকের ইনপুট তালিকাটি প্রত্যাশা করে এবং এতে পরিশোধিত তালিকা রেখে দেয় leaves

ব্যাখ্যা

# ই # একটি নতুন ব্লক শুরু করুন
 Ab e # বেস 10 -> বিভক্ত সংখ্যাটিকে অঙ্কগুলিতে রূপান্তর করুন
 : + ই # যোগ তম সংখ্যা
 বর্গমূল পেতে এমকিউ ই #
 _ ই # ফলাফলটির নকল করুন
 অর্থাৎ # পূর্ণসংখ্যায় রূপান্তর করুন
 = ই # রূপান্তরিত বর্গমূল এবং আসলটি সমান কিনা তা পরীক্ষা করে দেখুন
# ই # শেষ ব্লক
, এবং # ইনপুট তালিকা ফিল্টার করুন

3

হাস্কেল - 70 60 59 বাইট

f=filter(\x->elem(sum.map(read.pure).show$x)$map(^2)[0..x])

ব্যবহার:

> f [0..100]
[0,1,4,9,10,13,18,22,27,31,36,40,45,54,63,72,79,81,88,90,97,100]

বেশ সোজা; মেঝে (বর্গক্ষেত্র (y)) ^ 2 == y হলে অঙ্কগুলি এবং চেকগুলির যোগফলের গণনা করে

সম্পাদনা: সি কুইলির কাছ থেকে স্কোয়ারগুলির তালিকা চেক করার ধারণাটি চুরি করেছে


2
আকর্ষণীয় পদ্ধতির। আমি নিশ্চিত নই যে f=এই উত্তরের জন্য প্রয়োজনীয় আবশ্যক।
মাইকেল ক্লিন

3

05 এ বি 1 ই , 19 10 বাইট

vySOtDï->—

ব্যাখ্যা

vy                     # for each int in list
  SO                   # digit sum
    tDï-               # difference between sqrt() and int(sqrt())
        >              # increase by 1 giving 1 (true) when equal
         —             # print current int in list if truthy

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

সম্পাদনা করুন: @ আদনানকে 9 টি বাইট সংরক্ষণ করা হয়েছে


প্রত্যেকটির জন্য সংখ্যার যোগফল পাওয়ার জন্য, আপনি এটি করতে পারেন vySOএবং অবিলম্বে এটি বর্গক্ষেত্রের কিনা তা পরীক্ষা করতে পারেন। আমি 5 এই করেছেন: tDï->। এখানে একটি বিশেষ বিল্টিন রয়েছে যা yসমান হলে মুদ্রণ করে 1, যা ( )। সুতরাং, যে হবে vySOtDï->—
আদনান

@ আদনান: আমি বিশ্বাস করতে পারি না যে আমি এস সম্পর্কে ভুলে গিয়েছি I আমি এমনকি তার দিকেও তাকাইনি - যেহেতু কাজটি তালিকা হিসাবে আউটপুট দেওয়ার কথা বলেছিল, তবে আমি দেখতে পাচ্ছি অন্যান্য উত্তরগুলিও তাই করছে তাই আমি ধরে নিলাম এটি ঠিক আছে।
এমিগানা

হ্যাঁ, নতুন লাইনের সাথে পৃথক করা আইটেমগুলি ডিফল্টরূপে গ্রহণ করা হয় বলে আমি মনে করি, যদি না চ্যালেঞ্জটি স্পষ্টভাবে না বলে থাকে।
আদনান

3

আর , 57 55 বাইট

Filterভেক্টর ব্যবহার করুন। 32 বিট পূর্ণসংখ্যা ধরে তাই 10 সংখ্যার সর্বোচ্চ হিসাবে ধরে নেওয়া হয়।

কর্নারের কেস: NULLখালি ভেক্টর এবং numeric(0)বৈধ সংখ্যা সহ কোনও ভেক্টরের জন্য ফেরত দেয় । এই উভয়ের দৈর্ঘ্য শূন্য তাই গ্রহণযোগ্য হওয়া উচিত।

-২ জিউস্প্পকে ধন্যবাদ

Filter(function(n)!sum(n%/%10^(0:10)%%10)^.5%%1,scan())

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


3

পাওয়ারশেল , 64 54 বাইট

$args|?{!([math]::Sqrt(([char[]]"$_"-join'+'|iex))%1)}

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

-10 বাইট মজির ধন্যবাদ

কমান্ড-লাইন আর্গুমেন্ট হিসাবে ইনপুট নেয় (নীচের উদাহরণগুলি দেখুন), যা পাওয়ারশেলের মাধ্যমে অ্যারেতে প্রক্রিয়াজাত হয় $args। আমাদের আউটপুট নির্বাচন করার ?জন্য আমরা এটি একটি উপনামের Where-Object(একই ধরণের ফাংশনগুলি filter) পাইপ করি । আমাদের নির্বাচন .NET কল উপর ভিত্তি করে তৈরি [math]::Sqrt()এর অঙ্ক-সমষ্টি সংখ্যা সঙ্গে একটি পূর্ণসংখ্যা !(...%1)। পূর্ণসংখ্যার ফলাফল 0 হয়, যা notএডি হয়ে Trueযখন অ-পূর্ণসংখ্যার শিকড় হয় False

যেমন অন্য কোথাও উল্লেখ করা হয়েছে একটি "খালি অ্যারে" অর্থহীন, কারণ এটি $nullসুযোগ ছাড়ার সাথে সাথে রূপান্তরিত হয় , তাই খালি ইনপুটটির আউটপুট কিছুই নয়।

উদাহরণ

PS C:\Tools\Scripts\golfing> .\return-integers-with-square-digit-sums.ps1 1 4 9 16 25 1111
1
4
9
1111

PS C:\Tools\Scripts\golfing> .\return-integers-with-square-digit-sums.ps1 1431 2 0 22 999999999
1431
0
22
999999999

PS C:\Tools\Scripts\golfing> .\return-integers-with-square-digit-sums.ps1 22228 4 113125 22345
22228
4
22345

PS C:\Tools\Scripts\golfing> .\return-integers-with-square-digit-sums.ps1 

PS C:\Tools\Scripts\golfing> .\return-integers-with-square-digit-sums.ps1 1337 4444
4444

1
$n%1কেবলমাত্র int- এর পরীক্ষা করে$args|?{!([math]::Sqrt(([char[]]"$_"-join'+'|iex))%1)}
mazzy

2

পাইথন 2, 76 বাইট

lambda l:filter(lambda n:eval(("sum(map(int,`n`))**.5==int("*2)[:-6]+")"),l)

এখানে চেষ্টা করুন!

স্কোয়ার সংখ্যার জন্য যাচাই করার জন্য ইভালের কিছু অপব্যবহার, বাকীটি বেশ অনিচ্ছাকৃত।
স্পষ্ট বিবৃতি sum(map(int,n ))**.5==int(sum(map(int,এন যাও মূল্যায়ন))**.5)


2

ওরাকল এসকিউএল 11.2, 213 বাইট

WITH v AS(SELECT a,SQRT(XMLQUERY(REGEXP_REPLACE(a,'(\d)','+\1')RETURNING CONTENT).GETNUMBERVAL())s FROM(SELECT TRIM(COLUMN_VALUE)a FROM XMLTABLE(('"'||REPLACE(:1,',','","')||'"'))))SELECT a FROM v WHERE s=CEIL(s);

আন golfed

WITH v AS
(  
  SELECT a,SQRT(XMLQUERY( 
                   REGEXP_REPLACE(a,'(\d)','+\1')  -- Add a + in front of each digit 
                   RETURNING CONTENT
               ).GETNUMBERVAL())s                  -- Evaluate the expression generated by the added +
  FROM 
  (SELECT TRIM(COLUMN_VALUE)a FROM XMLTABLE(('"'||REPLACE(:1,',','","')||'"'))) -- Split string on ','
)
SELECT a FROM v WHERE s=CEIL(s) -- Is a square if square has no decimal part

2

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

:1f.
e.(:ef+~^[X:2]h>0;.0)

উদাহরণ:

?- run_from_file('code.brachylog',[1431:2:0:22:999999999],Z).
Z = [1431, 0, 22, 999999999]

ব্যাখ্যা

এটি এমন একটি পরিস্থিতি যেখানে কিছুটা খুব ভালভাবে কাজ করে ... ~^[X:2]অংশটি ইতিবাচক এবং নেতিবাচক উভয়ের জন্যই সত্য X, সুতরাং নকলগুলি এড়াতে আমাকে এটি উল্লেখ করতে হবে X > 0

;.0অংশ (গনা পূর্ণসংখ্যা 0 কাজ করে না) একটি বাগ কারণে এখানে।

  • প্রধান শিকারী

    :1f.                Find all values of Input which satisfy predicate 1
    
  • ভবিষ্যদ্বাণী ঘ

    e.                  Unify output with an element of the input
    (
      :ef               Find all elements of Output (i.e. all digits)
         +              Sum the digits
          ~^[X:2]       True if that sum is the result of X², whatever X is
                 h>0    Impose that X > 0
    ;                   OR
      .0                True if Output is 0
    )
    

2

পাইথন 2, 53 বাইট

lambda x:[n for n in x if sum(map(int,`n`))**.5%1==0]

আইডিয়নে এটি পরীক্ষা করুন ।


1
কারণ f([1111111111111111]), দেখে মনে হচ্ছে এটি repr(n)একটি রয়েছে 'L'এবং এটিকে int('L')ছুড়ে ফেলে ValueError। আমার মনে হচ্ছে তোমার str(n)এখানে দরকার ?
লিন

2
ঠিক আছে, এটি দীর্ঘ ints জন্য কাজ করবে না। আমি মনে করি না যদিও এটি নির্দিষ্ট-প্রস্থের পূর্ণসংখ্যার সাথে কোনও ভাষার সমাধান থেকে আলাদা।
ডেনিস

2

জে, 33 27 বাইট

6 মাইল @ মাইল ধন্যবাদ ।

#~[:(=<.)@%:+/"1@(10&#.inv)

অনলাইন দোভাষীগুলিতে, invপ্রশিক্ষিত হয় না। ^:_1পরিবর্তে এটি পরিবর্তন করুন।

ব্যবহার

>> f =: #~[:(=<.)@%:+/"1@(10&#.inv)
>> f 1 4 9 16 25 1111 0
<< 1 4 9 1111 0

কোথায় >>STDIN এবং STDOUT <<হয়।

খানিকটা উজ্জ্বল

to_base_10 =: 10&#.^:_1
sum        =: +/"1
sqrt       =: %:
floor      =: <.
itself     =: ]
equals     =: =
of         =: @
is_integer =: equals floor
test       =: is_integer of sqrt
copies_of  =: #
f =: copies_of~ [: test (sum of to_base_10)

পূর্ববর্তী 33-বাইট সংস্করণ

(]=*:@<.@%:)@(+/"1@(10#.^:_1]))#]

ব্যবহার

>> f =: (]=*:@<.@%:)@(+/"1@(10#.^:_1]))#]
>> f 1 4 9 16 25 1111 0
<< 1 4 9 1111 0

কোথায় >>STDIN এবং STDOUT <<হয়।

খানিকটা উজ্জ্বল

to_base_10 =: 10#.^:_1]
sum        =: +/"1
sqrt       =: %:
floor      =: <.
square     =: *:
itself     =: ]
equals     =: =
of         =: @
test       =: itself equals square of floor of sqrt
copies_of  =: #
f =: (test of (sum of to_base_10)) copies_of itself

1
আপনি f&.gপ্রয়োগ করতে ব্যবহার করতে পারেন g, তারপরে fএবং তারপরে 2 বাইট সংরক্ষণ করার gজন্য সংক্ষিপ্তকরণের বিচ্ছিন্ন করুন। আপনি এটি পুনর্বিন্যাস করতে পারেন এবং যেখানে রয়েছে 27 বাইট পেতে শুধুমাত্র তল ব্যবহার করতে পারেন এবং ইতিমধ্যে সংজ্ঞায়িত করা হয়েছে। *:@<.@%:<.&.%:#~[:(=<.)@%:+/"1@(10&#.inv)inv^:_1
মাইল মাইল

2

জাভাস্ক্রিপ্ট 66 বাইট

a=>a.filter(b=>(e=Math.sqrt((b+"").split``.reduce((c,d)=>c-+-d)))==(e|0))

7 বাইট সংরক্ষণের জন্য সার্জিওএফসি'র জন্য ধন্যবাদ


আপনি কেবল c+dপরিবর্তে ব্যবহার করতে পারবেন না c-+-d? n%1==0ফলস্বরূপ যদি কোন ফলাফল হয় তবে আপনি পরীক্ষার জন্য এটি ব্যবহার করতে পারেন , তাই b=>!(Math.sqrt((b+"").split``.reduce((c,d)=>c-+-d))%1)আপনি ফিল্টার করতে কিছু বাইট সংরক্ষণ করতে পারেন
সার্জিওএফসি

@sergioFC আমি + - - এ + পরিবর্তন করতে পারি না কারণ তারা স্ট্রিং
বুলিন্ট

2

পার্ল 5, 42 বাইট

এর -peপরিবর্তে 41, যোগ 1-e

my$s;map$s+=$_,/./g;$_ x=sqrt$s==~~sqrt$s

ব্যাখ্যা:

  • -pপ্রতিটি ইনপুট একটি নতুন লাইনে পূর্ণসংখ্যা পায় এবং $_সেই স্ট্রিংকে বরাদ্দ করে।
  • my$s$sপ্রতিটি ইনপুট পূর্ণসংখ্যার জন্য নতুনভাবে পরিবর্তনশীলটিকে আরম্ভ করে ।
  • map$s+=$_,/./gপ্রতিটি সাংখ্যিক অক্ষর grabs এবং সংখ্যাসূচকভাবে সেটিকে যোগ করে $s। (নাম্বার যখন নিউলাইন 0 হয়ে যায়।)
  • sqrt$s==~~sqrt$sপরীক্ষার কিনা $sএকটি nonintegral বর্গমূল আছে, এবং $_ x=তোলে $_নিজেই বা খালি যে পরীক্ষা উপর নির্ভর করে স্ট্রিং মধ্যে।
  • -p কপি করে প্রিন্ট $_

তিনটি বাইট সংরক্ষণের জন্য ব্র্যাড গিলবার্ট বি 2 গিলসকে ধন্যবাদ ।

৪১ টি আরও 1:

my$s;s/./$s+=$&/ger;$_ x=sqrt$s==~~sqrt$s
  • s/./$s+=$&/gerপ্রতিটি সংখ্যাসূচক অক্ষর যুক্ত করে $s(এবং নতুনলাইনটি উপরে হিসাবে 0 হয়)

2

জাভাস্ক্রিপ্ট (নোড.জেএস) , 48 বাইট

a=>a.filter(b=>eval([...b+""].join`+`)**.5%1==0)

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

ব্যাখ্যা

a =>                                  // lambda function taking one argument
    a.filter(                         // filter the list
        eval(                         // begin eval
            [...b+""]                 // convert number to array of digits 
                .join`+`              // join them with + sign
            )                         // close eval. we achieved sum of all digits of number
        **.5                          // square root of number
        %1==0                         // check for perfect square
    )                                 // end filter and return value

1

এমএটিএল, 16 14 13 বাইট

"@tV!UsX^1\?x

অনলাইনে চেষ্টা করে দেখুন!

ব্যাখ্যা

        % Implicitly grab input
"       % For each number in the input
  @t    % Get this element and duplicate
  V     % Convert to it's string representation
  !     % Transpose the string so each digit is on it's own row
  U     % Convert each row to a number (separates the digits)
  s     % Compute the sum of the digits
  X^    % Compute the square root
  1\    % mod with 1 to determine if the square root is an integer
  ?x    % If there is a remainder, then remove this element from the stack
        % Implicitly display the stack contents

1

জুলিয়া - 38 বাইট

!X=filter(i->√sum(digits(i))%1==0,X)

এটি কী করে তা দেখতে খুব সহজ। digitsকোনও সংখ্যাকে তার অঙ্কের তালিকায় রূপান্তর করে, sumএভাবে অঙ্ক-যোগফল গণনা করে, তারপর সংখ্যাটি একটি বর্গক্ষেত্রের মতো একটি সম্পূর্ণ সংখ্যা তৈরি করবে, অন্যথায় একটি ভগ্নাংশ হবে। %1কেবল ভগ্নাংশের অংশটি ফিরিয়ে দেবে এবং যদি এটি শূন্য ( ==0) filterহয় তবে এটি তালিকায় রাখবে, অন্যথায় এটি ফিল্টার হয়ে যায়।

হিসাবে ব্যবহার ![22228,4,113125,22345]



1

ম্যাটল্যাব, 52 43 42 বাইট

@(x)x(~mod(sum(dec2base(x,10)'-48).^.5,1))

একটি বেনামী ফাংশন নামে তৈরি করা হয় ansযে ইনপুট হিসাবে একটি অ্যারের সাথে বলা যেতে পারে: ans([22228,4,113125,22345])

অনলাইন ডেমো । অনলাইন ডেমোটি অক্টোবায় রয়েছে যা খালি ইনপুটটির জন্য কাজ করে না, তবে ম্যাটল্যাব তা করে।

ব্যাখ্যা

আমরা ইনপুট অ্যারের প্রতিটি উপাদানকে বেস 10 এ রূপান্তর করি যা একটি 2D অক্ষর অ্যারে উত্পন্ন করবে যেখানে প্রতিটি সারিতে অ্যারেতে একটি সংখ্যার অঙ্ক থাকে। এই অক্ষরগুলিকে সংখ্যায় রূপান্তর করতে আমরা 48 টি (ASCII for '0') বিয়োগ করি । এরপরে আমরা সারিগুলি জুড়ে সমষ্টি করি, বর্গমূল তুলব এবং প্রতিটি মান একটি নিখুঁত বর্গক্ষেত্র কিনা তা নির্ধারণ করি ~mod 1। তারপরে আমরা ইনপুট অ্যারে ফিল্টার করতে এই বুলিয়ানটি ব্যবহার করি।


1

Clojure, 110 বাইট

(fn[t](filter(fn[x](let[a(reduce +(*(count(str x))-48)(map int(str x)))](some #(=(* % %)a)(range(inc a)))))t))

সংখ্যার অঙ্কের যোগফল গণনা করে এবং তার পরে ফিল্টার করে যার জন্য এমন একটি সংখ্যা নেই যা বর্গফলের যোগফলের সমান।

আপনি ফলাফলটি এখানে দেখতে পাবেন - https://ideone.com/ciKOje


1

পার্ল 6 ,  38   35 বাইট

{.grep: {($/=sqrt [+] .comb)==$/.Int}}
{.grep: {($/=.comb.sum.sqrt)==$/.Int}}
{.grep: {($/=sqrt [+] .comb)==^$/}}
{.grep: {($/=.comb.sum.sqrt)==^$/}}

টেস্ট:

#! /usr/bin/env perl6

use v6.c;
use Test;

my @tests = (
  [1,4,9,16,25,1111] => [1,4,9,1111],
  [1431,2,0,22,999999999] => [1431,0,22,999999999],
  [22228,4,113125,22345] => [22228,4,22345],
  [] => [],
  [421337,99,123456789,1133557799] => [],
);

plan +@tests;

my &sq-digit-sum = {.grep: {($/=sqrt [+] .comb)==^$/}}

for @tests -> $_ ( :key($input), :value($expected) ) {
  is sq-digit-sum($input), $expected, .gist
}
1..5
ok 1 - [1 4 9 16 25 1111] => [1 4 9 1111]
ok 2 - [1431 2 0 22 999999999] => [1431 0 22 999999999]
ok 3 - [22228 4 113125 22345] => [22228 4 22345]
ok 4 - [] => []
ok 5 - [421337 99 123456789 1133557799] => []

1

সি, 143 141 বাইট

  • 2 বাইট সংরক্ষণ করা হয়েছে, @ ব্যবহারকারী 6188402
i;q(char*n){double m=0;while(*n)m+=*n++-48;m=sqrt(m)-(int)sqrt(m);return !m;}s(n,s)char**n;{i=-1;while(++i<s)if(q(n[i]))printf("%s\n",n[i]);}

অবহেলিত অনলাইনে চেষ্টা করুন

int q(char*n)
{
    double m=0;

    while(*n) // sum digits
        m+=*n++-48;

    // get the decimal part of its square root
    m=sqrt(m)-(int)sqrt(m);

    // true if decimal part is zero
    return !m;
}

// input is text, can be a file
void s(char**n, int s)
{
    int i=-1;

    while(++i<s) // for each number in input
        if(q(n[i])) // if is square
            printf("%s\n",n[i]); // output is terminal
}

1

রেটিনা , 69

কারণ রেটিনাতে নিখুঁত স্কোয়ারগুলির জন্য পরীক্ষা করা। এটি সাধারণীকরণ পূর্ণসংখ্যার বর্গমূলের গণনার জন্য সংশোধন করা যেতে পারে ।

। + +
$ & একটি $ &
+ + `\ B হল \ ঘ
$ * খ 


\ BB
$ &:
+ + `(\ BB + +) :( BB \ 1)
$ 1 $ 2:
G` (: একটি | 0 $)
। * একটি

ইনপুট একটি নতুন লাইন-বিচ্ছিন্ন তালিকা।

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

  • মঞ্চ 1 - প্রতিটি লাইনের নম্বরটি পুনরাবৃত্তি করুন এবং এর সাথে পৃথক করুন a
  • দ্বিতীয় পর্যায় - স্পেসের সাথে পৃথক করে প্রতিটি aঅঙ্ককে আনারি হিসাবে প্রকাশিত হওয়ার আগে রূপান্তর করুনb
  • পর্যায় 3 - স্পেসগুলি সরিয়ে ফেলুন - প্রতিটি অ্যানারি এখন অঙ্ক অঙ্কের প্রতিনিধিত্ব করে
  • পর্যায় 4 এবং 5 - নিখুঁত স্কোয়ারগুলি 1 + 3 + 5 + 7 + ... প্রকাশ করা যেতে পারে তা ব্যবহার করুন। প্রতিটি unary অনুসারে বিভক্ত
  • মঞ্চ 6 - গ্রেপ ফিল্টার কেবলমাত্র উপরের ফর্মটিতে বিভক্ত
  • মঞ্চ 7 - মূল সংখ্যা ব্যতীত সমস্ত বাতিল করুন

এটি কীভাবে উন্নত করা যায় সে সম্পর্কে আমার কয়েকটি ধারণাগুলি ছিল তবে এটির বেশিরভাগটি পুনরায় লেখা শেষ হয়েছিল। তবুও, এটি এখনও আপনার ধারণা: অনুলিপি ইনপুট, প্রথমার্ধে অঙ্কগুলি প্রসারিত করুন, বিজোড় সংখ্যার যোগফলের আকারে ফিল্টার স্কোয়ারগুলি, বাকি রেখাগুলির প্রথমার্ধটি বাতিল করুন। আমি পদক্ষেপগুলি যেভাবে গল্ফ করেছিলাম তা হল- %কনফিগারেশন \Gএবং ফরোয়ার্ড রেফারেন্সগুলি। এটি নিখরচায় মনে করুন: retina.tryitonline.net/… :)
মার্টিন

1

পাইথন, 50 বাইট

filter(lambda x:sum(map(int,str(x)))**0.5%1==0,in)

যদি এন হয় তবে সংখ্যার ইনপুট তালিকা থাকে


1
হ্যালো, এবং সাইটে আপনাকে স্বাগতম! যেহেতু এটি একটি কোড-গল্ফ প্রতিযোগিতা, উদাহরণস্বরূপ কে সবচেয়ে সংক্ষিপ্ততম কোডটি লিখতে পারে, আমাদের কমপক্ষে কিছুটা গল্ফ হওয়া সমস্ত সাবমিশনের প্রয়োজন । আমাদের এখানে পাইথন গল্ফিং টিপসের একটি তালিকা রয়েছে । আমার মাথার উপরের দিকের সামান্য অংশে, আপনি করতে পারেন তার একটি স্পষ্ট উন্নতি হ'ল সমস্ত অতিরিক্ত শ্বেতস্থান সরিয়ে ফেলুন এবং আপনার ভেরিয়েবলগুলির একটি করে অক্ষরে নতুন নামকরণ করুন। আপনি কমান্ড লাইন আর্গুমেন্টের পরিবর্তে ফাংশন আর্গুমেন্ট বা STDIN হিসাবে ইনপুট নিতে পারেন।
ডিজেএমসিএমহেম

আপনার ভাষা এবং বাইট গণনাও নির্দিষ্ট করা উচিত, যা গণনা করা যেতে পারে, উদাহরণস্বরূপ, সেখানে
নিকেল

1
পিপিসিজিতে আপনাকে স্বাগতম! অন্যরা যা বলেছিল তা ছাড়াও দয়া করে নোট করুন যে সমস্ত সমাধান অবশ্যই সম্পূর্ণ প্রোগ্রাম বা কলযোগ্য ফাংশন । এখনও অবধি, আপনার সমস্ত উত্তর স্নিপেটস রয়েছে যা ধরে নেয় যে ইনপুটটি কিছু পরিবর্তনশীলে সঞ্চিত আছে এবং কেবল ফলাফলটির মূল্যায়ন করে, যা দুর্ভাগ্যক্রমে তাদের অবৈধ করে তোলে। গ্রহণযোগ্য আই / ও পদ্ধতিগুলির জন্য, এই মেটা পোস্টটি দেখুন
মার্টিন ইন্ডার


1

কে (ওকে) , 19 17 13 বাইট

সমাধান:

(~1!%+/.:'$)#

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

ব্যাখ্যা:

(~1!%+/.:'$)# / the solution
(          )# / apply function to list
          $   / convert to string
       .:'    / value (.:) each (')
     +/       / sum
    %         / square-root
  1!          / modulo 1
 ~            / not

নোট:

  • স্কোয়ারগুলি সনাক্ত করার স্মার্ট উপায় সহ -২ বাইট
  • -4 বাইট এনএনজি ধন্যবাদ

1
আপনি ফিল্টারfunc#list সম্পর্কে জানেন ( ) ?
এনজিএন

আমি না, খুব সুন্দর!
স্ট্রিস্টার

1

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

gÅΣ°

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

ব্যাখ্যা:

gÅ    Filter by the next two instructions
  Σ   The digit sum
   °  Is a perfect square?

ম্যাথগল্ফ এখনও বিকাশে রয়েছে, তাই আমি ধরে নিচ্ছি যে প্রথম বাইটটি শেভ করার জন্য অন্তর্নিহিত ইনপুট শীঘ্রই আসছে। হ্যাঁ!


অভিনন্দন প্রথম ম্যাথগল্ফ উত্তর আমার দ্বারা না! আমি এমিগিনার সাথে অন্তর্নিহিত ইনপুট নিয়ে আলোচনা করেছি এবং তিনি আমাকে কিছু দুর্দান্ত ধারণা দিয়েছেন। এটি আসছে, আশা করছি শীঘ্রই।
সর্বোচ্চ
আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.