Introduction (peut être ignoré)
Mettre tous les entiers positifs dans son ordre régulier (1, 2, 3, ...) est un peu ennuyeux, n'est-ce pas? Voici donc une série de défis autour des permutations (remaniements) de tous les entiers positifs. Il s'agit du sixième défi de cette série (liens vers les premier , deuxième , troisième , quatrième et cinquième défis).
Ce défi a un thème de Pâques doux (car c'est Pâques). Je me suis inspiré de cet œuf d'oie très décoré (et à mon avis plutôt moche).
Cela m'a rappelé la spirale Ulam , où tous les entiers positifs sont placés dans une spirale anti-horaire. Cette spirale a des caractéristiques intéressantes liées aux nombres premiers, mais ce n'est pas pertinent pour ce défi.
Nous arrivons à la permutation de ce nombre entier d'entiers positifs si nous prenons les nombres dans la spirale Ulam et suivons tous les entiers dans une spirale tournant dans le sens des aiguilles d' une montre , en commençant à 1. De cette façon, nous obtenons:
1, 6, 5, 4, 3, 2, 9, 8, 7, 20, 19, 18, 17, 16, 15, 14, 13, 12, 11, 10, 25, 24, 23, etc.
Si vous dessiniez les deux spirales, vous obtiendriez une sorte de maillage infini de spirales (coquille d'oeuf) ( notez la référence New Order ici ).
Cette séquence est présente dans l'OEIS sous le numéro A090861 . Puisqu'il s'agit d'un défi de "séquence pure", la tâche consiste à sortir pour un donné en entrée, où est A090861 .
Tâche
Étant donné une entrée entière , la sortie au format entier, où est A090861 .
Remarque: l'indexation basée sur 1 est supposée ici; vous pouvez utiliser une indexation basée sur 0, donc , etc. Veuillez le mentionner dans votre réponse si vous choisissez de l'utiliser.
Cas de test
Input | Output
---------------
1 | 1
5 | 3
20 | 10
50 | 72
78 | 76
123 | 155
1234 | 1324
3000 | 2996
9999 | 9903
29890 | 29796
Règles
- L'entrée et la sortie sont des entiers.
- Votre programme doit au moins prendre en charge les entrées comprises entre 1 et 32 767).
- Une entrée non valide (0, flottants, chaînes, valeurs négatives, etc.) peut entraîner une sortie imprévue, des erreurs ou un comportement (non) défini.
- Les règles d'E / S par défaut s'appliquent.
- Les failles par défaut sont interdites.
- Il s'agit de code-golf , donc les réponses les plus courtes en octets l'emportent
JavaScript (ES7),
46 4541 octets0 indexé.
Essayez-le en ligne!
Comment?
Ceci est basé sur la formule indexée 1 utilisée dans les programmes d'exemple de A090861 .
Essayez-le en ligne!
Essayez-le en ligne!
Essayez-le en ligne!
Qui peut se traduire en:
Le rendre indexé 0 enregistre immédiatement 5 octets:
La formule peut être encore simplifiée en utilisant:
qui peut être exprimé comme:
menant à:
et enfin:
la source
Wolfram Language (Mathematica) , 60 octets
Essayez-le en ligne!
la source
MATL ,
1211 octetsEssayez-le en ligne!
Très peu efficace en mémoire. Le pré-paiement le
X^k
rend plus efficace .la source
C # (Visual C # Interactive Compiler) , 67 octets
Essayez-le en ligne!
la source
Python 3.8,
10474656057 octetsEdit: Merci à Johnathan Allan de l'avoir fait passer de 74 à 57 octets!
Cette solution utilise une indexation basée sur 0.
la source
>
à la place<=
etx*x
à la place dex**2
... comme ceci:def f(n):x=((n-1)**.5+1)//2;return 8*x**2+(-2,6)[n>4*x*x+2*x]*x+2-n
... TIOPython 3.8 (version préliminaire) , 53 octets
Un port direct de la réponse JavaScript d' Arnauld , votez pour cela, et / ou la réponse Mathematica de J42161217 et / ou la réponse Python de Kapocsi :)
0 indexé.
Essayez-le en ligne!
la source
Befunge,
6757 octetsCette solution suppose une indexation basée sur 0 pour les valeurs d'entrée.
Essayez-le en ligne!
Explication
On commence par calculer le "rayon" auquel l'entrée n se trouve avec une boucle:
À la fin de la boucle, la valeur précédente de n est le décalage dans la spirale à ce rayon:
Nous pouvons alors déterminer si nous sommes sur la section supérieure ou inférieure de la spirale comme suit:
Et une fois que nous avons tous ces détails, la valeur en spirale est calculée avec:
Le rayon est la seule valeur que nous devons stocker en tant que "variable", le limitant à une valeur maximale de 127 dans Befunge-93, donc cet algorithme peut gérer des entrées jusqu'à 65024.
la source
Japt , 15 octets
Solution Jelly du port de Jonathan. 1 indexé.
Essayez-le
la source
x+(1-x%2)
estx|1
(sauver un octet en gelée), cette réponse qui peut également bénéficier, je parie.C ++ (gcc) , 88 octets
1 indexé; utilise la formule de la page OEIS, mais manipulée pour économiser quelques octets.
Essayez-le en ligne!
la source
sqrt(n-1)/2+.5
au lieu de(sqrt(n-1)+1)/2