पूर्णांक को वर्ग अंक-रकम के साथ लौटाएं


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
अच्छी पहली चुनौती, और साइट पर आपका स्वागत है!
DJMcMayhem

भविष्य की चुनौतियों के लिए सैंडबॉक्स पर ध्यान दें । यह एक ऐसी जगह है जहाँ हम चुनौतियों को सामने रखते हैं, जब हम उन्हें मुख्य साइट पर रखते हैं ताकि हे की समीक्षा की जा सके और उनकी सामग्री को बुझाया जाए ताकि वे (उम्मीद) मुख्य पर बेहतर प्राप्त करें। ऐसा नहीं है कि यह एक बुरा सवाल है (मैं वास्तव में इसे बहुत पसंद करता हूं)
ब्लू

@muddyfish, मैंने इस बारे में पढ़ा है और वहां पोस्ट करने पर विचार किया है, लेकिन इसे नहीं करने का फैसला किया है, क्योंकि मुझे भरोसा था, कि यहाँ कुछ भी नहीं छूट सकता है / बुरी तरह से यहाँ गलत है :) बेशक अगर मुझे भी कुछ संदेह है तो कुछ हो सकता है मुझे याद है मैं वहाँ पोस्ट करूँगा।
SEJPM

12
हालांकि यह सैंडबॉक्स से बचने के लिए पूरी तरह से ठीक है, क्या आपने वहां पोस्ट किया था मैंने सुझाव दिया था कि आप केवल एक व्यक्तिगत पूर्णांक के परीक्षण के बारे में चुनौती देते हैं। दिलचस्प कार्य परीक्षण है, उस कार्य को एक फ़िल्टर के साथ लपेटना विशेष रूप से दिलचस्प नहीं है। ऐसा लगता है कि सभी गूढ़ भाषाओं में चुनौती को और अधिक कठिन बना दिया है, जिसमें प्रकार के रूप में सरणियाँ नहीं हैं। यह थोड़ा कठोर लग सकता है, लेकिन यह अभी भी एक उत्कृष्ट पहली पोस्ट है। सिर्फ यह कहते हुए कि सैंडबॉक्स वहाँ है क्योंकि कोई फर्क नहीं पड़ता कि आप सुनिश्चित हैं कि आप कुछ भी याद नहीं करते थे, आपने कुछ याद किया।
FryAmTheEggman

1
@FryAmTheEggman मैं मैथेमेटिका के लिए कह सकता हूं कि इस फ़ंक्शन को सूचीबद्ध करने से चीजें थोड़ा गैर-तुच्छ तरीके से जटिल हो जाती हैं, इसलिए यह बिल्कुल उबाऊ नहीं है।
LLLAMnYP

जवाबों:



5

गणितज्ञ, ३ ९ ३६ बाइट्स

एक अनाम फ़ंक्शन:

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

LLlAMnYP ने एक बाइट को बचाया। धन्यवाद!

मार्टिन Ender की जगह तीन और बचाया IntegerQसाथ AtomQ। चतुर! (इसका परिणाम सटीक होगा, इसलिए यह एक यौगिक अभिव्यक्ति देता है जैसे Sqrt[5]कि इसका तर्क एक वर्ग नहीं है।)


एक बाइट के ...Digits@#&बजाय...Digits[#]&
LLlAMnYP


4

Brachylog v2, 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

इसका &मतलब है कि तत्व आउटपुट इनपुट सूची में समान हैं, लेकिन ब्लॉक के इनपुट में वर्ग संख्या नहीं होने पर यह त्रुटि हो जाएगी, इसलिए हमें गैर-वर्ग अंक वाले तत्वों के साथ इनपुट सूची प्राप्त होती है।

ध्यान दें कि पहली बार में यहाँ एक फ्लोटिंग पॉइंट अशुद्धि मुद्दा प्रतीत हो सकता है (कुछ बहुत बड़े गैर-वर्ग पूर्णांक में पूर्णांक के कारण पूर्णांक वर्गमूल होते हैं)। हालांकि, ब्रेकीलॉग बिग्नम अंकगणित का समर्थन करता है, और वास्तव में इस व्यवहार को इसके कार्यान्वयन में निहित किया गया है : एक संख्या जो एक पूर्ण वर्ग है उसके पूर्णांक को एक पूर्णांक के रूप में रिपोर्ट किया जाएगा, जबकि एक संख्या जो एक पूर्ण वर्ग नहीं है (लेकिन उसके करीब है) वर्गमूल अभिन्न है) इसकी वर्गमूल एक अभिन्न मान के साथ एक फ्लोट के रूप में रिपोर्ट की जाएगी। आसानी से, केवल पूर्ववर्ती रिटर्न वैल्यू की अनुमति देता है, जो बाद के लिए जोर देता है।



