Berechne meine heilige Geometrie [geschlossen]


10

In dem Tabletop-Rollenspiel mit dem Namen Pathfinder gibt es eine Leistung, die Charaktere mit dem Namen " Heilige Geometrie" ausführen können. Dadurch kann ein Charakter, der sie hat, seine Zauber im Austausch für etwas Mathematik verbessern: Um sie zu verwenden, würfelt der Charakter eine Zahl von sechs Seiten Würfel, die ihren Rängen in einer bestimmten Fertigkeit entsprechen, konsultieren eine Tabelle basierend auf ihrer Zauberstufe, um zu bestimmen, welche drei Primzahlen die "Primzahlkonstanten" für diese Zauberstufe sind, und berechnen dann, ob es möglich ist, eine der Primzahlkonstanten mit zu erzeugen Durchführen einer Kombination aus Addition, Subtraktion, Multiplikation und Division sowie Gruppierung in Klammern für alle gewürfelten Zahlen.

Die Tabelle der Primkonstanten nach Zauberstufe lautet wie folgt:

+-------------+-----------------+
| 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   |
+-------------+-----------------+

Wenn ein Charakter beispielsweise 5 Fertigkeitsstufen hat und einen Zauberspruch der 4. Stufe wirkt, würfelt er fünf sechsseitige Würfel und muss in der Lage sein, einen Wert von 31, 37 oder 41 zu berechnen gewürfelt eine 6, 6, 4, 3 und 1, dann könnten sie einen Wert von 37 erzeugen, indem sie die folgende Berechnung durchführen: (6 × 6) + (4 - 3) × 1 = 37, oder sie könnten einen Wert von 41 erzeugen durch Ausführen von ([6 + 6] × 3) + 4 + 1 = 41. Infolgedessen würde das Wirken des Zaubers erfolgreich sein.

Für dieses Programmierpuzzle besteht Ihre Aufgabe darin, eine Funktion mit zwei Eingabeparametern zu schreiben, Zauberstufe und Fähigkeitsrang, eine Anzahl sechsseitiger Würfel zu würfeln, die dem Parameter Fähigkeitsrang entsprechen, und dann zu berechnen, ob Sie (mindestens) einen davon erzeugen können Die dem Parameter Spell Level zugeordneten Primzahlkonstanten geben dann einen Booleschen Wert aus.

Die Antworten werden in erster Linie nach der Effizienz ihres Algorithmus (ich bin mir ziemlich sicher, dass ein Brute-Force-Algorithmus sehr schnell skaliert, wenn der Parameter "Skill Ranks" zunimmt) und dann nach der Größe des übermittelten Quellcodes in Bytes eingestuft.


Ich glaube nicht, dass Pathfinder den Charakter zum Würfeln benötigt, sondern den Spieler , oder?
mbomb007

3
Wie wollen Sie die Effizienz des von jemandem verwendeten Algorithmus bewerten?
mbomb007

Warum läuft das Programm aus Neugier für Sie? Wäre es nicht nützlicher, wenn Sie die Würfelergebnisse anstelle des Fertigkeitsrangs angeben würden (ganz zu schweigen davon, dass es einfacher zu testen ist) ...?
Triggernometrie


3
Standardmäßig Zufälligkeit muss nicht fair sein, aber es muss umfassen alle Möglichkeiten. In diesem Fall sind die zusätzlichen Schritte dazwischen jedoch nicht beobachtbar, sodass eine Übermittlung im Grunde nur zufällig wahr oder falsch ausgeben müsste. Es wäre besser, wenn die Antworten stattdessen die
Jo King

Antworten:


1

Python 2.7, 285 Bytes

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])

Entspricht technisch den Spezifikationen der Herausforderung. Gibt nur True / False zurück und legt weder die verwendeten Würfelwürfe noch den für den Aufrufer verwendeten Ausdruck offen.

Außerdem ignoriert dieser Algorithmus die Gruppierung, da wir dieselben Operationen ohne Gruppierung ausführen können, indem wir stattdessen die Reihenfolge verwenden. (Dies wäre nicht der Fall, wenn beispielsweise die Potenzierung eine der möglichen Operationen wäre.)

Exponentielle Laufzeit, da sie alle Möglichkeiten generiert und dann prüft, ob mindestens eine Lösung vorhanden ist.

Durch die Nutzung unserer Website bestätigen Sie, dass Sie unsere Cookie-Richtlinie und Datenschutzrichtlinie gelesen und verstanden haben.
Licensed under cc by-sa 3.0 with attribution required.