ผลิตภัณฑ์ในช่วง


38

งานของคุณง่าย: ให้สองจำนวนเต็มaและbเอาท์พุท∏[a,b]; ที่เป็นผลิตภัณฑ์ของช่วงระหว่างและa bคุณอาจใช้aและbในรูปแบบที่เหมาะสมไม่ว่าจะเป็นข้อโต้แย้งกับฟังก์ชั่นการป้อนข้อมูล, STDIN, และอื่น ๆ คุณอาจส่งออกในรูปแบบที่เหมาะสมเช่นค่าตอบแทน (สำหรับฟังก์ชั่น) หรือ STDOUT aจะน้อยกว่าbเสมอ

โปรดทราบว่าท้ายที่สุดอาจจะเป็น bแต่เพียงผู้เดียวหรือรวม ฉันไม่จู้จี้จุกจิก ^ _ ^

กรณีทดสอบ

[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

นี่คือดังนั้นโปรแกรมที่สั้นที่สุดในหน่วยไบต์ชนะ


ลีดเดอร์บอร์ด

สแต็คส่วนย่อยที่ด้านล่างของโพสต์นี้สร้างแคตตาล็อกจากคำตอบ a) เป็นรายการคำตอบสั้นที่สุดต่อภาษาและ b) เป็นลีดเดอร์บอร์ดโดยรวม

เพื่อให้แน่ใจว่าคำตอบของคุณปรากฏขึ้นโปรดเริ่มคำตอบด้วยหัวข้อโดยใช้เทมเพลต Markdown ต่อไปนี้:

## Language Name, N bytes

ที่Nมีขนาดของส่งของคุณ หากคุณปรับปรุงคะแนนของคุณคุณสามารถเก็บคะแนนเก่าไว้ในพาดหัวโดยการตีพวกเขาผ่าน ตัวอย่างเช่น

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

หากคุณต้องการรวมหลายตัวเลขไว้ในส่วนหัวของคุณ (เช่นเนื่องจากคะแนนของคุณคือผลรวมของไฟล์สองไฟล์หรือคุณต้องการแสดงรายการบทลงโทษการตั้งค่าสถานะของล่ามแยกต่างหาก) ตรวจสอบให้แน่ใจว่าคะแนนจริงเป็นตัวเลขสุดท้ายในส่วนหัว:

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

คุณสามารถทำให้ชื่อภาษาเป็นลิงค์ซึ่งจะปรากฏในตัวอย่างข้อมูล:

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


1
ฉันจะตอบคำถามนี้ใน TI-BASIC ในวันพรุ่งนี้
SuperJedi224

@ SuperJedi224 ขอให้โชคดี;)
Conor O'Brien

สามารถนำเข้าเป็นb, a?
FlipTack

@FlipTack ใช่คุณทำได้
Conor O'Brien

คำตอบ:


36

เยลลี่ 2 ไบต์

rP

รับตัวเลขสองตัวเป็นอาร์กิวเมนต์บรรทัดคำสั่ง ลองออนไลน์

โปรดทราบว่านี่คือช่วงรวม สำหรับค่าของไบต์ (3 ไบต์) เราสามารถทำให้เป็นเอกสิทธิ์:

’rP

ลองออนไลน์ โปรดทราบว่าจะต้องกำหนดอาร์กิวเมนต์ตามลำดับb aสำหรับรุ่นนี้

คำอธิบาย

รวมทั้ง

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

พิเศษ

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

10
ฉันสงสัยว่าสิ่งนี้จะสามารถ
เอาชนะ

14
@ kirbyfan64 คุณมีเยลลี่หรือเปล่า
แอรอน

30

ArnoldC , 522 511 ไบต์

โพสต์แรกใน codegolf!

ฉันสนุกที่ได้ทำสิ่งนี้ ช่วงพิเศษ

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

คำอธิบาย (ขอบคุณ 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

ฮ่า ๆ ๆ ๆ ... ฉันยังคงหัวเราะ
rpax

แต่คำอธิบายจะดีมาก
rpax

ที่นี่มีการแปลงและเยื้องโดยใช้สิ่งนี้เป็นข้อมูลอ้างอิง
Bijan

คุณใช้ล่ามคนไหน
lirtosiast

อย่างเป็นทางการหนึ่ง คุณพูดถูกเกี่ยวกับ @NO ปัญหาและ 1 (ไม่ใช่ 0;))
Zycho