3

CJam, 14 बाइट्स

एक बाइट बचाने के लिए @FryAmTheEggman को धन्यवाद!

{{Ab:+mq_i=},}

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

यह एक अनाम ब्लॉक है जो स्टैक पर इनपुट सूची की अपेक्षा करता है और उस पर फ़िल्टर की गई सूची को छोड़ देता है।

व्याख्या

{e # एक नया ब्लॉक शुरू करें
 Ab e # को आधार 10 -> अंकों में विभाजित संख्या में बदलें
 : + ई # योग वें अंक
 mq e # वर्गमूल प्राप्त करें
 _ ई # परिणाम का डुप्लिकेट
 यानी # पूर्णांक में कनवर्ट करें
 = e # जांच करें कि परिवर्तित वर्गमूल और मूल एक समान हैं या नहीं
} ई # अंत ब्लॉक
, ई # इनपुट सूची को फ़िल्टर करें

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]

काफी निष्कपट; मंजिल और (sqrt (y)) ^ 2 == y अगर अंकों और चेक की राशि की गणना करता है

संपादित करें: सी। क्विली से वर्गों की सूची की जांच का विचार चुरा लिया


2
दिलचस्प दृष्टिकोण। मुझे यकीन नहीं है कि f=इस उत्तर के लिए आवश्यक है।
माइकल क्लेन

3

05AB1E, 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

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

संपादित करें: @ Adnan के लिए 9 बाइट्स सहेजे गए


प्रत्येक के लिए अंकों का योग प्राप्त करने के लिए, आप vySOतुरंत कर सकते हैं और जांच सकते हैं कि यह वर्ग है या नहीं। मुझे यह 5: मिला tDï->। एक विशेष बिलिन भी है जो प्रिंट के yबराबर होता है 1, जो कि ( ) है। तो, यह होगा vySOtDï->—
अदनान

@ अदनान: मैं विश्वास नहीं कर सकता कि मैं एस के बारे में भूल गया था। मैंने भी नहीं देखा - चूंकि कार्य ने एक सूची के रूप में आउटपुट करने के लिए कहा था, लेकिन मुझे लगता है कि अन्य उत्तर भी वही कर रहे हैं, इसलिए मुझे लगता है कि यह ठीक है।
इमीना

हां, जब तक चुनौती स्पष्ट रूप से नहीं कही जाती है, तब तक मुझे अलग-अलग आइटमों को अलग-अलग रूप में स्वीकार किया जाता है।
अदनान

3

आर , 57 55 बाइट्स

Filterवेक्टर पर उपयोग करें । 32 बिट पूर्णांकों को मानता है तो अधिकतम 10 अंक।

कोने के मामले: NULLखाली वेक्टर के लिए और numeric(0)बिना किसी वैध संख्या वाले वेक्टर के लिए। इन दोनों की लंबाई शून्य है इसलिए स्वीकार्य होना चाहिए।

-2 @Giuseppe को धन्यवाद

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

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


3

पॉवरशेल , 64 54 बाइट्स

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

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

-10 बाइट्स mazzy के लिए धन्यवाद

कमांड-लाइन तर्कों के रूप में इनपुट लेता है (नीचे उदाहरण देखें), जो कि सरणी में पावरशेल में संसाधित हो जाता है $args। हम अपने आउटपुट का चयन करने के ?लिए Where-Object(जैसे कार्यों के लिए filter) एक उपनाम के लिए पाइप करते हैं । हमारा चयन अंकों[math]::Sqrt() के अंकों के योग के .NET कॉल पर आधारित होता है !(...%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)

यहाँ कोशिश करो!

एक वर्ग संख्या के लिए जाँच करने के लिए eval के कुछ दुरुपयोग, बाकी बहुत स्पष्ट है।
Eval स्टेटमेंट sum(map(int,n ))**.5==int(sum(map(int,n का मूल्यांकन करता है))**.5)


