Sản phẩm trong một phạm vi


39

Nhiệm vụ của bạn rất đơn giản: đưa ra hai số nguyên ab, đầu ra ∏[a,b]; đó là, sản phẩm của phạm vi giữa ab. Bạn có thể lấy abở bất kỳ định dạng hợp lý nào, cho dù đó là đối số cho hàm, đầu vào danh sách, STDIN, et cetera. Bạn có thể xuất ra ở bất kỳ định dạng hợp lý nào, chẳng hạn như giá trị trả về (cho các hàm) hoặc STDOUT. aSẽ luôn có ít hơn b.

Lưu ý rằng kết thúc có thể là độc quyền hoặc bao gồm b. Tôi không kén chọn. ^ _ ^

Các trường hợp thử nghiệm

[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

Đây là một , vì vậy chương trình ngắn nhất tính bằng byte sẽ thắng.


Bảng xếp hạng

Đoạn trích Stack ở cuối bài đăng này tạo ra danh mục từ các câu trả lời a) dưới dạng danh sách các giải pháp ngắn nhất cho mỗi ngôn ngữ và b) dưới dạng bảng xếp hạng tổng thể.

Để đảm bảo rằng câu trả lời của bạn hiển thị, vui lòng bắt đầu câu trả lời của bạn bằng một tiêu đề, sử dụng mẫu Markdown sau:

## Language Name, N bytes

nơi Nlà kích thước của trình của bạn. Nếu bạn cải thiện điểm số của mình, bạn có thể giữ điểm số cũ trong tiêu đề, bằng cách đánh bại chúng thông qua. Ví dụ:

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

Nếu ở đó bạn muốn bao gồm nhiều số trong tiêu đề của mình (ví dụ: vì điểm của bạn là tổng của hai tệp hoặc bạn muốn liệt kê riêng các hình phạt cờ phiên dịch), hãy đảm bảo rằng điểm thực tế là số cuối cùng trong tiêu đề:

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

Bạn cũng có thể đặt tên ngôn ngữ thành liên kết sau đó sẽ hiển thị trong đoạn trích:

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


1
Tôi sẽ trả lời điều này trong TI-BASIC vào ngày mai.
SuperJedi224

@ SuperJedi224 Chúc may mắn;)
Conor O'Brien

Đầu vào có thể được thực hiện như là b, a?
FlipTack

@FlipTack có, bạn có thể
Conor O'Brien

Câu trả lời:


36

Thạch, 2 byte

rP

Lấy hai số làm đối số dòng lệnh. Hãy thử trực tuyến.

Lưu ý rằng đây là phạm vi bao gồm. Đối với chi phí của một byte (3 byte), chúng ta có thể tạo độc quyền này:

’rP

Hãy thử trực tuyến. Lưu ý rằng các đối số phải được đưa ra theo thứ tự b acho phiên bản này.

Giải trình

Bao gồm

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

Độc quyền

b ’rP a
  ’   decrement b (by default, monadic atoms in dyadic chains operate on the left argument)
   r  range
    P product 

10
Tôi nghi ngờ điều này có thể đánh bại được ...
kirbyfan64sos

14
@ kirbyfan64sos bạn thạch?
Aaron

30

ArnoldC , 522 511 byte

Bài đăng đầu tiên trên codegolf!

Tôi đã rất vui khi làm điều này. Phạm vi độc quyền.

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

Giải thích (Cảm ơn 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 ... tôi vẫn đang cười
rpax

nhưng một lời giải thích sẽ rất tuyệt
rpax

Ở đây nó được chuyển đổi và thụt vào sử dụng này là tài liệu tham khảo
Bijan

Bạn đang sử dụng thông dịch viên nào?
lirtosiast

Vị quan chức này một . Bạn nói đúng về @NO PROBLEMO và 1 (không phải 0;))
Zycho

18

Python, 30 byte

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

Phạm vi bao gồm. Lặp đi lặp lại nhân với và tăng điểm cuối bên trái, cho đến khi nó cao hơn điểm cuối bên phải, trong trường hợp đó là sản phẩm trống của 1 (là True).


13

Minecraft 15w35a +, kích thước chương trình tổng cộng 456 (xem bên dưới)

nhập mô tả hình ảnh ở đây

Điều này tính toán PI [a,b). Đầu vào được đưa ra bằng cách sử dụng hai lệnh này: /scoreboard players set A A {num}/scoreboard players set B A {num}. Nhớ sử dụng /scoreboard objectives add A dummytrước khi nhập.

Ghi bằng cách sử dụng : {program size} + ( 2 * {input command} ) + {scoreboard command} = 356 + ( 2 * 33 ) + 34 = 456.

Mã này tương ứng với mã psuedocode sau:

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

Tải về thế giới ở đây .


Kích thước chương trình được tính theo phương pháp cho điểm này .
GamrCorps

Khỉ thật, bạn đã nhận nó trước khi tôi làm. : Tôi
Addison Crump

Bạn cần chỉ định phiên bản chụp nhanh, tức là 15w46ahoặc một cái gì đó.
Addison Crump

