विषम वर्ग संख्या N से कम है


19

एक लिखें कार्यक्रम या समारोह के लिए उत्पादन का योग अजीब वर्ग संख्या (OEIS # A016754) एक से भी कम समय इनपुट n

अनुक्रम में पहले 44 नंबर हैं:

1, 9, 25, 49, 81, 121, 169, 225, 289, 361, 441, 529, 625, 729, 841, 961, 1089, 
1225, 1369, 1521, 1681, 1849, 2025, 2209, 2401, 2601, 2809, 3025, 3249, 3481, 
3721, 3969, 4225, 4489, 4761, 5041, 5329, 5625, 5929, 6241, 6561, 6889, 7225, 7569

अनुक्रम का सूत्र है a(n) = ( 2n + 1 ) ^ 2

टिप्पणियाँ

  • आपके कार्यक्रम का व्यवहार अपरिहार्य हो सकता है n < 1(यानी, सभी वैध इनपुट हैं >= 1)

परीक्षण के मामलों

1 => 0
2 => 1
9 => 1
10 => 10
9801 => 156849
9802 => 166650
10000 => 166650

1
इस पर करीबी कारणों में से एक चुनौती को बंद करने के लिए वैध कारण नहीं हैं ...
मेगो

जवाबों:


22

जेली, 6 बाइट्स

½Ċ|1c3

इसे ऑनलाइन आज़माएं! या सभी परीक्षण मामलों को सत्यापित करें

पृष्ठभूमि

सभी धनात्मक पूर्णांक k के लिए , हमारे पास 1² + 3⋯ + (+ (2k - 1) k = k (2k - 1) (2k +1)3 है

चूँकि m C r = m हैं! The ((mr)! R!) M तत्वों के एक समूह के r -combments , ऊपर (2k + 1) C 3 = (2k + 1) 2k (2k - 1) + 6 = k (2k) के रूप में गणना की जा सकती है - 1) (2k + 1) k 3।

फार्मूला लागू करने के लिए, हम पाते हैं चाहिए उच्चतम 2k +1 कि इस तरह के ² <n - (1 2k) । एक पल के लिए समता को अनदेखा करते हुए, हम उच्चतम m की गणना कर सकते हैं जैसे कि (m - 1) n <n as m = ceil (srqt (n)) । सशर्त रूप से वेतन वृद्धि मीटर अगर यह भी है, तो बस गणना करें | 1 (बिटवाइज़ या 1 के साथ )।

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

½Ċ|1c3  Main link. Argument: n

½       Compute the square root of n.
 Ċ      Round it up to the nearest integer.
  |1    Bitwise OR with 1 to get an odd number.
    c3  Compute (2k + 1) C 3 (combinations).

6

जावास्क्रिप्ट (ईएस 6), 30 बाइट्स

f=(n,i=1)=>n>i*i&&i*i+f(n,i+2)

31 बाइट्स अगर f(1)झूठ के बजाय शून्य वापस करने की आवश्यकता है:

f=(n,i=1)=>n>i*i?i*i+f(n,i+2):0

6

05AB1E , 10 8 बाइट्स

कोड:

<tLDÉÏnO

स्पष्टीकरण:

<         # Decrease by 1, giving a non-inclusive range.
 t        # Take the square root of the implicit input.
  L       # Generate a list from [1 ... sqrt(input - 1)].
   DÉÏ    # Keep the uneven integers of the list.
      n   # Square them all.
       O  # Take the sum of the list and print implicitly.

काम आ सकता है t;L·<nO:।

CP-1252 एन्कोडिंग का उपयोग करता है । इसे ऑनलाइन आज़माएं!


6

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

f n=sum[x^2|x<-[1,3..n],x^2<n]

आश्चर्यजनक रूप से सामान्य-सी दिख रही है।


4

सी #, 126 131 बाइट्स

नए प्रश्न के अनुरूप संस्करण का संपादन:

class P{static void Main(){int x,s=0,n=int.Parse(System.Console.ReadLine());for(x=1;x*x<n;x+=2)s+=x*x;System.Console.Write(s);}}

हार्डकोड सीमा का उपयोग करना:

using System;namespace F{class P{static void Main(){int x,s=0;for(x=1;x<100;x+=2)s+=x*x;Console.Write(s);Console.Read();}}}

4
प्रोग्रामिंग पहेलियाँ और कोड गोल्फ में आपका स्वागत है! यहाँ उत्तर हेडर के लिए सहमति-स्वरूप प्रारूप # Language name, number bytesस्थिरता के लिए है।
बिल्ली

2
आप आखिर क्यों करते हैं Console.Read?
मार्टिन एंडर

1
namespaceएकल फ़ाइलों के लिए आवश्यक नहीं हैं।
ASCII- केवल

1
System.Console.Write(s);यदि आप यह काम करता है, और यदि आपको इसकी आवश्यकता नहीं है, तो आपको कुछ बाइट्स को बचाने में सक्षम होना चाहिए Console.Read
केवल

2
@ थोमस आप वीएस में अपने प्रोग्राम को Ctrl + F5 के साथ चला सकते हैं जिस स्थिति में प्रोग्राम समाप्त होने के बाद विंडो खुली रहेगी।
मार्टिन एंडर

4

जेली,,

’½R²m2S

इसे ऑनलाइन आज़माएं या कई मूल्यों के लिए संशोधित संस्करण आज़माएं

श ... डेनिस सो रहा है ...

उनकी मदद के लिए चैट में Sp3000 के लिए धन्यवाद!

स्पष्टीकरण:

’½R²m2S
’           ##  Decrement to prevent off-by-one errors
 ½R²        ##  Square root, then floor and make a 1-indexed range, then square each value
    m2      ##  Take every other value, starting with the first
      S     ##  sum the result

9
डेनिस वास्तव में जाग रहा है।
डेनिस

@ डेनिस आह! और सतर्क भी, जाहिरा तौर पर ...
FryAmTheEggman


4

आर, 38 36 बाइट्स

function(n,x=(2*0:n+1)^2)sum(x[x<n])

@ गिसेप ने xघुंघराले ब्रेस को बचाने के लिए तर्कों की सूची में जाकर दो बाइट्स बचाए । शांत विचार!

Ungolfed

function(n, x = (2*(0:n) + 1)^2)  # enough odd squares (actually too many)
  sum(x[x < n])                   # subset on those small enough
}

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


