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


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 

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

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


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 .


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

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.


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.


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


8

Mathematica, 15 Bytes

1##&@@Range@##&

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

#2!/(#-1)!&

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.


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

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


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.


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

5

Oktave, 15 Bytes

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

Einfach. Verwendet den Inklusivbereich.



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.


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.


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

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

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

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

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

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


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 .


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

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.

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.


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

Durch die Nutzung unserer Website bestätigen Sie, dass Sie unsere Cookie-Richtlinie und Datenschutzrichtlinie gelesen und verstanden haben.
Licensed under cc by-sa 3.0 with attribution required.