Produkt w całym zakresie

39

Twoje zadanie jest proste: podane dwie liczby całkowite ai bwyjście ∏[a,b]; to jest iloczyn zakresu od ado b. Można wziąć aa bw każdym rozsądnym formacie, czy to argumenty funkcji, wejście listy, STDIN, et cetera. Możesz wyprowadzać dane w dowolnym rozsądnym formacie, takim jak wartość zwracana (dla funkcji) lub STDOUT. azawsze będzie mniej niż b.

Pamiętaj, że koniec może być wyłączny lub obejmować b. Nie jestem wybredna. ^ _ ^

Przypadki testowe

[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

To jest , więc wygrywa najkrótszy program w bajtach.


Tabela liderów

Fragment kodu na dole tego postu generuje katalog na podstawie odpowiedzi a) jako listy najkrótszych rozwiązań dla każdego języka oraz b) jako ogólnej tabeli wyników.

Aby upewnić się, że twoja odpowiedź się pojawi, zacznij od nagłówka, korzystając z następującego szablonu Markdown:

## Language Name, N bytes

gdzie Njest rozmiar twojego zgłoszenia. Jeśli poprawić swój wynik, to może zachować stare porachunki w nagłówku, uderzając je przez. Na przykład:

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

Jeśli chcesz umieścić w nagłówku wiele liczb (np. Ponieważ twój wynik jest sumą dwóch plików lub chcesz osobno wymienić kary za flagi tłumacza), upewnij się, że rzeczywisty wynik jest ostatnią liczbą w nagłówku:

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

Możesz także ustawić nazwę języka jako link, który pojawi się we fragmencie:

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

Conor O'Brien
źródło
1
Odpowiem na to jutro w TI-BASIC.
SuperJedi224,
@ SuperJedi224 Powodzenia;)
Conor O'Brien
Czy dane wejściowe można uznać za b, a?
FlipTack,
@FlipTack tak, możesz
Conor O'Brien

Odpowiedzi:

36

Galaretka, 2 bajty

rP

Pobiera dwie liczby jako argumenty wiersza poleceń. Wypróbuj online.

Pamiętaj, że obejmuje to zakres. Za koszt bajtu (3 bajty) możemy uczynić to wyłącznym:

’rP

Wypróbuj online. Zauważ, że argumenty należy podać w kolejności b adla tej wersji.

Wyjaśnienie

Włącznie

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

Ekskluzywny

b ’rP a
  ’   decrement b (by default, monadic atoms in dyadic chains operate on the left argument)
   r  range
    P product 
spaghetto
źródło
10
Wątpię, aby to było możliwe ...
kirbyfan64sos,
14
@ kirbyfan64sos you jelly?
Aaron,
30

ArnoldC , 522 511 bajtów

Pierwszy post na codegolf!

Dobrze się przy tym bawiłem. Ekskluzywny asortyment.

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

Objaśnienia (Dzięki 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
źródło
Hahaha ...
Nadal się
ale wyjaśnienie byłoby świetne
rpax,
Tutaj jest konwertowany i wcięty przy użyciu tego jako odniesienia
Bijan
Z jakiego tłumacza korzystasz?
lirtosiast
Oficjalna jeden . Masz rację co do @NO PROBLEMO i 1 (nie 0;))
Zycho
18

Python, 30 bajtów

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

Zakres obejmujący. Wielokrotnie mnoży i zwiększa lewy punkt końcowy, aż będzie wyższy niż prawy punkt końcowy, w którym to przypadku jest to iloczyn pusty 1 (jako True).

xnor
źródło
13

Minecraft 15w35a +, całkowity rozmiar programu 456 (patrz poniżej)

enter image description here

To się oblicza PI [a,b). Dane wejściowe są podawane za pomocą tych dwóch poleceń: /scoreboard players set A A {num}i /scoreboard players set B A {num}. Pamiętaj, aby użyć /scoreboard objectives add A dummyprzed wejściem.

