Producto sobre un rango

39

Su tarea es simple: dados dos enteros ay b, salida ∏[a,b]; es decir, el producto del rango entre ay b. Puede tomar ay ben cualquier formato razonable, ya sean argumentos de una función, una entrada de lista, STDIN, etc. Puede imprimir en cualquier formato razonable, como un valor de retorno (para funciones) o STDOUT. asiempre será menor que b.

Tenga en cuenta que el final puede ser exclusivo o inclusivo b. Yo no soy exigente. ^ _ ^

Casos de prueba

[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

Este es un , por lo que gana el programa más corto en bytes.


Tabla de clasificación

El Fragmento de pila al final de esta publicación genera el catálogo a partir de las respuestas a) como una lista de la solución más corta por idioma yb) como una tabla de clasificación general.

Para asegurarse de que su respuesta se muestre, comience con un título, usando la siguiente plantilla de Markdown:

## Language Name, N bytes

¿Dónde Nestá el tamaño de su envío? Si mejora su puntaje, puede mantener los puntajes antiguos en el título, tachándolos. Por ejemplo:

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

Si desea incluir varios números en su encabezado (por ejemplo, porque su puntaje es la suma de dos archivos o desea enumerar las penalizaciones de la bandera del intérprete por separado), asegúrese de que el puntaje real sea el último número en el encabezado:

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

También puede hacer que el nombre del idioma sea un enlace que luego aparecerá en el fragmento:

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

Conor O'Brien
fuente
1
Estoy respondiendo esto en TI-BASIC mañana.
SuperJedi224
@ SuperJedi224 Buena suerte;)
Conor O'Brien
¿Se puede tomar la entrada como b, a?
FlipTack
@FlipTack sí puedes
Conor O'Brien

Respuestas:

36

Jalea, 2 bytes

rP

Toma dos números como argumentos de línea de comando. Pruébalo en línea.

Tenga en cuenta que este es un rango inclusivo. Por el costo de un byte (3 bytes), podemos hacer esto exclusivo:

’rP

Pruébalo en línea. Tenga en cuenta que los argumentos deben darse en el orden b ade esta versión.

Explicación

Inclusivo

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

Exclusivo

b ’rP a
  ’   decrement b (by default, monadic atoms in dyadic chains operate on the left argument)
   r  range
    P product 
un espagueti
fuente
10
Dudo que esto se puede derrotar ...
kirbyfan64sos
14
@ Kirbyfan64sos eres gelatina?
Aaron
30

ArnoldC , 522 511 bytes

¡Primera publicación en codegolf!

Me divertí haciendo esto. Gama exclusiva

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

Explicaciones (gracias 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
fuente
Jajaja ... todavía estoy riendo
rpax
pero una explicación sería genial
rpax
Aquí se convierte y se sangra usando esto como referencia
Bijan
¿Qué intérprete estás usando?
lirtosiast
El oficial de uno . Tienes razón sobre @NO PROBLEMO y 1 (no 0;))
Zycho
18

Python, 30 bytes

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

Rango inclusivo. Multiplica repetidamente por e incrementa el punto final izquierdo, hasta que sea más alto que el punto final derecho, en cuyo caso es el producto vacío de 1 (como Verdadero).

xnor
fuente
13

Minecraft 15w35a +, tamaño total del programa 456 (ver más abajo)

ingrese la descripción de la imagen aquí

Esto calcula PI [a,b). La entrada se proporciona mediante el uso de estos dos comandos: /scoreboard players set A A {num}y /scoreboard players set B A {num}. Recuerde usar /scoreboard objectives add A dummyantes de la entrada.

Calificado usando: {program size} + ( 2 * {input command} ) + {scoreboard command} = 356 + ( 2 * 33 ) + 34 = 456.

Este código corresponde al siguiente psuedocódigo:

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

Descarga el mundo aquí .

GamrCorps
fuente
El tamaño del programa se cuenta mediante este método de puntuación .
GamrCorps
Maldición, lo conseguiste antes que yo. : I
Addison Crump
Debe especificar la versión de la instantánea, es decir, 15w46ao algo así.
Addison Crump
Minecraft: D LoL, jugar al golf en Minecraft: D
username.ak
12

TI-BASIC, 9 bytes