2

Oracle SQL 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]

Ideone पर इसका परीक्षण करें ।


1
इसके लिए f([1111111111111111]), ऐसा लगता है कि repr(n)इसमें ए है 'L'और int('L')फेंकता है ValueError। मुझे लगता है कि आप str(n)यहाँ की जरूरत है?
लिन

2
ठीक है, यह लंबे समय तक काम नहीं करेगा। मुझे नहीं लगता कि यह निश्चित-चौड़ाई वाले पूर्णांकों वाली भाषा के समाधान से भिन्न है।
डेनिस

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
आप 2 बाइट को बचाने के f&.gलिए g, फिर f, और फिर gछोटा *:@<.@%:करने के व्युत्क्रम का उपयोग कर सकते हैं <.&.%:। आप इसे पुनर्व्यवस्थित कर सकते हैं और #~[:(=<.)@%:+/"1@(10&#.inv)27 बाइट्स के लिए जहाँ 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 मैं नहीं बदल सकते - +
Bálint

2

पर्ल 5, 42 बाइट्स

41, प्लस 1 के -peबदले-e

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

स्पष्टीकरण:

  • -pएक नई लाइन पर प्रत्येक इनपुट पूर्णांक प्राप्त करता है $_और उस स्ट्रिंग को असाइन करता है।
  • my$s$sप्रत्येक इनपुट पूर्णांक के लिए कुछ भी नहीं चर को आरंभीकृत करता है ।
  • map$s+=$_,/./gप्रत्येक संख्यात्मक चरित्र को पकड़ता है और संख्यात्मक रूप से इसे जोड़ता है $s। (न्यूलाइन होने पर न्यूलाइन बन जाती है।)
  • sqrt$s==~~sqrt$sपरीक्षण है कि क्या $sएक nonintegral वर्गमूल है, और उस परीक्षण के आधार पर खुद या खाली स्ट्रिंग में $_ x=बनाता है $_
  • -p प्रिंट $_

तीन बाइट बचाने के लिए ब्रैड गिल्बर्ट b2gills का धन्यवाद ।

साथ ही 41 प्लस 1:

my$s;s/./$s+=$&/ger;$_ x=sqrt$s==~~sqrt$s
  • s/./$s+=$&/gerप्रत्येक संख्यात्मक चरित्र को जोड़ता है $s(और नईलाइन उपरोक्त के रूप में 0 है)

2

जावास्क्रिप्ट (Node.js) , 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

MATL, 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

MATLAB, 52 43 42 बाइट्स

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

एक अनाम फ़ंक्शन बनाता ansहै जिसे इनपुट के रूप में एक सरणी के साथ कहा जा सकता है ans([22228,4,113125,22345]):।

ऑनलाइन डेमो । ऑनलाइन डेमो ऑक्टेव में है जो खाली इनपुट के लिए काम नहीं करता है, लेकिन MATLAB करता है।

व्याख्या

हम इनपुट एरीमेंट में प्रत्येक एलीमेंट को बेस 10 में परिवर्तित करते हैं, जिसमें 2 डी कैरेक्टर एरे की पैदावार होगी जहां प्रत्येक पंक्ति में एरे में एक संख्या के अंक होते हैं। इन वर्णों को संख्याओं में बदलने के लिए, हम 48 (ASCII for '0') घटाते हैं । हम फिर पंक्तियों में योग करते हैं, वर्गमूल लेते हैं, और यह निर्धारित करते हैं कि क्या प्रत्येक मान एक पूर्ण वर्ग है ~mod 1। हम इनपुट बाइल को फ़िल्टर करने के लिए इस बूलियन का उपयोग करते हैं।


1

क्लोजर, 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 बाइट्स सहेजे गए, @ user6188402
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

रेटिना , ६ ९

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

