1 থেকে n পর্যন্ত সমস্ত পূর্ণসংখ্যার যোগফল


63

আমি সত্যই অবাক হয়েছি যে এটি ইতিমধ্যে করা হয়নি। আপনি যদি কোনও বিদ্যমান থ্রেড খুঁজে পেতে পারেন তবে যেকোন উপায়ে এটির সদৃশ হিসাবে চিহ্নিত করুন বা আমাকে জানান।

ইনপুট

আপনার ইনপুটটি 1 এর চেয়ে বড় বা সমান কোনও ধনাত্মক পূর্ণসংখ্যার আকারে।

আউটপুট

আপনাকে অবশ্যই 1 এবং সংখ্যা ইনপুট সহ সমস্ত সংখ্যার যোগফল আউটপুট করতে হবে।

উদাহরণ

 In: 5
     1+2+3+4+5 = 15
Out: 15

OEIS A000217 - ত্রিভুজাকার সংখ্যা: ক (এন) = দ্বিপদী (এন + 1,2) = এন (এন + 1) / 2 = 0 + 1 + 2 + ... + এন।

লিডারবোর্ড

এই প্রশ্নের উত্তরের জন্য লিডারবোর্ড দেখতে নীচের কোড স্নিপেট চালান। (এটির পরামর্শ দেওয়ার জন্য প্রোগ্রামার ৫০০০ এবং স্টেইনবার্গ এবং এটি তৈরির জন্য মার্টিন ইন্ডারকে ধন্যবাদ।)



@ ফ্রাইআম দ্য এজিগম্যান দুঃখিত - সেখানে একটি মস্তিষ্কের অল্প দূরত্ব ছিল। আমি বুঝছি তুমি কি বলতে চাও.
GarethPW

2
অ্যারন আপনি হুস্কের দ্বারা নিনজা করেছেন, যা সবেমাত্র 1 বাইট সমাধান সহ পোস্ট করা হয়েছিল
স্কিদেডেভ

7
আমি একটি স্ট্যাক স্নিপেট প্রস্তাব।
প্রোগ্রামার

উত্তর:


46

পাইথ , 2 বাইট

sS

এটি অনলাইন চেষ্টা করুন! অন্তর্নির্মিত ইনপুট। S1-সূচকযুক্ত পরিসীমা, এবং sযোগফল।


102
অবশেষে পাইথ (অন) কোডটি সাপের মতো শোনাচ্ছে।
সম্পূর্ণরূপে

2
এটি
পাইথের

আমি এর উত্তর দিতে যাচ্ছিলাম, তবে আমার ধারণা নেই
স্ট্যান স্ট্রাম

32

কাস্তে , 1 বাইট

Σ

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

Builtin! Σহুস্টে সাধারণত কোনও তালিকার সমস্ত উপাদানগুলির যোগফল পেতে ব্যবহৃত হয়, তবে কোনও সংখ্যায় প্রয়োগ করা হলে এটি ঠিক ফিরে আসে n*(n+1)/2


1
কৌতূহলের বাইরে, এটি ঘটে কারণ এই সংখ্যাটি একটি ব্যাপ্তিতে ফেলে দেওয়া হয় এবং তার পরে সংক্ষিপ্ত করা হয়, বা এটি আসলে হার্ডকোডযুক্ত?
FryAmTheEggman

4
@ ফ্রাইআম দ্য এজিগম্যান এটি আসলে হার্ডকোডযুক্ত, এবং অন্য বিল্টিনের আচরণের মতো Π, যা কোনও তালিকার সমস্ত উপাদান বা একটি সংখ্যার ফ্যাকটোরিয়াল গণনা করতে পারে
লিও

4
Σআমার মেশিনে একটি দুটি বাইট ইউনিকোড চরিত্র। আমার ধারণা আপনি কোড পৃষ্ঠা 1253 ব্যবহার করেছেন? msdn.microsoft.com/en-us/library/cc195055.aspx
gmatht


