Плюс або мінус поліглоти!


14

У вашій заяві має бути список номерів (у будь-якому форматі списку, який підтримує ваша мова, або за допомогою декількох параметрів функції / командного рядка) або рядок чисел, розділених будь-яким символом, який не є 0123456789. В одній мові він повинен додати їх і вивести суму. Іншою мовою він повинен виводити їх відніманими один від одного в порядку. Приклад:

12
5
7
2

В одній мові він повинен виводити 26, а на іншій - виводити -2. Зауважте, що всі введені числа будуть натуральними цілими числами меншими ніж 100. Ніколи не буде більше, ніж 20кількість, що надається, тому ви ніколи не будете виводити більше 2000або менше -1899. Які-небудь питання? Прокоментуйте нижче!


Чи дозволено пробіли пробілів у висновку?
Ділова кішка

Чи допускаються дві різні версії однієї мови? Дивіться відповідь Python 2/3 від HyperNeutrino
Mr. Xcoder

@ Mr.Xcoder це дозволено.
програміст5000

2
@BetaDecay Ви думаєте, що це проблема, перевірте код-гольф!
програміст5000

1
@ programmer5000 Ви маєте на увазі [code-golf] -[polyglot]?
Ерік Аутгольфер

Відповіді:


14

Желе / 05AB1E , 3 байти

00000000: c6 71 53                                         .qS

Це шістнадцятковий (xxd) поданої програми.

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

Желе: Сума

Jelly використовує кодову сторінку Jelly , тому вона бачить наступні символи.

İqS

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

Як це працює

İqS  Main link. Argument: A (array)

İ    (ignored)
 q   Unrecognized token. This breaks the link; nothing to the left is executed.
  S  Take the sum of A.

05AB1E: Різниця

05AB1E використовує Windows-1252 , тому він бачить наступні символи.

ÆqS

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

Як це працює

Æ     Take the difference of the input.
 q    Quit.
  S   (ignored)

22

Python 2/3, 52 байти

lambda l:sum(l[:1]+[x*int(1-(1/2)*4)for x in l[1:]])

int(1-(1/2)*4)повертається 1в Python 2, тому що 1/2оцінюється спочатку до 0, а потім0 * 4 = 0 .

int(1-(1/2)*4)повертається -1в Python 3, тому що 1/2оцінюється спочатку до 0.5, а потім int(0.5 * 4) = int(2.0) = 2.


1
Чи використовується однакова мова, якщо інші версії навіть дозволені?
Містер Xcoder

3
@ Mr.Xcoder Я не бачу, чому ні, я бачив інші мови, використовуючи або різні версії C, Java, Python і Befunge. Я запитаю про мета, хоча чи побачу, чи зможу я знайти відповідний мета-пост.
HyperNeutrino

Хоча добре використовувати математичні трюки через зміни версії.
Містер Xcoder

1
@ Mr.Xcoder Дякую! Я задав питання про мете тут ; Я сподіваюся, незабаром отримаю відповідь.
HyperNeutrino

1
@ programmer5000 Цілий поділ.
HyperNeutrino

14

C і C ++ (обидва від GCC), 81 75 73 байт

int c;int f(int*a,int l){auto d=.5;c=*a++;for(;--l;a++)c+=*a-4*d**a;c=c;}

Бере вказівник на масив та довжину.

Пояснення: все ще використовується пояснення @Steadybox: p В C,auto d=.5 оголошує змінну цілого числа з класом автоматичного зберігання (який є типовим), який потім ініціалізується на 0, тоді як у C ++ 11 він оголошує подвійний, який ініціалізується до 0,5.

C - плюс мова: спробуйте онлайн!

C ++ - мінус мова: Спробуйте в Інтернеті!


11

05AB1E / желе , 5 байт

00000000: 4f71 7f5f 2f                             Oq._/

Спробуйте в Інтернеті! (05AB1E)
Спробуйте в Інтернеті! (Желе)

05AB1E бачить :

Oq? _ /
Пояснення:

Oq? _ / 1 неявний аргумент.
O Візьміть суму першого елемента введення.
 q Вийти.
  ? _ / Не функціонує.

Желе бачить :

Oq
_ /
Пояснення:

_ / Основне посилання. Аргументи: z
_ / Віднімаємо елементи z за порядком.

Посилання помічника Ок. Не функціональний.

Чи використовується при цьому кодова сторінка Jelly?
програміст5000

@ programmer5000 Це сировина, яка використовує CP-1252 для 05AB1E і JELLY для Jelly. Звідси 7f.
Ерік Аутгольфер

О, не усвідомлював цього!
програміст5000

8

Насправді / желе , 4 байти

00000000: e4 81 5f 2f                                      .._/

Це шістнадцятковий (xxd) поданої програми. Його не можна перевірити в сирому вигляді в Інтернеті; TIO не підтримує кодування CP437.

Власне: Сума

Фактично використовує CP 437 , тому він бачить наступні символи.

Σü_/

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

Як це працює