। +
$ & एक $ &
+ `\ B \ घ
$ * ख 


\ bb
$ &:
+ `(\ Bb +) :( bb \ 1)
$ 1 $ 2:
G` (: एक | 0 $)
।*ए

इनपुट एक न्यूलाइन-सेपरेटेड लिस्ट है।

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

  • चरण 1 - प्रत्येक पंक्ति पर संख्या को दोहराएं और साथ अलग करें a
  • स्टेज 2 - प्रत्येक अंक aको bएस के रूप में व्यक्त की गई एकता से पहले परिवर्तित करें , रिक्त स्थान के साथ अलग किया गया
  • चरण 3 - रिक्त स्थान निकालें - प्रत्येक यूरीआई अब अंक योग का प्रतिनिधित्व करता है
  • चरण 4 और 5 - इस तथ्य का उपयोग करें कि पूर्ण वर्ग 1 + 3 + 5 + 7 + ... व्यक्त किया जा सकता है। हर एक को तदनुसार विभाजित करें
  • स्टेज 6 - grep फ़िल्टर वही होता है जो वास्तव में उपरोक्त रूप में विभाजित होता है
  • स्टेज 7 - मूल संख्या को छोड़ दें

मेरे पास कुछ विचार थे कि इसे कैसे बेहतर बनाया जाए, लेकिन इसमें से अधिकांश को फिर से लिखना है। फिर भी, यह अभी भी आपके विचार के समान है: डुप्लिकेट इनपुट, पहले हाफ में अंकों का विस्तार, विषम संख्याओं के रूप में फिल्टर वर्ग, शेष लाइनों के पहले आधे को त्यागें। जिस तरह से मैंने कदम रखा है वह है -संक्रमण %, \Gऔर आगे के संदर्भ। इसे बेझिझक लें: retina.tryitonline.net/… :)
मार्टिन

1

पायथन, 50 बाइट्स

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

यदि n संख्याओं की इनपुट सूची है


1
नमस्कार, और साइट पर आपका स्वागत है! चूंकि यह एक कोड-गोल्फ प्रतियोगिता है, उदाहरण के लिए जो सबसे छोटा कोड लिख सकता है, हमें कम से कम कुछ हद तक गोल्फ के लिए सभी प्रस्तुतियाँ की आवश्यकता होती है । हमारे यहाँ अजगर गोल्फ युक्तियाँ की एक सूची है । मेरे सिर के ठीक ऊपर, एक स्पष्ट सुधार जो आप कर सकते थे, वह है कि सभी अतिरिक्त व्हाट्सएप को हटा दें, और अपने चर को एक अक्षर में बदल दें। आप कमांड लाइन तर्कों के बजाय फ़ंक्शन तर्क या STDIN के रूप में भी इनपुट ले सकते हैं।
DJMcMayhem

आपको भाषा और बाइट गिनती भी निर्दिष्ट करनी चाहिए, जिसे गिना जा सकता है, उदाहरण के लिए, वहाँ
निकेल

1
PPCG में आपका स्वागत है! दूसरों ने जो कहा, उसके अलावा, कृपया ध्यान दें कि सभी समाधान पूर्ण कार्यक्रम या कॉल करने योग्य कार्य होने चाहिए । अब तक, आपके सभी उत्तर स्निपेट हैं, जो मानते हैं कि इनपुट कुछ चर में संग्रहीत है और परिणाम का मूल्यांकन करते हैं, जो दुर्भाग्य से उन्हें अमान्य बनाता है। स्वीकार्य I / O विधियों के लिए, यह मेटा पोस्ट देखें ।
मार्टिन एंडर


1

के (ओके) , 19 17 13 बाइट्स

समाधान:

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

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

स्पष्टीकरण:

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

टिप्पणियाँ:

  • वर्गों को पहचानने के स्मार्ट तरीके से -2 बाइट्स
  • -4 बाइट्स ngn के लिए धन्यवाद

1
आप फ़िल्टर केfunc#list बारे में जानते हैं ( ) ?
ngn 14'18

मैंने नहीं किया, बहुत अच्छा!
सड़क पर

1

मैथॉल्फ , 5 4 बाइट्स

gÅΣ°

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

स्पष्टीकरण:

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

मैथॉल्फ अभी भी विकास में है, इसलिए मुझे लगता है कि पहले बाइट को हटाने के लिए निहित इनपुट जल्द ही आ रहा है। वाह!


मेरे द्वारा नहीं पहले MathGolf जवाब पर बधाई! मैंने Emigna के साथ निहित इनपुट पर चर्चा की है, और उसने मुझे कुछ महान विचार दिए हैं। यह आ रहा है, उम्मीद है कि जल्द ही।
अधिकतम
हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.