Primero, hablemos de las secuencias de Beatty . Dado un número irracional positivo r , podemos construir una secuencia infinita multiplicando los enteros positivos a r en orden y tomando el piso de cada cálculo resultante. Por ejemplo,
Si r > 1, tenemos una condición especial. Podemos formar otro número irracional s como s = r / ( r - 1). Esto puede generar su propia secuencia Beatty, B s . El truco es que B r y B s son complementarios , lo que significa que cada entero positivo está exactamente en una de las dos secuencias.
Si establecemos r = ϕ, la proporción áurea, obtenemos s = r + 1 y dos secuencias especiales. La secuencia inferior de Wythoff para r :
1, 3, 4, 6, 8, 9, 11, 12, 14, 16, 17, 19, 21, 22, 24, 25, 27, 29, ...
y la secuencia superior de Wythoff para s :
2, 5, 7, 10, 13, 15, 18, 20, 23, 26, 28, 31, 34, 36, 39, 41, 44, 47, ...
Estas son las secuencias A000201 y A001950 en OEIS, respectivamente.
El reto
Dado un entero de entrada positivo 1 <= n <= 1000
, genera uno de dos valores distintos que indican si la entrada está en la secuencia de Wythoff inferior o en la secuencia superior . Los valores de salida pueden ser -1
y 1
, true
y false
, upper
y lower
, etc.
Aunque su algoritmo enviado debe funcionar teóricamente para todas las entradas, en la práctica solo tiene que funcionar con los primeros 1000 números de entrada.
E / S y reglas
- La entrada y salida se pueden dar por cualquier método conveniente .
- Se puede suponer que la entrada y la salida encajan en el tipo de número nativo de su idioma.
- Un programa completo o una función son aceptables. Si es una función, puede devolver el resultado en lugar de imprimirlo.
- 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).
fuente
Respuestas:
JavaScript (ES6),
5035 bytesSalidas
1
para inferior y0
para superior. Explicación: listas parciales de valores booleanos se puede construir usando un Fibonacci-como identidad: dado dos listas, comenzando con1
y10
, cada lista posterior es la concatenación de las dos anteriores, lo que resulta en101
,10110
,10110101
etc. En este caso es ligeramente Golfier tener una entrada 0 falsa y úsela0
para construir el segundo elemento de la lista.fuente
Haskell , 26 bytes
Pruébalo en línea!
Sin flotadores, precisión ilimitada. Gracias por H.PWiz por dos bytes.
fuente
~(x:t)
. Graciasundefined
. El hecho de que también haya dos diferentes definidos es accidental.Python , 25 bytes
Pruébalo en línea!
Utiliza la condición muy simple:
Tenga en cuenta que el resultado del módulo es positivo aunque
-n
sea negativo, y coincide con la forma en que Python hace el módulo.Esto corresponde a este código:
Pruébalo en línea!
Ahorramos un byte al duplicarlo
-(n*2)%(phi*2)<2
.fuente
05AB1E , 9 bytes
Pruébalo en línea!
0 significa superior, 1 significa inferior. Pruebe los primeros 100: ¡ Pruébelo en línea!
Volcado de comando sin procesar:
fuente
ï
:)5t>;
a 2 byter puede que no valga la pena ...ï
y¢
jajaja :) Todas nuestras soluciones están tan estrechamente relacionadasJalea , 5 bytes
Pruébalo en línea!
Guardado 1 byte gracias al golf Python de xnor .
Jalea , 6 bytes
Pruébalo en línea!
Devuelve 1 para inferior y 0 para superior.
fuente
Øp
5t>;
Brain-Flak , 78 bytes
Pruébalo en línea!
No produce nada para inferior y
0
superior. Cambiar a un esquema de salida más sensato costaría 6 bytes.fuente
Python 2 ,
393332 bytes-6 bytes gracias al Sr. Xcoder
-1 byte gracias a Zacharý
Pruébalo en línea!
Retornos
False
para inferior yTrue
superiorfuente
lambda n,r=(1+5**.5)/2:-~n//r<n/r
ahorra 6 bytes.lambda n,r=.5+5**.5/2:-~n//r<n/r
debería funcionar para afeitarse un byteJulia 0.6 , 16 bytes
Pruébalo en línea!
Mientras jugaba con los números, me encontré con esta propiedad: floor (n / φ) == floor ((n + 1) / φ) si n está en la secuencia superior de Wythoff, y floor (n / φ) <floor ( (n + 1) / φ) si n está en la secuencia inferior de Wythoff. No he descubierto cómo se produce esta propiedad, pero da los resultados correctos al menos hasta n = 100000 (y probablemente más allá).
Vieja respuesta:
Julia 0.6 , 31 bytes
Pruébalo en línea!
Devuelve
true
para lafalse
secuencia de Wythoff inferior y superior.fuente
Pyth , 8 bytes
Pruébalo aquí!
Devuelve 1 para inferior y 0 para superior.
fuente
Wolfram Language (Mathematica) , 26 bytes
Pruébalo en línea!
Un entero
n
está en la secuencia de Wythoff inferior iffceil(n/phi) - 1/phi < n/phi
.Prueba de que
ceil(n/phi) - 1/phi < n/phi
es ...Suficiente:
Dejar
ceil(n/phi) - 1/phi < n/phi
.A continuación,
ceil(n/phi) * phi < n + 1
.Nota
n == n/phi * phi <= ceil(n/phi) * phi
.Por lo tanto,
n <= ceil(n/phi) * phi < n + 1
.Como
n
yceil(n/phi)
son enteros, invocamos la definición de piso y estadofloor(ceil(n/phi) * phi) == n
, yn
está en la secuencia inferior de Wythoff.Necesario; prueba por contrapositivo:
Dejar
ceil(n/phi) - 1/phi >= n/phi
.A continuación,
ceil(n/phi) * phi >= n + 1
.Nota
n + phi > (n/phi + 1) * phi > ceil(n/phi) * phi
Por lo tanto
n > (ceil(n/phi) - 1) * phi
.Como
(ceil(n/phi) - 1) * phi < n < n + 1 <= ceil(n/phi) * phi
,n
no está en la secuencia inferior de Wythoff.fuente
Japt , 10 bytes
Devuelve verdadero para inferior y falso para superior.
Pruébalo en línea!
Explicación:
fuente
Java 10,
775352 bytesPuerto de la respuesta de @ Rod's Python 2 .
-1 byte gracias a @ Zacharý .
Pruébalo en línea.
Antigua respuesta de
7776 bytes:-1 byte gracias a @ovs 'por algo que me recomendé la semana pasada ... xD
Devoluciones
1
por menor;0
para superior.Pruébalo en línea.
Explicación:
i*Phi
se calcula tomando(sqrt(5)+1)/2 * i
, y luego lo piso al convertirlo en un número entero para truncar el decimal.fuente
++i<=n
en su vieja respuesta puede seri++<n
.n->{var r=Math.sqrt(5)/2+.5;return(int)(-~n/r)<n/r;}
Haskell ,
15313912679 bytesPrecisión ilimitada!
Pruébalo en línea!
Explicación
En lugar de usar una aproximación de la proporción áurea para calcular el resultado, significa que son propensos a errores a medida que aumenta el tamaño de la entrada. Esta respuesta no. En su lugar, utiliza la fórmula provista en el OEIS que
a
es la secuencia única tal que¿Dónde
b
está el cumplido ordenado?fuente
Brachylog , 8 bytes
Pruébalo en línea!
El predicado tiene éxito si la entrada está en la secuencia de Wythoff inferior y falla si está en la secuencia de Wythoff superior.
Si el hecho de no terminar es un método de salida válido, se puede omitir el primer byte.
fuente
φ
se usa en un programa Brachylog. ¡Por fin!MATL , 8 bytes
Pruébalo en línea!
Explicación
fuente
K (oK) , 20 bytes
Solución:
Pruébalo en línea!
Explicación:
fuente
TI-BASIC (TI-84), 18 bytes
La entrada está adentro
Ans
.La salida está en
Ans
y se imprime automáticamente.Imprime
1
si la entrada está en la secuencia inferior o0
si está en la secuencia superior.Ejemplo:
Explicación:
Nota: TI-BASIC es un lenguaje tokenizado. El recuento de caracteres no es igual al recuento de bytes.
fuente
cQuents , 5 bytes
Pruébalo en línea!
Explicación
fuente