Produit sur une gamme

39

Votre tâche est simple: donner deux entiers aet b, output ∏[a,b]; c'est-à-dire le produit de la plage entre aet b. Vous pouvez prendre aet bdans tout format raisonnable, que ce soit des arguments à une fonction, une entrée de liste, STDIN, et ainsi de suite. Vous pouvez sortir dans n'importe quel format raisonnable, tel qu'une valeur de retour (pour les fonctions) ou STDOUT. asera toujours inférieur à b.

Notez que la fin peut être exclusive ou inclusive de b. Je ne suis pas pointilleux. ^ _ ^

Cas de test

[a,b) => result
[2,5) => 24
[5,10) => 15120
[-4,3) => 0
[0,3) => 0
[-4,0) => 24

[a,b] => result
[2,5] => 120
[5,10] => 151200
[-4,3] => 0
[0,3] => 0
[-4,-1] => 24

Ceci est un , donc le programme le plus court en octets gagne.


Classement

L'extrait de pile au bas de cet article génère le catalogue à partir des réponses a) sous forme de liste des solutions les plus courtes par langue et b) sous forme de classement global.

Pour vous assurer que votre réponse apparaît, commencez votre réponse par un titre, en utilisant le modèle Markdown suivant:

## Language Name, N bytes

Nest la taille de votre soumission. Si vous améliorez votre score, vous pouvez conserver les anciens scores en les effaçant. Par exemple:

## Ruby, <s>104</s> <s>101</s> 96 bytes

Si vous souhaitez inclure plusieurs numéros dans votre en-tête (par exemple, parce que votre score est la somme de deux fichiers ou si vous souhaitez répertorier séparément les pénalités d'indicateur d'interprétation), assurez-vous que le score réel est le dernier numéro de l'en-tête:

## Perl, 43 + 2 (-p flag) = 45 bytes

Vous pouvez également faire du nom de langue un lien qui apparaîtra ensuite dans l'extrait de code:

## [><>](http://esolangs.org/wiki/Fish), 121 bytes

Conor O'Brien
la source
1
Je réponds à cela demain dans TI-BASIC.
SuperJedi224
@ SuperJedi224 Bonne chance;)
Conor O'Brien
L'entrée peut-elle être considérée comme b, a?
FlipTack
@ FlipTack oui vous pouvez
Conor O'Brien

Réponses:

36

Gelée, 2 octets

rP

Prend deux nombres comme arguments de ligne de commande. Essayez-le en ligne.

Notez qu'il s'agit d'une plage inclusive. Pour le coût d'un octet (3 octets), nous pouvons rendre cette exclusivité:

’rP

Essayez-le en ligne. Notez que les arguments doivent être donnés dans l'ordre b ade cette version.

Explication

Compris

a rP b
  r   dyadic atom, creates inclusive range between a and b
   P  computes product of the list

Exclusif

b ’rP a
  ’   decrement b (by default, monadic atoms in dyadic chains operate on the left argument)
   r  range
    P product 
un spaghetto
la source
10
Je doute que cela soit battable ...
kirbyfan64sos
14
@ Kirbyfan64sos vous gelée?
Aaron
30

ArnoldC , 522 511 octets

Premier post sur codegolf!

Je me suis amusé à faire ça. Gamme exclusive.

LISTEN TO ME VERY CAREFULLY f
I NEED YOUR CLOTHES YOUR BOOTS AND YOUR MOTORCYCLE a
I NEED YOUR CLOTHES YOUR BOOTS AND YOUR MOTORCYCLE b
GIVE THESE PEOPLE AIR
HEY CHRISTMAS TREE r
YOU SET US UP 1
HEY CHRISTMAS TREE l
YOU SET US UP 1
STICK AROUND l
GET TO THE CHOPPER r
HERE IS MY INVITATION r
YOU'RE FIRED a
ENOUGH TALK
GET TO THE CHOPPER a
HERE IS MY INVITATION a
GET UP 1
ENOUGH TALK
GET TO THE CHOPPER l
HERE IS MY INVITATION b
LET OFF SOME STEAM BENNET a
ENOUGH TALK
CHILL
I'LL BE BACK r
HASTA LA VISTA, BABY

Explications (Merci Bijan):

DeclareMethod f
        MethodArguments a
        MethodArguments b
        NonVoidMethod
        DeclareInt r
        SetInitialValue 1
        DeclareInt l
        SetInitialValue 1
        WHILE l
                AssignVariable r
                        SetValue r
                        MultiplicationOperator a
                EndAssignVariable
                AssignVariable a
                        SetValue a
                        + 1
                EndAssignVariable
                AssignVariable l
                        SetValue b
                        > a
                EndAssignVariable
        EndWhile
        Return r