2
PPCG में आपका स्वागत है!
मार्टिन एंडर

यह साइट बहुत बढ़िया है, धन्यवाद!
माइकल एम।

आपको xडिफ़ॉल्ट फ़ंक्शन तर्क में स्थानांतरित करके दो बाइट्स को बचाने में सक्षम होना चाहिए और फिर आप ब्रेसिज़ निकाल सकते हैं।
Giuseppe

3

सी, 51, 50 48 बाइट्स

f(n,s,i)int*s;{for(*s=0,i=1;i*i<n;i+=2)*s+=i*i;}

क्योंकि सबसे क्रियात्मक भाषाओं में से एक में गोल्फ क्यों नहीं? (अरे, कम से कम यह जावा नहीं है!)

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

परीक्षण I / O के साथ पूर्ण अनछुए कार्यक्रम:

int main()
{
    int s;
    f(10, &s);
    printf("%d\n", s);
    char *foobar[1];
    gets(foobar);
}

f(n,s,i)int*s;{for(*s=0,i=1;i*i<n;i+=2)*s+=i*i;}

most verbose languagesपायथन, सी #, एलआईएसपी, फोर्थ, आदि की तुलना में अधिक गोल्फ वास्तव में गोल्फ के लिए बहुत अच्छा है
बिल्ली

@ मुझे नहीं लगता कि यह अजगर से अधिक गोल्फ है। यह निश्चित रूप से जावा, जंग और सी # से बेहतर है, लेकिन इस चुनौती पर हर अजगर का जवाब है < 50 bytes। इसके अलावा, यहां एक प्रासंगिक मेटा पोस्ट है
DJMcMayhem

3

दरअसल, 7 बाइट्स

√K1|3@█

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

7 बाइट्स के लिए भी:

