Produk dalam jangkauan

39

Tugas Anda sederhana: diberi dua bilangan bulat adan b, keluaran ∏[a,b]; yaitu, produk dari kisaran antara adan b. Anda dapat mengambil adan bdalam format apa pun yang masuk akal, apakah itu argumen untuk suatu fungsi, input daftar, STDIN, dan lain-lain. Anda dapat menampilkan dalam format apa pun yang masuk akal, seperti nilai balik (untuk fungsi) atau STDOUT. aakan selalu kurang dari b.

Perhatikan bahwa akhirnya mungkin eksklusif atau inklusif b. Saya tidak pilih-pilih. ^ _ ^

Uji kasus

[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

Ini adalah , jadi program terpendek dalam byte menang.


Papan peringkat

Cuplikan Stack di bagian bawah posting ini menghasilkan katalog dari jawaban a) sebagai daftar solusi terpendek per bahasa dan b) sebagai leaderboard keseluruhan.

Untuk memastikan bahwa jawaban Anda muncul, silakan mulai jawaban Anda dengan tajuk utama, menggunakan templat Penurunan harga berikut:

## Language Name, N bytes

di mana Nukuran kiriman Anda. Jika Anda meningkatkan skor Anda, Anda dapat menyimpan skor lama di headline, dengan mencoretnya. Contohnya:

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

Jika Anda ingin memasukkan beberapa angka dalam tajuk Anda (mis. Karena skor Anda adalah jumlah dari dua file atau Anda ingin membuat daftar hukuman penterjemah secara terpisah), pastikan bahwa skor sebenarnya adalah angka terakhir di tajuk:

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

Anda juga dapat membuat nama bahasa menjadi tautan yang kemudian akan muncul di cuplikan:

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

Conor O'Brien
sumber
1
Saya menjawab ini di TI-BASIC besok.
SuperJedi224
@ SuperJedi224 Semoga beruntung;)
Conor O'Brien
Apakah input dapat diambil seperti b, a?
FlipTack
@FlipTack ya Anda bisa
Conor O'Brien

Jawaban:

36

Jelly, 2 byte

rP

Membawa dua angka sebagai argumen baris perintah. Cobalah online.

Perhatikan bahwa ini adalah rentang inklusif. Untuk biaya satu byte (3 byte), kita dapat membuat ini eksklusif:

’rP

Cobalah online. Perhatikan bahwa argumen harus diberikan dalam urutan b auntuk versi ini.

Penjelasan

Inklusif

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

Eksklusif

b ’rP a
  ’   decrement b (by default, monadic atoms in dyadic chains operate on the left argument)
   r  range
    P product 
sebuah spaghetto
sumber
10
Saya ragu ini bisa
dikalahkan
14
@ kirbyfan64sos kamu jelly?
Aaron
30

ArnoldC , 522 511 byte

Posting pertama tentang codegolf!

Saya senang melakukan ini. Kisaran eksklusif.

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

Penjelasan (Terima kasih 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
sumber
Hahaha ... Saya masih tertawa
rpax
tetapi sebuah penjelasan akan sangat bagus
rpax
Ini dikonversi dan indentasi menggunakan ini sebagai referensi
Bijan
Juru bahasa apa yang Anda gunakan?
lirtosiast
Pejabat satu . Anda benar tentang @NO PROBLEMO dan 1 (bukan 0;))
Zycho
18

Python, 30 byte

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

Kisaran inklusif. Berkali-kali mengalikan dengan dan menambah titik akhir kiri, hingga lebih tinggi dari titik akhir kanan, dalam hal ini adalah produk kosong dari 1 (sebagai Benar).

Tidak
sumber
13

Minecraft 15w35a +, ukuran program total 456 (lihat di bawah)

masukkan deskripsi gambar di sini

Ini menghitung PI [a,b). Input diberikan dengan menggunakan dua perintah ini: /scoreboard players set A A {num}dan /scoreboard players set B A {num}. Ingatlah untuk menggunakan /scoreboard objectives add A dummysebelum input.

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

Kode ini sesuai dengan kode psued berikut:

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

Unduh dunia di sini .

GamrCorps
sumber
Ukuran program dihitung dengan metode penilaian ini .
GamrCorps
Sial, kau harus melakukannya sebelum aku melakukannya. : I
Addison Crump
Anda perlu menentukan versi snapshot, yaitu 15w46aatau sesuatu.
Addison Crump
Minecraft: D LoL, bermain golf di Minecraft: D
username.ak
12

TI-BASIC, 9 byte

