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


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 

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

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


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 .


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

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.


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.


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


8

Mathematica, 15 byte

1##&@@Range@##&

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

#2!/(#-1)!&

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.


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


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


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.


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

5

Oktaf, 15 byte

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

Mudah. Menggunakan rentang inklusif.


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


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.


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.


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

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

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

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

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

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


4

Brachylog , 3 byte

⟦₃×

Cobalah online!

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


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

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

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.

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.


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

Dengan menggunakan situs kami, Anda mengakui telah membaca dan memahami Kebijakan Cookie dan Kebijakan Privasi kami.
Licensed under cc by-sa 3.0 with attribution required.