Prodotto in una gamma


39

Il tuo compito è semplice: dati due numeri interi ae b, output ∏[a,b]; cioè, il prodotto della gamma tra ae b. Puoi prendere ae bin qualsiasi formato ragionevole, che si tratti di argomenti per una funzione, un input di elenco, STDIN, eccetera. È possibile produrre in qualsiasi formato ragionevole, ad esempio un valore di ritorno (per funzioni) o STDOUT. asarà sempre inferiore a b.

Si noti che la fine può essere esclusiva o inclusiva di b. Non sono schizzinoso. ^ _ ^

Casi 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

Questo è un , quindi vince il programma più breve in byte.


Classifica

Lo snippet di stack nella parte inferiore di questo post genera il catalogo dalle risposte a) come elenco della soluzione più breve per lingua eb) come classifica generale.

Per assicurarti che la tua risposta venga visualizzata, ti preghiamo di iniziare la risposta con un titolo, usando il seguente modello Markdown:

## Language Name, N bytes

dov'è Nla dimensione del tuo invio. Se si migliora il punteggio, è possibile mantenere i vecchi punteggi nel titolo, colpendoli. Per esempio:

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

Se si desidera includere più numeri nell'intestazione (ad es. Perché il punteggio è la somma di due file o si desidera elencare separatamente le penalità del flag dell'interprete), assicurarsi che il punteggio effettivo sia l' ultimo numero nell'intestazione:

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

Puoi anche rendere il nome della lingua un collegamento che verrà quindi visualizzato nello snippet:

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


1
Domani risponderò a questo in TI-BASIC.
SuperJedi224 del

@ SuperJedi224 Buona fortuna;)
Conor O'Brien il

L'ingresso può essere preso come b, a?
FlipTack,

@ FlipTack sì, puoi
Conor O'Brien,

Risposte:


36

Gelatina, 2 byte

rP

Accetta due numeri come argomenti della riga di comando. Provalo online.

Si noti che questa è una gamma inclusiva. Per il costo di un byte (3 byte), possiamo renderlo esclusivo:

’rP

Provalo online. Si noti che gli argomenti devono essere indicati nell'ordine b aper questa versione.

Spiegazione

inclusivo

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

Esclusivo

b ’rP a
  ’   decrement b (by default, monadic atoms in dyadic chains operate on the left argument)
   r  range
    P product 

10
Dubito che sia battibile ...
Kirbyfan64sos,

14
@ kirbyfan64sos sei gelatina?
Aaron,

30

ArnoldC , 522 511 byte

Primo post su codegolf!

Mi sono divertito a farlo. Gamma esclusiva.

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

Spiegazioni (Grazie 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 ... sto ancora ridendo
rpax il

ma una spiegazione sarebbe grandiosa
rpax il

Qui viene convertito e rientrato usando questo come riferimento
Bijan

Quale interprete stai usando?
lirtosiast,

Il funzionario uno . Hai ragione su @NO PROBLEMO e 1 (non 0;))
Zycho l'

18

Python, 30 byte

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

Gamma inclusiva. Si moltiplica ripetutamente per e incrementa l'endpoint sinistro, fino a quando non è più alto dell'endpoint destro, nel qual caso è il prodotto vuoto di 1 (come True).


13

Minecraft 15w35a +, dimensione del programma 456 totale (vedi sotto)

enter image description here

Questo calcola PI [a,b). L'input viene dato usando questi due comandi: /scoreboard players set A A {num}e /scoreboard players set B A {num}. Ricorda di usare /scoreboard objectives add A dummyprima dell'input.

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

Questo codice corrisponde al seguente psuedocode:

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

Scarica il mondo qui .


La dimensione del programma viene conteggiata da questo metodo di punteggio .
GamrCorps,

Accidenti, ci sei arrivato prima che lo facessi. : I
Addison Crump,

Devi specificare la versione dell'istantanea, cioè 15w46ao qualcosa del genere.
Addison Crump,

Minecraft: D LoL, golf in Minecraft: D
username.ak

12

TI-BASIC, 9 byte