Input A
prod(randIntNoRep(A,Ans

Toma un número Ans y otro de un mensaje.

También 9 bytes, tomando la entrada como una lista de Ans:

prod(randIntNoRep(min(Ans),max(Ans
lirtosiast
fuente
1
Me llevó un tiempo darme cuenta, así que lo publicaré aquí: cada función en TI-BASIC es un byte.
Financia la demanda de Mónica el
3
@QPaysTaxes Muchos de ellos lo hacen, pero no todos. %son dos bytes
mbomb007
12

Python 2, 44 38 bytes

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

Más o menos la respuesta obvia de la función anónima.

EDITAR: Gracias a xnor por guardar 6 bytes con algunas características que no conocía.

quintapia
fuente
1
Puede usar el incorporado int.__mul__, que funciona en lugar de su lambda. Los dos números x,ytambién se pueden escribir sin empaquetar como *l.
xnor
36
Tachado 44 todavía parece 44.
un espagueti
10

Pyth, 5 bytes

*FrQE

Pyth no tiene producto, por lo que reducimos * en el rango.

Utiliza gama exclusiva.

lirtosiast
fuente
44
*FrFQes equivalente pero con una entrada diferente, solo por diversión :)
FryAmTheEggman
9

R, 22 bytes

function(a,b)prod(a:b)
Freekvd
fuente
8

Mathematica, 15 bytes

1##&@@Range@##&

Una solución más corta que solo funciona para enteros no negativos:

#2!/(#-1)!&
alephalpha
fuente
3
Incluso más corto para enteros no negativos:#2!#/#!&
Anders Kaseorg
8

JavaScript (ES6), 34 bytes

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

¡A veces la respuesta más simple es la mejor! Solo un forbucle dentro eval. Rango inclusivo.

usuario81655
fuente
Guau. ¡Eso es impresionante!
Conor O'Brien
Aw hombre, pensé en esta solución exacta mientras intentaba jugar al golf en la mía ahora ... +1
ETHproductions
1
Este es aún más corto con 25 caracteres: f=(a,b)=>a<b?a*f(a+1,b):1
Matthias Burtscher
7

En serio, 4 bytes

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

Hex Dump:

2c6978e3

Pruébalo en línea

quintapia
fuente
7

Japt , 7 bytes

Los desafíos fáciles como este siempre son divertidos. :)

UoV r*1

Pruébalo en línea!

Explicación

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

Wow, esto parece patético en comparación con las otras respuestas hasta ahora. Necesito trabajar en Japt un poco más ...

ETHproducciones
fuente
¿Explicación? : 3
Conor O'Brien
@ CᴏɴᴏʀO'Bʀɪᴇɴ Hecho :)
ETHproductions
2
Woot, 5K rep! : D
ETHproductions
6

Haskell, 19 17 bytes

a#b=product[a..b]

Ejemplo de uso: 2#5-> 120.

nimi
fuente
Se le permite elegir incluir b.
xnor
@xnor: Ups, debe haber pasado por alto eso. ¡Gracias!
nimi
No estoy seguro, pero creo que PPCG permite respuestas dadas como expresiones.
orgulloso Haskeller
@proudhaskeller: el valor predeterminado es permitir programas y funciones completos. Fragmentos, expresiones, etc. deben estar explícitamente permitidos en la descripción de la tarea.
nimi
5

Prólogo, 45 bytes

Código:

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

Explicado:

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

Ejemplo:

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

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

Octava, 15 bytes

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

Sencillo. Utiliza el rango inclusivo.

lirtosiast
fuente
5

CJam, 6 19 18 10 bytes

¡Gracias a Dennis y RetoKoradi por su ayuda con el golf!

q~1$-,f+:*

Pruébalo en línea

Toma entrada como a b. Calcula PI [a,b).

Nota: este programa es de 6 bytes de largo, y sólo funciona si ay bson positivos.

q~,>:*

Pruébalo en línea

Toma entrada como a b. Calcula PI [a,b).

GamrCorps
fuente
q~{_)_W$<}g;]:*Guarda tres bytes.
Dennis
44
q~1$-,f+:*por 10 bytes.
Reto Koradi
5

Bash + utilidades GNU, 13

seq -s* $@|bc

Asume que no hay archivos en el directorio actual cuyos nombres comienzan con -s. El inicio y el final (inclusive) se pasan como parámetros de línea de comandos.

Esto simplemente produce la secuencia de principio a fin, separada por *, luego canaliza hacia bcpara la evaluación aritmética.

Trauma digital
fuente
2
¡Pero comienzo todos mis archivos con -s! : P
Conor O'Brien
5

MATL (no competidor), 4 bytes

Rango inclusivo

2$:p

Pruébalo en línea!

Explicación

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

Gracias a @Don Muesli por ayudarme a entender todo esto de MATL.

Suever
fuente
¡Buena respuesta! Dado que el idioma es posterior al desafío, puede publicar la respuesta, pero tal vez debería indicar que no es elegible para ganar
Luis Mendo
¿No es &:pun byte más corto?
DJMcMayhem
@DrGreenEggsandIronMan sí, así que supongo que de todos modos no compite para poder acortarlo, pero en el momento en que &
publiqué
4

Jolf , 4 bytes

Pruébalo aquí!

OrjJ
  jJ two inputs
 r   range between them [j,J)
O    product
Conor O'Brien
fuente
En el Jolf moderno, esto puede ser Orj(que se transfiere automáticamente a Orjx)
Conor O'Brien
4

Ruby, 22 bytes

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

Sin golf:

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

Uso:

->i,n{(i..n).reduce:*}[5,10]
=> 151200
Vasu Adari
fuente
1
Anoche estaba pensando en esta misma solución, pero no tuve tiempo de escribirla.
Alexis Andersen
4

C, 32 bytes

Para [a,b):

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

Para [a,b](según las sugerencias de Katenkyo, 32 bytes nuevamente):

f(a,b){return a<b?a*f(a+1,b):b;}
Sahil Arora
fuente
1
Encontré otra solución en C, si te interesa, también son 32 bytes f(a,b){return a<b?a*f(a+1,b):b;}. :)
Katenkyo
-5 bytes en gcc con en a=...lugar dereturn...
4

