Сума зворотного масиву


34

Ваша програма повинна приймати масив як вхідний.

Масив:

  1. Завжди буде 1 розмірний
  2. Міститиме лише цілі числа
  3. Може бути порожнім

Програма повинна повернути масив, а потім додати елементи до оригіналу, наприклад:

Вхід: [1, 2, 3]

Оригінал: [1, 2, 3]

Відмінено: [3, 2, 1]

[1, 2, 3]
 +  +  +
[3, 2, 1]

[1+3, 2+2, 3+1]

Вихід: [4, 4, 4]


Випробування:

#In             #Out
[8, 92],        [100, 100]
[1, 2, 3],      [4, 4, 4]
[5, 24, 85, 6], [11, 109, 109, 11]
[],             []
[999],          [1998]

Це , виграє найкоротший код (у байтах)!


J 3 байти. Програма т. Зв. t =: + |.
Річард Донован

@RichardDonovan Приємна відповідь! Чи можете ви надіслати відповідь замість коментаря, будь ласка :)
Ной Крістіно,

Відповіді:


13

Haskell , 20 байт

Збережіть 5 байт, змінивши вільну точку, як запропонував nimi

zipWith(+)=<<reverse

Спробуйте в Інтернеті!


4
йти pointfree: zipWith(+)=<<reverse.
німі

@nimi Wow Я не думав це робити, але це досить розумно.
Пшеничний майстер

Куди я кладу масив? Я спробував аргументи, і вступив на TIO
Ной Крістіно,

@NoahCristino я виправив TIO. Це безтокова функція, тому ви просто ставите вхід після функції, проте Haskell вимагає mainкомпілювати.
Пшеничний майстер

3
@maple_shaft: ми використовуємо =<<з функції монади , яка визначається як: (=<<) f g x = f (g x) x. Тут написано в інфіксі: (zipWith(+) =<< reverse) x-> zipWith(+) (reverse x) x.
німі

11

Желе , 2 байти

+U

Спробуйте в Інтернеті!

або

+Ṛ

Спробуйте в Інтернеті! (дякую @Mr. Xcoder за другу програму)

пояснення, хоча це досить зрозуміло

+U  Main link
+   Add, vectorizing, 
 U                    the input, reversed

+Ṛ  Main link
+   Add, vectorizing,
 Ṛ                    the input, reversed, without vectorizing (same thing for depth-1 lists)

Для порожнього масиву []цей результат нічого не дає. Це правильно. Представлення порожнього списку Джелі просто просто нічого. Зауважте, що представлення списку з одним елементом Jelly - це лише сам елемент. Додайте ŒṘдо коду, щоб побачити внутрішнє представлення виводу Python.


Я знайшов 2 випуски. 1) При тестуванні на [9]ньому виходить 18 замість [18], і 2) при тестуванні на []ньому нічого не виходить.
Ной Крістіно

@NoahCristino Це не повна програма, і у відповіді вже є пояснення до цього.
Ерік Аутгольфер

Тож я здогадуюсь, це добре, це якраз як желі виводить це
Ноа Крістіно,

@NoahCristino Так. Я додав частину до кінця своєї відповіді, щоб ви могли поставити цей атом в кінці коду, щоб побачити, як Python надрукував би його.
HyperNeutrino

+Ṛпрацює теж.
Містер Xcoder

11

JavaScript (ES6), 27 байт

a=>[...a].map(e=>e+a.pop())


О, чоловіче, я майже там був, але я не думав використовувати оператор розповсюдження, щоб зробити клон.
Рік Хічкок

Чи можете ви додати вбудовану спробуйте для javascript?
Ной Крістіно




7

Japt , 7 байт

mÈ+Ug~Y

Спробуйте в Інтернеті! з -Qпрапором для форматування вихідного масиву.

Пояснення

Неявне: U= вхідний масив

Зображуйте введення за допомогою наступної функції ...

+Ug

Значення плюс значення у вхідному масиві в індексі ...

~Y

-(index+1), який отримує елементи з кінця масиву.


1
Хороша робота! Мені подобається річ з декількома вводами!
Ной Крістіно

1
Мені дуже подобається перекладач Japt з декількома входами. Хороша робота!
Олівер

Це дуже круто :-) Я додав би цю функцію до "офіційного" перекладача, але з сучасним дизайном це свого роду нерозбірливо ...
ETHproductions



6

Python 2 , 33 32 байт

-1 байт завдяки @xnor

lambda l:[i+l.pop()for i in l*1]

Спробуйте в Інтернеті!


Пройшов усі мої тести добре. :)
Ной Крістіно,

Який незвичайний метод. l*1зберігає байт.
xnor

У мене виникають труднощі з розумінням номіналу l*1, будь-якої розробки
dhssa,

@dhssa l*1робить копію списку l. Якщо ми не зробили копію, pop()видалили б елементи зі списку до того, як вони отримали доступ до циклу for.
ов