18

Python ขนาด 30 ไบต์

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

ช่วงรวม ทวีคูณทวีคูณซ้ำ ๆ กันด้วยการเพิ่มจุดสิ้นสุดด้านซ้ายจนกระทั่งสูงกว่าจุดสิ้นสุดด้านขวาซึ่งในกรณีนี้เป็นผลคูณของ 1 (เป็น True)


13

Minecraft 15w35a + ขนาดโปรแกรม 456 ทั้งหมด (ดูด้านล่าง)

ป้อนคำอธิบายรูปภาพที่นี่

PI [a,b)คำนวณนี้ การป้อนข้อมูลจะได้รับจากการใช้สองคำสั่งนี้และ/scoreboard players set A A {num} /scoreboard players set B A {num}จำไว้ว่าให้ใช้/scoreboard objectives add A dummyก่อนใส่

คะแนนโดยใช้: {program size} + ( 2 * {input command} ) + {scoreboard command} = 356 + ( 2 * 33 ) + 34 = 456.

รหัสนี้สอดคล้องกับ psuedocode ต่อไปนี้:

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

ดาวน์โหลดโลกที่นี่


ขนาดโปรแกรมถูกนับด้วยวิธีการให้คะแนนนี้
GamrCorps

Dammit คุณต้องไปก่อนฉัน : I
Addison Crump

คุณต้องระบุเวอร์ชันของสแน็ปช็อตเช่น15w46aหรือบางอย่าง
Addison Crump

Minecraft: D ฮ่า ๆ เล่นกอล์ฟใน Minecraft: D
username.ak

12

TI-BASIC ขนาด 9 ไบต์

Input A
prod(randIntNoRep(A,Ans

รับหมายเลขหนึ่งจากAns อีกหมายเลขหนึ่งจากพรอมต์

นอกจากนี้ 9 ไบต์รับข้อมูลเป็นรายการจากAns:

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

1
ฉันใช้เวลาสักครู่เพื่อคิดหาตัวเองดังนั้นฉันจะโพสต์ที่นี่: แต่ละฟังก์ชั่นใน TI-BASIC เป็นหนึ่งไบต์
Nic Hartley

3
@QPaysTaxes หลายคนทำ แต่ไม่ใช่ทั้งหมด %คือสองไบต์
mbomb007

12

Python 2, 44 38 ไบต์

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

คำตอบของฟังก์ชั่นที่ไม่เปิดเผยตัวค่อนข้างชัดเจน

แก้ไข: ขอบคุณ xnor สำหรับการบันทึก 6 ไบต์ด้วยคุณสมบัติบางอย่างที่ฉันไม่รู้


1
คุณสามารถใช้ built-in int.__mul__ซึ่งทำงานแทนแลมบ์ดาของคุณ ตัวเลขสองตัวx,yนี้สามารถเขียนแยกออกมาได้เช่น*lกัน
xnor

36
ข้ามออกไป 44 ยังดูเหมือน 44
ปาเก็ตตี้

10

Pyth, 5 ไบต์

*FrQE

Pyth ไม่มีผลิตภัณฑ์ดังนั้นเราจึงลด * ในช่วง

ใช้ช่วงพิเศษ


4
*FrFQเทียบเท่า แต่มีการป้อนข้อมูลที่แตกต่างกันเพียงเพื่อความสนุกสนาน :)
FryAmTheEggman


8

Mathematica ขนาด 15 ไบต์

1##&@@Range@##&

วิธีแก้ปัญหาที่สั้นกว่าซึ่งใช้ได้กับจำนวนเต็มที่ไม่เป็นลบเท่านั้น:

#2!/(#-1)!&

3
ยิ่งสั้นลงสำหรับจำนวนเต็มที่ไม่เป็นลบ:#2!#/#!&
Anders Kaseorg

8

JavaScript (ES6), 34 ไบต์

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

บางครั้งคำตอบที่ง่ายที่สุดก็ดีที่สุด! เพียงแค่ภายในวงfor evalช่วงรวม


ว้าว. น่าประทับใจมาก!
Conor O'Brien

อ๊ะฉันคิดว่าวิธีแก้ปัญหาที่แน่นอนนี้ในขณะที่พยายามตีกอล์ฟของฉันตอนนี้ ... +1
ETHproductions

1
อันนี้สั้นกว่าด้วย 25 ตัวอักษร: f=(a,b)=>a<b?a*f(a+1,b):1
Matthias Burtscher


7

Japtap , 7 ไบต์

ความท้าทายที่ง่ายเช่นนี้สนุกเสมอ :)

