প্রতিবেশীদের যোগফল


22

এটি মোটামুটি সহজ চ্যালেঞ্জ হওয়া উচিত।

সংখ্যার অ্যারের জন্য, এমন একটি অ্যারে তৈরি করুন যেখানে প্রতিটি উপাদানগুলির জন্য সমস্ত প্রতিবেশী উপাদানগুলি নিজের সাথে যুক্ত হয় এবং সেই অ্যারের যোগফলটি ফেরত দেয়।

ইনপুট অ্যারেতে রূপান্তরটি এখানে ঘটে [1,2,3,4,5]

[1,2,3,4,5] => [1+2, 2+1+3, 3+2+4, 4+3+5, 5+4] => [3,6,9,12,9] => 39
 0          => neighbours of item 0, including item 0
[1,2]       => 1 + 2      => 3
   1
[1,2,3]     => 1 + 2 + 3  => 6
     2
  [2,3,4]   => 2 + 3 + 4  => 9
       3
    [3,4,5] => 3 + 4 + 5  => 12
         4
      [4,5] => 4 + 5      => 9

               3+6+9+12+9 => 39

পরীক্ষার মামলা

[]            => 0 (or falsy)
[1]           => 1
[1,4]         => 10 (1+4 + 4+1)
[1,4,7]       => 28
[1,4,7,10]    => 55
[-1,-2,-3]    => -14
[0.1,0.2,0.3] => 1.4
[1,-20,300,-4000,50000,-600000,7000000] => 12338842

লিডারবোর্ড



আমাদের কি ভাসমান পয়েন্ট সংখ্যা বা কেবল পূর্ণসংখ্যার সমর্থন করা দরকার?
করভাস_192

@ corvus_192 পরীক্ষার ক্ষেত্রে অ-পূর্ণসংখ্যার অন্তর্ভুক্ত।
জিওবিটস

@ জিওবিটস আমি এটি লক্ষ্য করি নি, আমি আমার উত্তরটি সম্পাদনা করব।
corvus_192

2
আপনার পরবর্তী 2 টি মাত্রিক অ্যারে দিয়ে এটি করা উচিত।
ব্র্যাডলি উফনার 18

উত্তর:


8

এমএটিএল , 5 বাইট

7BZ+s

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

ব্যাখ্যা

7B  % Push array [1, 1, 1], obtained as 7 in binary
Z+  % Take input implicitly. Convolve with [1, 1, 1], keeping size
s   % Sum of resulting array. Display implicitly

3
খুব চালাক ব্যবহার 7Bপেতে সেখানে[1 1 1]
Suever

আমি এমএটিএল জানি না, তবে আমি অবাক হই: একটি তালিকার জন্য [a,b,c,...], আপনি কীভাবে পাবেন a+bতবে পাওয়া এড়ানো যায় a?
খ্রিস্টান সিভর্স

1
@ ক্রিশ্চিয়ান সংযোজন অপারেশনের মাধ্যমে সংযোজনটি করা হয়। এটি আপনি যে আংশিক ফলাফলের উল্লেখ করেছেন তা উত্পন্ন করবে, তবে তাদের দৃids়বিশ্বাসের একটি সংস্করণ রয়েছে যা এগুলি এড়িয়ে চলে, কারণ এটি কেবলমাত্র ইনপুট হিসাবে অনেকগুলি এন্ট্রি সহ একটি আউটপুট অ্যারে উত্পাদন করে। এটি সোয়েভারের উত্তরেও ব্যবহৃত হয়
লুইস মেন্ডো

19

পাইথন, 25 বাইট

lambda a:sum((a*3)[1:-1])

এটি কেন কাজ করে তা দেখতে ওপিতে সম্প্রসারণটি 45 ডিগ্রি ঘোরান:

             1 + 2                        
           + 1 + 2 + 3                            2 + 3 + 4 + 5
               + 2 + 3 + 4          =       + 1 + 2 + 3 + 4 + 5
                   + 3 + 4 + 5              + 1 + 2 + 3 + 4.
                       + 4 + 5

14

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

