Bir aralıktaki ürün


38

Senin görevin basit: verilen iki tamsayı ave bçıktı ∏[a,b]; bu, aralığında bir ürünüdür ave b. Sen alabilir ave bbu bir fonksiyonu, bir liste girişi, STDIN, vesaire için argümanlar olsun, herhangi bir makul biçimde. Dönüş değeri (işlevler için) veya STDOUT gibi herhangi bir makul formatta çıktı alabilirsiniz. aher zaman daha az olacaktır b.

Sonun münhasır veya kapsayıcı olabileceğini unutmayın b. Ben seçici değilim. ^ _ ^

Test durumları

[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

Bu bir , yani bayt cinsinden en kısa program kazanır.


Liderler Sıralaması

Bu yazının altındaki Yığın Parçacığı, cevapları a) dil başına en kısa çözümün bir listesi olarak ve b) genel bir lider tablosu olarak oluşturur.

Cevabınızın göründüğünden emin olmak için, lütfen aşağıdaki Markdown şablonunu kullanarak cevabınızı bir başlık ile başlatın:

## Language Name, N bytes

Gönderinizin Nbüyüklüğü nerede ? Puanınızı artırmak varsa, olabilir onları içinden vurarak, başlığa eski hesapları tutmak. Örneğin:

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

Başlığınıza birden fazla sayı eklemek istiyorsanız (örneğin, puanınız iki dosyanın toplamı olduğundan veya tercüman bayrağı cezalarını ayrı ayrı listelemek istediğiniz için), gerçek puanın başlıktaki son sayı olduğundan emin olun :

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

Dil adını, daha sonra pasajda görünecek bir bağlantı da yapabilirsiniz:

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


1
Bunu yarın TI-BASIC’te cevaplayacağım.
SuperJedi224

@ SuperJedi224 İyi şanslar;)
Conor O'Brien

Giriş olarak alınabilir b, ami?
FlipTack

@FlipTack evet yapabilirsiniz
Conor O'Brien

Yanıtlar:


36

Jöle, 2 bayt

rP

Komut satırı argümanları olarak iki sayı alır. Çevrimiçi deneyin.

Bunun kapsayıcı bir aralık olduğunu unutmayın. Bir bayt (3 bayt) maliyeti için, bunu özel yapabiliriz:

’rP

Çevrimiçi deneyin. Argümanların b abu versiyon için sıralanması gerektiğine dikkat edin .

açıklama

dahil

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

seçkin

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

10
Bunun yenilebilir olduğundan şüpheliyim ...
kirbyfan64sos

14
@ kirbyfan64sos size jöle?
Aaron,

30

ArnoldC , 522 511 bayt

Codegolf'ta ilk yayın!

Bunu yaparken eğlendim. Özel seri

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

