কেবলমাত্র যোগ এবং বিয়োগফল ব্যবহার করে এক্স পর্যন্ত সমস্ত স্কোয়ার গণনা করুন


11

লক্ষ্যটি হ'ল xসংযোজন এবং বিয়োগফল সহ সমস্ত স্কোয়ার গণনা করা ।

নিয়মাবলী:

  1. কোডটি অবশ্যই এমন একটি ফাংশন হতে হবে যা তৈরি করতে মোট স্কোয়ারের সংখ্যা নেয় এবং those সমস্ত স্কোয়ার সমন্বিত একটি অ্যারে প্রদান করে।
  2. স্কোয়ার গণনা করার জন্য আপনি স্ট্রিং, কাঠামো, গুণ, বিভাগ বা বিল্ট-ইন ফাংশন ব্যবহার করতে পারবেন না
  3. আপনি কেবল অ্যারে, পূর্ণসংখ্যা (সম্পূর্ণ সংখ্যা), সংযোজন, বিয়োগফল ব্যবহার করতে পারেন। অন্য অপারেটরদের অনুমতি নেই!

এটি একটি প্রশ্ন, তাই বাইটের মধ্যে সংক্ষিপ্ততম কোডটি জয়ী!


বর্ধিত স্কোয়ারগুলির জন্য এটি মূলত সর্বাধিক অনুকূলিত অ্যালগরিদম - বা, কমপক্ষে, বেশ অনেকটা অভিন্ন উত্তর পাবে।
পিটার টেলর

2
@ পিটারটেলর না, এটি সমান নয়, এটি স্কোয়ার বাড়ানোর জন্য সবচেয়ে অনুকূলিতকরণ অ্যালগরিদমের জন্য, তবে আমার প্রশ্নটি কেবল সংযোজন এবং বিয়োগের জন্য জিজ্ঞাসা করে।
টুথব্রাশ

যা একই জিনিস। সাক্ষী হিসাবে: এই প্রশ্নের বর্তমান উত্তরটি পূর্ববর্তী প্রশ্নের বিস্তৃত উত্তরগুলির মতোই একই কাজ করে।
পিটার টেলর

@ পিটারটেলর আমি পক্ষপাতদুষ্ট হতে পারি, তবে আমি সত্যিই এটি একরকম মনে করি না।
টুথব্রাশ

3
এই প্রশ্নের ইতিমধ্যে অন্য কোথাও উত্তর থাকতে পারে, কিন্তু এটি প্রশ্নটিকে অন্য প্রশ্নের সদৃশ করে না ।
ব্ল্যাকলাইট জ্বলজ্বল

উত্তর:



6

সি, 55 52 বাইট

int s(int n,int*r){for(int i=0,j=-1;n--;*r++=i+=j+=2);}

কেবল বিজোড় সংখ্যার যোগফল

  • nগণনা করার জন্য স্কোয়ারের সংখ্যা
  • r: ফলাফলগুলি সংরক্ষণ করার জন্য আউটপুট অ্যারে
  • j: ধারাবাহিক মান 1, 3, 5, 7, ... নেয়
  • i: jপ্রতিটি পুনরাবৃত্তি দ্বারা বৃদ্ধি করা হয়

সম্পাদন করা

অন্তর্নিহিত ইন্ট ডিক্লোরেশন (> সি 99) ব্যবহার করে 4 টি অক্ষর সংরক্ষণ করা যায়, তবে এটির জন্য 1 চার্জের ব্যয় হয় কারণ forইনিশিয়ালাইজার>> C99 তে কোনও ঘোষণা রাখতে পারে না। তারপরে কোডটি হয়ে যায়

s(int n,int*r){int i=0,j=-1;for(;n--;*r++=i+=j+=2);}

ব্যবহার

void main() {
    int r[20];
    s(20, r);
    for (int i = 0; i < 20 ; ++i) printf("%d\n", r[i]);
}  