lambda a:sum(a)*3-a[0]-a[-1]

প্রতিটি শেষ উপাদানগুলির যোগফল এবং বিয়োগের মাত্র 3 বার


আমি একটি ঝরঝরে 25-বাইট সমাধানও পেয়েছি ।
লিন

1
আসলে, aখালি তালিকা (প্রথম পরীক্ষার কেস) হলে কী হবে? a[0]একটি নিক্ষেপ করবে IndexError, না?
লিন

6

05 এ বি 1 , 11 5 বাইট

আদনানকে ধন্যবাদ 6 বাইট সংরক্ষণ করা ।

€Ð¦¨O

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

ব্যাখ্যা

€Ð     # triplicate each item in the list
  ¦¨   # remove first and last element
    O  # sum

কি €Ð¦¨Oকাজ :)?
আদনান

@ আদনান: উজ্জ্বল! আমি এটি 3 টি দিয়ে করার একটি উপায় নিয়ে ভাবার চেষ্টা €Ðকরেছি, তবে আমি আগেও ব্যবহার করেও কখনও বিবেচনা করি নি €D: পি
এমিগানা

4

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

l=>eval(l.join`+`)*3-l[0]-l.pop()

NaNখালি তালিকা দেওয়া হলে ফিরে আসে।


আপনি যদি এর মতো v=>eval(v.join`*3+`+"*2")-v[0]
যোগটিতে গুণটিকে

@ গ্র্যাক্স - দুর্দান্ত! তবে খালি অ্যারের জন্য এটি আর মিথ্যা হবে না।
আর্নৌল্ড

সবসময় কিছু আছে না?
Grax32

@ গ্র্যাক্স - নং প্রথম পরীক্ষার কেসটি খালি অ্যারে।
আর্নল্ড

4

আর, 75 70 52 34 33 31 বাইট

তিনবার যোগফল এবং প্রথম এবং শেষ উপাদানটি বিয়োগ করে

sum(x<-scan())*3-x[1]-tail(x,1)

সম্পাদনা করুন: @ আর্টারনবুলকে 3 টি অতিরিক্ত বাইট সংরক্ষণ করা হয়েছে


3

স্কালা, 47 বাইট

def&(a:Float*)=(0+:a:+0)sliding 3 map(_.sum)sum

একটি 0 প্রস্তুত করে এবং সংযোজন করে, তার পরে প্রতিবেশীদের যোগফলের জন্য 3 আকারের স্লাইডিং উইন্ডো ব্যবহার করে এবং মোট যোগফল গণনা করে


3

জাভা 7, 72 বাইট

float c(float[]a){float s=0,l=0;for(float i:a)s+=l=i;return 3*s-l-a[0];}

আমি মনে করি না অ্যারের প্রথম এবং শেষ উপাদানগুলি চিহ্নিত করে অতিরিক্ত ইনপুট যুক্ত করা চ্যালেঞ্জের মনোভাব।
জিওবিটস

@ জিওবিটস আমি এটিকে পরিবর্তন করছি .....
সংখ্যাঃ নোট

কুল। আপনি এর floatপরিবর্তে double:) এর সাহায্যে আরও কিছু গল্ফ করতে পারেন :)
Geobits

আমি কি পরিবর্তে এটি ব্যবহার করতে পারি .... ডাবলটিতে 2x ফ্লোটের নির্ভুলতা রয়েছে
নোট

1
কেন না int?
সিডগেট

3

গণিত, 34 32 29 বাইট

কিছুটা অনুপ্রেরণা নিয়ে লিনের ঝরঝরে পাইথন উত্তর ...