05AB1E , 2 bytes (no competitivos)

Código:

ŸP

Explicación:

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

J, 8 bytes

[:%/!@<:

Uso

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

donde >>es STDIN y <<es STDOUT.

Explicación

Se calcula ∏[a,b]como (b-1)!/(a-1)!.

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

Versión anterior de 13 bytes

Escrito cuando no tenía idea de lo que Jes: p

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

Uso:

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

Explicación:

*/            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

Explicación detallada:

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
Monja permeable
fuente
1
¡Gran explicación!
wizzwizz4
2
Se puede utilizar [:*/]+i.@-para 10 bytes si se toma el rango [a, b)como b ([:*/]+i.@-) atal que 10 ([:*/]+i.@-) 5las salidas 15120.
millas
@miles Esa respuesta se escribió cuando no sabía Jnada: p
Leaky Nun
Su solución de 8 bytes no funcionará si ninguno de los argumentos es positivo.
Dennis
4

JavaScript (ES6), 22 bytes

No puedo creer que ninguno de nosotros los golfistas de JS pensáramos usar la recursividad ...

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

Asigne a una variable con var q = a=>F=b=>a-b?b*F(b-1):a, por ejemplo , luego llame como q(2)(5).

ETHproducciones
fuente
4

Brachylog , 3 bytes

⟦₃×

Pruébalo en línea!

La entrada se pasa como [A,B]. El rango es exclusivo de B, pero podría hacerse inclusivo reemplazando el con .

Cadena no relacionada
fuente
3
Bienvenido a PPCG! Hoy en día, no importa cuándo se hacen los idiomas, por lo que esta respuesta es perfectamente competitiva. ¡Esperamos que disfrute su estancia!
Conor O'Brien
Ah, bueno saberlo! Supongo que he estado viendo demasiados desafíos viejos con respuestas ordenadas por votos.
Cadena no relacionada
@UnrelatedString Por cierto, si ves esos mensajes que no compiten, está perfectamente bien editarlos.
Esolanging Fruit
3

Minkolang 0.14 , 7 bytes

nnL$*N.

Pruébalo aquí

Explicación

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
fuente
3

Python, 52 bytes

Código muy simple; un poco demasiado largo

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

JavaScript (ES6), 45 41 bytes

Guardado 4 bytes gracias a @ Cᴏɴᴏʀ O'Bʀɪᴇɴ

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

Parece un poco demasiado largo ...

(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.
ETHproducciones
fuente
¿Eso funciona? ¡prestigio! No creo que necesites el ymapeo reducido, así que córtalo a lasx=>x*a++
Conor O'Brien
@ CᴏɴᴏʀO'Bʀɪᴇɴ ¡Gracias, ese truco funciona muy bien!
ETHproductions
2
debes agregar un punto y coma al final. por el puntaje.
Seadrus
3

Julia, 16 bytes

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

Nota: si el objeto de rango a:b(que se almacena literalmente como un valor inicial y un valor de parada, e internamente incluye un "incremento en 1 en cada paso" valor) se permite que la entrada, entonces se requieren sólo 4 bytes: prod.

Glen O
fuente
3

Perl 6 , 14 bytes

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

uso:

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

Si desea excluir el último elemento, use en ..^lugar de..

Brad Gilbert b2gills
fuente