আউটপুট

1
4
9
16
25
36
49
(...)
361
400

1
সেই যুক্তিটি দুর্দান্ত! আপনার প্রাপ্য +1
মুকুল কুমার

5

গল্ফস্ক্রিপ্ট, 17 টি অক্ষর

{[,{.+(1$+}*]}:F;

ব্যবহার (উদাহরণ দেখুন অনলাইন ):

10 F     # => [0 1 4 9 16 25 36 49 64 81]

দ্রষ্টব্য: * একটি লুপ এবং গুণক অপারেটর নয়।


ঠিক আছে; এটা কিভাবে কাজ করে?
টুথব্রাশ

@ টুথব্রাশ ,ইনপুট নেয় এবং এটিকে অ্যারে রূপান্তর করে [0 1 ... n-1]। তারপরে *অ্যারেতে প্রদত্ত কোড-ব্লকটিকে ইনজেকশন দেয়। এই ব্লকটি প্রথমে বর্তমান আইটেমটি দ্বিগুণ করে ( .+) একটি ( ) কে বিয়োগ করে (এবং তারপরে পূর্ববর্তী ফলাফল যুক্ত করে 1$+(অন্য কথায়, 2j-1পূর্ববর্তী বর্গ সংখ্যাতে যুক্ত করুন)। []একটি নতুন অ্যারে ফেরত দেওয়ার জন্য সবকিছুকে ঘিরে রাখে।
হাওয়ার্ড

গ্রেট! আমি গল্ফস্ক্রিপ্ট জানি না, তাই ভাবলাম কীভাবে এটি কাজ করে।
টুথব্রাশ

5

উইন্ডোজ ব্যাচ, 115 বাইট

setlocal enabledelayedexpansion&for /l %%i in (1 1 %1)do (set a=&for /l %%j in (1 1 %%i)do set /a a+=%%i
echo.!a!)

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

এটির জন্য দেরী পরিবর্তনশীল প্রসারণ সক্ষম হওয়া দরকার, এটি দিয়ে এটি করা যেতে পারে cmd /v:on। এটি না বলে ধরে নিই, setlocal enabledelayedexpansion&শুরুতে একটি অতিরিক্ত প্রয়োজন ছিল (এটি ছাড়া স্ক্রিপ্টটি 83 বাইট)।


4

হাস্কেল - 30

f n=scanl1(\x y->x+y+y-1)[1..n]

এটি এই সত্যটি ব্যবহার করে (n+1)^2=n^2+2n+1


4

পার্ল, 27 বাইট

sub{map{$a+=$_+$_-1}1..pop}

গণিত:

ম্যাথ

10 স্কোয়ারটি মুদ্রণের জন্য ফাংশনটি কল করার জন্য স্ক্রিপ্ট:

#!/usr/bin/env perl
$square = sub{map{$a+=$_+$_-1}1..pop};
use Data::Dumper;
@result = &$square(10);
print Dumper \@result;

ফলাফল:

$VAR1 = [
          1,
          4,
          9,
          16,
          25,
          36,
          49,
          64,
          81,
          100
        ];

সম্পাদনা:


আপনাকে নিজের সাবটির নামকরণ করার প্রয়োজনের কোনও কারণ আমি দেখতে পাচ্ছি না। IOW "sub" map {+ a + = $ _ + $ _- 1} 1. শিফট} "আমার কাছে বৈধ বলে মনে হয় এবং আপনাকে দুটি চরিত্র সাশ্রয় করে।
skibrianski

@ এসকিবারিয়ানস্কি: একটি বেনামে ফাংশনও একটি ফাংশন। খারাপ দিকটি হ'ল ফাংশনটির কলিংটি আরও কিছুটা জটিল।
হাইকো ওবারডিক

ঠিক আছে, কিন্তু এটি কলার উপর। অন্যান্য ভাষায় এমন এন্ট্রি রয়েছে যা বেনামে সাব সংজ্ঞায়িত করে, তাই আমি মনে করি আপনি নিরাপদ
রয়েছেন

এবং আপনি শিফট () এর পরিবর্তে পপ () ব্যবহার করে আরও 2 টি অক্ষর সংরক্ষণ করতে পারেন কারণ কেবলমাত্র একটি যুক্তি রয়েছে।
skibrianski

@ এসকিবারিয়ানস্কি: ঠিক আছে, ধন্যবাদ
হাইকো ওবারডিক

4

জাভাস্ক্রিপ্ট - 32 অক্ষর

for(a=[k=i=0];i<x;)a[i]=k+=i+++i

একটি ভেরিয়েবল xবিদ্যমান বলে ধরে নিয়েছে এবং aমানগুলির জন্য স্কোয়ারের অ্যারে তৈরি করে 1..x

ECMAScript 6 - 27 টি অক্ষর

b=[f=i=>b[i]=i&&i+--i+f(i)]

কলিং মানগুলির জন্য স্কোয়ারগুলির সাথে f(x)অ্যারেটিকে জনবহুল করবে ।b0..x


আমাকে জিজ্ঞাসা করতে হবে ... i+++iশেষে ...?
WallyWest

2
k+=i+++iহিসাবে একই k += i + (++i)হিসাবে যা একই k+=i+i+1দ্বারা অনুসরণi=i+1
MT0

ওহ যে প্রতিভা ... আমি প্রয়োজন হয় আমার পরবর্তী কোডগল্ফ এ প্রয়োগ করতে হবে! :)
ওয়েলওয়েস্ট