Check[3Tr@#-Last@#-#[[1]],0]&

অথবা

Check[3(+##)-#&@@#-Last@#,0]&

অথবা

Check[##-#/3&@@#*3-Last@#,0]&

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


2
আমাকে শেখানোর জন্য +1Check
গ্রেগ মার্টিন

2

ম্যাটল্যাব, 31 28 26 বাইট

3 লাইট সংরক্ষণ করেছেন লুইসকে ধন্যবাদ

@(x)sum(conv(x,1:3>0,'s'))

এটি এমন একটি নামহীন ফাংশন তৈরি করে যার নাম দেওয়া ansযেতে পারে:ans([1, 2, 3, 4, 5])

একটি অনলাইন ডেমো সরবরাহ করতে (যা অক্টভেভ ব্যবহার করে), আমাকে শেষ ইনপুট হিসাবে 'same'পরিবর্তে ব্যবহার 's'করতে হয়েছিলconv

অনলাইন ডেমো

ব্যাখ্যা

আমরা সংবর্তন (সঞ্চালন convএকটি সহ) 1 x 3সব 1-এর কার্নেল (একটি অ্যারের উপার্জন দ্বারা নির্মিত 1:3এবং তারপর শূন্য তুলনায় >0) এবং তৃতীয় ইনপুট নির্দিষ্ট করে মূল আকার রাখা 'same'বা ম্যাটল্যাব আমরা কেবল এই খাটো করতে পারেন 's'। তারপরে আমরা ফলাফলের যোগফলটি প্রয়োগ করি।


আপনি সম্ভবত সংক্ষিপ্ত করতে পারেন's'
লুইস মেন্ডো

1
@ লুইস মেন্ডো ওহ ভাল কল! ম্যাটল্যাব এটির অনুমতি দেয় তবে
অক্টাভা


2

জে, 9 বাইট

+/@,}.,}:

জন্য [1, 2, 3, 4, 5], প্রতিবেশীরা হয়

1 2 3 4 5
1+2
1+2+3
  2+3+4
    3+4+5
      4+5

তারপরে যোগফলগুলির ত্রিভুজগুলি বরাবর দেখুন

(2+3+4+5)+(1+2+3+4+5)+(1+2+3+4)

সুতরাং আমাদের কেবল মাথাটি মুছে ফেলা এবং তার লেজ মুছে ফেলা দিয়ে ইনপুটটির যোগফল খুঁজে বের করতে হবে।

ব্যবহার

   f =: +/@,}.,}:
   f 1 2 3 4 5
39
   f '' NB. Empty array
0
   f 1
1
   f 1 4
10
   f 1 4 7
28
   f 1 4 7 10
55
   f _1 _2 _3
_14
   f 0.1 0.2 0.3
1.4
   f 1 _20 300 _4000 50000 _600000 7000000
12338842

ব্যাখ্যা

+/@,}.,}:  Input: array A
       }:  Return a list with the last value in A removed
    }.     Return a list with the first value in A removed
      ,    Join them
   ,       Join that with A
+/@        Reduce that using addition to find the sum and return

খুশী হলাম। এবং খুশি 6 কে +!
কনর ও'ব্রায়েন

2

ব্রেন-ফ্লাক , 68 বাইট

(<><>)([]){{}({}({})<>{})<>({}<(({})<>{})><>)([][()()])}{}({}{}<>{})

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

ব্যাখ্যা:

#Push a 0
(<><>)

#Push the stack height
([])

#While true:
{

    #Pop the stack height 
    {}

    #Add the sum of the top 3 elements to the other stack, and pop the top of the stack
    ({}({})<>{})<>({}<(({})<>{})><>)

    #Push the new stack height minus two
    ([][()()])

#End
}

#Pop the exhausted counter
{}

#Add the top two numbers to the other stack
({}{}<>)

2

পাওয়ারশেল ভি 2+, 40 বাইট

param($a)($a-join'+'|iex)*3-$a[0]-$a[-1]

অন্যান্য উত্তরের মতো, তালিকাটির যোগফল, 3 দ্বারা গুণিত, শেষ উপাদানগুলি বিয়োগ করে। বারফগুলি খালি ইনপুটটির জন্য দর্শনীয় ত্রুটিটি খুঁজে বের করে এবং পরে থুতু ফেলে দেয় 0, তবে যেহেতু STDERR ডিফল্টরূপে উপেক্ষা করা হয়, এটি ঠিক আছে।