Σ     Take the sum on the input.
 ü    Print and empty the stack.
  _   Natural logarithm. Ignored since the stack is empty.
   /  Float division. Ignored since the stack is empty.

Желе: Різниця

Jelly використовує кодову сторінку Jelly , тому вона бачить наступні символи.

ỵ¹_/

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

Як це працює

ỵ¹_/  Main link. Argument: A (array)

ỵ     Unrecognized token. Splits the link.
 ¹    Identity; yield A.
  _/  Reduce (/) A by subtraction (_).

Я читав це як actually, Jelly.:)
програміст5000

Ви зловживали тим фактом, що невизначений персонаж діє так: :)
Ерік Аутгольфер

1
@EriktheOutgolfer Більш-менш. Якщо бути чесним, я не зовсім впевнений, що роблять нерозпізнані жетони.
Денніс

По-друге, я думаю, що ти просто вибрав насправді лише тому, що він üпривласнив ідеальну функцію> _>
Ерік Вигнавець

@ programmer5000 Це jelly, actually.
Арджун


7

CJam / Jelly , 6 байт

q~:-
S

CJam

q~    e# Read a list from input
:-    e# Reduce by subtraction
S     e# Push a space
      e# Implicit output

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

Желе

(використовуючи UTF-8, а не кодову сторінку Jelly)

q~:-є допоміжною ланкою. Оскільки він не дзвонить, він насправді не має значення, що він робить. Sобчислює суму масиву.

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


5
Варення і желе. Має сенс використовувати дві подібні речі разом.
mbomb007

