Количество разных бросков К N-сторонних кубиков

Мне нужно было рассчитать количество различных возможных бросков, которые могут возникнуть при броске кубиков, каждый из которых имеет N сторон. Мое определение броска таково, что что-то вроде {1, 1, 2, 3, 4} эквивалентно {1, 4, 3, 1, 2} (порядок не имеет значения), но не {1, 1, 3, 3, 3} (это не тот же набор результатов). Например: Yahtzee - игра, включающая броски 5 6-гранных костей - по крайней мере, первоначально, перед повторными бросками - и число различных бросков, таким образом, составляет 252. Случай, когда N = K, приводит к последовательности OEIS A001700.

Если я не ужасно ошибаюсь, это дается "(N-1+K) выбрать (N-1)", или, что эквивалентно, "(N+K-1) выберите К", что K ! <: K + N в J. Это приводит меня к четырем различным молчаливым представлениям:

  • d =: ([ ! [: <: +), Простой поезд, без скобок, хотя мне нужно использовать шапку.
  • d =: ([ (! <:) +), Без шапки, но заключенный в скобки внутренний крючок.
  • d =: (] !&<: +), Только три поезда глагола, но с помощью Compose. Он использует (<: N) ! <: K + N версия.
  • d =: (([ ! +) * ] % +), Этот переписывает "C(N+K-1, K)" как "C(N+K, K) * N / (N+K)". Это уродливее, но в случае 0 игральных костей с 0 сторонами это дает 0 вместо 1, что, вероятно, является менее бессмысленным ответом.

Какое из них является наиболее "J-ишем" решением?

Кроме того, монадический случай для всего этого не имеет смысла: 1 0 0 0 0 ... для первых трех и 0 1 1 1 ... для четвертого. Более логичной монадой для этого глагола будет рефлексивный, как d~поэтому было бы лучше определить этот глагол как (d~ : d)?

1 ответ

Решение

Мое предпочтение будет:

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

и добавить монадическую опцию к диадике

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

Я бы добавил комментарий, включая примеры аргументов и ожидаемую цель, чтобы сэкономить мне время, когда я наткнусь на него позже.

Конечно, окончательная версия будет выбором, если 0 d 0 будет возвращать 0, даже если это выглядит немного сложнее.

Другие вопросы по тегам