You can save one character by moving the function declaration to inside the array (e.g. b=[f=i=>b[i]=i&&i+--i+f(i)]).
Toothbrush

ধন্যবাদ - একটি অর্ধ-কোলন অপসারণ করার জন্য জিনিসগুলিকে চারদিকে সরিয়ে শীর্ষের উত্তরে একটি চরিত্র সংরক্ষণ করা হয়েছে।
এমটি0

4

জুলিয়া - 33

যে কোনও বর্গ সংখ্যা বিজোড় সংখ্যার সংমিশ্রণ দ্বারা রচনা করা যেতে পারে:

julia> f(x,s=0)=[s+=i for i=1:2:(x+x-1)];f(5)
5-element Array{Int64,1}:
  1
  4
  9
 16
 25

হাই, এবং CG.se স্বাগতম! সুন্দর, সংক্ষিপ্ত উত্তর। জুলিয়ার কথা কখনও শুনেনি, তবে এটি আকর্ষণীয় দেখাচ্ছে।
জোনাথন ভ্যান মাত্রে

জুলিয়ায় "2 এক্স" গুণ নয়? পরিবর্তে আপনি x + x বলতে পারেন, এটির জন্য আপনাকে কেবল একটি বাইট লাগবে।
গ্লেন রেন্ডার্স-পেহারসন

আপনি ঠিক (নোটিশ করেননি), সম্পাদনা করেছেন।
সিসিপি

আমি জুলিয়ার সাথে পরিচিত (এখনও) নই, তবে ডকস.জুলিয়াং.আর.এল.এন / রিলিজ.০.২ এ অনলাইন ম্যানুয়ালটিতে এটি সন্ধান করেছি এবং "সংখ্যার লিটারাল সহগ: সাধারণ সংখ্যার সূত্র এবং অভিব্যক্তি পরিষ্কার করার জন্য, জুলিয়া চলকগুলিকে অনুমতি দেয় অবিলম্বে একটি সংখ্যাসূচক আক্ষরিক দ্বারা সংযোজন করা হবে, গুণিতকরণ বোঝায়। " হ্যাঁ, 2x হ'ল একটি গুণ।
গ্লেন রেন্ডার্স-পেহারসন

2

সি ++ 99 81 78 80 78

