Tout d'abord, parlons des séquences Beatty . Étant donné un nombre irrationnel positif r , nous pouvons construire une séquence infinie en multipliant les entiers positifs par r dans l'ordre et en prenant la parole de chaque calcul résultant. Par exemple,
Si r > 1, nous avons une condition spéciale. Nous pouvons former un autre nombre irrationnel s comme s = r / ( r - 1). Cela peut alors générer sa propre séquence Beatty, B s . L'astuce est que B r et B s sont complémentaires , ce qui signifie que chaque entier positif se trouve exactement dans l'une des deux séquences.
Si nous fixons r = ϕ, le nombre d'or, alors nous obtenons s = r + 1 et deux séquences spéciales. La séquence Wythoff inférieure pour r :
1, 3, 4, 6, 8, 9, 11, 12, 14, 16, 17, 19, 21, 22, 24, 25, 27, 29, ...
et la séquence Wythoff supérieure pour s :
2, 5, 7, 10, 13, 15, 18, 20, 23, 26, 28, 31, 34, 36, 39, 41, 44, 47, ...
Il s'agit des séquences A000201 et A001950 sur OEIS, respectivement.
Le défi
Étant donné un entier d'entrée positif 1 <= n <= 1000
, affichez l'une des deux valeurs distinctes indiquant si l'entrée se trouve dans la séquence Wythoff inférieure ou la séquence supérieure . Les valeurs de sortie peuvent être -1
et 1
, true
et false
, upper
et lower
, etc.
Bien que votre algorithme soumis doive théoriquement fonctionner pour toutes les entrées, en pratique, il ne doit fonctionner qu'avec les 1000 premiers numéros d'entrée.
E / S et règles
- L'entrée et la sortie peuvent être fournies par n'importe quelle méthode pratique .
- L'entrée et la sortie peuvent être supposées correspondre au type de numéro natif de votre langue.
- 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.
- 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) gagne.
la source
Réponses:
JavaScript (ES6),
5035 octetsSorties
1
pour inférieur et0
pour supérieur. Explication: Les listes partielles des valeurs booléennes peut être construit en utilisant une identité comme Fibonacci: étant donné deux listes, en commençant par1
et10
, chaque liste suivante est la concaténation des deux précédents, ce qui101
,10110
,10110101
etc. Dans ce cas , il est légèrement Golfier avoir une fausse 0e entrée0
et l'utiliser pour construire le deuxième élément de la liste.la source
Haskell , 26 octets
Essayez-le en ligne!
Pas de flotteurs, une précision illimitée. Merci pour H.PWiz pour deux octets.
la source
~(x:t)
. Merciundefined
. Le fait qu'il existe également deux définitions différentes est tout simplement accidentel.Python , 25 octets
Essayez-le en ligne!
Utilise la condition très simple:
Notez que le résultat du modulo est positif même s'il
-n
est négatif, correspondant à la façon dont Python fait le modulo.Cela correspond à ce code:
Essayez-le en ligne!
Nous économisons un octet en doublant à
-(n*2)%(phi*2)<2
.la source
05AB1E , 9 octets
Essayez-le en ligne!
0 signifie supérieur, 1 signifie inférieur. Essayez les 100 premiers: essayez-le en ligne!
Dump de commandes brutes:
la source
ï
:)5t>;
à 2 octets n'en vaut peut-être pas la peine ...ï
et¢
lol :) Toutes nos solutions sont si étroitement liéesGelée , 5 octets
Essayez-le en ligne!
1 octet enregistré grâce au golf Python de xnor .
Gelée , 6 octets
Essayez-le en ligne!
Renvoie 1 pour inférieur et 0 pour supérieur.
la source
Øp
5t>;
Brain-Flak , 78 octets
Essayez-le en ligne!
Ne produit rien pour le bas et
0
pour le haut. Le passage à un schéma de sortie plus sensé coûterait 6 octets.la source
Python 2 ,
393332 octets-6 octets grâce à M. Xcoder
-1 octet grâce à Zacharý
Essayez-le en ligne!
Renvoie
False
pour inférieur etTrue
pour supérieurla source
lambda n,r=(1+5**.5)/2:-~n//r<n/r
enregistre 6 octets.lambda n,r=.5+5**.5/2:-~n//r<n/r
devrait également fonctionner pour raser un octetJulia 0,6 , 16 octets
Essayez-le en ligne!
En jouant avec les chiffres, je suis tombé sur cette propriété: étage (n / φ) == étage ((n + 1) / φ) si n est dans la séquence Wythoff supérieure, et étage (n / φ) <étage ( (n + 1) / φ) si n est dans la séquence Wythoff inférieure. Je n'ai pas compris comment cette propriété se produit, mais elle donne les résultats corrects au moins jusqu'à n = 100000 (et probablement au-delà).
Ancienne réponse:
Julia 0,6 , 31 octets
Essayez-le en ligne!
Renvoie la séquence Wythoff
true
inférieure etfalse
supérieure.la source
Pyth , 8 octets
Essayez-le ici!
Renvoie 1 pour inférieur et 0 pour supérieur.
la source
Wolfram Language (Mathematica) , 26 octets
Essayez-le en ligne!
Un entier
n
est dans la séquence Wythoff inférieure siceil(n/phi) - 1/phi < n/phi
.La preuve c'est
ceil(n/phi) - 1/phi < n/phi
...Suffisant:
Laisser
ceil(n/phi) - 1/phi < n/phi
.Alors,
ceil(n/phi) * phi < n + 1
.Remarque
n == n/phi * phi <= ceil(n/phi) * phi
.Par conséquent,
n <= ceil(n/phi) * phi < n + 1
.Puisque
n
etceil(n/phi)
sont des entiers, nous invoquons la définition de plancher et d'étatfloor(ceil(n/phi) * phi) == n
, etn
trouve dans la séquence Wythoff inférieure.Nécessaire; preuve par contrapositive:
Laisser
ceil(n/phi) - 1/phi >= n/phi
.Alors,
ceil(n/phi) * phi >= n + 1
.Remarque
n + phi > (n/phi + 1) * phi > ceil(n/phi) * phi
Par conséquent
n > (ceil(n/phi) - 1) * phi
.Puisque
(ceil(n/phi) - 1) * phi < n < n + 1 <= ceil(n/phi) * phi
,n
n'est pas dans la séquence Wythoff inférieure.la source
Japt , 10 octets
Renvoie vrai pour inférieur et faux pour supérieur.
Essayez-le en ligne!
Explication:
la source
Java 10,
775352 octetsPort de @ Rod's Python 2 answer .
-1 octet grâce à @ Zacharý .
Essayez-le en ligne.
Ancien
7776 octets réponse:-1 octet grâce à @ovs 'pour quelque chose que je me suis recommandé la semaine dernière .. xD
Retourne
1
pour plus bas;0
pour la tige.Essayez-le en ligne.
Explication:
i*Phi
est calculé en prenant(sqrt(5)+1)/2 * i
, puis nous l'étageons en le convertissant en un entier pour tronquer la décimale.la source
++i<=n
sur votre ancienne réponse peut êtrei++<n
.n->{var r=Math.sqrt(5)/2+.5;return(int)(-~n/r)<n/r;}
Haskell ,
15313912679 bytesPrécision illimitée!
Essayez-le en ligne!
Explication
Au lieu d'utiliser une approximation du nombre d'or pour calculer le résultat, ils sont sujets à des erreurs lorsque la taille de l'entrée augmente. Cette réponse n'est pas. Au lieu de cela, il utilise la formule fournie sur l'OEIS qui
a
est la séquence unique telle queoù
b
est le compliment ordonné.la source
Brachylog , 8 octets
Essayez-le en ligne!
Le prédicat réussit si l'entrée se trouve dans la séquence Wythoff inférieure et échoue s'il se trouve dans la séquence Wythoff supérieure.
Si l'échec de la terminaison est une méthode de sortie valide, le premier octet peut être omis.
la source
φ
est utilisé dans un programme Brachylog. Enfin!MATL , 8 octets
Essayez-le en ligne!
Explication
la source
K (oK) , 20 octets
Solution:
Essayez-le en ligne!
Explication:
la source
TI-BASIC (TI-84), 18 octets
L'entrée est en
Ans
.La sortie est en cours
Ans
et est automatiquement imprimée.Imprime
1
si l'entrée est dans la séquence inférieure ou0
si elle est dans la séquence supérieure.Exemple:
Explication:
Remarque: TI-BASIC est un langage à jetons. Le nombre de caractères n'est pas égal au nombre d'octets.
la source
cQuents , 5 octets
Essayez-le en ligne!
Explication
la source