EndMethodDeclaration
Zycho
la source
Hahaha ... Je suis toujours en train de rire
april
mais une explication serait géniale
RPPA
Ici, il est converti et mis en retrait en utilisant ceci comme référence
Bijan
Quel interprète utilisez-vous?
lirtosiast
Le fonctionnaire un . Vous avez raison sur @NO PROBLEMO et 1 (pas 0;))
Zycho
18

Python, 30 octets

f=lambda a,b:a>b or a*f(a+1,b)

Gamme inclusive. Multiplie et incrémente à plusieurs reprises l'extrémité gauche, jusqu'à ce qu'elle soit supérieure à l'extrémité droite, auquel cas il s'agit du produit vide de 1 (en tant que True).

Xnor
la source
13

Minecraft 15w35a +, taille totale du programme 456 (voir ci-dessous)

enter image description here

Cela calcule PI [a,b) . L'entrée est donnée en utilisant ces deux commandes: /scoreboard players set A A {num}et /scoreboard players set B A {num}. N'oubliez pas d'utiliser /scoreboard objectives add A dummyavant l'entrée.

A marqué en utilisant: {program size} + ( 2 * {input command} ) + {scoreboard command} = 356 + ( 2 * 33 ) + 34 = 456.

Ce code correspond au psuedocode suivant:

R = 1
loop:
  R *= A
  A += 1
  if A == B:
    print R
    end program

Téléchargez le monde ici .

GamrCorps
la source
La taille du programme est comptée par cette méthode de notation .
GamrCorps
Bon sang, vous y êtes arrivé avant moi. : I
Addison Crump
Vous devez spécifier la version de l'instantané, c'est 15w46a-à- dire quelque chose.
Addison Crump
Minecraft: D LoL, jouer au golf à Minecraft: D
nomutilisateur.ak
12

TI-BASIC, 9 octets