Input A
prod(randIntNoRep(A,Ans

Prende un numero da Ans e un altro da un prompt.

Anche 9 byte, prendendo input come elenco da Ans:

prod(randIntNoRep(min(Ans),max(Ans

1
Mi ci è voluto un po 'per capire da solo, quindi lo pubblicherò qui: ogni funzione in TI-BASIC è un byte.
Fondi Monica's Lawsuit,

3
@QPaysTaxes Molti di loro lo fanno, ma non tutti. %è di due byte.
mbomb007,

12

Python 2, 44 38 byte

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

Praticamente l'ovvia risposta della funzione anonima.

EDIT: Grazie a xnor per aver salvato 6 byte con alcune funzionalità che non conoscevo.


1
Puoi usare il built-in int.__mul__, che funziona al posto del tuo lambda. I due numeri x,ypossono anche essere scritti spacchettati come *l.
xnor

36
Cancellati 44 sembrano ancora 44.
uno spaghetto il

10

Pyth, 5 byte

*FrQE

Pyth non ha prodotto, quindi riduciamo * su tutta la gamma.

Utilizza una gamma esclusiva.


4
*FrFQè equivalente ma con input diversi, solo per divertimento :)
FryAmTheEggman il


8

Mathematica, 15 byte

1##&@@Range@##&

Una soluzione più breve che funziona solo per numeri interi non negativi:

#2!/(#-1)!&

3
Ancora più breve per numeri interi non negativi:#2!#/#!&
Anders Kaseorg

8

JavaScript (ES6), 34 byte

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

A volte la risposta più semplice è la migliore! Solo un foranello dentro eval. Gamma inclusiva.


Wow. È impressionante!
Conor O'Brien,

Oh amico, ho pensato a questa soluzione esatta mentre cercavo di giocare a golf proprio ora ... +1
ETHproductions

1
Questo è ancora più corto con 25 caratteri: f=(a,b)=>a<b?a*f(a+1,b):1
Matthias Burtscher

7

Scherzi a parte, 4 byte

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

Dump esadecimale:

2c6978e3

Provalo online


7

Japt , 7 byte

Sfide facili come questa sono sempre divertenti. :)

UoV r*1

Provalo online!

Spiegazione

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

Wow, questo sembra patetico rispetto alle altre risposte finora. Devo lavorare su Japt ancora ...


Spiegazione? : 3
Conor O'Brien il

@ CᴏɴᴏʀO'Bʀɪᴇɴ Fatto :)
ETHproductions il

2
Woot, rappresentante 5K! : D
Produzioni ETH il

6

Haskell, 19 17 byte

a#b=product[a..b]

Esempio di utilizzo: 2#5-> 120.


Puoi scegliere di includere b.
xnor

@xnor: Ups, deve averlo ignorato. Grazie!
nimi,

Non ne sono sicuro, ma penso che PPCG consenta risposte fornite come espressioni.
orgoglioso haskeller l'

@proudhaskeller: il valore predefinito è consentire programmi e funzioni completi. Snippet, espressioni, ecc. Devono essere esplicitamente autorizzati nella descrizione dell'attività.
nimi,

5

Prolog, 45 byte

Codice:

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

Ha spiegato:

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

Esempio:

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

p(-4,-1,X).
X = 24

5

Ottava, 15 byte

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

Semplice. Utilizza la gamma inclusiva.


5

CJam, 6 19 18 10 byte

Grazie a Dennis e RetoKoradi per l'aiuto nel golf!

q~1$-,f+:*

Provalo online

Accetta input come a b. Calcola PI [a,b).

Nota: questo programma è di 6 byte lungo, e funziona solo se ae bsono positivi.

q~,>:*

Provalo online

Accetta input come a b. Calcola PI [a,b).


q~{_)_W$<}g;]:*salva tre byte.
Dennis,

4
q~1$-,f+:*per 10 byte.
Reto Koradi,

5

Utilità Bash + GNU, 13

seq -s* $@|bc

Presuppone che non ci siano file nella directory corrente i cui nomi iniziano con -s . L'inizio e la fine (inclusi) vengono passati come parametri della riga di comando.

Questo produce semplicemente la sequenza dall'inizio alla fine, separata da *, quindi i tubi bcper la valutazione aritmetica.


2
Ma inizio tutti i miei file con -s! : P
Conor O'Brien,

5

MATL (non concorrenziale), 4 byte

Gamma inclusiva

2$:p

Provalo online!

Spiegazione

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

Grazie a @Don Muesli per avermi aiutato a capire tutto su MATL.


Bella risposta! Dal momento che la lingua postdatizza la sfida, puoi pubblicare la risposta, ma forse dovresti indicare che non è eleggibile per la vittoria
Luis Mendo

&:pUn byte non è più corto?
DJMcMayhem

@DrGreenEggsandIronMan sì, quindi credo che non sia comunque in competizione, quindi potrei accorciarlo, ma al momento in cui ho pubblicato la mia risposta non avevamo&
Suever


4

Rubino, 22 byte

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

Ungolfed:

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

Uso:

->i,n{(i..n).reduce:*}[5,10]
=> 151200

1
Stavo pensando a questa stessa soluzione ieri sera ma non ho avuto il tempo di scriverla.
Alexis Andersen,

4

C, 32 byte

Per [a,b):

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

Per [a,b](Sui suggerimenti di Katenkyo, di nuovo 32 byte):

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

1
Ho trovato un'altra soluzione in C, se sei interessato, è anche 32 byte f(a,b){return a<b?a*f(a+1,b):b;}. :)
Katenkyo,

-5 byte in gcc con a=...invece direturn...

4

05AB1E, 2 bytes (non-competing)

Codice:

ŸP

Spiegazione:

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

4

J, 8 byte

[:%/!@<:

uso

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

dove >>è STDIN e<< is STDOUT.

Spiegazione

Calcola ∏[a,b]come (b-1)!/(a-1)!.

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

Versione precedente a 13 byte

Scritto quando non avevo idea di cosa Jfosse: p

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

Uso:

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

Spiegazione:

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

Spiegazione dettagliata:

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

Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.