Descrição
Subtraia os próximos números P de um número N. O próximo número de N é N + 1.
Veja os exemplos para entender o que quero dizer.
Exemplos:
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
Entrada:
N : Inteiro, positivo, negativo ou 0
P : Inteiro, positivo ou 0, não negativo
Saída:
Inteiro ou String, 0 inicial permitido, nova linha final permitida
Regras:
- Sem brechas
- Isso é código-golfe, então o código mais curto em bytes ganha
- Entrada e Saída devem ser as descritas
code-golf
math
arithmetic
Paul Schmitz
fonte
fonte
Input: N=0,P=3
exemplo, sua expansão tem algumas estranhas duplas-negativosN * (P-1)
. Essa é praticamente a definição de trivial .Respostas:
05AB1E ,
53 bytesEconomizou 2 bytes graças a Adnan
Explicação
Toma P e N como entrada.
fonte
Ý+Æ
:).P
vai em primeiro lugar)Ý
... Pensei que existisse apenas um intervalo baseado em 1.Python 2,
26 2423 bytes-2 bytes graças a @Adnan (substitua
p*(p+1)/2
porp*-~p/2
)-1 byte graças a @MartinEnder (substitua
-p*-~p/2
por+p*~p/2
Os testes estão em ideone
fonte
CJam, 8 bytes
Suíte de teste.
Pena que a solução de formulário fechado é mais longa. : |
Explicação
fonte
Haskell, 21 bytes
fonte
Javascript (ES6),
201918 bytesSalva 1 byte ao currying, como sugerido por Zwei
Salva 1 byte graças ao user81655
Teste
fonte
n=>p=>...
e chamando a função comf(n)(p)
(n,p)=>n-p*(++p/2+n)
também funciona em c #.n-p*(++p/2+n)
é equivalente an+p*(~p/2-n)
.Gelatina , 4 bytes
Experimente online!
Como funciona
fonte
Haskell,
1918 bytesSoluções anteriores de 19 bytes
fonte
C #,
2120 bytesEdit: Salvo um byte graças a TheLethalCoder
Experimente online!
Fonte completa, incluindo casos de teste:
fonte
N=>P=>
, em vez(N,P)=>
da guardar um byteMathematica, 15 bytes
Uma função sem nome que recebe
P
en
como seus parâmetros nessa ordem.Usa a solução de formulário fechado
n - n*p - p(p+1)/2
.fonte
Perl,
2322 bytesInclui +1 para
-p
Dê n e p (nessa ordem) em linhas separadas de STDIN:
subtract.pl
:(usar
''
aspas para salvar\
invoca uma penalidade de 2 bytes porque não pode ser combinada com-e
)Mesma ideia e duração:
Surpreendentemente, fazer o cálculo real é mais curto do que usar a fórmula direta (isso
$
realmente prejudica a aritmética)fonte
C ++,
5451 bytes[] (int N, int P) {int F; para (F = N; P; F - = ++ N, P -); retornar F;}Teste:
fonte
f;g(n,p){f=n;while(p--)f-=++n;return f;}
usando seu algoritmoint
Pyke, 6 bytes
Experimente aqui!
fonte
Braquilog ,
1917 bytesExplicação
fonte
MATL , 5 bytes
As entradas são
P
e entãoN
.Experimente no MATL Online!
Explicação
fonte
Lote, 30 bytes
Toma
n
ep
como parâmetros da linha de comando e imprime o resultado sem uma nova linha à direita.fonte
SILOS , 80 bytes
Experimente online com casos de teste:
2,3
100,5
42,0
0,3
0,0
fonte
R,
1714 bytesAgradecimentos a billywob por jogar fora 3 bytes. Resposta anterior:
Observe que 1: 0 se expande para o vetor (1,0), portanto, precisamos da condição if (P) (ou para usar
seq_len
, mas isso é mais bytes). Sem a condição, obteríamos a saída errada se P = 0.Se P é zero, a soma se expande para
sum(N+NULL)
, então parasum(numeric(0))
, que é zero.fonte
n-n*p-sum(0:p)
seria mais curto de qualquer maneira :)function(N,P){...}
ouN=scan();P=scan();...
PHP, 33 bytes
fonte
<?php
ou abreviar<?
para PHP-Code. Edite sua resposta.Geléia , 7 bytes
Os argumentos são
P, N
testá-lo no TryItOnline
Quão?
fonte
Pitão - 6 bytes
Conjunto de Teste .
fonte
Quarto, 36 bytes
Cálculo simples de
n - (p*n + (p^2+p) / 2)
Experimente online
fonte
Java,
67, 63 bytesGolfe:
Ungolfed:
Basicamente, fiz algumas contas na fórmula. A
n - p*n
parte cuida de tudon
na fórmula. Em seguida, usei uma propriedade super divertida de somar juntos um conjunto de números inteiros linearmente crescentes (séries aritméticas): usei a soma do primeiro e do último número inteiro e multipliquei porset.length / 2
(também verifico a paridade e a manipulo adequadamente).Experimente: https://ideone.com/DEd85A
fonte
int n,int p
para salvar um byte. Além disso, você pode alterarp%2==0
parap%2<1
para salvar outro byte. - Eu não sabia que você já havia postado uma resposta Java quando publiquei minha variante mais curta com o loop for . Porém, eu gosto da sua fórmula matemática, então +1 de mim. :)p%2>0
e alternando a ordem no ternário, você pode salvar um personagem.p/2 *(p+2)
é igual ap*p/2+p
Java 7,
4340 bytesJava 8, 19 bytes
Shamelessly roubado de @JonathanAllan surpreendente fórmula do Python 2 .
Resposta original (
6160 bytes):Casos não testados e de teste:
Experimente aqui.
Saída:
fonte
int c(int n,int p){...}
. Se ele teria sido Java 8 (ou 9) poderia ter sido(n,p)->n-p*n+p*~p/2
( 19 bytes )Fourier , 34 bytes
Experimente online!
fonte
Labirinto , 15 bytes
ou
Usa a solução de formulário fechado
n - n*P - P*(P+1)/2
.fonte
php, 38 bytes
fonte
Pitão, 11 bytes
Uma função
g
que recebe entradan
ep
via argumento e imprime o resultado. Ele pode ser chamado na formagn p
.Experimente online
Como funciona
fonte
C89,
38,35, 33 bytesTeste em Coliru .
fonte
Bordo, 19 bytes
Uso:
fonte
Perl 6 , 21 bytes
Explicação:
fonte