2013-10-03 37 views
3

我需要計算可能由滾動K個骰子產生的不同可能卷數,每個骰子都有N個邊。我對roll的定義是像{1,1,2,3,4}等於{1,4,3,1,2}(順序無關緊要),但不等於{1,1,3 ,3,3}(它們不是同一組結果)。例如:Yahtzee是一個遊戲,至少在初始階段至少在開始滾動5個6面骰子—之前,在重新滾動—之前,不同滾動的數量因此是252。當N = K時的情況導致OEIS sequence A001700。 (N-1 + K)選擇(N-1)「,或等同地,」(N + K-1)選擇K「,這是K ! <: K + N如果我沒有可怕的錯誤這導致我四種不同的默契表示:K個N面骰子的不同卷數

  • d =: ([ ! [: <: +)。簡單的火車,沒有括號,但我需要使用一個帽子。
  • d =: ([ (! <:) +)。沒有帽子,但用內括號括起來。
  • d =: (] !&<: +)。只有三個動詞訓練,但使用Compose。它使用(<: N) ! <: K + N版本。
  • d =: (([ ! +) * ] % +)。這一個將「C(N + K-1,K)」重寫爲「C(N + K,K)* N /(N + K)」。這是醜陋的,但在0方面的情況下,它給出0而不是1,這可以說是一個不太荒謬的答案。

哪些是最「J-ish」解決方案?

另外,所有這些的一次性情況是沒有意義的:前三位的1 0 0 0 0 ...和第四位的0 1 1 1 ...。對這個動詞來說,更合乎邏輯的monad是自反性的,如d~所給出的,那麼將這個動詞定義爲(d~ : d)會更好嗎?

回答

2

我更傾向於將:

d =: ([ (! <:) +) 

和一個一元選項添加到二元

d =: d~ : ([ (! <:) +) NB. 4 d 5 (4 rolls of 5 sided dice : 70 possible combinations) 

我想補充,包括樣品參數和預期的目的,我節省時間,是我的評論後來偶然發現它。

當然,如果0 d 0返回0,最終版本將是選擇,即使它看起來更復雜一點。

+0

我分享您的偏好。如果零滾動或骰子是想要產生零結果,我會使[ (! <:) +這個更寬的叉的右尖:*&* * ([ (! <:) +) kaleidic

+0

我不知道如何使評論實際顯示代碼。在原動詞的左邊應該是star-ampersand-star-space-star。 (當然,這個空間是裝飾性的,而不是語義的。) – kaleidic

+0

哦,所以你的意思是'(*&* * [(!<:) +)'?現在有一個想法。你不能只簽署該產品,因爲我認爲1種方式與N面滾動0骰子使組合意義。但是,這個想法導致我們「(* @] * [(!<:) +)',這符合法案。太好了! – algorithmshark