Minecraft: D LoL, chơi gôn trong Minecraft: D
tên người dùng.

12

TI-BASIC, 9 byte

Input A
prod(randIntNoRep(A,Ans

Lấy một số từ Ans và một số khác từ một dấu nhắc.

Cũng 9 byte, lấy đầu vào làm danh sách từ Ans:

prod(randIntNoRep(min(Ans),max(Ans

1
Tôi phải mất một thời gian để tự mình tìm ra, vì vậy tôi sẽ đăng nó ở đây: Mỗi hàm trong TI-BASIC là một byte.
Nic Hartley

3
@QPaysTaxes Rất nhiều người trong số họ làm, nhưng không phải tất cả trong số họ. %là hai byte.
mbomb007

12

Python 2, 44 38 byte

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

Khá nhiều câu trả lời hàm ẩn danh rõ ràng.

EDIT: Cảm ơn xnor vì đã lưu 6 byte với một số tính năng mà tôi không biết.


1
Bạn có thể sử dụng tích hợp sẵn int.__mul__, hoạt động thay cho lambda của bạn. Hai số x,ycũng có thể được viết là giải nén như *l.
xnor

36
Vượt qua 44 vẫn trông giống như 44.
một spaghetto

10

Bình thường, 5 byte

*FrQE

Pyth không có sản phẩm, vì vậy chúng tôi giảm * trên phạm vi.

Sử dụng phạm vi độc quyền.


4
*FrFQlà tương đương nhưng với đầu vào khác nhau, chỉ để giải trí :)
FryAmTheEggman


8

Toán học, 15 byte

1##&@@Range@##&

Một giải pháp ngắn hơn chỉ hoạt động cho các số nguyên không âm:

#2!/(#-1)!&

3
Thậm chí ngắn hơn cho các số nguyên không âm:#2!#/#!&
Anders Kaseorg

8

JavaScript (ES6), 34 byte

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

Đôi khi câu trả lời đơn giản nhất là tốt nhất! Chỉ là một forvòng lặp bên trong eval. Phạm vi bao gồm.


Ồ Ấn tượng đấy!
Conor O'Brien

Ôi trời, tôi đã nghĩ đến giải pháp chính xác này trong khi cố gắng đánh gôn ngay bây giờ ... +1
ETHproductions

1
Cái này thậm chí còn ngắn hơn với 25 ký tự: f=(a,b)=>a<b?a*f(a+1,b):1
Matthias Burtscher


7

Japt , 7 byte

Những thử thách dễ dàng như thế này luôn vui vẻ. :)

UoV r*1

Hãy thử trực tuyến!

Giải trình

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

Wow, điều này có vẻ thảm hại so với các câu trả lời khác cho đến nay. Tôi cần phải làm việc trên Japt thêm một số ...


Giải trình? : 3
Conor O'Brien

@ CᴏɴᴏʀO'Bʀɪᴇɴ Xong :)
Sản phẩm ETH

2
Woot, đại diện 5K! : D
ETHproductions

6

Haskell, 19 17 byte

a#b=product[a..b]

Ví dụ sử dụng: 2#5-> 120.


Bạn được phép chọn bao gồm b.
xnor

@xnor: Ups, phải bỏ qua mà. Cảm ơn!
nimi

Tôi không chắc chắn, nhưng tôi nghĩ PPCG cho phép câu trả lời được đưa ra dưới dạng biểu thức.
tự hào

@proudhaskeller: mặc định là cho phép các chương trình và chức năng đầy đủ. Đoạn trích, biểu thức, vv phải được cho phép rõ ràng trong mô tả nhiệm vụ.
nimi

5

Prolog, 45 byte

Mã số:

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

Giải thích:

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

Thí dụ:

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

p(-4,-1,X).
X = 24

5

Octave, 15 byte

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

Nói thẳng ra. Sử dụng phạm vi bao gồm.


5

CJam, 6 19 18 10 byte

Cảm ơn Dennis và RetoKoradi đã giúp đỡ chơi golf!

q~1$-,f+:*

Dùng thử trực tuyến

Đưa đầu vào là a b. Tính toán PI [a,b).

Lưu ý: chương trình này dài 6 byte và chỉ hoạt động nếu ablà dương.

q~,>:*

Dùng thử trực tuyến

Đưa đầu vào là a b. Tính toán PI [a,b).


q~{_)_W$<}g;]:*tiết kiệm ba byte.
Dennis

4
q~1$-,f+:*cho 10 byte.
Reto Koradi

5

Tiện ích Bash + GNU, 13

seq -s* $@|bc

Giả sử không có tệp nào trong thư mục hiện tại có tên bắt đầu bằng -s. Bắt đầu và kết thúc (bao gồm) được truyền dưới dạng tham số dòng lệnh.

Điều này chỉ đơn giản là tạo ra chuỗi từ đầu đến cuối, được phân tách bằng *, sau đó chuyển sang bcđánh giá số học.


2
Nhưng tôi bắt đầu tất cả các tập tin của tôi với -s! : P
Conor O'Brien

5

MATL (không cạnh tranh), 4 byte

Phạm vi bao gồm

2$:p

Hãy thử trực tuyến!

Giải trình

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

Cảm ơn @Don Muesli đã giúp tôi hiểu rõ toàn bộ điều MATL này.


Câu trả lời tốt đẹp! Vì ngôn ngữ hoãn thử thách, bạn có thể đăng câu trả lời nhưng có lẽ bạn nên cho biết nó không đủ điều kiện để chiến thắng
Luis Mendo

Không phải là &:pmột byte ngắn hơn?
DJMcMayhem

@DrGreenEggsandIronMan yea vì vậy tôi đoán dù sao nó cũng không cạnh tranh nên tôi có thể rút ngắn nó, nhưng tại thời điểm tôi đăng câu trả lời của mình, chúng tôi không có&
Suever


4

Ruby, 22 byte

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

Ung dung:

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

Sử dụng:

->i,n{(i..n).reduce:*}[5,10]
=> 151200

1
Tôi đã suy nghĩ về giải pháp tương tự đêm qua nhưng không có thời gian để viết nó lên.
Alexis Andersen

4

C, 32 byte

Dành cho [a,b):

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

Đối với [a,b](Trên đề xuất của Katenkyo, lại 32 byte):

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

1
Tôi đã tìm thấy một giải pháp khác trong C, nếu bạn quan tâm, đó cũng là 32 byte f(a,b){return a<b?a*f(a+1,b):b;}. :)
Katenkyo