Input A
prod(randIntNoRep(A,Ans

Prend un numéro Ans et un autre à partir d'une invite.

Aussi 9 octets, en prenant l'entrée comme une liste de Ans:

prod(randIntNoRep(min(Ans),max(Ans
lirtosiast
la source
1
Cela m’a pris du temps à comprendre, alors je vais le poster ici: chaque fonction dans TI-BASIC correspond à un octet.
Le procès de Monica
3
@QPaysTaxes Beaucoup d'entre eux le font, mais pas tous. %est deux octets.
mbomb007
12

Python 2, 44 38 octets

lambda l:reduce(int.__mul__,range(*l))

Quasiment la réponse de fonction anonyme évidente.

EDIT: Merci à xnor pour avoir sauvegardé 6 octets avec des fonctionnalités que je ne connaissais pas.

quintopie
la source
1
Vous pouvez utiliser la fonction intégrée int.__mul__, qui fonctionne à la place de votre lambda. Les deux nombres x,ypeuvent également être écrits sans décompression *l.
xnor
36
44 barrés ressemblent encore à 44.
un spaghetto
10

Pyth, 5 octets

*FrQE

Pyth n’ayant pas de produit, nous réduisons * la gamme.

Utilise une gamme exclusive.

lirtosiast
la source
4
*FrFQest équivalent mais avec une entrée différente, juste pour le plaisir :)
FryAmTheEggman
9

R, 22 octets

function(a,b)prod(a:b)
freekvd
la source
8

Mathematica, 15 octets

1##&@@Range@##&

Une solution plus courte qui ne fonctionne que pour les entiers non négatifs:

#2!/(#-1)!&
Alephalpha
la source
3
Encore plus court pour les entiers non négatifs:#2!#/#!&
Anders Kaseorg
8

JavaScript (ES6), 34 octets

(a,b)=>eval("for(c=a;a<b;)c*=++a")

Parfois, la réponse la plus simple est la meilleure! Juste une forboucle à l'intérieur eval. Gamme inclusive.

utilisateur81655
la source
Sensationnel. C'est impressionnant!
Conor O'Brien
Aw man, je pensais à cette solution exacte en essayant de
jouer
1
Celui-ci est encore plus court avec 25 caractères: f=(a,b)=>a<b?a*f(a+1,b):1
Matthias Burtscher
7

Sérieusement, 4 octets

,ixπ

,         Read list [a,b] from stdin
 i        Flatten it to a b
  x       Pop a,b, push range(a,b)
   π      Pop the list and push its product.

Décharge Hex:

2c6978e3

Essayez-le en ligne

quintopie
la source
7

Japt , 7 octets

Les défis faciles comme celui-ci sont toujours amusants. :)

UoV r*1

Essayez-le en ligne!

Explication

UoV r*1  // Implicit: U = first input, V = second input
UoV      // Generate range [U,V).
    r*1  // Reduce by multiplication, starting at 1.

Wow, cela semble pathétique comparé aux autres réponses jusqu'à présent. J'ai besoin de travailler sur Japt un peu plus ...

ETHproductions
la source
Explication? : 3
Conor O'Brien
@ CᴏɴᴏʀO'Bʀɪᴇɴ Done :)
ETHproductions
2
Woot, représentant 5K! : D
ETHproductions
6

Haskell, 19 17 octets

a#b=product[a..b]

Exemple d'utilisation: 2#5-> 120.

nimi
la source
Vous êtes autorisé à choisir d'inclure b.
xnor
@xnor: Ups, must have overlooked that. Thanks!
nimi
I'm not sure, but I think PPCG allows answers given as expressions.
proud haskeller
@proudhaskeller: the default is to allow full programs and functions. Snippets, expressions, etc. have to be explicitly permitted in the task description.
nimi
5

Prolog, 45 bytes

Code:

p(A,B,C):-A=B,C=A;D is A+1,p(D,B,E),C is A*E.

Explained:

p(A,B,C):-A=B,      % A is unifiable with B
          C=A       % Unify C with A
          ;         % OR
          D is A+1, % D is the next number in the range
          p(D,B,E), % Recurse on the range after the first element
          C is A*E. % The result C is the product of the first element and the result 
                      of the recursion

Example:

p(5,10,X).
X = 151200

p(-4,-1,X).
X = 24
Emigna
la source
5

Octave, 15 bytes

@(a,b)prod(a:b)

Straightforward. Uses the inclusive range.

lirtosiast
la source
5

CJam, 6 19 18 10 bytes

Thanks to Dennis and RetoKoradi for help with golfing!

q~1$-,f+:*

Try it online

Takes input as a b. Calculates PI [a,b).

Note: this program is 6 bytes long, and only works if a and b are positive.

q~,>:*

Try it online

Takes input as a b. Calculates PI [a,b).

GamrCorps
la source
q~{_)_W$<}g;]:* saves three bytes.
Dennis
4
q~1$-,f+:* for 10 bytes.
Reto Koradi
5

Bash + GNU utilities, 13

seq -s* $@|bc

Assumes there are no files in the current directory whose names start with -s. Start and end (inclusive) are passed as command-line parameters.

This simply produces the sequence from start to end, separated by *, then pipes to bc for arithmetic evaluation.

Digital Trauma
la source
2
But I start all my files with -s! :P
Conor O'Brien
5

MATL (non-competing), 4 bytes

Inclusive Range

2$:p

Try it online!

Explanation

2$: % Implicitly grab two input arguments and create the array input1:input2
p   % Take the product of all array elements

Thanks to @Don Muesli for helping me get the hang of this whole MATL thing.

Suever
la source
Nice answer! Since the language postdates the challenge, you can post the answer but perhaps you should indicate it's non-eligible for winning
Luis Mendo
Isn't &:p a byte shorter?
DJMcMayhem
@DrGreenEggsandIronMan yea so I guess it's non-competing anyhow so I could shorten it, but at the time I posted my answer we didn't have &
Suever
4

Jolf, 4 bytes

Try it here!

OrjJ
  jJ two inputs
 r   range between them [j,J)
O    product
Conor O'Brien
la source
In modern Jolf, this can be Orj (which automatically is transpiled to Orjx)
Conor O'Brien
4

Ruby, 22 bytes

->i,n{(i..n).reduce:*}

Ungolfed:

-> i,n {
  (i..n).reduce:* # Product of a range
}

Usage:

->i,n{(i..n).reduce:*}[5,10]
=> 151200
Vasu Adari
la source
1
I was thinking about this same solution last night but didn't have the time to write it up.
Alexis Andersen
4

C, 32 bytes

For [a,b):

f(a,b){return a-b?a*f(a+1,b):1;}

For [a,b] (On Katenkyo's suggestions, 32 bytes again) :

f(a,b){return a<b?a*f(a+1,b):b;}
Sahil Arora
la source
1
I found an other solution in C, if you're interested, it's also 32 bytes f(a,b){return a<b?a*f(a+1,b):b;}. :)
Katenkyo
-5 bytes in gcc with a=... instead of return...
4

05AB1E, 2 bytes (non-competing)

Code:

ŸP

Explanation:

Ÿ   # Inclusive range [input, ..., input]
 P  # Total product of the list
    # Implicit printing top of the stack
Adnan
la source
4

J, 8 bytes

[:%/!@<:

Usage

>> f =: [:%/!@<:
>> f 10 5
<< 15120

where >> is STDIN and << is STDOUT.

Explanation

It computes ∏[a,b] as (b-1)!/(a-1)!.

minus_one =: <:
factorial =: !
of        =: @
monadic   =: [:
division  =: %/
f =: monadic division factorial of minus_one

Previous 13-byte version

Written when I had no idea what J even is :p

*/(}.[:>:i.)/

Usage:

   */(}.[:>:i.)/ 5 10
30240

Explanation:

*/            NB. multiply over
  (
   }.         NB. remove [the first x items] from
     [:>:     NB. increment all of
         i.   NB. the numbers from 0 to [y-1]
           )
            / NB. insert the above code into the following numbers

Detailed explanation:

i.10 would produce 0 1 2 3 4 5 6 7 8 9

>:i.10 would make it 1 2 3 4 5 6 6 7 8 9 10

the [: is used to make the ">:" take only one argument (a monad)
because if it takes two arguments, it is a different function.
so [:>:i.10 becomes 1 2 3 4 5 6 7 8 9 10

}. means take away the first [x] items from the following list,
so 5}.1 2 3 4 5 6 7 8 9 10 becomes 6 7 8 9 10

the two slashes "/" in the code are actually the same
for example, */6 7 8 9 10 becomes 6*7*8*9*10
Leaky Nun
la source
1
Great explanation!
wizzwizz4
2
You can use [:*/]+i.@- for 10 bytes if you take the range [a, b) as b ([:*/]+i.@-) a such that 10 ([:*/]+i.@-) 5 outputs 15120.
miles
@miles That answer was written when I didn't know J at all :p
Leaky Nun
Your 8 byte solution won't work if neither argument is positive.
Dennis
4

JavaScript (ES6), 22 bytes

I can't believe none of us JS golfers thought to use recursion...

a=>F=b=>a-b?b*F(b-1):a

Assign to a variable with e.g. var q = a=>F=b=>a-b?b*F(b-1):a, then call like q(2)(5).

ETHproductions
la source
4

Brachylog, 3 bytes

⟦₃×

Try it online!

Input is passed as [A,B]. The range is exclusive of B, but could be made inclusive by replacing the with .

Unrelated String
la source
3
Welcome to PPCG! Nowadays, it doesn't matter when languages are made, so this answer is perfectly competitive. Hope you enjoy your stay!
Conor O'Brien
Ah, good to know! I guess I've been looking at too many old challenges with answers sorted by votes.
Unrelated String
@UnrelatedString By the way, if you see those non-competing messages it's perfectly fine to edit them out.
Esolanging Fruit
3

Minkolang 0.14, 7 bytes

nnL$*N.

Try it here.

Explanation

nn         Takes two numbers from input
  L        Pops b,a and pushes a..b
   $*      Product the whole stack
     N.    Output as number and stop.
El'endia Starman
la source
3

Python, 52 bytes

Very simple code; a bit too long.

def p(a,b):
 t=1
 for i in range(a,b):t*=i
 return t
Sherlock9
la source
3

JavaScript (ES6), 45 41 bytes

Saved 4 bytes thanks to @Cᴏɴᴏʀ O'Bʀɪᴇɴ

(a,b)=>[...Array(b-a)].reduce(x=>x*a++,1)

Seems a little too long...

(a,b)=>           // Define an anonymous function that takes parameters a and b, and returns:
[...Array(b-a)]   // An array of b-a items,
.reduce(          // Reduced by
x=>x*a++          //  multiplying each item with the previous,
,1)               //  starting at 1.
ETHproductions
la source
That works? kudos! I don't think you need the y in the reduce mapping, so cut it off at x=>x*a++
Conor O'Brien
@CᴏɴᴏʀO'Bʀɪᴇɴ Thanks, that trick works really well!
ETHproductions
2
you should add a semicolon at the end. for the score.
Seadrus
3

Julia, 16 bytes

f(a,b)=prod(a:b)

Note: if the range object a:b (which is literally stored as a start value and a stop value, and internally includes a "increment by 1 on each step" value) is permitted as the input, then just 4 bytes are required: prod.

Glen O
la source
3

Perl 6, 14 bytes

{[*] $^a..$^b}

usage:

my &code = {[*] $^a..$^b}
say code |$_ for (2,5),(5,10),(-4,3),(0,3),(-4,-1);
# 120
# 151200
# 0
# 0
# 24

say chars code 1,10000;
# 35660

If you wanted to exclude the last element use ..^ instead of ..

Brad Gilbert b2gills
la source