La description
Soustrayez les nombres P suivants d'un nombre N. Le nombre suivant de N est N + 1.
Regardez les exemples pour comprendre ce que je veux dire.
Exemples:
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
Contribution:
N : Entier, positif, négatif ou 0
P : Entier, positif ou 0, non négatif
Sortie:
Entier ou chaîne, 0 en tête autorisé, retour à la ligne autorisé
Règles:
- Pas de failles
- C'est le code-golf, donc le code le plus court en octets gagne
- L'entrée et la sortie doivent être conformes à la description
code-golf
math
arithmetic
Paul Schmitz
la source
la source
Input: N=0,P=3
exemple, votre expansion comporte des doubles négatifs superflusN * (P-1)
. C'est pratiquement la définition de trivial .Réponses:
05AB1E ,
53 octetsEnregistré 2 octets grâce à Adnan
Explication
Prend P puis N comme entrée.
la source
Ý+Æ
:).P
va en premier)Ý
... Je pensais qu'il n'existait qu'une gamme basée sur 1.Python 2,
26 2423 octets-2 octets grâce à @Adnan (remplacer
p*(p+1)/2
parp*-~p/2
)-1 octets grâce à @MartinEnder (remplacer
-p*-~p/2
par+p*~p/2
Les tests sont sur idéone
la source
CJam, 8 octets
Suite de tests.
Dommage que la solution sous forme fermée soit plus longue. : |
Explication
la source
Haskell, 21 octets
la source
Javascript (ES6),
201918 octets1 octet enregistré par curry, comme suggéré par Zwei
1 octet enregistré grâce à user81655
Tester
la source
n=>p=>...
et appeler la fonction avecf(n)(p)
(n,p)=>n-p*(++p/2+n)
fonctionnera également en C #.n-p*(++p/2+n)
est équivalent àn+p*(~p/2-n)
.Gelée , 4 octets
Essayez-le en ligne!
Comment ça marche
la source
Haskell,
1918 octetsSolutions précédentes de 19 octets
la source
C #,
2120 octetsEdit: sauvé un octet grâce à TheLethalCoder
Essayez-le en ligne!
Source complète, y compris les cas de test:
la source
N=>P=>
au lieu d'(N,P)=>
enregistrer 1 octetMathematica, 15 octets
Une fonction sans nom qui reçoit
P
etn
comme ses paramètres dans cet ordre.Utilise la solution de formulaire fermé
n - n*p - p(p+1)/2
.la source
Perl,
2322 octetsComprend +1 pour
-p
Donnez n et p (dans cet ordre) sur des lignes distinctes de STDIN:
subtract.pl
:(utiliser des
''
guillemets pour enregistrer l'\
invoque une pénalité de 2 octets car il ne peut pas être combiné avec-e
)Même idée et même durée:
Étonnamment, faire le calcul réel est plus court que d'utiliser la formule directe (c'est
$
vraiment mal pour l'arithmétique)la source
C ++,
5451 octets[] (int N, int P) {int F; for (F = N; P; F - = ++ N, P -); return F;}Tester:
la source
f;g(n,p){f=n;while(p--)f-=++n;return f;}
utilisant votre algorithmeint
Pyke, 6 octets
Essayez-le ici!
la source
Brachylog ,
1917 octetsExplication
la source
MATL , 5 octets
Les entrées sont
P
et puisN
.Essayez-le sur MATL Online!
Explication
la source
Lot, 30 octets
Prend
n
etp
comme paramètres de ligne de commande et imprime le résultat sans retour à la ligne.la source
SILOS , 80 octets
Essayez-le en ligne avec des cas de test:
2,3
100,5
42,0
0,3
0,0
la source
R,
1714 octetsMerci à billywob pour avoir joué au golf 3 octets. Réponse précédente:
Notez que 1: 0 s'étend au vecteur (1,0), nous avons donc besoin de la condition if (P) (ou à utiliser
seq_len
, mais c'est plus d'octets). Sans la condition, nous obtiendrions la mauvaise sortie si P = 0.Si P est nul, alors la somme se développe en
sum(N+NULL)
, puis ensum(numeric(0))
, qui est zéro.la source
n-n*p-sum(0:p)
serait de toute façon plus courte :)function(N,P){...}
ouN=scan();P=scan();...
PHP, 33 octets
la source
<?php
ou abréger<?
du code PHP. Veuillez modifier votre réponse.Gelée , 7 octets
Les arguments sont le
P, N
tester sur TryItOnline
Comment?
la source
Pyth - 6 octets
Suite de tests .
la source
Forth, 36 octets
Calcul simple de
n - (p*n + (p^2+p) / 2)
Essayez-le en ligne
la source
Java,
67, 63 octetsGolfé:
Non golfé:
Fondamentalement, j'ai fait quelques calculs sur la formule. La
n - p*n
pièce s'occupe de toutn
dans la formule. Ensuite, j'ai utilisé une propriété super amusante de sommer ensemble un ensemble croissant linéairement d'entiers (séries arithmétiques): j'ai utilisé la somme du premier et du dernier entier, puisset.length / 2
je l'ai multipliée par (je vérifie également la parité et la gère de manière appropriée).Essayez-le: https://ideone.com/DEd85A
la source
int n,int p
pour enregistrer un octet. En outre, vous pouvez changer lap%2==0
pourp%2<1
sauver un autre octet. - Je ne savais pas que vous aviez déjà posté une réponse Java lorsque j'ai posté ma variante plus courte avec for-loop . J'aime bien ta formule mathématique, alors +1 pour moi. :)p%2>0
et en changeant l'ordre dans le ternaire, vous pouvez enregistrer un caractère.p/2 *(p+2)
est également égal àp*p/2+p
Java 7,
4340 octetsJava 8, 19 octets
Sans vergogne volé de l'incroyable formule Python 2 de @JonathanAllan .
Réponse originale (
6160 octets):Cas non testés et testés:
Essayez-le ici.
Sortie:
la source
int c(int n,int p){...}
. S'il s'agissait de Java 8 (ou 9), il aurait pu l'être(n,p)->n-p*n+p*~p/2
( 19 octets )Fourier , 34 octets
Essayez-le en ligne!
la source
Labyrinthe , 15 octets
ou
Utilise la solution de formulaire fermé
n - n*P - P*(P+1)/2
.la source
php, 38 octets
la source
Pyth, 11 octets
Une fonction
g
qui prend en entréen
etp
via un argument et imprime le résultat. Il peut être appelé sous la formegn p
.Essayez-le en ligne
Comment ça marche
la source
C89,
38,35, 33 octetsTestez-le sur Coliru .
la source
Érable, 19 octets
Usage:
la source
Perl 6 , 21 octets
Explication:
la source