Açıklamalar (Teşekkürler 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 ... Ben hala gülüyorum
rpax

ancak bir açıklama çok iyi olurdu
rpax

İşte o dönüştürülür ve kullanarak girintili bu referans olarak
Bijan

Hangi tercümanı kullanıyorsunuz?
lirtosiast

Resmi olan . @ NO PROBLEMO ve 1 (0; değil) hakkında haklısın
Zycho

18

Python, 30 bayt

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

Her şey dahil Sol uç noktayı, sağ uç noktadan daha yüksek olana kadar art arda çoğaltır ve arttırır; bu durumda, 1 değerinin (Gerçek olarak) boş ürünüdür.


13

Minecraft 15w35a +, toplam program büyüklüğü 456 (aşağıya bakınız)

görüntü tanımını buraya girin

Bu hesaplar PI [a,b). Bu iki komut kullanılarak girdi verilir: /scoreboard players set A A {num}ve /scoreboard players set B A {num}. /scoreboard objectives add A dummyGiriş yapmadan önce kullanmayı unutmayın .

Kullanılarak Attı: {program size} + ( 2 * {input command} ) + {scoreboard command} = 356 + ( 2 * 33 ) + 34 = 456.

Bu kod aşağıdaki psuedocode'a karşılık gelir:

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

Dünyayı buradan indirin .


Program büyüklüğü bu puanlama yöntemiyle sayılır .
GamrCorps,

Kahretsin, benden önce yaptın. : I
Addison Crump

Anlık görüntü sürümünü, yani bir 15w46aşey belirtmeniz gerekir .
Addison Crump

Minecraft: D LoL, Minecraft'da golf oynamak: D
username.ak

12

TI-BASIC, 9 bayt

Input A
prod(randIntNoRep(A,Ans

Ans Komut isteminden bir numara alır .

Ayrıca 9 bayt, bir listeden giriş alarak Ans:

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

1
Kendimi bulmam biraz zaman aldı, bu yüzden buraya göndereceğim: TI-BASIC'deki her işlev bir bayt.
Nic Hartley

3
@QPaysTaxes Birçoğu yapar, fakat hepsini değil. %iki bayttır.
mbomb007

12

Python 2, 44 38 bayt

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

Neredeyse bariz bir isimsiz fonksiyon cevap.

EDIT: Bilmiyorum bazı özellikleri ile 6 byte tasarruf için xnor sayesinde.


1
int.__mul__Lambda yerine çalışan , yerleşik kullanabilirsiniz . İki sayı x,yda açılmış olarak yazılabilir *l.
xnor

36
44 üstü çizili hala 44. benziyor
bir Spaghetto

10

Pyth, 5 bayt

*FrQE

Pyth'in ürünü yok, bu yüzden menzili düşürüyoruz *.

Özel menzili kullanır.


4
*FrFQeşittir ancak farklı girdilerle, sadece eğlence için :)
FryAmTheEggman


8

Mathematica, 15 bayt

1##&@@Range@##&

Yalnızca negatif olmayan tamsayılar için çalışan daha kısa bir çözüm:

#2!/(#-1)!&

3
Negatif olmayan tam sayılar için daha da kısa:#2!#/#!&
Anders Kaseorg

8

JavaScript (ES6), 34 bayt

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

Bazen en basit cevap en iyisidir! Sadece bir fordöngü içinde eval. Her şey dahil


Vay. Bu etkileyici!
Conor O'Brien,

Adamım, şu anki madeni golf oynamaya çalışırken bu kesin çözümü düşündüm ... +1
ETHproductions

1
Bu, 25 karakterden bile daha kısa: f=(a,b)=>a<b?a*f(a+1,b):1
Matthias Burtscher

7

Cidden, 4 bayt

,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

Çevrimiçi deneyin


7

Japt , 7 bayt

Bu gibi kolay zorluklar her zaman eğlencelidir. :)

UoV r*1

Çevrimiçi deneyin!

açıklama

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

Vay, bu, şu ana kadar verilen diğer cevaplarla karşılaştırıldığında zavallı görünüyor. Japt üzerinde biraz daha çalışmam lazım ...


Açıklama? : 3
Conor O'Brien,

@ CᴏɴᴏʀO'Bʀɪᴇɴ Tamamlandı :)
ETHproductions 10:03

2
Woot, 5K temsilcisi! : D
ETH Sunumları

6

Haskell, 19 17 bayt

a#b=product[a..b]

Kullanım örneği: 2#5-> 120.


Dahil etmeyi seçmenize izin verilir b.
Xnor

@xnor: Ups, bunu göz ardı etmiş olmalı. Teşekkürler!
nimi

Emin değilim, ama PPCG'nin ifadeler olarak verilen cevaplara izin verdiğini düşünüyorum.
Gurkel haskeller

@proudhaskeller: varsayılan , tüm program ve işlevlere izin vermektir. Snippet'lere, ifadelere vb. Görev tanımında açıkça izin verilmesi gerekir.
nimi

5

Prolog, 45 bayt

Kod:

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

Açıklaması:

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

Örnek:

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

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

5

Oktav, 15 bayt

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

Basit. Kapsayıcı menzili kullanır.


5

CJam, 6 19 18 10 bayt

Golf ile ilgili yardımları için Dennis ve RetoKoradi'ye teşekkürler!

q~1$-,f+:*

Çevrimiçi deneyin

Girişi olarak alır a b. Hesaplar PI [a,b).

Not: Bu program 6 bayt uzunluktaki ve eğer çalışır ave bolumludur.

q~,>:*

Çevrimiçi deneyin

Girişi olarak alır a b. Hesaplar PI [a,b).


q~{_)_W$<}g;]:*üç bayt kaydeder.
Dennis,

4
q~1$-,f+:*10 bayt için
Reto Koradi

5

Bash + GNU yardımcı programları, 13

seq -s* $@|bc

Geçerli dizinde, adları ile başlayan hiçbir dosya olmadığını varsayar -s. Başlangıç ​​ve bitiş (dahil) komut satırı parametreleri olarak iletilir.

Bu basitçe aritmetik değerlendirme için diziyi baştan sona *, sonradan boru ile ardırarak üretir bc.


2
Ama bütün dosyalarıma başlıyorum -s! : P
Conor O'Brien,

