(inspirado por la respuesta de Helka a mi combinación aleatoria de etiquetas "ajedrez" y "Fibonacci" en el chat)
Fibonacci
Los números de Fibonacci son una de las secuencias más conocidas en matemáticas, donde cada número se compone sumando los dos números anteriores. A continuación se muestra una definición de la secuencia de índice cero:
f(0) = 0
f(1) = 1
f(n) = f(n-1) + f(n-2)
Esto da como resultado la secuencia 0, 1, 1, 2, 3, 5, 8, 13, 21, ...
( enlace OEIS ). En este desafío, nos centraremos solo en los valores estrictamente positivos (así 1, 1, 2, 3, ...
), y puede elegir indexación cero o indexación única, pero indique cuál en su envío.
Los números de Fibonacci se pueden usar para un mosaico del plano, mediante el uso de cuadrados f(n)
de tamaño sucesivo y alineando sus bordes. El mosaico se realiza en sentido antihorario, colocando cuadrados en el patrón "derecha-arriba-izquierda-abajo" desde el cuadrado actual. Un ejemplo de este mosaico parcial para f(8)=21
, con el cuadrado inicial resaltado en azul, es el siguiente:
Se puede ver el f(1)=1
que la casilla de salida (resaltado en azul), el f(2)=1
cuadrado situado a la derecha de la misma, el f(3)=2
cuadrado colocado arriba a partir de ahí, el f(4)=3
cuadrado colocado izquierda y así sucesivamente. El siguiente cuadrado sería f(9)=21+13=34
y se colocaría en la parte inferior. Este es el método de mosaico parcial que usaremos en este desafío.
Las reinas
En el juego de ajedrez , la pieza más poderosa es la reina porque puede mover cualquier cantidad de espacios horizontal, vertical o diagonal. En el siguiente diagrama del tablero, los cuadrados con un círculo negro muestran dónde puede moverse la reina:
Definiremos el término cobertura como
El porcentaje de casillas a las que la reina puede moverse frente al número total de casillas, dada la posición particular de la reina en un tablero vacío, e incluyendo la posición inicial de la propia reina.
Para el ejemplo anterior, la cobertura de la reina es 28/64 = 43.75%
. Si la reina estuviera en el h8
cuadrado superior derecho , la cobertura sería 22/64 = 34.375%
. Si la reina estuviera adentro e7
, la cobertura sería 24/64 = 37.5%
.
El reto
Vamos a utilizar el mosaico de Fibonacci demostrado anteriormente como nuestro tablero de ajedrez para este desafío. Se le darán dos enteros positivos como entrada n
y x
:
- El
n
representa qué tan grande es el mosaico. El ejemplo de mosaico anterior, con el21
cuadrado a la izquierda, es un tablero de tamañon = 8
desdef(8) = 21
(cuando está indexado a cero). - El
x
representa cuál de los cuadrados de Fibonacci se utiliza para la colocación de la reina (s), para el cálculo de la cobertura. Las reinas se colocan una a la vez en cada cuadro en ese mosaico cuadrado de Fibonacci en particular, y la cobertura total es la suma de la cobertura individual (única).
Por ejemplo, aquí hay una imagen de n = 8
(el mismo mosaico que el anterior) y x = 4
(correspondiente al f(4) = 3
cuadrado, sombreado en azul). Al colocar una reina una a la vez en cada uno de esos nueve cuadrados azules, las reinas pueden (combinar) cubrir cada cuadrado que está sombreado en naranja. La cobertura total en este ejemplo es por lo tanto 309/714 = 43.28%
.
Obviamente, en cualquier momento n = x
, la cobertura será 100%
(por ejemplo, con n=8
y x=8
, puede ver que cada cuadro en todo el tablero estará cubierto al menos una vez). A la inversa, con un adecuadamente grande n
y x=1
o x=2
, la cobertura va a acercarse (pero nunca llegar a) 0%
(por ejemplo, con n=8
y x=1
, la cobertura es un insignificante 88/714 = 12.32%
).
Dados dos de estos números de entrada, debe generar el porcentaje de cobertura, con una precisión de dos decimales. Especifique cómo maneja su código el redondeo.
Reglas
- La entrada y la salida se pueden dar en cualquier formato conveniente , pero deben tener una precisión de dos decimales. Especifique cómo maneja su código el redondeo.
- Suponga que no hay otras piezas en el tablero o que interfieran con los movimientos.
- Un programa completo o una función son aceptables. Si es una función, puede devolver el resultado en lugar de imprimirlo.
- Si es posible, incluya un enlace a un entorno de prueba en línea para que otras personas puedan probar su código.
- Las lagunas estándar están prohibidas.
- Este es el código de golf, por lo que se aplican todas las reglas habituales de golf, y gana el código más corto (en bytes).
Ejemplos
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
Respuestas:
VB.NET, (.NET 4.5),
12381229 bytes-9 bytes gracias a @totallyhuman
Simulación del enunciado del problema. Comienzo creando la cuadrícula, recorriendo cada nuevo número de Fibonacci para aumentar el tamaño del cuadrado. Guardo el índice en cada celda, para que sea fácil encontrar a dónde irán las reinas en el siguiente paso.
Luego, encuentro cada celda que debería tener una reina y marco cada cuadrado amenazado con un cero. Me salto las celdas donde están las reinas para no tener que preocuparme por retroceder.
Al final, cuento las celdas que están despejadas, y las celdas con reinas, y luego las divido por el número total de espacios. Multiplique por 100 para obtener el porcentaje y redondee a los dos decimales más cercanos.
fuente
hits
a un nombre de variable más corto? No sé VB.NET, pero supongo que es una variable.Python 2 ,
524499 bytesPruébalo en línea!
Definir una función que tome tanto el tamaño del mosaico
n
como el número cuadrado de fibonacci de la reinax
. El porcentaje de salida se redondea a dos decimales (en el pie de página, donde se produce toda la salida).f
es una matriz bidimensional que contiene la información del tablero que se está iniciando0
. Luego, el tablero de ajedrez de Fibonacci se calcula y se rellena con reinas donde estarán las reinas. Esas reinas se mueven a todos los lugares donde se pueden mover; Todas las posiciones se cuentan e imprimen como un porcentaje de todo el tablero.fuente
Mathematica 11.1, 336 bytes, basado en 1
Uso:
k[n, x]
. Presta atención a que la función está basada en 1. El redondeo se logra medianteRound[100x,0.01]
Básicamente,
p[i]
es una función de determinar la posición de cada cuadrado. Y el área se calcula de nivel superior funciones comoRegionIntersection
,RegionUnion
,RegionMeasure
fuente