Дякую за пояснення, я отримав це зараз. хороший трюк, який потрібно знати для кодування.
dhssa


5

C # (.NET Core) , 61 60 байт

-1 байт завдяки TheLethalCoder

a=>a.Reverse().Zip(a,(x,y)=>x+y).ToArray()

Спробуйте в Інтернеті!

Кількість байтів включає також:

using System.Linq;

Для пояснення - функція Zip в LINQ приймає дві колекції і виконує задану функцію для всіх відповідних елементів, тобто. обидва перші елементи разом, обидва другі елементи і т.д.


1
Гарна відповідь. Дякуємо за коментар щодо інформації.
Ной Крістіно,

1
Привіт і ласкаво просимо до PPCG! Вам не знадобиться промійна двокрапка в кількості байтів. Я вважаю, що ви можете повернути колекцію прямо з Zipдзвінка, щоб цього не потрібно ToArray(). Хороша робота!
TheLethalCoder

@TheLethalCoder Спасибі, і я додав ToArray (), оскільки виклик стосується масивів, тому я хотів, щоб автономна лямбда була масивом -> масив.
Grzegorz Puławski

4

Це виходить ""для [], це дивно. Не ваша вина лише мова.
Ной Крістіно

@NoahCristino Ось представлення CJam [].
Ерік Аутгольфер

Так, важко мати стандартний висновок для моєї проблеми, оскільки багато мов особливо відображають масиви [], і [4], отже, це добре.
Ной Крістіно

4

APL (Dyalog) , 3 байти

⌽+⊢

Спробуйте в Інтернеті!

Пояснення

          The argument reversed
+           Plus
          The argument

1
ніндзя. Мені потрібно перейти на клавіатуру APL ... xD
Uriel

@Uriel Я завжди на своїй клавіатурі APL: D
Kritixi Lithos

Любіть простоту. Виводиться ⌽+⊢без входу
Ноа Крістіно,

@NoahCristino Порожній вхід задається , порожній вектор. Без жодних аргументів, він друкує поїзд сам
Kritixi Lithos


4

R , 17 16 байт

-1 байт завдяки djhurio

rev(l<-scan())+l

Читає від stdin; повертає вектор; numeric(0)- числовий вектор нульової довжини для порожнього списку.

Спробуйте в Інтернеті!


Порожній "масив" повертаєтьсяnumeric(0)
Ной Крістіно

1
@NoahCristino представлений порожній вектор, як numeric(0)у Р.
Leaky Nun

Це добре. @LeakyNun
Noah Cristino

1
rev(l<-scan())+l, 16 байт?
djhurio

Для запису функціональна альтернатива R + pryr - лише на один байт довше:pryr::f(rev(x)+x)
JayCe



3

PowerShell , 26 байт

($a=$args)|%{+$a[--$i]+$_}

Спробуйте в Інтернеті!

Вводить дані як аргументи командного рядка.


Чи можете ви додати TIO? і посилання під таким ім’ям: codegolf.stackexchange.com/a/135427/61877
Ной Крістіно,

@NoahCristino: Як це? Я до цього часу не використовував цю річ, тож не маю уявлення, що я можу зробив не так. До речі, якщо ви очікуєте, що люди у своїх відповідях використовуватимуть певну послугу, то, будь ласка, вкажіть це в описі завдання.
Joey

Це добре. Це не потрібно, це просто робить відповіді більш якісними та простішими для перевірки для майбутніх глядачів.
Ной Крістіно,

3

C, 49 байт

f(a,n,b)int*a,*b;{for(b=a+n;a<b--;a++)*a=*b+=*a;}

Не повинно a,n,bбути a,b,nчи щось таке?
Ерік Аутгольфер

@EriktheOutgolfer Ні, bце не параметр для функції, а лише додаткове визначення, набране там з міркувань гольфу. aповинен бути вказівником на цілі числа, і nмає бути кількість цілих чисел у масиві.
orlp

Не могли б ви додати посилання TIO?
Ной Крістіно

3

PowerShell , 40 32 байти

($n=$args)|%{$n[-++$i]+$n[$i-1]}

Спробуйте в Інтернеті!

Вводиться як окремі аргументи командного рядка, що дозволено як один із форматів власного списку для PowerShell. Потім проведіть цикл через кожен елемент (тобто, коротший спосіб циклічного проходження через індекси), додавши відліки елементів із зворотного ( -1індексованого) до поточного елемента ( 0індексується, звідси і декремент -1). Ці залишені на конвеєрі, і вихід неявний.

Збережено 8 байт завдяки @briantist


він не виводить масив.
Ной Крістіно

1
@NoahCristino PowerShell вхід / вихід загалом дивний. Він буде виводити в вигляді масиву, це просто немає нічого вилов зазначеного масиву, і тому , коли неявний Write-Outputвідбувається, це ставить речі на стандартний висновок одного елемента в кожному рядку. Наприклад, тут ви бачите, що при захопленні об'єкт справді є arrayтипом.
AdmBorkBork

