Produkt über einen Bereich

39

Ihre Aufgabe ist einfach: Gegeben sind zwei ganze Zahlen aund b, output ∏[a,b]; das ist das Produkt des Bereichs zwischen aund b. Sie können nehmen aund bin jedem vernünftigen Format, ob diese Argumente an eine Funktion sein, eine Liste eingegeben wird , STDIN, et cetera. Sie können in jedem vernünftigen Format ausgeben, z. B. als Rückgabewert (für Funktionen) oder als STDOUT. awird immer kleiner sein als b.

Beachten Sie, dass das Ende exklusiv oder inklusive sein kann b. Ich bin nicht wählerisch. ^ _ ^

Testfälle

[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

Dies ist ein , also gewinnt das kürzeste Programm in Bytes.


Bestenliste

Das Stapel-Snippet am Ende dieses Beitrags generiert den Katalog aus den Antworten a) als Liste der kürzesten Lösungen pro Sprache und b) als Gesamt-Bestenliste.

Um sicherzustellen, dass Ihre Antwort angezeigt wird, beginnen Sie Ihre Antwort mit einer Überschrift. Verwenden Sie dazu die folgende Markdown-Vorlage:

## Language Name, N bytes

Wo Nist die Größe Ihres Beitrags? Wenn Sie Ihren Score zu verbessern, Sie können alte Rechnungen in der Überschrift halten, indem man sich durch das Anschlagen. Zum Beispiel:

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

Wenn Sie mehrere Zahlen in Ihre Kopfzeile aufnehmen möchten (z. B. weil Ihre Punktzahl die Summe von zwei Dateien ist oder wenn Sie die Strafen für Interpreter-Flags separat auflisten möchten), stellen Sie sicher, dass die tatsächliche Punktzahl die letzte Zahl in der Kopfzeile ist:

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

Sie können den Namen der Sprache auch als Link festlegen, der dann im Snippet angezeigt wird:

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

Conor O'Brien
quelle
1
Ich beantworte dies morgen in TI-BASIC.
SuperJedi224
@ SuperJedi224 Viel Glück;)
Conor O'Brien
Kann die Eingabe als übernommen werden b, a?
FlipTack
@ FlipTack ja, Sie können
Conor O'Brien

Antworten:

36

Gelee, 2 Bytes

rP

Nimmt zwei Zahlen als Befehlszeilenargumente. Probieren Sie es online aus.

Beachten Sie, dass dies ein Inklusivangebot ist. Für die Kosten eines Bytes (3 Bytes) können wir dies exklusiv machen:

’rP

Probieren Sie es online aus. Beachten Sie, dass die Argumente in der Reihenfolge b afür diese Version angegeben werden müssen.

Erläuterung

Inklusive

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

Exklusiv

b ’rP a
  ’   decrement b (by default, monadic atoms in dyadic chains operate on the left argument)
   r  range
    P product 
ein Spaghetto
quelle
10
Ich bezweifle, dass dies schlagbar ist ...
kirbyfan64sos
14
@ Kirbyfan64sos Sie Gelee?
Aaron
30

ArnoldC , 522 511 Bytes

Erster Beitrag auf Codegolf!

Ich hatte Spaß dabei. Exklusives Sortiment.

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

Erklärungen (Danke 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
quelle
Hahaha ... Ich lache immer noch
rpax
aber eine erklärung wäre toll
rpax 10.12.15
Hier wird es konvertiert und eingerückt, wobei dies als Referenz verwendet wird
Bijan
Welchen Dolmetscher verwenden Sie?
Lirtosiast
Die offizielle ein . Du hast recht mit @NO PROBLEMO und 1 (nicht 0;))
Zycho
18

Python, 30 Bytes

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

Inklusivangebot. Multipliziert und erhöht den linken Endpunkt wiederholt, bis er höher als der rechte Endpunkt ist. In diesem Fall ist es das leere Produkt von 1 (als Wahr).

xnor
quelle
13

