幅広い製品


39

あなたのタスクは簡単です:与えられた2つの整数ab、output ∏[a,b]; それは、の範囲の積であるab。あなたはかかる場合があります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)全体的なリーダーボードとして、回答からカタログを生成します。

回答が表示されるようにするには、次のマークダウンテンプレートを使用して、見出しから回答を開始してください。

## Language Name, N bytes

N提出物のサイズはどこですか。スコアを改善する場合、古いスコアを打つことで見出しに残すことができます。例えば:

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

ヘッダーに複数の数字を含める場合(たとえば、スコアが2つのファイルの合計であるか、インタープリターフラグペナルティーを個別にリストする場合)、実際のスコアがヘッダーの最後の数字であることを確認します。

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

言語名をリンクにして、スニペットに表示することもできます。

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


1
明日、TI-BASICでこれに答えます。
SuperJedi224

@ SuperJedi224幸運;)
コナーオブライエン

入力は次のように解釈できますb, aか?
FlipTack

@FlipTackはい、できます
コナーオブライエン

回答:


36

ゼリー、2バイト

rP

コマンドライン引数として2つの数字を取ります。オンラインでお試しください。

これは包括的な範囲であることに注意してください。1バイト(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
私はこれがbeatableです...疑う
kirbyfan64sos

14
@ kirbyfan64sosゼリーですか?
アーロン

30

ArnoldC522 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

説明(ビジャンに感謝):

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

ここで、それは変換さ用いてインデントされ、これを基準として
ビジャン

どのインタープリターを使用していますか?
リルトシアスト

公式のもの。あなたは正しい@NO PROBLEMOと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)ます。入力は、次の2つのコマンドを使用することによって与えられる:/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

このコードは、次の擬似コードに対応しています。

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

ここから世界をダウンロードしてください


プログラムのサイズは、このスコアリング方法によってカウントされます。
GamrCorps

くそー、私がやる前にあなたはそれに着いた。:I
アディソンクランプ

スナップショットのバージョン、つまり15w46a何かを指定する必要があります。
アディソンクランプ

Minecraft:D LoL、Minecraftでのゴルフ:D
username.ak

12

TI-BASIC、9バイト

Input A
prod(randIntNoRep(A,Ans

Ans プロンプトから1つの番号と別の番号を取得します。

また、9バイトで、入力をリストとして取得しますAns

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

1
自分で理解するのに時間がかかったので、ここに投稿します。TI-BASICの各関数は1バイトです。
ニックハートリー

3
@QPaysTaxesたくさんありますが、全部ではありません。%2バイトです。
mbomb007

12

パイソン2、44の 38バイト

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

ほぼ明らかな匿名関数の答え。

編集:私が知らなかったいくつかの機能で6バイトを保存してくれたxnorに感謝します。


1
int.__mul__ラムダの代わりに機能するビルトインを使用できます。また、2つの数値x,yは、として展開されて記述でき*lます。
XNOR

36
44消さまだ44のように見える
spaghetto

10

Pyth、5バイト

*FrQE

Pythには製品がないため、範囲全体で*を削減します。

排他的範囲を使用します。


4
*FrFQ同等ですが、楽しみのためだけに入力が異なります:)
FryAmTheEggman





7

Japt、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
コナーオブライエン

@CᴏɴᴏʀO'Bʀɪᴇɴ完了:)
ETHproductions

2
すごい、5K担当者!:D
ETHproductions

6

Haskell、19 17バイト

a#b=product[a..b]

使用例:2#5- > 120


bを含めることを選択できます。
xnor

@xnor:アップ、それを見落としているに違いない。ありがとう!
nimi

確かではありませんが、PPCGは答えを表現として与えることができると思います。
誇りに思ってhaskeller

@proudhaskeller:デフォルトでは、すべてのプログラムと機能を許可します。スニペット、式などは、タスクの説明で明示的に許可する必要があります。
nimi

5

プロローグ、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

オクターブ、15バイト

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

簡単です。包括的範囲を使用します。


5

CJam、6 19 18 10バイト

ゴルフを手伝ってくれたデニスとレトコラディに感謝します!

q~1$-,f+:*

オンラインで試す

入力をとして受け取りますa b。計算しPI [a,b)ます。

注:このプログラムは、6バイトの長さ、および場合にのみ動作aし、b陽性です。

q~,>:*

オンラインで試す

入力をとして受け取りますa b。計算しPI [a,b)ます。


q~{_)_W$<}g;]:*3バイト節約します。
デニス

4
q~1$-,f+:*10バイトの場合。
レトコラディ

5

Bash + GNUユーティリティ、13

seq -s* $@|bc

現在のディレクトリに名前がで始まるファイルがないと仮定し-sます。開始と終了(包括的)は、コマンドラインパラメーターとして渡されます。

これは、で区切られた開始から終了までのシーケンスを単に生成*bc、算術評価のためにパイプします。


2
しかし、私はすべてのファイルを-s!:P
コナーオブライエン

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

このMATL全体を理解してくれる@Don Muesliに感謝します。


いい答えだ!言語が課題をポストデートするので、回答を投稿できますが、おそらくそれが勝つために資格
ルイスメンドー

ではない&:pバイトが短いですか?
DJMcMayhem

@DrGreenEg​​gsandIronManいや私はそれを短縮することができるように、それはとにかく非競合だが、私は私の答えを投稿時に私たちが持っていなかったと思うので&
Suever


4

ルビー、22バイト

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

ゴルフをしていない:

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

使用法:

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

1
私は昨夜この同じ解決策について考えていましたが、それを書く時間はありませんでした。
アレクシスアンデルセン

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
漏れの修道女

どちらの引数も正でない場合、8バイトソリューションは機能しません。
デニス

4

JavaScript(ES6)、22バイト

私たちJSゴルファーの誰も再帰を使うとは思わなかった...

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

たとえばvar q = a=>F=b=>a-b?b*F(b-1):a、変数に代入し、次のように呼び出しますq(2)(5)


4

Brachylog、3バイト

⟦₃×

オンラインでお試しください!

入力はとして渡され[A,B]ます。範囲は、Bの排他的であるが、交換することによって包括行うことができる


3
PPCGへようこそ!現在、言語がいつ作成されるかは問題ではないため、この答えは完全に競争力があります。ご滞在をお楽しみください!
コナーオブライエン

ああ、知って良かった!私は投票でソートされた答えであまりにも多くの古い課題を見てきたと思います。
関連のない文字列

@UnrelatedStringちなみに、これらの競合しないメッセージが表示された場合、それらを編集しても問題ありません。
エソランジングフルーツ


3

Python、52バイト

非常にシンプルなコード。少し長すぎる。

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

3

JavaScript(ES6)、45 41バイト

@CᴏɴᴏʀO'Bʀɪᴇɴのおかげで4バイト節約

(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++
コナー・オブライエン

@CᴏɴᴏʀO'Bʀɪᴇɴありがとう、そのトリックは本当にうまくいく!
ETHproductions

2
最後にセミコロンを追加する必要があります。スコアのために。
シードラス

3

ジュリア、16バイト

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

注:範囲オブジェクトa:b(開始値と終了値として文字通り保存され、「各ステップで1ずつ増加」値を内部的に含む)が入力として許可される場合、4バイトだけが必要ですprod


弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.