1
Це недійсне. Желе має 0x7f для нового рядка, це 0x0a для нового рядка. У Jelly це насправді те саме, що q~:-½S. На жаль, fix ( q~:-e#\x7fS) більше. Спробуйте в Інтернеті! (CJam) та спробуйте в Інтернеті! , кожен із власним кодуванням для тестування на собі.
Ерік Аутгольфер

2
Крім того, ви можете використовувати кодування UTF-8 для Jelly, що робить це дійсним як є, але будь ласка, вкажіть його.
Ерік Аутгольфер

5

JavaScript / Cubix, 36 байт

//.!v+u;$I^@O<.Iu
a=>eval(a.join`-`)

Спробуй це!

Функцію JavaScript можна протестувати за допомогою фрагмента, наведеного нижче, програма Cubix можна протестувати тут .

Як це працює?

JavaScript

Перший рядок - це коментар до рядка JavaScript, оскільки він починається з двох косих рядків, тому JavaScript бачить лише нижній рядок ( a=>eval(a.join`-`)), який приймає масив як вхідний, приєднується до нього із знаками мінус між ними, а потім запускає його як код, в результаті чого віднімання всіх елементів масиву.

let f=
//.!v+u;$I^@O<.Iu
a=>eval(a.join`-`)

console.log(f([1,2,3,4,5]))
console.log(f([3,1,4,1,5]))

Cubix

Cubix бачить такий куб (зауважте, що Cubix ігнорує всі пробіли):

      / / .
      ! v +
      u ; $
I ^ @ O < . I u a = > e
v a l ( a . j o i n ` -
` ) . . . . . . . . . .
      . . .
      . . .
      . . .

Початок

ІС починається з третьої лінії, вказуючи на схід. Він потрапляє на 'I'команду, яка приймає число з входу і штовхає його до стеку. Потім він переспрямовується '^'в цикл суми.

Сума-петля

Я видалив усі символи, що не входять до циклу суми, і замінив їх no-ops ( '.'). ІС спочатку надходить на другу лінію, вказуючи на схід.

      . . .
      ! v +
      u ; $
. . . . . . I u . . . .
. . . . . . . . . . . .
. . . . . . . . . . . .
      . . .
      . . .
      . . .

Спочатку '!'команда перевіряє верхній елемент. Якщо це так 0(тобто ми дійшли до кінця вводу), 'v'виконується наступна інструкція ( ), що відображає IP з циклу. Якщо ми ще не досягли кінця введення, додаємо два верхні пункти разом ( '+'другий пункт - це сума до цього моменту, верхній елемент - новий ввід). Потім IP переходить на інше обличчя куба, в 'u'символ, який змушує IP зробити поворот і виконувати 'I'команду (читати інше ціле число), вказуючи на північ. IP повертається до верхньої частини, пропускає ( '$') інструкцію видалення (';' ) і робить ще один поворот, повертаючись до тієї точки, з якої ми почали.

Кінець

Якщо IP відбивається з циклу, виконуються такі символи:

      . . .
      . v .
      . ; .
. . @ O < . . . . . . .
. . . . . . . . . . . .
. . . . . . . . . . . .
      . . .
      . . .
      . . .

Ці інструкції видаляють верхній елемент (який дорівнює нулю), а потім виводять верхній елемент (суму) у вигляді цілого числа. Потім '@'команда досягається, і програма закінчується.


4

Python 2 і 3, 33 байти

lambda l,*r:l+sum(r)*(1/2>0 or-1)

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


Python 2.
Python 3.


lambda l,*r:l+sum(r)*(1/2-.5)*2за 31 байт
ов

@ovs Я цілеспрямовано уникав повертати поплавок. Якщо вам дозволено, то *(1/2*4-1)байт менше вашого.
Ведрак

Я думаю, що тип повернення насправді не має значення, поки це значення є правильним
пт

4

JS (ES6), CGL (CGL Golfing Language) , 32 26 байт

 x=>eval(x.join`-`)
//-⨥

JS робить віднімання, а CGL - додавання.

JS:

x=>eval(x.join`-`)

Анонімна функція, яка віднімає кожен елемент у масиві, використовуючи Array#reduce.

//-⨥

Коментар.

CGL

 x=>eval(x.join`-`)

Те, що схоже на пробіл у першому рядку, насправді є нерозривним простором, коментар у CGL. Перший рядок ігнорується.

//-⨥

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


1
Можна скоротити версію JS, скориставшись x=>eval(x.join`-`)5B
Люк


@ Adám ви праві. Виправлено.
програміст5000

4

JavaScript (ES6) / QBasic, 84 83 байт

'';f=x=>eval(x.join`+`)/*
INPUT a
FOR i=1 TO 2
i=0
INPUT n
a=a-n
PRINT a
NEXT i
'*/

Ще одне рішення з хакерським коментарем!

JavaScript обчислює суму. Він входить як масив, що містить числа. Виходи як функція return. Ви можете назвати функцію типу alert(f([10,20,30])).

QBasic обчислює різницю. Неодноразово просить ввести. Щойно ви вводите значення, воно виводить різницю всіх введених цифр 'до часу влучення Enterі знову запитує введення. Продовжує робити те саме до кінця всього.


Як це працює?

У QBasic (мові структурованої сім'ї BASIC; вона не потребує номерів рядків) 'позначає початок коментаря, який триває до кінця рядка. Тоді як у JavaScript він позначає початок рядка. Отже, весь перший рядок позначений як коментар у QBasic, але в JavaScript, рядок виконується (і цей рядок містить частину JavaScript, яка додає числа, а також/* кінці, що починає коментар, щоб приховати решту коду QBasic від інтерпретатора JavaScript.)

Код з другого рядка до другого останнього рядка містить код QBasic для обчислення різниці всіх вхідних чисел (код дуже зрозумілий).

Останній рядок містить '*/ . 'змушує інтерпретатора QBasic інтерпретувати наступний код як коментар, тоді як у JavaScript це не робить ніякого ефекту, оскільки це частина коментаря (що було розпочато наприкінці першого рядка). Наступний код ( */) змушує JavaScript закінчувати коментар, розпочатий у першому рядку, але він не виконується в QBasic, оскільки QBasic вважає, що це частина коментаря.


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

JavaScript (додає):

'';f=x=>eval(x.join`+`);/*
INPUT a
FOR i=1 TO 2
i=0
INPUT n
a=a-n
PRINT a
NEXT i
'*/
console.log(f([12,5,7,2]));

QBasic (віднімання):

Перейдіть на цей веб-сайт . Скопіюйте наступний код у їх текстовий редактор:

1 '';f=x=>eval(x.join`+`);/*
2 INPUT a
3 FOR i=1 TO 2
4 i=0
5 INPUT n
6 a=a-n
7 PRINT a
8 NEXT i
9 '*/

Причина, чому потрібні номери рядків, полягає в тому, що веб-сайт, про який я згадував, підтримує лише неструктуровані мови BASIC. І цей веб-сайт - єдиний пристойний онлайн-перекладач BASIC, який я міг знайти. Однак запуск коду, присутнього у верхній частині публікації (код без номерів рядків), повинен працювати чудово у будь-якому хорошому інтерпретаторі QBasic, який підтримує структурований BASIC та 'в якості початкового коментаря (мало хто робить це, хоча більшість робить).


Примітки

  • Це моя перша посада! Я сподіваюся, що це добре!
  • Частина QBasic коду не потребує, ENDоскільки інтерпретатор ніколи його не досягне! (Він назавжди буде застряг у нескінченному циклі; завжди просити більше інформації.)

3

Brain-Flak / Brain-Flueue , 20 байт

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

Спробуйте в Інтернеті! (Мозок-Флак) (плюс)

Спробуйте в Інтернеті! (Мозок-димохід) (мінус)

Пояснення

Єдина відмінність між Brain-Flak та Brain-Flueue полягає в тому, що Brain-Flueue замінює два стеки (останній у першому виході), що використовуються у Brain-Flak, двома чергами (спочатку у першому виході). Природно, ця програма використовує цю різницю.

Анотований код

(                  ) Push the sum of...
 {}                   the first input,
   <            >     zero,
                 {}   the remaining sum (see below)
    ([      ])       Push the of below line
      ({{}})         Pop all the input sans first, push the sum
              {}     Pop (in Brain-Flak, this discards the negative sum,
                            in Brain-Flueue, the positive)
Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.