3,√K1|█

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

यह उसी सूत्र का उपयोग करता है जैसे डेनिस के जेली उत्तर में।

स्पष्टीकरण:

√K1|3@█
√K       push ceil(sqrt(n))
  1|     bitwise-OR with 1
    3@█  x C 3

क्या अगले को बुलाया जाएगा Literally?
बिल्ली


3

सीजाम, 15 बाइट्स

qi(mq,2%:)2f#1b

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

हार्डकोडेड 10000 समाधान:

मार्टिन के 12 बाइट समाधान:

99,2%:)2f#1b

मेरा मूल 13 बाइट समाधान:

50,{2*)2#}%:+

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


आपका कोड 14 बाइट्स हैं (आपको लिंक में एक अनुगामी लाइनफीड था), लेकिन मुझे लगता है कि यह इनपुट 9801 के लिए सही नहीं है, क्योंकि चुनौती इनपुट से छोटे वर्गों के लिए पूछती है ।
मार्टिन एंडर

@MartinButtner हां, आप सही कह रहे हैं। मैं देखूंगा कि क्या मुझे एक सुंदर फिक्स मिल सकता है
ए सिमन्स

2

अजगर, 10 बाइट्स

s<#Qm^hyd2

परीक्षण सूट

स्पष्टीकरण:

s<#Qm^hyd2
    m          Map over the range of input (0 ... input - 1)
       yd      Double the number
      h        Add 1
     ^   2     Square it
 <#            Filter the resulting list on being less than
   Q           The input
s              Add up what's left

वैकल्पिक (10 बाइट):s<#Q%2t^R2
लीक नून

2

मठकाद, 31 "बाइट्स"

यहाँ छवि विवरण दर्ज करें

ध्यान दें कि Mathcad परिभाषा और सभी प्रोग्रामिंग ऑपरेटरों सहित कई ऑपरेटरों को दर्ज करने के लिए कीबोर्ड शॉर्टकट का उपयोग करता है। उदाहरण के लिए, ctl-] थोड़ी देर के लूप में प्रवेश करता है - इसे टाइप नहीं किया जा सकता है और इसे केवल कीबोर्ड शॉर्टकट या प्रोग्रामिंग टूलबार से प्रवेश किया जा सकता है। "बाइट्स" को एक Mathcad आइटम (जैसे, चर नाम या ऑपरेटर) में प्रवेश करने के लिए आवश्यक कीबोर्ड संचालन की संख्या के लिए लिया जाता है।

जैसा कि मेरे पास इस प्रतियोगिता को जीतने का कोई मौका नहीं है, मैंने सोचा कि मैं एक प्रत्यक्ष सूत्र संस्करण के साथ थोड़ी विविधता जोड़ूंगा।


MathCAD कैसे बनाया जाता है? यह मुझे कहाँ मिल सकता है?
बिल्ली

आपके द्वारा दिए गए स्कोरिंग की व्याख्या थोड़े है ... flimsy, IMO
cat

1
आपको इस भाषा के स्कोरिंग के लिए एक मेटा प्रश्न बनाने की आवश्यकता है।
मेगो

मेटा सवाल अच्छा लगता है। स्कोरिंग के लिए एक गैर-टिमटिमाहट देने की कोशिश तेजी से युद्ध और शांति में बदल जाएगी।
स्टुअर्ट ब्रुफ़

2

रैकेट, 57 बाइट्स