PS C:\Tools\Scripts\golfing> .\sum-of-neighbors.ps1 @()
Invoke-Expression : Cannot bind argument to parameter 'Command' because it is an empty string.
At C:\Tools\Scripts\golfing\sum-of-neighbors.ps1:1 char:22
+ param($a)($a-join'+'|iex)*3-$a[0]-$a[-1]
+                      ~~~
    + CategoryInfo          : InvalidData: (:String) [Invoke-Expression], ParameterBindingValidationException
    + FullyQualifiedErrorId : ParameterArgumentValidationErrorEmptyStringNotAllowed,Microsoft.PowerShell.Commands.InvokeExpressionCommand

0

PS C:\Tools\Scripts\golfing> .\sum-of-neighbors.ps1 @(1)
1

PS C:\Tools\Scripts\golfing> .\sum-of-neighbors.ps1 @(1,4)
10

PS C:\Tools\Scripts\golfing> .\sum-of-neighbors.ps1 @(1,4,7)
28

PS C:\Tools\Scripts\golfing> .\sum-of-neighbors.ps1 @(1,4,7,10)
55

PS C:\Tools\Scripts\golfing> .\sum-of-neighbors.ps1 @(-1,-2,-3)
-14

PS C:\Tools\Scripts\golfing> .\sum-of-neighbors.ps1 @(0.1,0.2,0.3)
1.4

PS C:\Tools\Scripts\golfing> .\sum-of-neighbors.ps1 @(1,-20,300,-4000,50000,-600000,7000000)
12338842

ParameterArgumentValidationErrorEmptyStringNotAllowedAn_ಠ কি ব্যতিক্রম!
কেড

2

রুবি, 35 33 31 বাইট

লিনের সমাধান থেকে অনুপ্রাণিত:

->a{[*(a*3)[1..-2]].reduce:+}

to_aসেগমেন্ট খালি অ্যারে হ্যান্ডেল করতে নেই।

সম্পাদনা: এম-ক্রজান এবং হিস্টোক্র্যাটকে ধন্যবাদ।


আপনার চারপাশে প্রথম বন্ধনী প্রয়োজন নেই :+
এম-ক্রিজান

[*(a*3)[1..-2]]না .to_aদুই কম বাইটে।
হিস্টোক্র্যাট

আপনি রুবি ২.৪.০ কে একবার যেতে চান। এটি সঙ্গে আসে Array#sum
মার্টিন এন্ডার

2

পার্ল 6 , 25 বাইট