Досить добре тоді :) принаймні це спробували
Ной Крістіно,

Я на мобільному телефоні і не можу перевірити так легко, але не це 1 байт коротше , щоб видалити paramі замінити 1..$nз 1..($n=$args)?
британіст

@briantist Не зовсім, але ти дав мені інший спосіб думати про це, заощадивши купу байтів. Спасибі!
AdmBorkBork

3

Java 8, 61 57 56 53 байт

a->{for(int l=0,r=a.length;l<r;a[l]=a[--r]+=a[l++]);}

-1 байт і виправлено помилку завдяки @Nevay .
-3 байт завдяки @ OliverGrégoire .

(Це був порт (і гольф на 4 8 байт) відповіді @jkelm C # , але тепер це інше коротше рішення завдяки @ OliverGrégoire .)

Пояснення:

Спробуйте тут.

Метод модифікує вхідний масив для збереження байтів, тому немає потреби в типі повернення.

a->{                    // Method with integer-array parameter and no return-type
  for(int l=0,          //  Left-integer (starting at 0)
          r=a.length;   //  Right-integer (starting at the length of the input-array)
      l<r;              //  Loop as long as left is smaller than right
    a[l]=               //   Change the number at the current left index to:
         a[--r]+=a[l++] //    The number at the right index + itself
                        //    (The += adds the number at the left index also to the right index)
                        //    (And the --/++ increases/decreases the indexes by 1,
                        //     until we've reached the middle of the array)
  );                    //  End of loop
}                       // End of method

1
Ви можете зберегти 1 байт за допомогою a->{for(int i=0,l=a.length;i<l/2;a[i]=a[l+~i]+=a[i++]);}.
Невай

1
Крім того, що код не вдається для масивів з непарною довжиною 1,2,3(повертається 4,2,4замість 4,4,4), цикл повинен працювати так довго, як 2*i<lі ні i<l/2.
Невай

@Nevay Дякую Я знав, що можна мати можливість займатися гольфом l-i-1, просто не міг цього придумати ..
Кевін Круїйсен

2
53 байт: a->{for(int l=0,r=a.length;l<r;a[l]=a[--r]+=a[l++]);}.
Олів'є Грегоар

1
@ OlivierGrégoire Дякую І ваш, lі rмає сенс для вашої реалізації, тому я також використовував ці (і додав пояснення).
Kevin Cruijssen


2

Ідеальна, чудова робота.
Ной Крістіно

Ерік, вирішуючи мою проблему, як 7 мов xD
Ной Крістіно,

@NoahCristino Так, я намагаюся тримати його до 15 ...;)
Erik the Outgolfer

Мені доведеться почати додавати -1 за кожне подання xD
Ноа Крістіно,

2

будь-яке виправлення , 3 байти

"U+

Версія на TryItOnline! це застаріла версія будь-якої виправлення, яка містить кілька фатальних помилок, таких як неможливість додавати списки через помилки друку у вихідному коді. Використовуйте код на GitHub.

"U+  Program
"    Duplicate top of stack
 U   Reverse top of stack if it is a list (which it should be...)
  +  Add, vectorizing for lists

2

Нейм , 2 байти

Це функція, яка приймає вхід у верхній частині стека та виводить у верхній частині стека.

𝕓𝔻

Спробуйте в Інтернеті!


Чи дозволено змінювати вхідний стек за допомогою фактичного коду Neim замість звичайних методів введення?
LiefdeWen

@LiefdeWen Так, це дозволено у налаштуваннях за замовчуванням для мета-повідомлення вводу / виводу.
Okx

2

Рода , 22 байти

{reverse(_)<>_1|[_+_]}

Спробуйте в Інтернеті!

Це анонімна функція, яка приймає масив і повертає потік значень, який виводить посилання TIO, розділене на нові рядки.

Пояснення

reverse(_)          The array reversed
<>                  interleaved with
_1                  the array itself
                    Push each element to the stream
[_+_]               Pull two values and push their sum

Проходить мої тести! Чудова відповідь.
Ной Крістіно,

2

JavaScript (ES6), 34 33 байт

Збережено байт завдяки @ETHproductions.

a=>a.map((e,i)=>e+a[a.length+~i])


Мені подобається, як ви ставили в тестових випадках, +2
Ноа Крістіно,

Я думаю, ви можете зберегти байт, змінивши -i-1на +~i.
ETHproductions

@ETHproductions, так, дякую!
Рік Хічкок


2

PHP, 59 байт

for(;a&$c=$argv[++$i];)$a[]=$c+$argv[$argc-$i];print_r($a);

приймає дані з аргументів командного рядка; порожній вихід для порожнього вводу

Виходить попередження в PHP> 7.0. Ця версія не має (60 байт):

for(;++$i<$argc;)$a[]=$argv[$i]+$argv[$argc-$i];print_r($a);

Гарна відповідь! :)
Ной Крістіно,
Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.