(inspiriert von Helkas Reaktion auf meine zufällige Paarung von "Schach" - und "Fibonacci" -Tags im Chat)
Fibonacci
Die Fibonacci-Zahlen sind eine der bekanntesten Sequenzen in der Mathematik, bei der jede Zahl durch Addition der beiden vorhergehenden Zahlen zusammengesetzt wird. Nachfolgend finden Sie eine Definition der nullindexierten Sequenz:
f(0) = 0
f(1) = 1
f(n) = f(n-1) + f(n-2)
Daraus ergibt sich die Reihenfolge 0, 1, 1, 2, 3, 5, 8, 13, 21, ...
( OEIS-Link ). Bei dieser Herausforderung konzentrieren wir uns nur auf die streng positiven Werte (so 1, 1, 2, 3, ...
), und Sie können zwischen einer Indexierung ohne Indexierung und einer Indexierung mit einem Index wählen.
Die Fibonacci-Zahlen können verwendet werden, um die Ebene zu kacheln, indem Quadrate aufeinanderfolgender f(n)
Größe verwendet und ihre Kanten aneinander ausgerichtet werden. Das Kacheln erfolgt gegen den Uhrzeigersinn, indem Quadrate in dem Muster "Rechts-Auf-Links-Ab" von dem aktuellen Quadrat platziert werden. Ein Beispiel für diese teilweise Kachelung f(8)=21
mit dem blau hervorgehobenen Startquadrat lautet wie folgt:
Sie können das sehen f(1)=1
, die als Startfeld (blau markiert) f(2)=1
auf den Platz gestellt rechts davon, der f(3)=2
Platz platziert oben von dort, der f(4)=3
platziert Platz links und so weiter. Das nächste Quadrat wäre f(9)=21+13=34
und würde ganz unten liegen. Dies ist die Partial-Tiling-Methode, die wir in dieser Herausforderung verwenden werden.
Die Königinnen
Im Schachspiel ist die Königin die mächtigste Figur, da sie eine beliebige Anzahl von Feldern horizontal, vertikal oder diagonal bewegen kann. Im Diagramm unten zeigen die Quadrate mit einem schwarzen Kreis, wohin sich die Königin bewegen kann:
Wir definieren den Begriff Abdeckung als
Der Prozentsatz der Quadrate, auf die sich die Dame bewegen kann, im Vergleich zur Gesamtzahl der Quadrate, wenn die jeweilige Position der Dame auf einem leeren Brett und die eigene Startposition der Dame angegeben sind.
Für das obige Beispiel ist die Abdeckung der Königin 28/64 = 43.75%
. Wenn die Königin im oberen rechten h8
Quadrat wäre, wäre die Abdeckung 22/64 = 34.375%
. Wenn die Königin dabei e7
wäre, wäre die Berichterstattung 24/64 = 37.5%
.
Die Herausforderung
Wir werden die oben gezeigten Fibonacci-Kacheln als Schachbrett für diese Herausforderung verwenden. Sie erhalten zwei positive Ganzzahlen als Eingabe n
und x
:
- Das
n
stellt dar, wie groß die Kacheln sind. Das Beispiel oben mit dem21
Quadrat links ist eine Tafel mit der Größe vonn = 8
daf(8) = 21
(wenn mit dem Index Null). - Das
x
stellt dar, welches der Fibonacci-Quadrate für die Platzierung der Dame (n) verwendet wird, um die Abdeckung zu berechnen. Die Damen werden einzeln auf jedes Feld in diesem bestimmten Fibonacci-Quadrat gelegt, und die Gesamtabdeckung ist die Summe der einzelnen (eindeutigen) Abdeckung.
Hier ist zum Beispiel ein Bild von n = 8
(die gleiche Kachelung wie oben) und x = 4
(entsprechend dem f(4) = 3
Quadrat, blau schattiert). Indem die Königinnen nacheinander eine Dame auf jedes dieser neun blauen Felder setzen, können sie (kombiniert) jedes orange schattierte Feld abdecken. Die Gesamtabdeckung in diesem Beispiel beträgt daher 309/714 = 43.28%
.
Es ist klar, dass n = x
die Abdeckung zu jedem Zeitpunkt vorhanden sein wird 100%
(zum Beispiel mit n=8
und x=8
können Sie sehen, dass jedes Quadrat auf dem gesamten Brett mindestens einmal abgedeckt wird). Umgekehrt wird sich mit einem angemessen großen n
und x=1
oder x=2
die Abdeckung nähern (aber niemals erreichen) 0%
(zum Beispiel mit n=8
und x=1
ist die Abdeckung dürftig 88/714 = 12.32%
).
Bei zwei derartigen Eingaben müssen Sie den Erfassungsprozentsatz mit einer Genauigkeit von zwei Dezimalstellen ausgeben. Bitte geben Sie an, wie Ihr Code die Rundung handhabt.
Regeln
- Die Eingabe und Ausgabe kann in einem beliebigen Format erfolgen , muss jedoch auf zwei Dezimalstellen genau sein. Bitte geben Sie an, wie Ihr Code die Rundung handhabt.
- Angenommen, keine anderen Teile sind auf dem Brett oder stören auf andere Weise die Bewegungen.
- Es ist entweder ein vollständiges Programm oder eine Funktion zulässig. Bei einer Funktion können Sie die Ausgabe zurückgeben, anstatt sie zu drucken.
- Fügen Sie nach Möglichkeit einen Link zu einer Online-Testumgebung hinzu, damit andere Benutzer Ihren Code ausprobieren können!
- Standardlücken sind verboten.
- Dies ist Codegolf, daher gelten alle üblichen Golfregeln, und der kürzeste Code (in Byte) gewinnt.
Beispiele
n = 8, x = 4
43.28
n = 8, x = 8
100 or 100.00
n = 8, x = 1
12.32
n = 4, x = 1
66.67
n = 4, x = 2
60 or 60.00
n = 5, x = 3
75 or 75.00
n = 5, x = 1
47.5 or 47.50