int* f(int x){int a[x],i=1;a[0]=1;while(i<x)a[i++]=a[--i]+(++i)+i+1;return a;}  

কোড-গল্ফে আমার প্রথম চেষ্টা

এই কোড উপর ভিত্তি করে তৈরি
একটি = 2 XN - 1
যেখানে এন মেয়াদ গণনা এবং একটি হয় এন ম মেয়াদ সিরিজ নিম্নলিখিত
1, 3, 5, 9, 11, 13, .....
প্রথম 2 পদ = 2 এর সমষ্টি স্কোয়ারড

প্রথম 3 পদগুলির যোগফল = 3 বর্গাকার
এবং আরও ...


2
আমি মনে করি আপনি লুপের {}পরে ধনুর্বন্ধনীগুলি সরাতে পারবেন for, যেহেতু কেবলমাত্র একটি বিবৃতি রয়েছে। এটি আপনার চর গণনা 2 দ্বারা হ্রাস করতে পারে
ব্যবহারকারী 12205

1
যদি আপনি মেইন () ব্যতীত অন্য কোনও কার্যক্রমে স্থির আকারের অ্যারেগুলি ঘোষণা করেন তবে তা গ্রহণযোগ্য
মুকুল কুমার

1
এই কোডটির অপরিবর্তিত আচরণ রয়েছে।
কেরেক এসবি

1
এবং রিটার্নের সময় ধ্বংস হওয়া স্ট্যাকের ডেটাতে পয়েন্টার দেয়।
ভিএক্স

1
@ মুকুলকুমার addition, subtraction, আমি কেবল
সেগুলিই

2

ডিসিপিইউ -16 এসেম্বলি (90 বাইট)

আমি এটি একটি কল্পিত প্রসেসরের জন্য সমাবেশে লিখেছি, কেনো না?

:l
ADD I,1
SET B,0
SET J,0
:m
ADD J,1
ADD B,I
IFL J,I
SET PC,m
SET PUSH,B
IFL I,X
SET PC,l

সংখ্যাটি এক্স রেজিস্টারে এবং অন্যান্য রেজিস্টারগুলি 0 হওয়ার আশা করা হচ্ছে Results ফলাফলগুলি স্ট্যাকের দিকে ঠেলে দেওয়া হবে, 16 বিটের আর্কিটেকচারের কারণে 65535 এ পৌঁছানোর পরে এটি ভেঙে যাবে। SUB PC, 1এটি পরীক্ষা করতে আপনি শেষের দিকে একটি যুক্ত করতে চাইতে পারেন । সংকলিত, প্রোগ্রামটি 20 বাইট (10 শব্দ) হওয়া উচিত।


2

Haskell,

f x=take x [iterate (+y) 0 !! y | y<- [0..]]

এটি মূলত গুণন আবিষ্কার করে, এটি নিজস্ব নিজস্ব ব্যবহার করে এবং এটি সমস্ত সংখ্যার উপরে মানচিত্র করে। f 10= [0,1,4,9,16,25,36,49,64,81]। এছাড়াও f 91= [0,1,4,9,16,25,36,49,64,81,100,121,144,169,196,225,256,289,324,361,400,441,484,529,576,625,676,729,784,841,900,961,1024,1089,1156,1225,1296,1369,1444,1521,1600,1681,1764,1849,1936,2025,2116,2209,2304,2401,2500,2601,2704,2809,2916,3025,3136,3249,3364,3481,3600,3721,3844,3969,4096,4225,4356,4489,4624,4761,4900,5041,5184,5329,5476,5625,5776,5929,6084,6241,6400,6561,6724,6889,7056,7225,7396,7569,7744,7921,8100]


আপনি ডেমোটি 10 ​​এর চেয়ে কিছুটা বাড়িয়ে দিতে পারেন?
গ্লেন রেন্ডার্স-পেহারসন

2

হাস্কেল, 34/23