UoV r*1

ลองออนไลน์!

คำอธิบาย

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

ว้าวดูเหมือนว่าน่าสงสารเมื่อเทียบกับคำตอบอื่น ๆ ฉันต้องทำงานกับ Japt เพิ่มเติม ...


คำอธิบาย? : 3
Conor O'Brien

@ CᴏɴᴏʀO'Bʀɪᴇɴเรียบร้อยแล้ว :)
ETHproductions

2
Woot ตัวแทน 5K! : D
ETHproductions

6

Haskell, 19 17 ไบต์

a#b=product[a..b]

ตัวอย่างการใช้งาน: ->2#5120


คุณได้รับอนุญาตให้เลือกรวม b.
xnor

@ xnor: อัพต้องมองข้ามว่า ขอบคุณ!
nimi

ฉันไม่แน่ใจ แต่ฉันคิดว่า PPCG อนุญาตให้ตอบเป็นนิพจน์ได้
ภูมิใจ haskeller

@proudhaskeller: ค่าเริ่มต้นคืออนุญาตโปรแกรมและฟังก์ชั่นเต็มรูปแบบ ตัวอย่างข้อมูลนิพจน์ ฯลฯ ต้องได้รับอนุญาตอย่างชัดเจนในคำอธิบายงาน
nimi

5

Prolog ขนาด 45 ไบต์

รหัส:

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

อธิบาย:

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

ตัวอย่าง:

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

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


5

CJam, 6 19 18 10 ไบต์

ขอบคุณ Dennis และ RetoKoradi สำหรับความช่วยเหลือด้านการเล่นกอล์ฟ!

q~1$-,f+:*

ลองออนไลน์

a bจะเข้าเป็น PI [a,b)คำนวณ

หมายเหตุ: โปรแกรมนี้มีความยาว 6 ไบต์และใช้งานได้หากaและbเป็นบวกเท่านั้น

q~,>:*

ลองออนไลน์

a bจะเข้าเป็น PI [a,b)คำนวณ


q~{_)_W$<}g;]:*บันทึกสามไบต์
Dennis

4
q~1$-,f+:*10 ไบต์
Reto Koradi

5

ยูทิลิตี Bash + GNU, 13

seq -s* $@|bc

-sถือว่ามีไฟล์ในไดเรกทอรีปัจจุบันมีชื่อขึ้นต้นด้วยไม่มี เริ่มต้นและสิ้นสุด (รวม) ถูกส่งผ่านเป็นพารามิเตอร์บรรทัดคำสั่ง

สิ่งนี้จะสร้างลำดับตั้งแต่ต้นจนจบโดยคั่นด้วย*จากนั้นไปป์bcสำหรับการประเมินทางคณิตศาสตร์


2
แต่ฉันเริ่มไฟล์ทั้งหมดด้วย-s! : P
Conor O'Brien

5

MATL (ไม่ใช่การแข่งขัน), 4 ไบต์

ช่วงรวม

2$:p

ลองออนไลน์!

คำอธิบาย

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

ขอบคุณ@Don Muesli ที่ช่วยให้ฉันได้รับประโยชน์จากสิ่งที่ MATL ทั้งหมดนี้


คำตอบที่ดี! เนื่องจากภาษาที่โพสต์ความท้าทายคุณสามารถโพสต์คำตอบ แต่บางทีคุณควรระบุว่ามันไม่มีสิทธิ์ได้รับรางวัล
Luis Mendo

ไม่ได้เป็น&:pไบต์ลงเรื่อย ๆ ?
DJMcMayhem

อือ @DrGreenEggsandIronMan ดังนั้นผมคิดว่ามันไม่ใช่การแข่งขัน แต่อย่างใดดังนั้นฉันสามารถย่อให้สั้นลง แต่ในช่วงเวลาที่ผมโพสต์คำตอบของฉันเราไม่ได้มี&
Suever


4

ทับทิมขนาด 22 ไบต์

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

Ungolfed:

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

การใช้งาน:

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

1
ฉันคิดเกี่ยวกับวิธีแก้ปัญหาเดียวกันนี้เมื่อคืนนี้ แต่ไม่มีเวลาเขียนมัน
Alexis Andersen