Zdobył za pomocą: {program size} + ( 2 * {input command} ) + {scoreboard command} = 356 + ( 2 * 33 ) + 34 = 456.

Ten kod odpowiada następującemu kodowi psuedocode:

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

Pobierz świat tutaj .

GamrCorps
źródło
Rozmiar programu jest liczony za pomocą tej metody punktacji .
GamrCorps,
Cholera, dotarłeś do mnie zanim to zrobiłem. : I
Addison Crump,
Musisz podać wersję migawki, czyli 15w46acoś takiego.
Addison Crump,
Minecraft: D LoL, gra w golfa w Minecraft: D
nazwa użytkownika.
12

TI-BASIC, 9 bajtów

Input A
prod(randIntNoRep(A,Ans

Pobiera jedną cyfrę, Ans a drugą - z pytania.

Również 9 bajtów, przyjmując dane wejściowe jako listę z Ans:

prod(randIntNoRep(min(Ans),max(Ans
lirtosiast
źródło
1
Zajęło mi to trochę czasu, aby sam się zorientować, więc opublikuję to tutaj: każda funkcja w TI-BASIC-u jest jednym bajtem.
Nic Hartley,
3
@QPaysTaxes Wiele z nich ma, ale nie wszystkie. %to dwa bajty.
mbomb007,
12

Python 2, 44 38 bajtów

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

Prawie oczywista anonimowa odpowiedź funkcji.

EDYCJA: Dzięki xnor za zapisanie 6 bajtów z niektórymi funkcjami, których nie znałem.

kwintopia
źródło
1
Możesz użyć wbudowanego int.__mul__, który działa zamiast twojej lambda. Te dwie liczby x,ymożna również zapisać jako rozpakowane jako *l.
xnor
36
Przekreślone 44 nadal wygląda jak 44.
spaghetto
10

Pyth, 5 bajtów

*FrQE

Pyth nie ma produktu, dlatego zmniejszamy * w całym zakresie.

Wykorzystuje ekskluzywny zakres.

lirtosiast
źródło
4
*FrFQjest równoważne, ale z innym wejściem, dla zabawy :)
FryAmTheEggman
9

R, 22 bajty

function(a,b)prod(a:b)
freekvd
źródło
8

Mathematica, 15 bajtów

1##&@@Range@##&

Krótsze rozwiązanie, które działa tylko dla liczb całkowitych nieujemnych:

#2!/(#-1)!&
alephalpha
źródło
3
Jeszcze krótszy dla nieujemnych liczb całkowitych:#2!#/#!&
Anders Kaseorg
8

JavaScript (ES6), 34 bajty

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

Czasami najprostsza odpowiedź jest najlepsza! Tylko forpętla w środku eval. Zakres obejmujący.

użytkownik 81655
źródło
Łał. To imponujące!
Conor O'Brien,
O rany, myślałem o tym właśnie rozwiązaniu podczas próby gry w golfa w mojej kopalni ... +1
ETHproductions
1
Ten jest jeszcze krótszy i ma 25 znaków: f=(a,b)=>a<b?a*f(a+1,b):1
Matthias Burtscher
7

Poważnie, 4 bajty

,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

Wypróbuj online

kwintopia
źródło
7

Japt , 7 bajtów

Takie proste wyzwania są zawsze zabawne. :)

UoV r*1

Wypróbuj online!

Wyjaśnienie

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

Wow, to wydaje się żałosne w porównaniu do innych dotychczasowych odpowiedzi. Muszę popracować nad Japtem jeszcze trochę ...

ETHprodukcje
źródło
Wyjaśnienie? : 3
Conor O'Brien,
@ CᴏɴᴏʀO'Bʀɪᴇɴ Gotowe :)
ETHproductions
2
Woot, 5 000 powtórzeń! : D
ETHproductions
6

Haskell, 19 17 bajtów

a#b=product[a..b]

Przykład użycia: 2#5-> 120.

nimi
źródło
Możesz wybrać opcję b.
xnor
@xnor: Ups, musiał to przeoczyć. Dzięki!
nimi
Nie jestem pewien, ale myślę, że PPCG dopuszcza odpowiedzi podane jako wyrażenia.
dumny haskeller,
@proudhaskeller: domyślnie zezwala się na pełne programy i funkcje. Fragmenty, wyrażenia itp. Muszą być wyraźnie dozwolone w opisie zadania.
nimi
5

Prolog, 45 bajtów

Kod:

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

Wyjaśnił:

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

Przykład:

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

p(-4,-1,X).
X = 24
Emigna
źródło
5

Oktawa, 15 bajtów

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

Bezpośredni. Korzysta z zakresu obejmującego.

lirtosiast
źródło
5

CJam, 6 19 18 10 bajtów

Podziękowania dla Dennisa i RetoKoradi za pomoc w grze w golfa!

q~1$-,f+:*

Wypróbuj online

Pobiera dane wejściowe jako a b. Oblicza PI [a,b).

Uwaga: ten program jest 6 bajtów, a działa tylko jeśli ai bsą pozytywne.

q~,>:*

Wypróbuj online

Pobiera dane wejściowe jako a b. Oblicza PI [a,b).

GamrCorps
źródło
q~{_)_W$<}g;]:*oszczędza trzy bajty.
Dennis,
4
q~1$-,f+:*na 10 bajtów.
Reto Koradi,
5

Narzędzia Bash + GNU, 13

seq -s* $@|bc

Zakłada się, że w bieżącym katalogu nie ma plików, których nazwy rozpoczynają się od -s. Początek i koniec (włącznie) są przekazywane jako parametry wiersza polecenia.

To po prostu tworzy sekwencję od początku do końca, oddzielając je *, a następnie potokami do bcoceny arytmetycznej.

Cyfrowa trauma
źródło
2
Ale wszystkie moje pliki zaczynam -s! : P
Conor O'Brien,
5

MATL (niekonkurencyjny), 4 bajty

Zakres obejmujący

2$:p

Wypróbuj online!

Wyjaśnienie

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

Dzięki @Don Muesli za pomoc w zrozumieniu tego całego MATL-a.

Suever
źródło
Niezła odpowiedź! Ponieważ język jest późniejszy niż wyzwanie, możesz opublikować odpowiedź, ale być może powinieneś wskazać, że nie kwalifikuje się do wygranej
Luis Mendo
Czy &:pbajt nie jest krótszy?
DJMcMayhem
@DrGreenEggsandIronMan tak, więc myślę, że i tak nie jest konkurencyjny, abym mógł go skrócić, ale w tym czasie opublikowałem swoją odpowiedź, której nie mieliśmy&
Suever
4

Jolf , 4 bajty

Wypróbuj tutaj!

OrjJ
  jJ two inputs
 r   range between them [j,J)
O    product
Conor O'Brien
źródło
We współczesnej Jolf, może to być Orj(co automatycznie jest transpiled do Orjx)
Conor O'Brien
4

Ruby, 22 bajty

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

Nie golfowany:

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

Stosowanie:

->i,n{(i..n).reduce:*}[5,10]
=> 151200
Vasu Adari
źródło
1
Myślałem o tym samym rozwiązaniu zeszłej nocy, ale nie miałem czasu, żeby to napisać.
Alexis Andersen,
4

C, 32 bajty

Dla [a,b):

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

Dla [a,b](według sugestii Katenkyo, ponownie 32 bajty):

f(a,b){return a<b?a*f(a+1,b):b;}
Sahil Arora
źródło
1
Znalazłem inne rozwiązanie w C, jeśli jesteś zainteresowany, to także 32 bajty f(a,b){return a<b?a*f(a+1,b):b;}. :)
Katenkyo,
-5 bajtów w gcc a=...zamiast zamiastreturn...
4