Minecraft 15w35a +, Programmgröße 456 insgesamt (siehe unten)

Bildbeschreibung hier eingeben

Dies berechnet PI [a,b). Die Eingabe erfolgt mit diesen beiden Befehlen: /scoreboard players set A A {num}und /scoreboard players set B A {num}. Denken Sie daran, /scoreboard objectives add A dummyvor der Eingabe zu verwenden.

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

Dieser Code entspricht dem folgenden Pseudocode:

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

Laden Sie die Welt hier herunter .

GamrCorps
quelle
Die Programmgröße wird nach dieser Bewertungsmethode gezählt .
GamrCorps
Verdammt, du hast es geschafft, bevor ich es getan habe. : I
Addison Crump
Sie müssen die Snapshot-Version angeben, z. B. 15w46aoder so.
Addison Crump
Minecraft: D LoL, Golfen in Minecraft: D
Benutzername.ak
12

TI-BASIC, 9 Bytes

Input A
prod(randIntNoRep(A,Ans

Nimmt eine Nummer von Ans und eine andere von einer Eingabeaufforderung.

Auch 9 Bytes, Eingabe als Liste von Ans:

prod(randIntNoRep(min(Ans),max(Ans
Lirtosiast
quelle
1
Es hat eine Weile gedauert, bis ich es selbst herausgefunden habe, also werde ich es hier posten: Jede Funktion in TI-BASIC ist ein Byte.
Nic Hartley
3
@QPaysTaxes Viele von ihnen, aber nicht alle. %ist zwei Bytes.
mbomb007
12

Python 2, 44 38 Bytes

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

Ziemlich genau die offensichtliche Antwort auf anonyme Funktionen.

EDIT: Danke an xnor für das Speichern von 6 Bytes mit einigen Funktionen, die ich nicht kannte.

Quintopie
quelle
1
Sie können das eingebaute verwenden int.__mul__, das anstelle Ihres Lambda arbeitet. Die beiden Nummern x,ykönnen auch als ausgepackt geschrieben werden *l.
Xnor
36
Die durchgestrichene 44 sieht immer noch aus wie 44.
ein Spaghetto
10

Pyth, 5 Bytes

*FrQE

Pyth hat kein Produkt, daher reduzieren wir * den Bereich.

Verwendet exklusiven Bereich.

Lirtosiast
quelle
4
*FrFQist gleichwertig, aber mit unterschiedlichen Eingaben, nur zum Spaß :)
FryAmTheEggman
9

R, 22 Bytes

function(a,b)prod(a:b)
freekvd
quelle
8

Mathematica, 15 Bytes

1##&@@Range@##&

Eine kürzere Lösung, die nur für nicht negative ganze Zahlen funktioniert:

#2!/(#-1)!&
Alephalpha
quelle
3
Noch kürzer für nicht negative ganze Zahlen:#2!#/#!&
Anders Kaseorg
8

JavaScript (ES6), 34 Byte

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

Manchmal ist die einfachste Antwort die beste! Nur eine forSchleife nach innen eval. Inklusivangebot.

user81655
quelle
Wow. Das ist beeindruckend!
Conor O'Brien
Oh Mann, ich habe gerade an diese exakte Lösung gedacht, als ich versucht habe, meinen Golf zu spielen ... +1
ETHproductions
1
Dieser ist mit 25 Zeichen noch kürzer: f=(a,b)=>a<b?a*f(a+1,b):1
Matthias Burtscher
7

Im Ernst, 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

Probieren Sie es online aus

Quintopie
quelle
7

Japt , 7 Bytes

Einfache Herausforderungen wie diese machen immer Spaß. :)

UoV r*1

Probieren Sie es online!

Erläuterung

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

Wow, das scheint im Vergleich zu den bisherigen Antworten erbärmlich. Ich muss noch an Japt arbeiten ...

ETHproductions
quelle
Erläuterung? : 3
Conor O'Brien
@ CᴏɴᴏʀO'Bʀɪᴇɴ Done :)
ETHproductions
2
Woot, 5K Wiederholung! : D
ETHproductions
6

Haskell, 19 17 Bytes

a#b=product[a..b]

Anwendungsbeispiel: 2#5-> 120.

nimi
quelle
Du darfst wählen, ob du b.
xnor
@xnor: Ups, muss das übersehen haben. Vielen Dank!
nimi
Ich bin nicht sicher, aber ich denke, PPCG erlaubt Antworten als Ausdrücke.
stolzer Haskeller
@proudhaskeller: Standardmäßig sind vollständige Programme und Funktionen zulässig . Ausschnitte, Ausdrücke usw. müssen in der Aufgabenbeschreibung ausdrücklich erlaubt sein.
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.

Erklärt:

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

Beispiel:

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

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

Oktave, 15 Bytes

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

Einfach. Verwendet den Inklusivbereich.

Lirtosiast
quelle
5

CJam, 6 19 18 10 Bytes

Danke an Dennis und RetoKoradi für die Hilfe beim Golfen!

q~1$-,f+:*

Probieren Sie es online aus

Übernimmt die Eingabe als a b. Berechnet PI [a,b).

Hinweis: Dieses Programm ist 6 Byte lang und funktioniert nur, wenn aund bpositiv sind.

q~,>:*

Probieren Sie es online aus

Übernimmt die Eingabe als a b. Berechnet PI [a,b).

GamrCorps
quelle
q~{_)_W$<}g;]:*Spart drei Bytes.
Dennis
4
q~1$-,f+:*für 10 Bytes.
Reto Koradi
5

Bash + GNU-Dienstprogramme, 13

seq -s* $@|bc

Es wird davon ausgegangen, dass sich im aktuellen Verzeichnis keine Dateien befinden, deren Namen mit "" beginnen -s. Start und Ende (einschließlich) werden als Befehlszeilenparameter übergeben.

Dies erzeugt einfach die Sequenz von Anfang bis Ende, getrennt durch *, und leitet sie bczur arithmetischen Auswertung weiter.

Digitales Trauma
quelle
2
Aber ich starte alle meine Dateien mit -s! : P
Conor O'Brien
5

MATL (nicht konkurrierend), 4 Bytes

Inklusivangebot

2$:p

Probieren Sie es online!

Erläuterung

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

Vielen Dank an @Don Muesli , der mir geholfen hat, die Sache mit MATL in den Griff zu bekommen.

Suever
quelle
Gute Antwort! Da die Sprache die Herausforderung datiert, können Sie die Antwort posten, aber vielleicht sollten Sie angeben, dass sie nicht zum Gewinnen berechtigt ist
Luis Mendo
Ist &:pein Byte nicht kürzer?
DJMcMayhem
@DrGreenEggsandIronMan ja, ich denke, es ist sowieso nicht konkurrierend, so dass ich es verkürzen könnte, aber zu dem Zeitpunkt, als ich meine Antwort veröffentlichte, hatten wir keine&
Suever
4

Jolf , 4 Bytes

Probieren Sie es hier aus!

OrjJ
  jJ two inputs
 r   range between them [j,J)
O    product
Conor O'Brien
quelle
Im modernen Jolf kann dies sein Orj(was automatisch transpiliert wird Orjx)
Conor O'Brien
4

Ruby, 22 Bytes

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

Ungolfed:

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

Verwendung:

->i,n{(i..n).reduce:*}[5,10]
=> 151200
Vasu Adari
quelle
1
Ich habe letzte Nacht über dieselbe Lösung nachgedacht, hatte aber nicht die Zeit, sie aufzuschreiben.
Alexis Andersen
4

C 32 Bytes

Für [a,b):

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

Für [a,b](Nach Katenkyos Vorschlägen wieder 32 Bytes):

f(a,b){return a<b?a*f(a+1,b):b;}
Sahil Arora
quelle
1
Ich habe eine andere Lösung in C gefunden. Wenn Sie interessiert sind, sind es auch 32 Bytes f(a,b){return a<b?a*f(a+1,b):b;}. :)
Katenkyo
-5 Bytes in gcc mit a=...anstelle vonreturn...
4

