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


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 

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

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


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


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

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.


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.


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


8

Mathematica, 15 bytes

1##&@@Range@##&

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

#2!/(#-1)!&

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.


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


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


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


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

5

Octava, 15 bytes

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

Sencillo. Utiliza el rango inclusivo.


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


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.


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.


¡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

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

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

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

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

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


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 .


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

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

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.

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


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

Al usar nuestro sitio, usted reconoce que ha leído y comprende nuestra Política de Cookies y Política de Privacidad.
Licensed under cc by-sa 3.0 with attribution required.