n#m=m+n:(n+2)#(m+n)
f n=take n$1#0

বা, আমদানি ঠিক থাকলে:

f n=scanl1(+)[1,3..n+n]

আউটপুট:

λ> f 8
[1,4,9,16,25,36,49,64]

1

জাভাস্ক্রিপ্ট 47

function f(n,a){return a[n]=n?f(n-1,a)+n+n-1:0}

r=[];f(12,r);console.log(r) ফেরত:
[0, 1, 4, 9, 16, 25, 36, 49, 64, 81, 100, 121, 144]


গ্রেট! ইন ECMAScript 6: f=(n,a)=>a[n]=n?f(n-1,a)+n+n-1:0
টুথব্রাশ

1
আমি সত্যিই মূলধারার ব্যবহার প্রবেশের জন্য ECMAScript 6 এর জন্য অপেক্ষা করতে পারি না। এটি এটি শিখতে নিখুঁত অজুহাত হবে।
ইসিয়া মিডোস

1
এর নাম ECMAScript 6 স্পেসিফিকেশন-এর তীর ফাংশন অংশ সংস্করণ 22. যেহেতু ফায়ারফক্সে হয়েছে
MT0

1

ছোট্টকাল, 52

f:=[:n||s|(s:=1)to:n collect:[:i|x:=s.s:=s+i+i+1.x]]

একটি নতুন অ্যারে প্রদান করে (অর্থাত্ বিদ্যমানটি পূরণ করে না বা যুক্ত করে না)।

কল:

চ মান: 10

-> # (1 4 9 16 25 36 49 64 81 100)


1

অজগর - 39

a=0
for i in range(5):a+=i+i+1;print(a)

যে 5কোনও মান দিয়ে প্রতিস্থাপন করুন । কোন পরামর্শ?


1

বাশ - 92 85 62 61 59 57

declare -i k=1;for((i=0;i++<$1;k+=i+i+1));do echo $k;done

ফলাফল:

$ ./squares.sh 10
1
4
9
16
25
36
49
64
81
100

সম্পাদনা করুন: আমি @ mniip এর হাস্কেল সমাধান থেকে অ্যালগরিদম দিয়ে অভ্যন্তরীণ লুপটি প্রতিস্থাপন করেছি।


1

উপরের মতো একই পদ্ধতি, এপিএল এবং জেতে:

এপিএল: F←{+\1+V+V←¯1+⍳⍵}(17 টি অক্ষর) বেশিরভাগ এপিএল ভেরিয়েন্টের সাথে কাজ করে (এটি এখানে চেষ্টা করুন )

এবং আরও কম (মাত্র 14 টি অক্ষর) এনজিএন এপিএল সহ: F←{+\1+V+V←⍳⍵}( এখানে দেখুন )

জে: f=:+/\@(>:@+:@:i.)(18 টি অক্ষর)

সম্পাদনা করুন: এপিএলে আরও ভাল সমাধান: F←{+\¯1+V+V←⍳⍵}(15 টি অক্ষর)


1

সি # (82)

int[] s(int n){int i,p=0;var r=new int[n];while(i<n){p+=i+i+1;r[i++]=p;}return r;}

1

সি # - 93

int[]s(int l){int[]w=new int[l];while(l>=0){int i=0;while(i<l){w[l-1]+=l;i++;}l--;}return w;}

যখন একই শ্রেণীর অন্য পদ্ধতি থেকে কল করা হবে তখন অ্যারেটি প্রদান করবে - [1,4,9,16,25,36...], lতম উপাদান পর্যন্ত।


আপনি int[]এবং এর মধ্যে ফাঁকা স্থান সরিয়ে দেওয়ার চেষ্টা করেছিলেন sq? আমি সি # জানি না, তবে আমি মনে করি এটি কাজ করা উচিত।
ব্যবহারকারী 12205