4

C, 32 ไบต์

สำหรับ[a,b):

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

สำหรับ[a,b](ตามคำแนะนำของ Katenkyo, 32 ไบต์อีกครั้ง):

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

1
ฉันพบโซลูชันอื่นใน C หากคุณสนใจก็เป็น 32 ไบต์f(a,b){return a<b?a*f(a+1,b):b;}เช่นกัน :)
Katenkyo

-5 ไบต์เป็น gcc โดยa=...แทนที่return...

4

05AB1E , 2 ไบต์ (ไม่แข่งขัน)

รหัส:

ŸP

คำอธิบาย:

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

4

J, 8 ไบต์

[:%/!@<:

การใช้

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

>>STDIN อยู่ที่ไหนและ<<STDOUT

คำอธิบาย

มันคำนวณเป็น∏[a,b](b-1)!/(a-1)!

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

รุ่นก่อนหน้า 13 ไบต์

เขียนเมื่อฉันไม่รู้ว่าอะไรJคือ: p

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

การใช้งาน:

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

คำอธิบาย:

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

คำอธิบายโดยละเอียด:

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
คำอธิบายที่ดี!
wizzwizz4

2
คุณสามารถใช้[:*/]+i.@-สำหรับ10 ไบต์ถ้าคุณใช้เวลาช่วง[a, b)เป็นb ([:*/]+i.@-) aเช่นที่เอาท์พุท10 ([:*/]+i.@-) 5 15120
ไมล์

@miles คำตอบนั้นถูกเขียนขึ้นเมื่อฉันไม่รู้Jเลย: p
Leun Nun

โซลูชัน 8 ไบต์ของคุณจะไม่ทำงานหากไม่มีข้อโต้แย้งใด ๆ ในเชิงบวก
Dennis

4

JavaScript (ES6), 22 ไบต์

ฉันไม่อยากจะเชื่อเลยว่าไม่มีนักกอล์ฟของเราที่คิดจะใช้การเรียกซ้ำ ...

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

กำหนดให้กับตัวแปรเช่นนั้นเรียกเช่นvar q = a=>F=b=>a-b?b*F(b-1):aq(2)(5)


4

Brachylogขนาด 3 ไบต์

⟦₃×

ลองออนไลน์!

[A,B]การป้อนข้อมูลจะถูกส่งเป็น ช่วงที่เป็นเอกสิทธิ์ของ B แต่อาจจะทำแบบครบวงจรโดยการแทนที่ด้วย


3
ยินดีต้อนรับสู่ PPCG! ทุกวันนี้ไม่สำคัญว่าจะใช้ภาษาใดดังนั้นคำตอบนี้จึงมีการแข่งขันอย่างสมบูรณ์ หวังว่าคุณจะสนุกกับการเข้าพัก!
Conor O'Brien

โอ้รู้ดี! ฉันเดาว่าฉันได้ดูความท้าทายที่เก่าแก่มากเกินไปด้วยคำตอบที่เรียงตามคะแนนโหวต
สตริงที่ไม่เกี่ยวข้อง

@ UnrelatedString โดยวิธีการถ้าคุณเห็นข้อความที่ไม่ใช่การแข่งขันเหล่านั้นมันเป็นเรื่องที่สมบูรณ์แบบที่จะแก้ไขออก
ผลไม้แยกแยะ



3

JavaScript (ES6), 45 41 ไบต์

บันทึกแล้ว 4 ไบต์ขอบคุณ @ CᴏɴᴏʀO'Bʀɪᴇɴ

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

ดูเหมือนจะยาวไปหน่อย ...

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

มันใช้ได้เหรอ รุ่งโรจน์! ฉันไม่คิดว่าคุณต้องการyในการลดการทำแผนที่ดังนั้นตัดออกที่x=>x*a++
Conor O'Brien

@ CᴏɴᴏʀO'Bʀɪᴇɴขอบคุณเคล็ดลับนั่นใช้ได้ดีจริงๆ!
ETHproductions

2
คุณควรเพิ่มเครื่องหมายอัฒภาคในตอนท้าย สำหรับคะแนน
Seadrus

3

Perl 6 , 14 ไบต์

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

การใช้งาน:

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

หากคุณต้องการยกเว้นองค์ประกอบสุดท้ายที่ใช้..^แทน..


โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.