{.sum*3-.[0]-(.[*-1]//0)}    # generates warning
{+$_&&.sum*3-.[0]-.[*-1]}

সম্প্রসারিত:

# bare block lambda with implicit parameter 「$_」
{
  +$_        # the number of elements

  &&         # if that is 0 return 0, otherwise return the following

  .sum * 3   # sum them up and multiply by 3
  - .[ 0 ]   # subtract the first value
  - .[*-1]   # subtract the last value
}

টেস্ট:

use v6.c;
use Test;

my &code = {+$_&&.sum*3-.[0]-.[*-1]}

my @tests = (
  []            => 0,
  [1]           => 1,
  [1,4]         => 10,
  [1,4,7]       => 28,
  [1,4,7,10]    => 55,
  [-1,-2,-3]    => -14,
  [0.1,0.2,0.3] => 1.4,
  [1,-20,300,-4000,50000,-600000,7000000] => 12338842,
);

plan +@tests;

for @tests -> $_ ( :key(@input), :value($expected) ) {
  is code(@input), $expected, .gist;
}

1

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

<?=3*array_sum($a=$argv)-$a[1]-end($a);

এভাবে চালান:

echo '<?=3*array_sum($a=$argv)-$a[1]-end($a);' | php -- 1 -20 300 -4000 50000 -600000 7000000 2>/dev/null;echo

ব্যাখ্যা

প্রথম এবং শেষ সংখ্যা (দুইবার যুক্ত) ব্যতীত প্রতি সংখ্যাকে 3 বার যোগ করার ক্ষেত্রে চ্যালেঞ্জ হ্রাস করা যায়। অতএব আমি যোগফলটি প্রথম এবং শেষ সংখ্যার বিয়োগফলের 3 বার ফিরে আসি।


1

> <> , 25 (+3 জন্য  -v) = 28 বাইট

স্ট্যাক থেকে ইনপুট নেয়  -vএবং ধরে নেয় স্টিডিন খালি, কোনও -1মান সরবরাহ করার জন্য এটির উপর নির্ভর করে ।

:{:}+i*v
:$v?=1l<+++:
;n<

1

লিনিকিউ, 42 বাইট সহ সি #

a=>3*a.Sum()-(a.Length>0?a[0]+a.Last():0);

নাম স্থান প্রয়োজন System.Linq


সি #, 84 বাইট

a=>{int i=0,l=a.Length;var r=0d;for(;i<l;)r+=3*a[i++];return(l>0?r-a[0]-a[l-1]:0);};

পরীক্ষার কেস সহ সম্পূর্ণ প্রোগ্রাম:

using System;

namespace SumOfNeighbours
{
    class Program
    {
        static void Main(string[] args)
        {
            Func<double[],double>f= a=>{int i=0,l=a.Length;var r=0d;for(;i<l;)r+=3*a[i++];return(l>0?r-a[0]-a[l-1]:0);};


            // test cases:
            double[] x = new double[]{1,2,3,4,5};
            Console.WriteLine(f(x));    // 39

            x = new double[] {};
            Console.WriteLine(f(x));    // 0

            x = new double[] {1};
            Console.WriteLine(f(x));    // 1

            x = new double[] {1,4};
            Console.WriteLine(f(x));    // 10 (1+4 + 4+1)

            x = new double[] {1,4,7};
            Console.WriteLine(f(x));    // 28

            x = new double[] {1,4,7,10};
            Console.WriteLine(f(x));    // 55

            x = new double[] {-1,-2,-3};
            Console.WriteLine(f(x));    // -14

            x = new double[] {0.1,0.2,0.3};
            Console.WriteLine(f(x));    // 1.4

            x = new double[] {1,-20,300,-4000,50000,-600000,7000000};
            Console.WriteLine(f(x));    // 12338842
        }
    }
}

1

রেকেট 48 বাইট

(if(null? l)0(-(* 3(apply + l))(car l)(last l)))

Ungolfed:

(define (f lst)
  (if (null? lst)
      0
      (- (* 3 (apply + lst))
         (first lst)
         (last lst))))

পরীক্ষামূলক:

(f '()) 
(f '(1))
(f '(1 4)) 
(f '(1 4 7)) 
(f '(1 4 7 10)) 
(f '(-1 -2 -3)) 
(f '(0.1 0.2 0.3)) 
(f '(1 -20 300 -4000 50000 -600000 7000000)) 

আউটপুট:

0
1
10
28
55
-14
1.4000000000000001
12338842

1

গ্লো , 12 বাইট

গ্লোোর একটি বৈশিষ্ট্য লক্ষ্য হিসাবে কাজ করছে না তাই আমাকে এই বেদনাদায়ক উপায়ে করতে হয়েছিল।

__]:]:]:,,[+

ব্যাখ্যা:

__                   // duplicate the input list twice
  ]:]:]:             // flatten each list, and rotate stack left 
        ,,           // pop the last 2 numbers 
                     // (which are the first and last element of the list)
          [+         // wrap all items in a list and sum.

1

এলিক্সির , 93 বাইট

&if (length(&1)>0),do: Enum.reduce(&1,fn(n,r)->n+r end)*3-Enum.at(&1,0)-List.last(&1),else: 0

ক্যাপচার অপারেটর ব্যবহার করে বেনামে ফাংশন।

পরীক্ষার কেস সহ সম্পূর্ণ প্রোগ্রাম:

s=&if (length(&1)>0),do: Enum.reduce(&1,fn(n,r)->n+r end)*3-Enum.at(&1,0)-List.last(&1),else: 0
# test cases:
IO.puts s.([])            # 0
IO.puts s.([1])           # 1
IO.puts s.([1,4])         # 10 (1+4 + 4+1)
IO.puts s.([1,4,7])       # 28
IO.puts s.([1,4,7,10])    # 55
IO.puts s.([-1,-2,-3])    # -14
IO.puts s.([0.1,0.2,0.3]) # 1.4
IO.puts s.([1,-20,300,-4000,50000,-600000,7000000]) # 12338842

এলিক্সিরপ্লেগ্রাউন্ডে এটি অনলাইন ব্যবহার করে দেখুন !


1

টিআই-বেসিক, 17 বাইট

কেবলমাত্র তালিকার যোগফলের তিনগুণ, প্রথম এবং শেষ উপাদানটি বিয়োগ করে।

3sum(Ans)-Ans(1)-Ans(dim(Ans)-1

আমি বিশ্বাস করি মেটা সম্পর্কে sensকমত্য জানায় এটি ইনপুটটির Ansএকটি অবৈধ রূপ।
কনর ও'ব্রায়েন

আপনি এটি একটি তালিকা সহ ব্যবহার করতে পারেন, চিন্তা করবেন না। এটি পাস করুন{1,3,5,7,2,6}:prgmNEIGHBOR
টিমটেক

এটি এখনও Ansইনপুট হিসাবে।
কনর ও'ব্রায়েন

দেখে মনে হচ্ছে আমার যত্ন নেই? এটি টিআই-বেসিকের ইনপুট পাস করার মানক উপায়।
টিমটেক

আমি আপনার সাথে যতটা একমত, উত্তরটি আর বৈধ করে না।
কনর ও'ব্রায়েন

1

রুবি, 41 বাইট

->a{a.reduce(0,:+)*3-(a[0]?a[0]+a[-1]:0)}

পরীক্ষার কেস সহ সম্পূর্ণ প্রোগ্রাম:

f=->a{a.reduce(0,:+)*3-(a[0]?a[0]+a[-1]:0)}

#test cases
a=[]            
puts f.call(a)  # 0

a=[1]           
puts f.call(a)  # 1

a=[1,4]         
puts f.call(a)  # 10

a=[1,4,7]       
puts f.call(a)  # 28

a=[1,4,7,10]    
puts f.call(a)  # 55

a=[-1,-2,-3]    
puts f.call(a)  # -14

a=[0.1,0.2,0.3] 
puts f.call(a)  # 1.4

a=[1,-20,300,-4000,50000,-600000,7000000] 
puts f.call(a)  # 12338842

আমার প্রথম চেষ্টা রুবিতে।


রুবি হিসাবে আছে 2.4.0 Array#sum। এটিকে কেবল এই সমাধানে ফেলে দেওয়া যায় কিনা তা পরীক্ষা করার জন্য আমি এখনও পূর্বরূপের রিলিজ ইনস্টল করি নি।
মার্টিন ইন্ডার

1

জাভাস্ক্রিপ্ট, 46 বাইট

a.reduce((t,c,i)=>t+(a[i-1]|0)+c+(a[i+1]|0),0)

অতিরিক্ত 2 বাইটের জন্য @ রিলেমনকে ধন্যবাদ




1

সি ++, 67 বাইট

#import<valarray>
int f(std::valarray<int>v){return 3*v.sum()-v[0]-v[v.size()-1];}

ব্যবহার:

#include <iostream>
int main() {
    std::cout << f({1,2,1});
    return 0;
}

1

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

দ্রুত থেকে

sum.sequence[(0-).head,(3*).sum,(0-).last]$[1..5]

সুন্দর মাধ্যমে

sum.sequence[sum.init,sum,sum.tail]$[1..5]

নিচে কদর্যতম কিন্তু সংক্ষিপ্ততম

let y x=sum$init x++x++tail x in y[1..5]     
--  1234567890123456789012345

1

ব্যাচ, 67 বাইট

@set/as=l=0
@for %%n in (%*)do @set/as+=l=%%n
@cmd/cset/as*3-%1-l

যদি কোনও প্যারামিটার না থাকে তবে শেষ কমান্ডটি রূপান্তরিত হয় 0 * 3 - -0

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