神聖幾何学を計算する[終了]


10

Pathfinderという名前の卓上RPGには、Sacred Geometryと呼ばれるキャラクターが取ることができる偉業があります。これにより、数学を実行する代わりに呪文を磨くことができます。これを使用すると、キャラクターは6面の特定のスキルのランクに等しいサイコロは、スペルレベルに基づいてテーブルを参照して、その3つの素数がそのスペルレベルの「素数」であるかどうかを判断し、次の方法で素数の1つを生成できるかどうかを計算します。ロールされたすべての数値に対して、加算、減算、乗算、および除算と括弧によるグループ化のいくつかの組み合わせを実行します。

スペルレベルごとの主定数の表は次のとおりです。

+-------------+-----------------+
| Spell Level | Prime Constants |
+-------------+-----------------+
| 1st         | 3, 5, 7         |
| 2nd         | 11, 13, 17      |
| 3rd         | 19, 23, 29      |
| 4th         | 31, 37, 41      |
| 5th         | 43, 47, 53      |
| 6th         | 59, 61, 67      |
| 7th         | 71, 73, 79      |
| 8th         | 83, 89, 97      |
| 9th         | 101, 103, 107   |
+-------------+-----------------+

したがって、たとえば、キャラクターに5つのスキルランクがあり、4レベルの呪文を唱えている場合、5つの6面サイコロを振って、31、37、または41の値を計算できる必要があります。 6、6、4、3、1を振った場合、次の計算を実行して37の値を生成できます:(6×6)+(4 – 3)×1 = 37、または41の値を生成できます([6 + 6]×3)+ 4 + 1 = 41を実行します。その結果、彼らの呪文のキャストは成功します。

このプログラミングパズルの仕事は、スペルレベルとスキルランクの2つの入力パラメーターを使用して関数を記述し、スキルランクパラメーターと同じ数の6面ダイスを振って、(少なくとも)1つを生成できるかどうかを計算することです。 Spell Levelパラメータに関連付けられた主定数。次にブール値を出力します。

回答は、主にアルゴリズムの効率によってランク付けされ(スキルランクパラメーターが増加すると、ブルートフォースアルゴリズムが非常に迅速にスケーリングされると確信しています)、送信されたソースコードのサイズ(バイト単位)によってランク付けされます。


Pathfinderはキャラクターがサイコロを振るのを要求するのではなく、プレイヤーを必要とするのではないでしょうか?
mbomb007

3
また、誰かが使用するアルゴリズムの効率をどのようにランク付けするつもりですか?
mbomb007

好奇心が足りないのに、なぜプログラムがあなたのために転がっているのですか?スキルランクではなくロールの結果を提供した方が便利ではないでしょうか(テストが簡単なことは言うまでもありません)...?
Triggernometry


3
デフォルトでは、ランダム性は公平である必要はありませんが、すべての可能性を網羅する必要があります。ただし、この場合、その間の追加のステップは監視できません。そのため、基本的に、送信はtrueまたはfalseをランダムに出力するだけで済みます。回答が代わりにサイコロの値を入力として使用した方がよいでしょう
Jo King

回答:


1

Python 2.7、285バイト

from itertools import*
from random import*
def f(s,r):
 p=[];n=1;k=1;P=1;d=choices('123456',k=r);D=permutations(d,r);O=product('+-*/',repeat=r-1)
 while-~s*3>n:p+=P%k*[k];n,k,P=n+P%k,k+1,P*k*k
 return any(n in{eval('int(%s)'%'%s'.join(i)%o)for i in D for o in O}for n in p[-4:-1])

技術的にチャレンジの仕様に準拠しています。True / Falseのみを返し、使用されたサイコロの出目や呼び出し元に使用された式は公開しません。

また、このアルゴリズムはグループ化を無視します。代わりに順序付けを使用することにより、グループ化せずに同じ操作を実行できるためです。(たとえば、べき乗が可能な演算の1つであった場合、これは当てはまりません。)

すべての可能性を生成し、少なくとも1つのソリューションが存在するかどうかをチェックするため、指数ランタイム。

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