21

পিট , 161 বাইট / 16 কোডেল

আপনি এই পিট ইন্টারপ্রেটার দিয়ে এটি ব্যাখ্যা করতে পারেন বা এই ওয়েবসাইটে চিত্রটি আপলোড করতে পারেন এবং এটি সেখানে চালাতে পারেন। বাইট গণনা সম্পর্কে নিশ্চিত না, যদি আমি আকার হ্রাস করতে এটি আলাদাভাবে এনকোড করতে পারি।

উত্স চিত্রটির ছোট আকারের সংস্করণ:

rapapaing-চিত্র

ব্যাখ্যা

highlightedপাঠ্য, বর্তমান স্ট্যাক (বাম দিক থেকে ডান দিকে ক্রমবর্ধমান) দেখায় অভিমানী ব্যবহারকারীর ইনপুট হয় 5:

1 ম স্থানান্তর একটি নম্বর ইনপুট করুন এবং স্ট্যাকের উপরে চাপ দিন

5

২ য় স্থানান্তর স্ট্যাকের উপর এই নম্বরটি সদৃশ করুন

5 5

তৃতীয় স্থানান্তর স্ট্যাকের উপরে 1 (গা red় লাল অঞ্চলের আকার) টিপুন

5 5 1

চতুর্থ স্থানান্তর শীর্ষ দুটি সংখ্যা যুক্ত করুন

5 6

5 তম স্থানান্তর শীর্ষ দুটি সংখ্যাকে গুণ করুন

30

6th ষ্ঠ স্থানান্তর কৃষ্ণ অঞ্চলটি নিশ্চিত করে তোলে যে, কার্সারটি নীচে হালকা সবুজ কোডেলের দিকে চলে যায়। এই রূপান্তরটি স্ট্যাকের উপরে 2 (গা dark় সবুজ আকারের) চাপ দেয়

30 2

সপ্তম স্থানান্তর প্রথমটি দিয়ে স্ট্যাকের উপর দ্বিতীয় নম্বরটি ভাগ করুন

15

অষ্টম রূপান্তর শীর্ষ সংখ্যাটি পপ এবং আউটপুট করুন (সংখ্যা হিসাবে ব্যাখ্যা করা)

[empty]

চূড়ান্ত ফাঁদ একটি সাদা অঞ্চল সন্নিবেশ করে, রূপান্তরটি হ'ল nop, কালোটি আমাদের কার্সারটিকে আটকে দেয়। এটি প্রোগ্রামটির সম্পাদন শেষ করে।

মূল ফাইল (এখানকার জন্য খুব ছোট): মূল উত্স চিত্র


আমরা একটি বোধগম্য পাঠ্য (উদাহরণস্বরূপ সি) থেকে অনির্বচনীয় পাঠ্যে (যেমন জেলি) চিত্রগুলিতে রূপান্তর করেছি ... এর পরে আর কী হবে? : পি
ফ্রেরুগি

+1 আমি এর আগে কোনও ব্যাখ্যা সহ একটি
পিটের

21

মস্তিষ্ক-ফ্লাক , 16 বাইট

({({}[()])()}{})

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

মস্তিষ্কের ঝাপটায় যে কয়েকটি জিনিস সত্যিই ভাল This

যেহেতু আপনি মস্তিষ্কের ঝাপটায় এটি করতে পারেন এমন একটি সহজ কাজ এবং এর প্রচুর দৃশ্যমানতা রয়েছে, তাই এখানে একটি বিশদ ব্যাখ্যা রয়েছে:

# Push the sum of all of this code. In brain-flak, every snippet also returns a
# value, and all values inside the same brackets are summed
(
    # Loop and accumulate. Initially, this snippet return 0, but each time the
    # loop runs, the value of the code inside the loop is added to the result.
    {
        # Push (and also return)...
        (
            # The value on top of the stack
            {}

            # Plus the negative of...
            [
                # 1
                ()
            ]

        # The previous code pushes n-1 on to the stack and returns the value n-1
        )

        # 1
        # This code has no side effect, it just returns the value 1 each loop.
        # This effectively adds 1 to the accumulator
        ()

    # The loop will end once the value on top of the stack is 0
    }

    # Pop the zero off, which will also add 0 to the current value
    {}

# After the sum is pushed, the entire stack (which only contains the sum)
# will be implicitly printed.
)


18

গণিত, 9 বাইট

#(#+1)/2&

ম্যাথমেটিকা, 10 বাইট

(#^2+#)/2&

গণিত, 11 বাইট

Tr@Range@#&

গণিত, 12 বাইট

i~Sum~{i,#}&

গণিত, 14 বাইট

(@ ব্যবহারকারী71546 দ্বারা)

1/2/Beta[#,2]&

গণিত, 15 বাইট

Tr[#&~Array~#]&

গণিত, 16 বাইট

Binomial[#+1,2]&

গণিত, 17 বাইট

(কোনও গাছের কাছে নেই)

⌊(2#+1)^2/8⌋&

গণিত, 18 বাইট

PolygonalNumber@#&

গণিত, 19 বাইট

#+#2&~Fold~Range@#&

গণিত, 20 বাইট

(কোনও গাছের কাছে নেই)

f@0=0;f@i_:=i+f[i-1]

4
13, 14 এবং 17 এড়িয়ে যাওয়া লজ্জাজনক বলে মনে হচ্ছে ...
গাছ নয়

3
এটি পরবর্তী চ্যালেঞ্জের মতো মনে হচ্ছে .... বা অন্তত তালিকাটি সম্পূর্ণ করতে আমাকে সহায়তা করুন।
J42161217

2
আমার কাছে এখনও 13 বা 14 বাইটের জন্য কিছু নেই (কেবলমাত্র আপনার সংক্ষিপ্ত উত্তরগুলি গল্ফ করা বাদে), তবে এখানে আরও 26 টি বড় বাইট গণনা রয়েছে
গাছ নেই

1
@চিহ্ন. 10.4 এ জরিমানা কাজ করে
J42161217

1
: আপনার তালিকার জন্য @Notatree, এখানে 35 একটি প্রার্থী Array[Boole[#2>=#]& ,{#,#}]~Total~2&
মার্ক এস

17

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

n=>n*++n/2

উদাহরণ


2
n*-~n/2এছাড়াও কাজ করে, তবে কেবলমাত্রn < 2**31
প্যাট্রিক রবার্টস

11

x86_64 মেশিনের ভাষা (লিনাক্স), 9 8 বাইট

0:   8d 47 01                lea    0x1(%rdi),%eax
3:   f7 ef                   imul   %edi
5:   d1 e8                   shr    %eax
7:   c3                      retq 

অনলাইনে চেষ্টা করার জন্য ! নিম্নলিখিত সি প্রোগ্রামটি সংকলন এবং চালনা করুন।

#include<stdio.h>
const char f[]="\x8d\x47\x01\xf7\xef\xd1\xe8\xc3";
int main(){
  for( int i = 1; i<=10; i++ ) {
    printf( "%d %d\n", i, ((int(*)())f)(i) );
  }
}

@ কোডি গ্রে এবং @ পিটার -1-এর জন্য ধন্যবাদ ।


1
আপনার আউটপুটটিকে স্বাক্ষরবিহীন হিসাবে গণ্য করার জন্য আপনার shrপরিবর্তে সম্ভবত ব্যবহার করা উচিত sar(কোড আকারে কোনও পরিবর্তন নেই)। (@CodyGray দ্বারা সমঝোতার প্রচেষ্টা এবং নির্দিষ্ট তার 7-বাইট add+ + loopউত্তর )।
পিটার কর্ডেস

1
এটি ক্লোজড-ফর্মুলা সূত্র বাস্তবায়নে পারফরম্যান্সের জন্য সর্বোত্তম দেখায় তবে আপনি 3 বি দ্বি-অপারেন্ড ফর্মের পরিবর্তে ওয়ান-অপারেন্ড ফর্ম mul %ediবা imul %edi(প্রতিটি 2 বি) ব্যবহার করে একটি বাইট সংরক্ষণ করতে পারেন । এটি হাই-হাফ ফলাফলের সাথে ইডিএক্সকে ক্লোবার্স করে তবে এটি দুর্দান্ত। imulএক-অপারেন্ড ফর্মের পরে মাল্টি-অপারেন্ড চালু হয়েছিল এবং এসকিপ বাইট সহ একটি 2-বাইট অপকোড রয়েছে 0F। তিনটি বিকল্পের যে কোনও একটি সর্বদা একই ফল তৈরি করবে eax, এটি কেবলমাত্র উচ্চ অর্ধেক যা স্বাক্ষরিত বনাম স্বাক্ষরযুক্ত উপর নির্ভর করে।
পিটার কর্ডেস




10

অষ্টাভে , 22 19 বাইট

কারণ পাটিগণিত অপারেশন বিরক্তিকর ...

@(n)nnz(triu(e(n)))

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

ব্যাখ্যা

প্রদত্ত n, এটি e এর সংখ্যার সমান সমস্ত এন্ট্রি সহ একটি n× nম্যাট্রিক্স তৈরি করে ; তির্যক শূন্য নীচে এন্ট্রি করে; এবং nonzero মানগুলির সংখ্যা আউটপুট করে।


এটি আসলে সংখ্যার সংস্করণের চেয়েও খাটো?
15:25 এ ফলস এছলং

@ চ্যালেঞ্জার 5 না, তবে সংখ্যামূলক সংস্করণটি বিরক্তিকর:@(n)sum(1:n)
লুইস মেন্ডো


8

জেলি , 2 বাইট

RS

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

ব্যাখ্যা

RS

    implicit input
 S  sum of the...
R   inclusive range [1..input]
    implicit output

গৌস যোগফল, 3 বাইট

‘×H

ব্যাখ্যা

‘×H

     implicit input
  H  half of the quantity of...
‘    input + 1...
 ×   times input
     implicit output

এটি যেকোনফিক্সেও কাজ করে: পি (টিআইও তে নয়)
হাইপারনিউটারিনো

8

এপিএল, 3 বাইট

+/⍳

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

+/- যোগফল (হ্রাস +), - পরিসীমা।


এটি সূচকের উপর নির্ভর করে। যদি সূচকে 0 তে সেট করা থাকে, তবে আপনার অতিরিক্ত 2 বাইট লাগবে1+
ওয়ার্নার ওয়ার্নার

2
@ ওয়ার্নার ইনডেক্সিং ডিফল্ট 1তাই আমি নির্দিষ্ট করে নিই। এখানে ব্যবহার করার সময় কেবল ⎕IO←0এটি নির্দিষ্ট করার জন্য এটি সাধারণ (এবং এটি বাইট গণনাতে অন্তর্ভুক্ত নয়)
ইউরিয়েল

8

হাস্কেল , 13 বাইট

এটি সবচেয়ে সংক্ষিপ্ত (আমার মনে হয়):

f n=sum[1..n]

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

সরাসরি, 17 13 বাইট

f n=n*(n+1)/2

-4বাইটস জন্য @ হুইট উইজার্ড ধন্যবাদ !

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

পয়েন্টফ্রি সরাসরি, 15 বাইট

(*)=<<(/2).(+1)

আইডিটির জন্য @ নিমিকে ধন্যবাদ!

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

পয়েন্টফ্রি sum, 16 বাইট মাধ্যমে

sum.enumFromTo 1

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

পুনরাবৃত্তির সাথে, 22 18 বাইট

f 0=0;f n=n+f(n-1)

ধন্যবাদ @ ম্যাপেল_শ্যাফ্ট ধারণার জন্য এবং @ লাইকনি এটি গল্ফ করার জন্য!

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

স্ট্যান্ডার্ড fold, 19 বাইট

f n=foldr(+)0[1..n]

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


7

স্টারি , 27 22 বাইট

5 মাইল সংরক্ষণ করেছেন @ মাইলকে ধন্যবাদ !

, + +  **       +   *.

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

ব্যাখ্যা

,             Read number (n) from STDIN and push it to the stack
 +            Duplicate top of the stack
 +            Duplicate top of the stack
  *           Pop two numbers and push their product (n*n)
*             Pop two numbers and push their sum (n+n*n)
       +      Push 2
   *          Pop two numbers and push their division ((n+n*n)/2)
.             Pop a number and print it to STDOUT


@ মাইলস ধন্যবাদ! খুব ভালো বুদ্ধি!
লুইস মেন্ডো

7

05 এ বি 1 , 2 বাইট

LO

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

কিভাবে এটা কাজ করে

     #input enters stack implicitly
L    #pop a, push list [1 .. a]
 O   #sum of the list
     #implicit output 

গৌস যোগফল, 4 বাইট

>¹*;

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

কিভাবে এটা কাজ করে

>       #input + 1
 ¹*     #get original input & multiply
   ;    #divide by two 

3
ÝOএছাড়াও কাজ করে এবং উপায় hello
ম্যাজিক অক্টোপাস উরন

1
L0 এবং দেখুন ..
dylnan

7

জাভা (ওপেনজেডিকে 8) , 10 বাইট

a->a++*a/2

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

থেকে গল্ফ নেওয়ার জন্য একটি মুহুর্ত নিলেন n->n*(n+1)/2কারণ আমি ধীর।

তবে এটি আসল জাভা উত্তর নয়। এটি অবশ্যই যথেষ্ট পরিমাণে ভারবজ নয়।

import java.util.stream.*;
a->IntStream.range(1,a+1).sum()

খারাপ না, তবে আমরা আরও ভাল করতে পারি।

import java.util.stream.*;
(Integer a)->Stream.iterate(1,(Integer b)->Math.incrementExact(b)).limit(a).reduce(0,Integer::sum)

আমি জাভা পছন্দ করি।


1
আপনি যদি আরও বেশি ভারবস হতে চান তবে ল্যাম্বডা কেন ব্যবহার করবেন !? : পি
TheLethalCoder


1
ঠিক একই সমাধান ইতিমধ্যে পোস্ট করা হয়েছিল
শীতের

2
আমি অবশ্যই এটি মিস করেছি, তবে যে কোনও ক্ষেত্রে, আমি অন্য উত্তরগুলির বিষয়বস্তুগুলি না দেখার প্রবণতা করি। আমি আমার নিজের গল্ফ লিখতে পছন্দ করি
জিন্সারহেল

7

চেক করুন , 5 বাইট

:)*$p

চেক এমনকি একটি গল্ফ ভাষা নয়, তবুও এটি সিজোমকে পরাজিত করে!

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

ব্যাখ্যা:

ইনপুট নম্বর স্ট্যাকের উপর স্থাপন করা হয়। :এটা সদৃশ দিতে n, n। এরপরে এটি দেওয়া হয় ), দিয়ে দেওয়া হয় n, n+1*দুটি একসাথে গুন করে, এবং তারপরে $ফলাফলটি 2 দ্বারা ভাগ করে ফলাফল pপ্রিন্ট করে এবং প্রোগ্রামটি সমাপ্ত হয়।



6

ট্যাক্সি , 687 বাইট

Go to Post Office:w 1 l 1 r 1 l.Pickup a passenger going to The Babelfishery.Go to The Babelfishery:s 1 l 1 r.Pickup a passenger going to Cyclone.Go to Cyclone:n 1 l 1 l 2 r.[a]Pickup a passenger going to Addition Alley.Pickup a passenger going to The Underground.Go to Zoom Zoom:n.Go to Addition Alley:w 1 l 1 r.Pickup a passenger going to Addition Alley.Go to The Underground:n 1 r 1 r.Switch to plan "z" if no one is waiting.Pickup a passenger going to Cyclone.Go to Cyclone:n 3 l 2 l.Switch to plan "a".[z]Go to Addition Alley:n 3 l 1 l.Pickup a passenger going to The Babelfishery.Go to The Babelfishery:n 1 r 1 r.Pickup a passenger going to Post Office.Go to Post Office:n 1 l 1 r.

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

মন্তব্য সহ অন গল্ফড:

[ n = STDIN ]
Go to Post Office: west 1st left 1st right 1st left.
Pickup a passenger going to The Babelfishery.
Go to The Babelfishery: south 1st left 1st right.
Pickup a passenger going to Cyclone.
Go to Cyclone: north 1st left 1st left 2nd right.

[ for (i=n;i>1;i--) { T+=i } ]
[a]
Pickup a passenger going to Addition Alley.
Pickup a passenger going to The Underground.
Go to Zoom Zoom: north.
Go to Addition Alley: west 1st left 1st right.
Pickup a passenger going to Addition Alley.
Go to The Underground: north 1st right 1st right.
Switch to plan "z" if no one is waiting.
Pickup a passenger going to Cyclone.
Go to Cyclone: north 3rd left 2nd left.
Switch to plan "a".

[ print(T) ]
[z]
Go to Addition Alley: north 3rd left 1st left.
Pickup a passenger going to The Babelfishery.
Go to The Babelfishery: north 1st right 1st right.
Pickup a passenger going to Post Office.
Go to Post Office: north 1st left 1st right.

এটি ব্যবহারের চেয়ে লুপের 22.6% কম x*(x+1)/2



5

ব্রেইনফাক, 24 বাইট

আই / ও বাইট হিসাবে পরিচালনা করা হয়।

,[[->+>+<<]>[-<+>]<-]>>.

ব্যাখ্যা

,[[->+>+<<]>[-<+>]<-]>>.
,                           # Read a byte from STDIN
 [                  ]       # Main loop, counting down all values from n to 1
  [->+>+<<]                 # Copy the i value to *i+1 and *i+2
           >[-<+>]          # Move *i+1 back to i
                  <-        # Move back to i, lower it by one. Because *i+2 is never reset, each iteration adds the value of i to it.
                     >>.    # Output the value of *i+2

2
এটি অত্যন্ত দুর্দান্ত যে ব্রেইনফাক এই চ্যালেঞ্জটিতে কিছু উচ্চ-স্তরের ভাষাগুলি পরাস্ত করতে সক্ষম।
গ্যারেথপিডাব্লু

আপনার কোডটি ব্যবহার করে লেন্জুয়েজে (কেবল মজা করার জন্য) কোনও উত্তর যুক্ত করা কি আমার এই বৈধতা নয়? @ATaco
ভি।

আমার মনে হয় না, এটি একই কোড হিসাবে হবে, ঠিক আলাদা এনকোড। @ ভি.কোর্তোইস
এটিাকো

@ATaco আহ আপনি ঠিক বলেছেন।
ভি। কুর্তোয়া

5

,,,, 6 বাইট

:1+×2÷

ব্যাখ্যা

:1+×2÷

:       ### duplicate
 1+     ### add 1
   ×    ### multiply
    2÷  ### divide by 2

আমি যদি শীঘ্রই যে কোনও সময় রেঞ্জ প্রয়োগ করি ...


4

রেটিনা , 13 বাইট

.+
$*
1
$`1
1

এটি অনলাইন চেষ্টা করুন! ব্যাখ্যা: প্রথম এবং শেষ পর্যায়ে কেবল অবিচ্ছিন্ন ⇔ দশমিক রূপান্তর। মধ্যম পর্যায়ে প্রতিটি প্রতিস্থাপন 1সংখ্যা সঙ্গে 1তার বাম প্লাস অন্য গুলি 1জন্য 1নিজেই, এইভাবে থেকে গণনা 1করা n, পরোক্ষভাবে মান summing।


4

> <> , 7 + 3 = 10 বাইট

এন (এন + 1) / 2 গণনা করে । -V পতাকার
জন্য 3 বাইট যুক্ত করা হয়েছে

:1+2,*n

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

অথবা যদি ইনপুটটিকে একটি অক্ষর কোড হিসাবে নেওয়া যায়:

> <> , 9 বাইট

i:1+2,*n;

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


2
অন্যান্য গণিত-পদ্ধতির ( (n^2+n)/2) ব্যবহার করাও 7 বাইট:::*+2,n
স্টেইনবার্গ


4

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

<?=$argn*-~$argn/2;
<?=$argn/2*++$argn;
<?=$argn*++$argn/2; # this one fails

বিল্টিনস, 29 বাইট ব্যবহার:

<?=array_sum(range(1,$argn));

লুপ, 31 বাইট:

while($argn)$s+=$argn--;echo$s;

আমারও খুব একটা অনুমান:for(;$argn;$s+=$argn--);echo$s;
প্রোগ্রোক

4

কিউবিক্স , 12 10 বাইট

*,)2I://O@

প্রাথমিক সংস্করণ

....I:)*2,O@

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

ব্যাখ্যা

একটি কিউবে প্রসারিত, কোডটি এর মতো দেখায়:

    * ,
    ) 2
I : / / O @ . .
. . . . . . . .
    . .
    . .

নির্দেশ পয়েন্টার (আইপি) Iপূর্ব দিকে চলমান থেকে শুরু হয় । এটি /আয়না জুড়ে না আসা অবধি পূর্বদিকে অগ্রসর হতে থাকে , যা এটি উত্তরকে প্রতিবিম্বিত করে। আইপি কোডের শীর্ষে পৌঁছালে, এটি .দক্ষিণে অগ্রসর হয়ে তৃতীয় লাইনের সর্বশেষে আবৃত হয় । তারপরে এটি .উত্তর দিকে অগ্রসর হয়ে শেষ লাইনে পেনাল্টিমেটে আবৃত হয়। তারপরে এটি /আবার আয়নাতে পৌঁছে , যা এটি পূর্বকে প্রতিবিম্বিত করে, কেবল /পরেরটির জন্য এটি আবার উত্তর প্রতিফলিত করে। এবার, আইপিটি .তৃতীয় লাইনে পেনাল্টিমেটে আবৃত করে, এবং তারপরে .শেষ লাইনে শেষ।

নির্দেশগুলি নিম্নলিখিত ক্রমে কার্যকর করা হয়।

I:)*2,O@ # Explanation
I        # Take input as an integer and push it to the stack
 :       # Duplicate the input
  )      # Increment one of the inputs
   *     # Multiply the input by input+1
    2    # Push 2 to the stack
     ,   # Integer devide the multiplication result by 2
      O  # Output the result
       @ # End program

4

x86-64 মেশিন কোড, 7 বাইট

31 C0
01 C8
E2 FC
C3  

উপরের বাইটগুলি একটি ফাংশন সংজ্ঞায়িত করে যা একটি একক প্যারামিটার গ্রহণ করে nএবং 1 থেকে সমস্ত সংখ্যার যোগফলকে যোগ করে n

এটি মাইক্রোসফ্ট x64 কলিং কনভেনশনে লিখিত আছে , যা ECXরেজিস্টারে প্যারামিটারটি পাস করে । রিটার্নের মানটি EAXসমস্ত x86 / x86-64 কলিং কনভেনশনগুলির মতো রেখে যায় ।

অবহেলিত সমাবেশ মেমোনমিক্স:

       xor  eax, eax    ; zero out EAX
Next:  add  eax, ecx    ; add ECX to EAX
       loop Next        ; decrement ECX by 1, and loop as long as ECX != 0
       ret              ; return, with result in EAX

এটি অনলাইন চেষ্টা করুন!
(সেখানকার সি ফাংশন কলটি এমন একটি বৈশিষ্ট্যের সাথে টীকাযুক্ত করা হয়েছে যা আমার এসেম্বলি কোডটি ব্যবহার করে যে মাইক্রোসফ্ট কলিং কনভেনশন ব্যবহার করে জিসিসি এটি কল করেছিল T টিআইও যদি এমএসভিসি সরবরাহ করে তবে এটি প্রয়োজনীয় হবে না))


কোড গল্ফের অস্বাভাবিক মানদণ্ডগুলি দ্বারা, আপনি দেখতে পান যে এই পুনরাবৃত্তীয় লুপিং পদ্ধতির ক্ষেত্রে আরও বেশি বুদ্ধিমান গাণিতিক সূত্র ( n(n+1) / 2) ব্যবহার করা এমন পদ্ধতির চেয়ে ভাল , যদিও এটি রান-টাইমের গতির ক্ষেত্রে স্পষ্টতই কম দক্ষ।

সংখ্যা তত্ত্ব ব্যবহার করে, সিলিংক্যাটটির বাস্তবায়ন এখনও একটি বাইট দ্বারা পরাজিত হতে পারে। এই নির্দেশাবলী প্রত্যেকটি অপরিহার্য, কিন্তু সামান্য খাটো এনকোডিং জন্য IMULযে ব্যবহার EAX পরোক্ষভাবে একটি গন্তব্য প্রতীক হিসাবে (আসলে এটি ব্যবহার করে EDX:EAX, কিন্তু আমরা শুধু ফলাফলের উপরের 32 বিট উপেক্ষা করতে পারেন)। এটি এনকোড করতে মাত্র 2 বাইট, নীচে 3 থেকে।

LEAপাশাপাশি তিনটি বাইট নেয়, তবে এর আশেপাশে কোনও উপায় নেই কারণ আসল মান সংরক্ষণের সময় আমাদের বৃদ্ধি প্রয়োজন । যদি আমরা MOVএকটি অনুলিপি তৈরি করতে INCপারি , তবে আমরা 4 বাইটে থাকব। (X86-32-এ, যেখানে INCকেবল 1 বাইট রয়েছে, আমরা একই 3 বাইটে থাকব LEA))

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

8D 41 01                lea    eax, [rcx+1]
F7 E9                   imul   ecx
D1 E8                   shr    eax, 1
C3                      ret

এখন কেবল 8 বাইট (পিটার কর্ডসকে ধন্যবাদ) তবুও, 8> 7।


1
প্রকৃতপক্ষে, এক-অপারেন্ড imul ecxবা mul ecxক্লোজড-ফর্ম বাস্তবায়নে একটি বাইট সংরক্ষণ করবে। আমি এখনই তা স্পষ্ট করিনি; আমি মন্তব্য করতে চলেছি যে একটি অন্তর্ভুক্ত eaxঅপারেন্ড ঠিক আছে বুঝতে পেরে এটি পারফরম্যান্স এবং কোড-আকার উভয়ের জন্যই অনুকূল ।
পিটার

আমি ভাবলাম যে অন্য উত্তরগুলি দেখার চেয়ে add+ loopআরও কম হবে imul। হ্যান্ডি যে এখানে একটি স্ট্যান্ডার্ড কলিং কনভেনশন রয়েছে যা প্রথম তর্কটি পাস করেecx
পিটার কর্ডেস

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