배경
탁상 형 롤 플레잉 게임에서 ennui의 한 소스는 많은 주사위를 포함하는 롤을 다루는 것입니다. 붕해 주문을 시전하는 것은 순간적 일 수 있지만, 40 주사위를 굴 리거나 합치는 것은 확실하지 않습니다!
이를 처리하기위한 여러 가지 제안 은 rpg.stackexchange.com에서 논의됩니다 . 그러나 롤러 프로그램이나 평균 주사위를 사용하는 등의 일부는 플레이어의 재미와 통제력을 일부 제거합니다. 4 개의 주사위를 굴리고 총계에 10을 곱하는 것과 같은 다른 것들은 결과가 훨씬 더 흔들 리게 만듭니다 (평균 주사위는 반대 방향으로 작용합니다).
이 질문 은 평균 결과 (평균) 또는 그 변동성 (변동) 을 변경 하지 않고 주사위 롤 수를 줄이는 방법에 관한 것 입니다.
표기법과 수학
이 질문에서는 다음과 같은 표기법을 사용하여 주사위 굴림을 나타냅니다.
- n d k (예를 들어, 40d6)는 k면 다이의 n 롤의 합을 지칭한다.
- n d k * c (예 : 4d6 * 10)는 결과에 상수 c를 곱한 것을 나타냅니다.
- 롤 (예 : 4d6 * 10 + 40d6)과 상수 (예 : 4d6 + 10)를 추가 할 수도 있습니다.
단일 다이 롤의 경우 다음을 보여줄 수 있습니다.
- 평균 : E [1d k ] = (k + 1) / 2
- 분산 : Var (1d k ) = (k-1) (k + 1) / 12
평균과 분산의 기본 속성을 사용하여 다음을 더 추론 할 수 있습니다.
- 평균 : E [ m d k * a + n d l * b + c ] = am . E [ 1d k ] + bn . [1d l ] + c
- 분산 : Var ( m d k * a + n d l * b + c ] = a ². m .Var (1d k ) + b ². n .Var (1d l )
태스크
세 개의 정수 n , k 및 r이 주어지면 프로그램은 다음과 같은 제약 조건으로 최대 r 롤 에서 n d k 를 근사하는 방법을 출력해야합니다 .
- 해는 n d k 와 동일한 평균과 분산을 가져야합니다 .
- 더 많은 롤이 더 부드러운 분포를 생성하기 때문에 솔루션은 r 이하 의 가능한 최대 롤 수를 포함해야합니다 .
- 보너스를 목표로하지 않는 한 k면 주사위 만 사용하도록 솔루션을 제한해야합니다 (아래 참조).
- 해결책이 없으면 ( r 이 너무 작 으므로 ) 프로그램은 "I AM A SEXY SHOELESS GOD OF WAR!"문자열을 출력해야합니다.
- 매개 변수는 공백으로 구분 된 단일 문자열로 전달됩니다.
- 1 ≤ n ≤ 100, 1 ≤ r ≤ n 이고 k 가 4, 6, 8, 10, 12 및 20 (정판에서 사용되는 표준 주사위) 중 하나 라고 가정 할 수 있습니다 .
- 출력은 + s 주위에 선택적 공백이 있지만 다른 곳에는 표시되지 않은 표기법 (예 : 4d6 * 10 + 5) 형식이어야합니다. 단위 승수도 선택 사항입니다. 4d6 * 1 및 4d6 모두 유효합니다.
STDIN (또는 가장 가까운 대안), 명령 행 인수 또는 함수 인수를 통해 입력을받는 프로그램 또는 함수를 작성할 수 있습니다. 결과는 STDOUT (또는 가장 가까운 대안)으로 인쇄되거나 문자열로 리턴되어야합니다.
예
>> "10 6 10"
10d6
>> "10 6 4"
2d6*2+2d6+14
>> "10 6 3"
1d6*3+1d6+21
>> "10 6 2"
1d6*3+1d6+21
>> "10 6 1"
I AM A SEXY SHOELESS GOD OF WAR!
채점
가장 짧은 코드가 승리합니다. 표준 규칙이 적용됩니다.
보너스
프로그램이 k 이외의 유효한 주사위를 포함하는 솔루션을 반환하는 경우 -33 % (빼기 전에 내림)- 위에서 언급 한 유효한 값이 4, 6, 8, 10, 12 및 20 인 경우. 그렇게하기로 결정했다면, 적절한 경우 항상 그러한 솔루션을 반환하고 여러 유형의 다이를 사용하는 솔루션을 처리해야합니다. 예:
>> "7 4 3"
3d6+7