(λ(n)(for/sum([m(map sqr(range 1 n 2))]#:when(< m n))m))

2

MATL , 10 बाइट्स

qX^:9L)2^s

संपादित करें (30 जुलाई 2016): लिंक किए गए कोड की जगह 9Lद्वारा 1Lभाषा में हाल के परिवर्तनों के लिए अनुकूल करने के लिए।

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

q    % Implicit input. Subtract 1
X^   % Square root
:    % Inclusive range from 1 to that
9L)  % Keep odd-indexed values only
2^   % Square
s    % Sum of array

1

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

f=lambda n,i=1:+(i*i<n)and i*i+f(n,i+2)

यदि, n=1इसके Falseबजाय , यह आउटपुट के लिए मान्य है0 , तो हम 37 बाइट पाने के लिए बेस केस रूपांतरण से बच सकते हैं

f=lambda n,i=1:i*i<n and i*i+f(n,i+2)

यह अजीब बात है कि मुझे अन्यथा पाने के 0लिए एक छोटा रास्ता नहीं मिला है i*i>=nऔर अन्यथा नहीं। पायथन 2 में, एक अभी भी 39 बाइट्स के साथ मिलता है

f=lambda n,i=1:~-n/i/i and i*i+f(n,i+2)

boolintपाइथन का एक उपवर्ग है , जिसका अर्थ Falseहै एक स्वीकार्य मूल्य 0
बिल्ली


1

पायथन, 42 38 बाइट्स

f=lambda n,i=1:i*i<n and i*i+f(n,i+2)

1

पायथन 2, 38 बाइट्स

s=(1-input()**.5)//2*2;print(s-s**3)/6

बंद के आधार डेनिस के सूत्र , साथ s==-2*k। एक फ्लोट आउटपुट करता है। वास्तव में, इनपुट वर्गाकार होता है, घटता है, फिर अगले सम संख्या तक गोल होता है।


1

PARI / GP , 33 32 26 बाइट्स

डेनिस कोड से अनुकूलित :

n->t=(1-n^.5)\2*2;(t-t^3)/6

मेरा पहला विचार (30 बाइट्स), एक साधारण बहुपद सूत्र का उपयोग करके:

n->t=((n-1)^.5+1)\2;(4*t^3-t)/3

यह एक कुशल कार्यान्वयन है, वास्तव में मेरे द्वारा लिखे गए ungolfed संस्करण से बहुत अलग नहीं है:

a(n)=
{
  my(t=ceil(sqrtint(n-1)/2));
  t*(4*t^2-1)/3;
}

एक वैकल्पिक कार्यान्वयन (37 बाइट्स) जो प्रत्येक वर्ग के ऊपर रहता है:

n->s=0;t=1;while(t^2<n,s+=t^2;t+=2);s

एक अन्य वैकल्पिक समाधान (35 बाइट्स) एक अस्थायी चर के बिना योग का प्रदर्शन:

n->sum(k=1,((n-1)^.5+1)\2,(2*k-1)^2)

फिर भी एक और समाधान, विशेष रूप से प्रतिस्पर्धी नहीं (40 बाइट्स), एल 2 मानक का उपयोग कर । यह बेहतर होगा अगर स्टेप-साइज़ सूचकांकों वाले वैक्टरों का समर्थन हो। (एक वाक्यविन्यास की कल्पना कर सकता है n->norml2([1..((n-1)^.5+1)\2..2])जो 8 बाइट छोड़ देगा।)

n->norml2(vector(((n-1)^.5+1)\2,k,2*k-1))

1

हास्केल, 32 31 बाइट्स

 n#x=sum[x^2+n#(x+2)|x^2<n]
 (#1)

प्रयोग उदाहरण: (#1) 9802-> 166650

संपादित करें: @xnor ने एक बाइट को बचाया, एक चतुर सूची समझ के साथ। धन्यवाद!


यह गार्ड को धोखा देने के लिए एक बाइट से छोटा है:n#x=sum[x^2+n#(x+2)|x^2<n]
xnor

1

जूलिया, 29 बाइट्स

f(n,i=1)=i^2<n?i^2+f(n,i+2):0

यह एक पुनरावर्ती कार्य है जो पूर्णांक को स्वीकार करता है और पूर्णांक देता है।

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


1

ओरेकल SQL 11.2, 97 बाइट्स

SELECT NVL(SUM(v),0)FROM(SELECT POWER((LEVEL-1)*2+1,2)v FROM DUAL CONNECT BY LEVEL<:1)WHERE v<:1;

1

जूलिया, 26 बाइट्स

x->sum((r=1:2:x-1)∩r.^2)

यह n के नीचे सभी विषम, धनात्मक पूर्णांक की श्रेणी और उस श्रेणी में पूर्णांकों के वर्गों की सरणी का निर्माण करता है, फिर दोनों पुनरावृत्तियों में पूर्णांकों के योग की गणना करता है।

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


1

रेंग v.3.3, 36 बाइट्स

0#ci#m1ø>$a+¡n~
:m%:1,eq^c2*1+²c1+#c

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

व्याख्या

1: प्रारंभ

 0#ci#m1ø

सेट cकरने के लिए 0(काउंटर) और इनपुट Iकरने के लिएm कुल्हाड़ी। अगली पंक्ति में जाता है।

2: लूप

:m%:1,eq^c2*1+²c1+#c

:वर्तमान मूल्य (चौकोर विषम संख्या) को दोहराता है और [मैं नीचे कुल्हाड़ी mडालता हूं mमैंने एक अन्य उत्तर में कम-से-कम चाल का उपयोग किया, जिसका मैं यहां उपयोग करता हूं। %:1,eजाँच करता है कि एसटीओएस <टीओएस। यदि यह है, q^ऊपर जाता है और लूप से बाहर निकलता है। अन्यथा:

         c2*1+²c1+#c

cकाउंटर नीचे रखता है, 2*इसे दोगुना करता है, 1+एक जोड़ता है, और ²इसे वर्ग करता है।c1+#Cवेतन वृद्धिc , और लूप फिर से जाता है।

3: अंतिम

        >$a+¡n~

$पिछले मान को छोड़ देता है (वांछित से अधिक), a+¡तब तक जोड़ता है जब तक कि स्टैक की लंबाई 1, n~आउटपुट और समाप्त न हो जाए।



1

गणितज्ञ 30 बाइट्स

Total[Range[1,Sqrt[#-1],2]^2]&

यह अनाम फ़ंक्शन इनपुट ( Range[1,Sqrt[#-1],2]) से कम सभी विषम संख्याओं को वर्ग करता है और उन्हें जोड़ता है।


1

PHP, 64 बाइट्स

function f($i){$a=0;for($k=-1;($k+=2)*$k<$i;$a+=$k*$k);echo $a;}

विस्तारित:

function f($i){
    $a=0;
    for($k=-1; ($k+=2)*$k<$i; $a+=$k*$k);
    echo $a;
}

forलूप के प्रत्येक पुनरावृत्ति पर , यह 2 से k जोड़ेगा और जाँच करेगा यदि k 2 से कम है $i, यदि यह k 2 है $a


1

आर, 60 बाइट्स

function(n){i=s=0;while((2*i+1)^2<n){s=s+(2*i+1)^2;i=i+1};s}

जैसा कि चुनौती के रूप में वर्णित है, n = 1 मामले के लिए 0 वापस करना शामिल है। अपमानित, '' R में लाइनब्रेक का प्रतिनिधित्व करता है, जिसे नीचे अनदेखा किया गया है:

function(n){         # Take input n
i = s = 0            # Declare integer and sum variables
while((2*i+1)^2 < n) # While the odd square is less than n
s = s + (2*i+1)^2    # Increase sum by odd square
i = i + 1            # Increase i by 1
s}                   # Return sum, end function expression

1

जावा 8, 128 119 117 111 49 बाइट्स

n->{int s=0,i=1;for(;i*i<n;i+=2)s+=i*i;return s;}

@Thomas 'C # समाधान के आधार पर ।

स्पष्टीकरण:

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

n->{           // Method with integer as both parameter and return-type
  int s=0,     //  Sum, starting at 0
      i=1;     //  Index-integer, starting at 1
  for(;i*i<n;  //  Loop as long as the square of `i` is smaller than the input
      i+=2)    //    After every iteration, increase `i` by 2
    s+=i*i;    //   Increase the sum by the square of `i`
  return s;}   //  Return the result-sum

0

पायथन 2, 49 बाइट्स

यह एक से कम होने समाप्त हो गया lambda

x=input()
i=1;k=0
while i*i<x:k+=i*i;i+=2
print k

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

मेरी सबसे छोटी lambda, 53 बाइट्स :

lambda x:sum((n-~n)**2for n in range(x)if(n-~n)**2<x)
हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.