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


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 

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

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


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 .


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

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.


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.


4
*FrFQjest równoważne, ale z innym wejściem, dla zabawy :)
FryAmTheEggman


8

Mathematica, 15 bajtów

1##&@@Range@##&

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

#2!/(#-1)!&

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.


Ł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


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


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.


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

5

Oktawa, 15 bajtów

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

Bezpośredni. Korzysta z zakresu obejmującego.


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


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.


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.


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

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

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

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

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

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


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 .


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

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

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.

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.


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

Korzystając z naszej strony potwierdzasz, że przeczytałeś(-aś) i rozumiesz nasze zasady używania plików cookie i zasady ochrony prywatności.
Licensed under cc by-sa 3.0 with attribution required.