(inspiré par la réponse d' Helka à mon appariement aléatoire de balises "échecs" et "Fibonacci" dans le chat)
Fibonacci
Les nombres de Fibonacci sont l'une des séquences les plus connues en mathématiques, où chaque nombre est composé en additionnant les deux nombres précédents ensemble. Voici une définition de la séquence indexée zéro:
f(0) = 0
f(1) = 1
f(n) = f(n-1) + f(n-2)
Il en résulte la séquence 0, 1, 1, 2, 3, 5, 8, 13, 21, ...
( lien OEIS ). Dans ce défi, nous nous concentrerons uniquement sur les valeurs strictement positives (donc 1, 1, 2, 3, ...
), et vous pouvez choisir l'indexation zéro ou l'indexation unique, mais veuillez indiquer laquelle dans votre soumission.
Les nombres de Fibonacci peuvent être utilisés pour un pavage de l'avion, en utilisant des carrés f(n)
de tailles successives et en alignant leurs bords ensemble. Le pavage se fait dans le sens inverse des aiguilles d'une montre, en plaçant des carrés dans le motif "droite-haut-gauche-bas" du carré actuel. Un exemple de ce pavage partiel pour f(8)=21
, avec le carré de départ surligné en bleu, est le suivant:
Vous pouvez voir le f(1)=1
comme le carré de départ (surligné en bleu), le f(2)=1
carré placé à droite de celui-ci, le f(3)=2
carré placé à partir de là, le f(4)=3
carré placé à gauche et ainsi de suite. Le carré suivant serait f(9)=21+13=34
et serait placé en bas. Il s'agit de la méthode de mosaïque partielle que nous utiliserons dans ce défi.
Les reines
Dans le jeu d' échecs , la pièce la plus puissante est la reine car elle peut déplacer n'importe quel nombre d'espaces horizontalement, verticalement ou en diagonale. Dans le diagramme ci-dessous, les carrés avec un cercle noir indiquent où la reine peut se déplacer:
Nous définirons le terme couverture comme
Pourcentage de cases vers lesquelles la reine peut se déplacer par rapport au nombre total de cases, compte tenu de la position particulière de la reine sur un plateau vide, et en incluant la position de départ de la reine.
Pour l'exemple se déplace ci-dessus, la couverture de la reine est 28/64 = 43.75%
. Si la reine était dans le h8
carré supérieur droit , la couverture serait 22/64 = 34.375%
. Si la reine était présente e7
, la couverture le serait 24/64 = 37.5%
.
Le défi
Nous allons utiliser le carrelage Fibonacci présenté ci-dessus comme échiquier pour ce défi. Vous recevrez deux entiers positifs en entrée n
et x
:
- Le
n
représente la taille du carrelage. L'exemple de pavage ci-dessus, avec le21
carré à gauche, est un tableau de taillen = 8
depuisf(8) = 21
(lorsqu'il est indexé zéro). - Le
x
représente lequel des carrés de Fibonacci est utilisé pour le placement de reine (s), pour le calcul de la couverture. Les reines sont placées une par une sur chaque case de cette tuile carrée Fibonacci particulière, et la couverture totale est la somme de la couverture individuelle (unique).
Par exemple, voici une image de n = 8
(le même pavage que ci-dessus) et x = 4
(correspondant au f(4) = 3
carré, bleu ombré). En plaçant une reine une par une dans chacun de ces neuf carrés bleus, les reines peuvent (combinées) couvrir chaque carré ombré d'orange. La couverture totale dans cet exemple est donc 309/714 = 43.28%
.
De toute évidence, à tout moment n = x
, la couverture sera 100%
(par exemple, avec n=8
et x=8
, vous pouvez voir que chaque carré de l'ensemble du plateau sera couvert au moins une fois). Inversement, avec un n
et x=1
ou suffisamment grand x=2
, la couverture va s'approcher (mais jamais atteindre) 0%
(par exemple, avec n=8
et x=1
, la couverture est dérisoire 88/714 = 12.32%
).
Étant donné deux de ces nombres d'entrée, vous devez générer le pourcentage de couverture, précis à deux décimales près. Veuillez spécifier comment votre code gère l'arrondi.
Règles
- L'entrée et la sortie peuvent être données dans n'importe quel format pratique , mais doivent être précises à deux décimales près. Veuillez spécifier comment votre code gère l'arrondi.
- Supposons qu'aucune autre pièce ne se trouve sur le plateau ou n'interfère autrement avec les mouvements.
- Un programme complet ou une fonction sont acceptables. S'il s'agit d'une fonction, vous pouvez renvoyer la sortie plutôt que de l'imprimer.
- Si possible, veuillez inclure un lien vers un environnement de test en ligne afin que d'autres personnes puissent essayer votre code!
- Les failles standard sont interdites.
- Il s'agit de code-golf, donc toutes les règles de golf habituelles s'appliquent et le code le plus court (en octets) l'emporte.
Exemples
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
Réponses:
VB.NET, (.NET 4.5),
12381229 octets-9 octets grâce à @totallyhuman
Simulation de l'énoncé du problème. Je commence par créer la grille, en parcourant chaque nouveau numéro de fibonacci pour augmenter la taille du carré. Je stocke l'index dans chaque cellule, afin qu'il soit facile de trouver où iront les reines à l'étape suivante.
Ensuite, je trouve chaque cellule qui devrait contenir une reine et marque chaque carré menacé avec un zéro. Je saute les cellules où se trouvent les reines pour ne pas avoir à me soucier de revenir en arrière.
À la fin, je compte les cellules effacées et les cellules avec des reines, puis je les divise par le nombre total d'espaces. Multipliez par 100 pour obtenir le pourcentage et arrondissez aux deux décimales les plus proches.
la source
hits
pour un nom de variable plus court? Je ne connais pas VB.NET, mais je suppose que c'est une variable.Python 2 ,
524499 octetsEssayez-le en ligne!
Définir une fonction qui prend à la fois la taille du carrelage
n
et le nombre carré de fibonacci de la reinex
. Le pourcentage de sortie est arrondi à deux décimales près (dans le pied de page, où toutes les sorties ont lieu).f
est un tableau bidimensionnel contenant les informations de la carte en cours d'initiation0
. Ensuite, l'échiquier fibonacci est calculé et peuplé de reines où les reines doivent être. Ces reines sont ensuite déplacées vers tous les endroits où elles peuvent être déplacées; toutes les positions sont comptées et imprimées en pourcentage de l'ensemble du tableau.la source
Mathematica 11.1, 336 octets, basé sur 1
Utilisation:
k[n, x]
. Faites attention au fait que la fonction est basée sur 1. L'arrondi est obtenu parRound[100x,0.01]
Fondamentalement,
p[i]
est une fonction de la détermination de la position de chaque carré. Et la zone est calculée par des fonctions de niveau supérieur aimentRegionIntersection
,RegionUnion
,RegionMeasure
la source