Input A
prod(randIntNoRep(A,Ans

Mengambil satu nomor dari Ans dan lainnya dari prompt.

Juga 9 byte, mengambil input sebagai daftar dari Ans:

prod(randIntNoRep(min(Ans),max(Ans
lirtosiast
sumber
1
Butuh beberapa saat untuk mencari tahu sendiri, jadi saya akan mempostingnya di sini: Setiap fungsi dalam TI-BASIC adalah satu byte.
Nic Hartley
3
@ QPaysTax Banyak dari mereka yang melakukannya, tetapi tidak semuanya. %adalah dua byte.
mbomb007
12

Python 2, 44 38 byte

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

Cukup banyak jawaban fungsi anonim yang jelas.

Sunting: Terima kasih kepada xnor karena telah menyimpan 6 byte dengan beberapa fitur yang tidak saya ketahui.

kuintopia
sumber
1
Anda dapat menggunakan built-in int.__mul__, yang berfungsi menggantikan lambda Anda. Dua angka x,yjuga dapat dituliskan dalam kemasan *l.
xnor
36
Dicoret 44 masih terlihat seperti 44.
spaghetto
10

Pyth, 5 byte

*FrQE

Pyth tidak memiliki produk, jadi kami mengurangi * pada rentang.

Menggunakan rentang eksklusif.

lirtosiast
sumber
4
*FrFQsetara tetapi dengan input berbeda, hanya untuk bersenang-senang :)
FryAmTheEggman
9

R, 22 byte

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

Mathematica, 15 byte

1##&@@Range@##&

Solusi lebih pendek yang hanya berfungsi untuk bilangan bulat non-negatif:

#2!/(#-1)!&
alephalpha
sumber
3
Bahkan lebih pendek untuk bilangan bulat non-negatif:#2!#/#!&
Anders Kaseorg
8

JavaScript (ES6), 34 byte

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

Terkadang jawaban yang paling sederhana adalah yang terbaik! Hanya satu forlingkaran di dalam eval. Kisaran inklusif.

pengguna81655
sumber
Wow. Itu mengesankan!
Conor O'Brien
Ya ampun, saya memikirkan solusi tepat ini saat mencoba menambang golf sekarang ... +1
ETHproduksi
1
Yang ini bahkan lebih pendek dengan 25 karakter: f=(a,b)=>a<b?a*f(a+1,b):1
Matthias Burtscher
7

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

Hex Dump:

2c6978e3

Cobalah online

kuintopia
sumber
7

Japt , 7 byte

Tantangan mudah seperti ini selalu menyenangkan. :)

UoV r*1

Cobalah online!

Penjelasan

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

Wow, ini sepertinya menyedihkan dibandingkan dengan jawaban lain sejauh ini. Saya perlu mengerjakan Japt lagi ...

Produksi ETH
sumber
Penjelasan? : 3
Conor O'Brien
@CᴏɴᴏʀO'Bʀɪᴇɴ Selesai :)
ETHproduk
2
Woot, perwakilan 5K! : D
ETHproduk
6

Haskell, 19 17 byte

a#b=product[a..b]

Contoh penggunaan: 2#5-> 120.

nimi
sumber
Anda diizinkan memilih untuk memasukkan b.
xnor
@ xnor: Ups, pasti telah mengabaikannya. Terima kasih!
nimi
Saya tidak yakin, tapi saya pikir PPCG memungkinkan jawaban diberikan sebagai ungkapan.
haskeller bangga
@proudhaskeller: standarnya adalah untuk memungkinkan program dan fungsi penuh. Cuplikan, ekspresi, dll. Harus diizinkan secara eksplisit dalam deskripsi tugas.
nimi
5

Prolog, 45 byte

Kode:

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

Dijelaskan:

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

Contoh:

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

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

Oktaf, 15 byte

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

Mudah. Menggunakan rentang inklusif.

lirtosiast
sumber
5

CJam, 6 19 18 10 byte

Terima kasih kepada Dennis dan RetoKoradi untuk bantuan bermain golf!

q~1$-,f+:*

Cobalah online

Mengambil input sebagai a b. Menghitung PI [a,b).

Catatan: program ini panjangnya 6 byte, dan hanya berfungsi jika adan bpositif.

q~,>:*

Cobalah online

Mengambil input sebagai a b. Menghitung PI [a,b).

GamrCorps
sumber
q~{_)_W$<}g;]:*menghemat tiga byte.
Dennis
4
q~1$-,f+:*selama 10 byte.
Reto Koradi
5

Utilitas Bash + GNU, 13

seq -s* $@|bc

Mengasumsikan tidak ada file dalam direktori saat ini yang namanya dimulai dengan -s . Mulai dan akhiri (inklusif) diteruskan sebagai parameter baris perintah.

Ini hanya menghasilkan urutan dari awal hingga akhir, dipisahkan oleh *, kemudian pipa ke bcuntuk evaluasi aritmatika.

Trauma Digital
sumber
2
Tapi saya mulai dengan semua file saya -s! : P
Conor O'Brien
5

MATL (non-bersaing), 4 byte

Rentang inklusif

2$:p

Cobalah online!

Penjelasan

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

Terima kasih kepada @Don Muesli yang telah membantu saya memahami semua masalah MATL ini.

Suever
sumber
Jawaban bagus! Karena bahasa memposting tantangan, Anda dapat memposting jawaban tetapi mungkin Anda harus menunjukkan bahwa itu tidak memenuhi syarat untuk menang
Luis Mendo
Bukankah &:pbyte lebih pendek?
DJMcMayhem
@DrGreenEggsandIronMan ya jadi saya kira itu tidak bersaing, jadi saya bisa mempersingkatnya, tetapi pada saat saya memposting jawaban saya, kami tidak punya&
Suever
4

Jolf , 4 byte

Coba di sini!

OrjJ
  jJ two inputs
 r   range between them [j,J)
O    product
Conor O'Brien
sumber
Di Jolf modern, ini bisa Orj(yang secara otomatis diubah menjadi Orjx)
Conor O'Brien
4

Ruby, 22 byte

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

Tidak Disatukan:

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

Pemakaian:

->i,n{(i..n).reduce:*}[5,10]
=> 151200
Vasu Adari
sumber
1
Saya memikirkan solusi yang sama tadi malam tetapi tidak punya waktu untuk menuliskannya.
Alexis Andersen
4

C, 32 byte

Untuk [a,b):

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

For [a,b](Pada saran Katenkyo, 32 byte lagi):

f(a,b){return a<b?a*f(a+1,b):b;}
Sahil Arora
sumber
1
Saya menemukan solusi lain dalam C, jika Anda tertarik, itu juga 32 byte f(a,b){return a<b?a*f(a+1,b):b;}. :)
Katenkyo
-5 byte dalam gcc dengan a=...bukannyareturn...
4

