Описание
Вычтите следующие числа P от числа N. Следующее число N равно N + 1.
Посмотрите на примеры, чтобы понять, что я имею в виду.
Примеры:
Input: N=2,P=3
Calculate: n - (n+1) - (n+2) - (n+3) //Ending with 3, because P=3
Calculate: 2 - 2+1 - 2+2 - 2+3 //Replacing N with 2 from Input
Calculate: 2 - 3 - 4 - 5
Output: -10
Input: N=100,P=5
Calculate: n - (n+1) - (n+2) - (n+3) - (n+4) - (n+5)
Calculate: 100- 101 - 102 - 103 - 104 - 105
Output: -415
Input: N=42,P=0
Calculate: n
Calculate: 42
Output: 42
Input: N=0,P=3
Calculate: n - (n+1) - (n+2) - (n+3)
Calculate: 0 - 1 - 2 - 3
Output: -6
Input: N=0,P=0
Calulate: n
Calculate: 0
Output: 0
Входные данные:
N : целое, положительное, отрицательное или 0
P : целое, положительное или 0, не отрицательное
Выход:
Целое число или строка, ведущий 0 разрешен, завершающий перевод новой строки разрешен
Правила:
- Нет лазеек
- Это код-гольф, поэтому выигрывает самый короткий код в байтах
- Вход и выход должны быть такими, как описано
code-golf
math
arithmetic
Пол Шмитц
источник
источник
Input: N=0,P=3
примера, ваше расширение имеет некоторые лишние двойные негативыN * (P-1)
. Это практически определение из тривиальных .Ответы:
05AB1E ,
53 байтаСохранено 2 байта благодаря Аднану
объяснение
Принимает P, а затем N в качестве ввода.
источник
Ý+Æ
:).P
идет первым)Ý
... я думал, что существует только диапазон на основе 1.Python 2,
26 2423 байта-2 байта благодаря @Adnan (заменить
p*(p+1)/2
наp*-~p/2
)-1 байта благодаря @MartinEnder (заменить
-p*-~p/2
на+p*~p/2
Тесты на Ideone
источник
CJam, 8 байт
Тестирование.
Жаль, что решение в закрытой форме длиннее. : |
объяснение
источник
Haskell, 21 байт
источник
Javascript (ES6),
201918 байтСохранено 1 байт с помощью карри, как предложил Zwei.
Сохранено 1 байт благодаря user81655.
Тест
источник
n=>p=>...
и вызов функции с помощьюf(n)(p)
(n,p)=>n-p*(++p/2+n)
также будет работать в C #.n-p*(++p/2+n)
эквивалентноn+p*(~p/2-n)
.Желе , 4 байта
Попробуйте онлайн!
Как это работает
источник
Haskell,
1918 байтовПредыдущие 19-байтовые решения
источник
C #,
2120 байтИзменить: Сохраненный один байт благодаря TheLethalCoder
Попробуйте онлайн!
Полный исходный код, включая контрольные примеры:
источник
N=>P=>
вместо того,(N,P)=>
чтобы сохранить 1 байтMathematica, 15 байт
Безымянная функция, которая получает
P
и вn
качестве своих параметров в этом порядке.Использует решение в закрытой форме
n - n*p - p(p+1)/2
.источник
Perl,
2322 байтаВключает +1 для
-p
Дайте n и p (в том порядке) в отдельных строках STDIN:
subtract.pl
:(использование
''
кавычек для сохранения\
вызывает 2-байтовое наказание, потому что его нельзя комбинировать с-e
)Та же идея и длина:
Удивительно, но фактический расчет короче, чем использование прямой формулы (это
$
очень плохо для арифметики)источник
C ++,
5451 байт[] (int N, int P) {int F; для (F = N; P; F - = ++ N, P -); вернуть F;}Тест:
источник
f;g(n,p){f=n;while(p--)f-=++n;return f;}
используя ваш алгоритмint
Пайк, 6 байт
Попробуй это здесь!
источник
Брахилог ,
1917 байтобъяснение
источник
MATL , 5 байтов
Входы есть
P
и тогдаN
.Попробуйте это в MATL Online!
объяснение
источник
Пакетный, 30 байтов
Принимает
n
иp
как параметры командной строки и печатает результат без завершающей строки.источник
SILOS , 80 байтов
Попробуйте онлайн с тестовыми примерами:
2,3
100,5
42,0
0,3
0,0
источник
R,
1714 байтБлагодаря Billywob для игры в гольф 3 байта. Предыдущий ответ:
Обратите внимание, что 1: 0 расширяется до вектора (1,0), поэтому нам нужно условие if (P) (или использовать
seq_len
, но это больше байтов). Без условия мы получили бы неправильный вывод, если P = 0.Если P равно нулю, то сумма увеличивается до
sum(N+NULL)
, а затем доsum(numeric(0))
нуля.источник
n-n*p-sum(0:p)
будет короче в любом случае :)function(N,P){...}
илиN=scan();P=scan();...
PHP, 33 байта
источник
<?php
или сокращенно<?
для PHP-кода. Пожалуйста, отредактируйте свой ответ.Желе , 7 байт
Аргументы
P, N
протестировать на TryItOnline
Как?
источник
Pyth - 6 байт
Тестовый пакет .
источник
Далее 36 байт
Простое вычисление
n - (p*n + (p^2+p) / 2)
Попробуйте онлайн
источник
Java,
67, 63 байтаGolfed:
Ungolfed:
В основном я сделал некоторые математические формулы.
n - p*n
Часть заботится о всехn
-х в формуле. Затем я использовал супер интересное свойство суммирования линейно увеличивающегося набора целых чисел (арифметических рядов): я использовал сумму первого и последнего целого числа, а затем умножил ее наset.length / 2
(я также проверяю четность и обрабатываю ее соответствующим образом).Попробуйте это: https://ideone.com/DEd85A
источник
int n,int p
чтобы сохранить байт. Кроме того , вы можете изменить ,p%2==0
чтобыp%2<1
спасти другие байты. - Я не знал, что вы уже опубликовали ответ Java, когда я опубликовал свой более короткий вариант с помощью for-loop . Мне нравится ваша математическая формула, так что +1 от меня. :)p%2>0
и переключая порядок в троичной, вы можете сохранить персонажа.p/2 *(p+2)
равноp*p/2+p
Java 7,
4340 байтJava 8, 19 байт
Бесстыдно украденный из потрясающей формулы Python 2 @JonathanAllan .
Оригинальный ответ (
6160 байт):Ungolfed и тестовые случаи:
Попробуй это здесь.
Выход:
источник
int c(int n,int p){...}
. Если бы это была Java 8 (или 9), это могло бы быть(n,p)->n-p*n+p*~p/2
( 19 байт )Фурье , 34 байта
Попробуйте онлайн!
источник
Лабиринт , 15 байт
или
Использует решение в закрытой форме
n - n*P - P*(P+1)/2
.источник
php, 38 байт
источник
Pyth, 11 байт
Функция,
g
которая принимает входные данныеn
иp
через аргумент и печатает результат. Это можно назвать по формеgn p
.Попробуйте онлайн
Как это работает
источник
C89,
38,35, 33 байтаПроверьте это на Coliru .
источник
Клен, 19 байт
Использование:
источник
Perl 6 , 21 байт
Объяснение:
источник