বিজোড় বর্গ সংখ্যাগুলি 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

এটি অনলাইন চেষ্টা করুন! বা সমস্ত পরীক্ষার কেস যাচাই করুন

পটভূমি

সমস্ত ধনাত্মক পূর্ণসংখ্যার কে এর জন্য , আমাদের কাছে 1² + 3² + ⋯ + (2 কে - 1) ² = কে (2 কে - 1) (2 কে + 1) ÷ 3 রয়েছে

যেহেতু মি সি আর = মি আছে! Elements (( মিঃ )! আর!) আর - মি সংস্থার সংকলনের উপরেরগুলি (2 কে + 1) সি 3 = (2 কে + 1) 2 কে (2 কে - 1) ÷ 6 = কে (2 কে) হিসাবে গণনা করা যেতে পারে - 1) (2 কে + 1) ÷ 3।

সূত্রটি প্রয়োগ করতে, আমাদের অবশ্যই সর্বোচ্চ 2 কে + 1 সন্ধান করতে হবে যা (2 কে - 1) ² <এন । এক মুহুর্তের জন্য সমতা উপেক্ষা করে আমরা সর্বোচ্চ এম যেমন (এম - 1) = <n কে এম = সিল (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

জাভাস্ক্রিপ্ট (ES6), 30 বাইট

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

f(1)মিথ্যা পরিবর্তে শূন্য ফিরে আসতে হলে 31 বাইট :

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

6

05 এ বি 1 ই , 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

ব্যবহার সিপি-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
ASCII- কেবল

2
@ থমাস আপনি ভিটিএসে সিটিটিএল + এফ 5 দিয়ে আপনার প্রোগ্রামটি চালাতে পারবেন যা ক্ষেত্রে প্রোগ্রামটি শেষ হওয়ার পরে উইন্ডোটি উন্মুক্ত থাকবে।
মার্টিন এন্ডার

4

জেলি, 7

’½R²m2S

এটি অনলাইনে চেষ্টা করুন বা একাধিক মানের জন্য একটি পরিবর্তিত সংস্করণ চেষ্টা করুন

ডেনিস ঘুমিয়ে আছে ...

তাদের সহায়তার জন্য চ্যাটে স্প3000কে ধন্যবাদ!

ব্যাখ্যা:

’½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
ডেনিস আসলে জেগে আছে।
ডেনিস

@ ডেনিস আহ! এবং
সতর্কতাও


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
পিপিসিজিতে আপনাকে স্বাগতম!
মার্টিন এন্ডার

এই সাইটটি দুর্দান্ত, ধন্যবাদ!
মাইকেল এম

আপনার xএকটি ডিফল্ট ফাংশন আর্গুমেন্টে গিয়ে দুটি বাইট সংরক্ষণ করতে সক্ষম হওয়া উচিত এবং তারপরে আপনি বন্ধনীগুলি সরিয়ে ফেলতে পারেন।
জিউসেপ

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 ইনপুটটির জন্য সঠিক নয়, কারণ চ্যালেঞ্জটি ইনপুটটির চেয়ে ছোট স্কোয়ারগুলির জন্য জিজ্ঞাসা করে।
মার্টিন এন্ডার

@ মার্টিনবাটনার হ্যাঁ, আপনি ঠিক বলেছেন। আমি দেখতে পাচ্ছি কিনা আমি একটি মার্জিত ঠিক করতে পারি
একটি সিমন্স


2

ম্যাথক্যাড, 31 "বাইটস"

এখানে চিত্র বর্ণনা লিখুন

নোট করুন যে ম্যাথক্যাড সংজ্ঞা এবং সমস্ত প্রোগ্রামিং অপারেটর সহ বেশ কয়েকটি অপারেটর প্রবেশ করতে কীবোর্ড শর্টকাট ব্যবহার করে। উদাহরণস্বরূপ, সিটিএল-] কিছুক্ষণের লুপে প্রবেশ করে - এটি টাইপ করা যায় না এবং কেবল কীবোর্ড শর্টকাট ব্যবহার করে বা প্রোগ্রামিং সরঞ্জামদণ্ড থেকে প্রবেশ করা যায়। "বাইটস" ম্যাথক্যাড আইটেম (যেমন ভেরিয়েবলের নাম বা অপারেটর) প্রবেশের জন্য প্রয়োজনীয় কীবোর্ড অপারেশনগুলির সংখ্যা হিসাবে নেওয়া হয়।

আমার এই প্রতিযোগিতা জেতার কোনও সম্ভাবনা নেই বলে আমি ভেবেছিলাম প্রত্যক্ষ সূত্র সংস্করণ দিয়ে আমি কিছুটা বৈচিত্র্য যুক্ত করব।


ম্যাথক্যাড কিভাবে হয়? কোথায় আমি এটা পেতে পারেন?
বিড়াল 1

আপনি যে স্কোরিং দিয়েছেন তার ব্যাখ্যা হ'ল কৃপা ... ফ্লিমি, আইএমও
বিড়াল

1
এই ভাষার স্কোরিংয়ের জন্য আপনাকে একটি মেটা প্রশ্ন তৈরি করতে হবে।
মেগো

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

2

র‌্যাকেট, 57 বাইট

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

2

এমএটিএল , 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



1

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

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

সাথে ডেনিসের সূত্রটি ভিত্তিক s==-2*k। একটি ভাসা আউটপুট। ফলস্বরূপ, ইনপুটটি বর্গমূল, হ্রাস, তারপরে পরবর্তী সমান সংখ্যা পর্যন্ত গোল হয় round


1

প্যারি / জিপি , 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

এটি একটি কার্যকর বাস্তবায়ন, আমি লিখছি যে অসদৃশ সংস্করণটি তার চেয়ে খুব আলাদা নয়:

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])যে বাক্যটি আট বাইট নেমে আসবে তা ভাবতে পারে ))

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

সম্পাদনা করুন: @ এক্সনর একটি বুদ্ধিমান তালিকা অনুধাবন করে একটি বাইট সংরক্ষণ করেছেন saved ধন্যবাদ!


গার্ডকে ঠকানোর জন্য এটি বাইট সংক্ষিপ্ত: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

ওরাকল এসকিউএল 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(COUNTER) এবং ইনপুট Iকরার mকুঠার। পরের লাইনে যায়

2: লুপ

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

:বর্তমান মান (স্কোয়ারড বিজোড় সংখ্যা) সদৃশ এবং [আমি mরাখে mকুঠার নিচে। আমি অন্য উত্তরে কম-কৌশলগুলি ব্যবহার করেছি, যা আমি এখানে ব্যবহার করি। %:1,eSTOS <টিএসএস কিনা তা পরীক্ষা করে। যদি এটি হয় তবে 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

পিএইচপি, 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 থেকে 2 কে যোগ করবে এবং কে 2 কম $iহবে কিনা তা পরীক্ষা করবে, এটি কে 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}

চ্যালেঞ্জে বর্ণিত ঠিক যেমনটি এন = 1 মামলার জন্য 0 ফেরৎ সহ করে including ডিগল্ফড, ';' আর-এ লাইন ব্রেককে উপস্থাপন করে, নীচে উপেক্ষা করুন:

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;}

@ থমাসের সি # সমাধানের ভিত্তিতে ।

ব্যাখ্যা:

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

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

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