-5 byte trong gcc a=...thay vìreturn...

4

05AB1E , 2 byte (không cạnh tranh)

Mã số:

ŸP

Giải trình:

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

4

J, 8 byte

[:%/!@<:

Sử dụng

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

>>STDIN ở đâu và <<là STDOUT.

Giải trình

Nó tính toán ∏[a,b]như (b-1)!/(a-1)!.

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

Phiên bản 13 byte trước đó

Viết khi tôi không biết Jthậm chí là gì : p

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

Sử dụng:

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

Giải trình:

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

Giải thích chi tiết:

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
Giải thích tuyệt vời!
wizzwizz4 30/03/2016

2
Bạn có thể sử dụng [:*/]+i.@-cho 10 byte nếu bạn lấy phạm vi [a, b)như b ([:*/]+i.@-) avậy mà 10 ([:*/]+i.@-) 5đầu ra 15120.
dặm

@miles Câu trả lời đó được viết khi tôi hoàn toàn không biết J: p
Leaky Nun

Giải pháp 8 byte của bạn sẽ không hoạt động nếu không có đối số nào là dương.
Dennis

4

JavaScript (ES6), 22 byte

Tôi không thể tin rằng không ai trong số chúng tôi chơi gôn JS nghĩ sử dụng đệ quy ...

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

Gán cho một biến với ví dụ var q = a=>F=b=>a-b?b*F(b-1):a, sau đó gọi như thế q(2)(5).


4

Brachylog , 3 byte

⟦₃×

Hãy thử trực tuyến!

Đầu vào được thông qua như [A,B]. Phạm vi này là độc quyền của B, nhưng có thể được bao gồm bằng cách thay thế bằng .


3
Chào mừng đến với PPCG! Ngày nay, không có vấn đề gì khi ngôn ngữ được tạo ra, vì vậy câu trả lời này hoàn toàn cạnh tranh. Hy vọng bạn tận hưởng kì nghỉ của bạn!
Conor O'Brien

À, thật tốt khi biết! Tôi đoán tôi đã xem xét quá nhiều thử thách cũ với các câu trả lời được sắp xếp theo phiếu bầu.
Chuỗi không liên quan

@UnrelatedString Nhân tiện, nếu bạn thấy những tin nhắn không cạnh tranh đó thì việc chỉnh sửa chúng là hoàn toàn tốt.
Esolanging Fruit


3

Python, 52 byte

Mã rất đơn giản; hơi lâu

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

3

JavaScript (ES6), 45 41 byte

Đã lưu 4 byte nhờ @ Cᴏɴᴏʀ O'Bʀɪᴇɴ

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

Có vẻ hơi dài ...

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

Điều đó có hiệu quả? thanh danh! Tôi không nghĩ rằng bạn cần ylập bản đồ thu nhỏ, vì vậy hãy cắt nó tạix=>x*a++
Conor O'Brien

@ CᴏɴᴏʀO'Bʀɪᴇɴ Cảm ơn, thủ thuật đó hoạt động rất tốt!
Sản xuất ETH

2
bạn nên thêm một dấu chấm phẩy ở cuối. cho điểm số.
Seadrus

3

Julia, 16 byte

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

Lưu ý: nếu đối tượng phạm vi a:b(được lưu trữ theo nghĩa đen là giá trị bắt đầu và giá trị dừng và bên trong bao gồm giá trị "tăng 1 trên mỗi bước") được cho phép làm đầu vào, thì chỉ cần 4 byte : prod.


3

Perl 6 , 14 byte

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

sử dụng:

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

Nếu bạn muốn loại trừ phần tử cuối cùng sử dụng ..^thay vì..

Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.