5

MATL (rekabet etmeyen), 4 bayt

Dahil Olanlar

2$:p

Çevrimiçi deneyin!

açıklama

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

Bu MATL olayını çözmeme yardım ettiğin için @Don Muesli'ye teşekkürler .


Güzel cevap! Dil mücadeleyi yayınladığından beri, cevabı gönderebilirsiniz, ancak belki de kazanmanın uygun olmadığını
Luis Mendo

&:pBir bayt daha kısa değil mi?
DJMcMayhem

@DrGreenEggsandIronMan evet, bu yüzden zaten rekabet etmediğini düşünüyorum, bu yüzden onu kısaltabilirim, ama cevabımı gönderdiğim zaman elimizde olmayan&
Suever


4

Ruby, 22 bayt

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

Ungolfed:

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

Kullanımı:

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

1
Dün gece de aynı çözümü düşünüyordum ama yazacak vaktim olmadı.
Alexis Andersen

4

C, 32 bayt

İçin [a,b):

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

İçin [a,b](Katenkyo önerilerini günü, 32 tekrar bayt):

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

1
C'de başka bir çözüm buldum, eğer ilgilenirseniz, o da 32 byte f(a,b){return a<b?a*f(a+1,b):b;}. :)
Katenkyo

-5 bayt a=...yerine gccreturn...

4

05AB1E , 2 bayt (rekabet etmeyen)

Kod:

ŸP

Açıklama:

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

4

J, 8 bayt

[:%/!@<:

kullanım

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

nerede >>STDIN ve <<STDOUT ise.

açıklama

∏[a,b]Olarak hesaplar (b-1)!/(a-1)!.

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

Önceki 13 bayt versiyon

Ne olduğu hakkında hiçbir fikrim olmadığı zaman yazıldı J: p

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

Kullanımı:

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

Açıklama:

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

Detaylı açıklama:

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
Harika bir açıklama!
wizzwizz4

2
Sen kullanabilirsiniz [:*/]+i.@-için 10 bayt sen aralığını alırsak [a, b)olarak b ([:*/]+i.@-) aöyle ki 10 ([:*/]+i.@-) 5çıkışlar 15120.
mil

@miles Bu cevap hiç bilmediğimde yazılmıştı J: p
Leaky Nun

Her iki argüman da pozitif değilse, 8 baytlık çözümünüz işe yaramaz.
Dennis,

4

JavaScript (ES6), 22 bayt

Hiçbirimizin JS golfçülerinin özyinelemeyi kullanmayı düşünmediğine inanamıyorum ...

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

Örneğin bir değişkene atayın var q = a=>F=b=>a-b?b*F(b-1):a, sonra çağrı yapın q(2)(5).


4

Brachylog , 3 bayt

⟦₃×

Çevrimiçi deneyin!

Giriş olarak iletildi [A,B]. Bu seri B'ye dahil değildir, ancak ile değiştirilerek kapsayıcı hale getirilebilir .


3
PPCG'ye Hoşgeldiniz! Günümüzde, dillerin ne zaman yapıldığı önemli değildir, bu nedenle bu cevap tamamen rekabetçidir. Umarım kaldınız!
Conor O'Brien,

Ah, bilmek güzel! Sanırım oylara göre sıralanmış cevaplarla pek çok eski zorluğa bakıyordum.
İlişkisiz String

@UnrelatedString Bu arada, rekabet etmeyen mesajları görürseniz, onları düzenlemek için gayet iyi.
Esolanging Fruit


3

Python, 52 bayt

Çok basit kod; biraz fazla uzun.

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

3

JavaScript (ES6), 45 41 bayt

@ Cᴏɴᴏʀ O'Bʀɪᴇɴ sayesinde 4 bayt kaydedildi

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

Biraz fazla uzun gibi görünüyor ...

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

Bu işe yarıyor? şeref! yHarita azaltmada ihtiyacın olduğunu sanmıyorum , o yüzden kes şunux=>x*a++
Conor O'Brien,

@ CᴏɴᴏʀO'Bʀɪᴇɴ Teşekkürler, bu numara gerçekten iyi çalışıyor!
ETHProductions

2
sonunda bir noktalı virgül eklemelisiniz. puan için.
Seadrus


3

gs2, 4 bayt

hex: 57 0e 4f 65

Mnemonics: read-nums dump crange product

Çevrimiçi deneyin!

dumpyığından bir liste çıkar ve içeriğini iter ( ~GolfScript'te olduğu gibi ) ve crangeverir [a,b).

Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.