05AB1E , 2 bajty (niekonkurujące)

Kod:

ŸP

Wyjaśnienie:

Ÿ   # Inclusive range [input, ..., input]
 P  # Total product of the list
    # Implicit printing top of the stack
Adnan
źródło
4

J, 8 bajtów

[:%/!@<:

Stosowanie

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

gdzie >>jest STDIN i <<STDOUT.

Wyjaśnienie

Oblicza się ∏[a,b]jako (b-1)!/(a-1)!.

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

Poprzednia 13-bajtowa wersja

Napisane, gdy nie miałem pojęcia, co to w Jogóle jest: str

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

Stosowanie:

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

Wyjaśnienie:

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

Szczegółowe wyjaśnienie:

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
Leaky Nun
źródło
1
Świetne wyjaśnienie!
wizzwizz4,
2
Możesz użyć [:*/]+i.@-dla 10 bajtów, jeśli weźmiesz zakres [a, b)jako b ([:*/]+i.@-) ataki, że dane 10 ([:*/]+i.@-) 5wyjściowe 15120.
mile
@miles Ta odpowiedź została napisana, gdy w ogóle nie wiedziałem J: p
Leaky Nun
Twoje 8-bajtowe rozwiązanie nie będzie działać, jeśli żaden argument nie będzie dodatni.
Dennis
4

JavaScript (ES6), 22 bajty

Nie mogę uwierzyć, że żaden z nas golfistów JS nie pomyślał o użyciu rekurencji ...

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

Przypisz do zmiennej za pomocą np. var q = a=>F=b=>a-b?b*F(b-1):aNastępnie wywołaj like q(2)(5).

ETHprodukcje
źródło
4

Brachylog , 3 bajty

⟦₃×

Wypróbuj online!

Dane wejściowe są przekazywane jako [A,B]. Zakres jest wyłącznym B, ale może być wykonane przez zastąpienie włącznie z .

Niepowiązany ciąg
źródło
3
Witamy w PPCG! W dzisiejszych czasach nie ma znaczenia, kiedy tworzone są języki, więc ta odpowiedź jest całkowicie konkurencyjna. Mam nadzieję, że ci się spodoba!
Conor O'Brien
Ach, dobrze wiedzieć! Myślę, że patrzyłem na zbyt wiele starych wyzwań z odpowiedziami posortowanymi według głosów.
Niepowiązany ciąg
@UnrelatedString Przy okazji, jeśli widzisz te niekonkurujące wiadomości, możesz je edytować.
Esolanging Fruit
3

Minkolang 0,14 , 7 bajtów

nnL$*N.

Wypróbuj tutaj.

Wyjaśnienie

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
źródło
3

Python, 52 bajty

Bardzo prosty kod; trochę za długo.

def p(a,b):
 t=1
 for i in range(a,b):t*=i
 return t
Sherlock9
źródło
3

JavaScript (ES6), 45 41 bajtów

Zaoszczędzono 4 bajty dzięki @ Cᴏɴᴏʀ O'Bʀɪᴇɴ

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

Trochę za długo ...

(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.
ETHprodukcje
źródło
To działa? sława! Nie sądzę, że potrzebujesz ymapowania redukującego, więc odetnij go ox=>x*a++
Conor O'Brien
@ CᴏɴᴏʀO'Bʀɪᴇɴ Dzięki, ta sztuczka działa naprawdę dobrze!
ETHproductions
2
na końcu powinieneś dodać średnik. za wynik.
Seadrus,
3

Julia, 16 bajtów

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

Uwaga: Jeżeli przedmiotem zakres a:b(co jest dosłownie przechowywana jako wartość początkowa i wartość zatrzymania, jak i wewnątrz zawiera „przyrost o 1 w każdym etapie” wartości) jest dozwolony jako wejście, wymagane są tylko 4 bajty: prod.

Glen O
źródło
3

Perl 6 , 14 bajtów

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

stosowanie:

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

Jeśli chcesz wykluczyć ostatni element, użyj ..^zamiast..

Brad Gilbert b2gills
źródło