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.
quelle
Antworten:
Python 2.7, 285 Bytes
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.
quelle