(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
Antworten:
VB.NET (.NET 4.5),
12381229 Byte-9 Bytes dank @totallyhuman
Simulation der Problemstellung. Ich beginne mit der Erstellung des Rasters und durchlaufe jede neue Fibonacci-Zahl, um das Quadrat zu vergrößern. Ich speichere den Index in jeder Zelle, damit man im nächsten Schritt leicht findet, wohin die Königinnen gehen.
Dann finde ich jede Zelle, in der sich eine Dame befinden sollte, und markiere jedes bedrohte Feld mit einer Null. Ich überspringe die Zellen, in denen sich die Königinnen befinden, damit ich mich nicht um das Zurückverfolgen kümmern muss.
Am Ende zähle ich die gelöschten Zellen und die Zellen mit den Königinnen auf und teile sie dann durch die Gesamtzahl der Leerzeichen. Multiplizieren Sie mit 100, um den Prozentsatz zu erhalten, und runden Sie auf die nächsten zwei Dezimalstellen.
quelle
hits
zu einem kürzeren Variablennamen wechseln ? Ich kenne VB.NET nicht, aber ich gehe davon aus, dass dies eine Variable ist.Python 2 ,
524499 BytesProbieren Sie es online!
Definieren einer Funktion, die sowohl die Kachelgröße
n
als auch die Fibonacci-Quadratzahl der Dame berücksichtigtx
. Der Ausgabeleistungsprozentsatz wird möglicherweise auf zwei Dezimalstellen gerundet (in der Fußzeile, in der die gesamte Ausgabe erfolgt).f
ist ein zweidimensionales Array, das die Informationen der Karte enthält, auf die initiiert wird0
. Dann wird das Fibonacci-Schachbrett berechnet und mit Königinnen besetzt, wo Königinnen sein sollen. Diese Königinnen werden dann an jeden Ort versetzt, an den sie versetzt werden können. Alle Positionen werden als Prozentsatz der gesamten Tafel gezählt und gedruckt.quelle
Mathematica 11.1, 336 Bytes, 1-basiert
Verbrauch:
k[n, x]
. Achten Sie darauf, dass die Funktion 1-basiert ist. Die Rundung erfolgt durchRound[100x,0.01]
Grundsätzlich
p[i]
ist eine Funktion zur Bestimmung der Position jedes Quadrats. Und Bereich von der oberen Ebene berechnet Funktionen wieRegionIntersection
,RegionUnion
,RegionMeasure
quelle