05AB1E , 2 byte (tidak bersaing)

Kode:

ŸP

Penjelasan:

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

J, 8 byte

[:%/!@<:

Pemakaian

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

dimana >>STDIN dan <<STDOUT.

Penjelasan

Itu dihitung ∏[a,b]sebagai (b-1)!/(a-1)!.

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

Versi 13 byte sebelumnya

Ditulis ketika saya tidak tahu apa Jitu: hlm

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

Pemakaian:

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

Penjelasan:

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

Penjelasan detail:

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
Biarawati Bocor
sumber
1
Penjelasan hebat!
wizzwizz4
2
Anda dapat menggunakan [:*/]+i.@-untuk 10 byte jika Anda mengambil kisaran [a, b)sebagai b ([:*/]+i.@-) asehingga 10 ([:*/]+i.@-) 5output 15120.
mil
@ Miles Jawaban itu ditulis ketika saya tidak tahu Jsama sekali: p
Leaky Nun
Solusi 8 byte Anda tidak akan berfungsi jika tidak ada argumen yang positif.
Dennis
4

JavaScript (ES6), 22 byte

Saya tidak percaya tidak ada dari kita pegolf JS berpikir untuk menggunakan rekursi ...

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

Tetapkan ke variabel dengan eg var q = a=>F=b=>a-b?b*F(b-1):a, lalu panggil like q(2)(5).

Produksi ETH
sumber
4

Brachylog , 3 byte

⟦₃×

Cobalah online!

Input dilewatkan sebagai [A,B]. Rentang ini tidak termasuk B, tetapi dapat dibuat inklusif dengan mengganti dengan .

String yang tidak terkait
sumber
3
Selamat datang di PPCG! Saat ini, tidak masalah kapan bahasa dibuat, jadi jawaban ini sangat kompetitif. Semoga Anda menikmati masa tinggal Anda!
Conor O'Brien
Ah, senang tahu! Saya kira saya telah melihat terlalu banyak tantangan lama dengan jawaban yang diurutkan berdasarkan suara.
String yang tidak terkait
@UnrelatedString Ngomong-ngomong, jika Anda melihat pesan-pesan yang tidak bersaing itu baik-baik saja untuk mengeditnya.
Buah Esolanging
3

Minkolang 0,14 , 7 byte

nnL$*N.

Coba di sini.

Penjelasan

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
sumber
3

Python, 52 byte

Kode yang sangat sederhana; agak terlalu lama.

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

JavaScript (ES6), 45 41 byte

Disimpan 4 byte berkat @ Cᴏɴᴏʀ O'Bʀɪᴇɴ

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

Sepertinya agak terlalu lama ...

(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.
Produksi ETH
sumber
Itu bekerja? pujian! Saya tidak berpikir Anda perlu ydalam mengurangi pemetaan, jadi hentikan dix=>x*a++
Conor O'Brien
@ CᴏɴᴏʀO'Bʀɪᴇɴ Terima kasih, trik itu bekerja dengan sangat baik!
ETHproduk
2
Anda harus menambahkan titik koma di bagian akhir. untuk skor.
Seadrus
3

Julia, 16 byte

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

Catatan: jika objek rentang a:b(yang secara harfiah disimpan sebagai nilai awal dan nilai berhenti, dan internal termasuk "kenaikan sebesar 1 pada setiap langkah" value) diizinkan sebagai input, kemudian hanya 4 byte yang diperlukan: prod.

Glen O
sumber
3

Perl 6 , 14 byte

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

pemakaian:

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

Jika Anda ingin mengecualikan penggunaan elemen terakhir ..^alih-alih..

Brad Gilbert b2gills
sumber