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


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 

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

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).


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 .


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

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.


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.


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


8

Mathematica, 15 octets

1##&@@Range@##&

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

#2!/(#-1)!&

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.


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


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 ...


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.


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

5

Octave, 15 bytes

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

Straightforward. Uses the inclusive range.


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).


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.


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.


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

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

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;}

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

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

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).


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 .


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

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

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.

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.


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 ..

En utilisant notre site, vous reconnaissez avoir lu et compris notre politique liée aux cookies et notre politique de confidentialité.
Licensed under cc by-sa 3.0 with attribution required.