না, কাজ করবে না। প্রথম ইনট [] হল "বর্গ" পদ্ধতির রিটার্ন টাইপ। আমি পদ্ধতির নামটি কেবল "এস" হতে পারে কমিয়ে দিতে পারি :)
রাজেশ

আমি এর int[]sqপরিবর্তে int[] sqএবং int[]resপরিবর্তে ব্যবহার করছি int[] res। এটি আপনাকে দুটি চরিত্র সংরক্ষণ করতে সহায়তা করে এবং আমি এর সাথে কোনও সংকলনের ত্রুটি পাই নি। এছাড়াও আপনার প্রস্তাবিত হিসাবে sqএবং resআপনার একক অক্ষর সনাক্তকারী ব্যবহার করা উচিত ।
ব্যবহারকারী 12205

দেখে মনে হচ্ছে আপনার
উত্তরটিতে

মনোস্পেস ফন্ট সহ একটি কোড-ব্লকে এটি স্থাপনের জন্য 4 স্পেস সহ ইন্ডেন্ট কোড।
লুসার droog

1

ফোর্টরান দ্বিতীয় | চতুর্থ | 66 | 77, 134 122 109 105

  SUBROUTINES(N,M)
  INTEGERM(N)
  K=0
  DO1I=1,N
  K=K+I+I-1
1 M(I)=K
  END

সম্পাদনা: অভ্যন্তরীণ লুপটি সরানো হয়েছে এবং এর পরিবর্তে @ mniip এর হাস্কেল অ্যালগরিদম ব্যবহার করা হয়েছে।

সম্পাদনা: যাচাই করা হয়েছে যে সাব্রোটিন এবং ড্রাইভার বৈধ ফোর্টরান II এবং IV

ড্রাইভার:

  INTEGER M(100)
  READ(5,3)N
  IF(N)5,5,1
1 IF(N-100)2,2,5
2 CALLS(N,M)
  WRITE(6,4)(M(I),I=1,N)
3 FORMAT(I3)
4 FORMAT(10I6)
  STOP  
5 STOP1
  END

ফলাফল:

$ echo 20 | ./a.out
   1     4     9    16    25    36    49    64    81   100
 121   144   169   196   225   256   289   324   361   400

@ এমনিপ, ধন্যবাদ, আমি আপনার কোডের সাথে আমার অভ্যন্তরীণ লুপটি প্রতিস্থাপন করেছি।
গ্লেন র্যান্ডার্স-পেহারসন

1

পাইথন - 51

এখানে আমি বিধি দ্বারা অনুরোধ করা হিসাবে একটি ফাংশন সংজ্ঞায়িত করছি।

sumবিজোড় সংখ্যা ব্যবহার :

f=lambda n:[sum(range(1,i+i+3,2))for i in range(n)]

এটি কেবলমাত্র sum(একটি বিল্টিন যা সংযোজন করে) এবং range(একটি বিল্টিন যা সংযোজন ব্যবহার করে অ্যারে তৈরি করে) ব্যবহার করে। আপনি যদি আপত্তি করেন তবে sumআমরা এটি সহ এটি করতে পারি reduce:

def g(n):v=[];reduce(lambda x,y:v.append(x) or x+y,range(1,i+i+3,2));return v

1

পিএইচপি, 92 বাইট

এটির জন্য অবশ্যই "সংক্ষিপ্ত ট্যাগ" বিকল্পটি সক্ষম হওয়া দরকার (শুরুতে 3 বাইট ছাঁটাই করতে)।

<? $x=100;$a=1;$r=0;while($r<=$x){if($r){echo"$r ";}for($i=0,$r=0;$i<$a;$i++){$r+=$a;}$a++;}

আউটপুট:

1 4 9 16 25 36 49 64 81 100 

1

চতুর্থ - 48 বাইট

: f 1+ 0 do i 0 i 0 do over + loop . drop loop ;

ব্যবহার:

7 f

আউটপুট:

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