05AB1E , 2 Bytes (nicht konkurrierend)

Code:

ŸP

Erläuterung:

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

J, 8 Bytes

[:%/!@<:

Verwendung

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

wo >>ist STDIN und <<ist STDOUT.

Erläuterung

Es berechnet ∏[a,b]als (b-1)!/(a-1)!.

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

Vorherige 13-Byte-Version

Geschrieben, als ich keine Ahnung hatte, was Jüberhaupt ist: p

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

Verwendung:

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

Erläuterung:

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

Ausführliche Erklärung:

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
Undichte Nonne
quelle
1
Tolle Erklärung!
wizzwizz4
2
Sie können [:*/]+i.@-für 10 Byte verwenden, wenn Sie den Bereich [a, b)als b ([:*/]+i.@-) asolchen annehmen, der 10 ([:*/]+i.@-) 5ausgegeben wird 15120.
Meilen
@ Meilen Diese Antwort wurde geschrieben, als ich überhaupt nicht wusste J: p
Leaky Nun
Ihre 8-Byte-Lösung funktioniert nicht, wenn keines der Argumente positiv ist.
Dennis
4

JavaScript (ES6), 22 Byte

Ich kann nicht glauben, dass keiner von uns JS-Golfern daran gedacht hat, Rekursion zu verwenden ...

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

Mit zB einer Variablen zuweisen var q = a=>F=b=>a-b?b*F(b-1):a, dann like aufrufen q(2)(5).

ETHproductions
quelle
4

Brachylog , 3 Bytes

⟦₃×

Probieren Sie es online!

Die Eingabe wird als übergeben [A,B]. Der Bereich ist exklusiv von B, kann aber durch den Ersatz des aus inclusive sein mit .

Nicht verwandte Zeichenfolge
quelle
3
Willkommen bei PPCG! Heutzutage spielt es keine Rolle, wann Sprachen erstellt werden, daher ist diese Antwort absolut konkurrenzfähig. Ich hoffe, Sie genießen Ihren Aufenthalt!
Conor O'Brien
Ah, gut zu wissen! Ich schätze, ich habe mir zu viele alte Herausforderungen angeschaut und Antworten nach Stimmen sortiert.
Unrelated String
@UnrelatedString Übrigens, wenn Sie diese nicht konkurrierenden Nachrichten sehen, ist es vollkommen in Ordnung, sie zu bearbeiten.
Esolanging Fruit
3

Python, 52 Bytes

Sehr einfacher Code; ein bisschen zu lang.

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

JavaScript (ES6), 45 41 Bytes

4 Bytes dank @ Cᴏɴᴏʀ O'Bʀɪᴇɴ gespeichert

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

Scheint ein bisschen zu lang ...

(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
quelle
Das funktioniert? ein dickes Lob! Ich glaube nicht, dass Sie das yim Reduce-Mapping brauchen , also kürzen Sie es umx=>x*a++
Conor O'Brien
@ CᴏɴᴏʀO'Bʀɪᴇɴ Danke, dieser Trick funktioniert wirklich gut!
ETHproductions
2
Sie sollten am Ende ein Semikolon hinzufügen. für die Partitur.
Seadrus
3

Julia, 16 Bytes

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

Hinweis: Wenn das Bereichsobjekt a:b(das buchstäblich als Startwert und ein Stoppwert gespeichert ist, und im Innern ein „Inkrement um 1 bei jedem Schritt“ Wert enthält) als Eingang zulässig, dann nur 4 Bytes benötigt: prod.

Glen O
quelle
3

Perl 6 , 14 Bytes

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

Verwendung:

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

Wenn Sie das letzte Element ausschließen möchten, verwenden Sie ..^statt..

Brad Gilbert b2gills
quelle