introduction
Le signe d'un nombre est soit a +
, soit a -
pour chaque entier non nul. Zéro lui-même est sans signe ( +0
est le même que -0
). Dans la séquence suivante, nous allons alterner entre le signe positif , le zéro et le signe négatif . La séquence commence par 1
, donc nous écrivons 1
avec un signe positif, avec zéro (celui-ci est bizarre, mais nous multiplions simplement le nombre par 0) et le signe négatif:
1, 0, -1
Le numéro suivant est 2
, et nous faisons à nouveau la même chose:
2, 0, -2
La séquence est finalement:
1, 0, -1, 2, 0, -2, 3, 0, -3, 4, 0, -4, 5, 0, -5, 6, 0, -6, 7, 0, -7, ...
Ou une forme plus lisible:
a(0) = 1
a(1) = 0
a(2) = -1
a(3) = 2
a(4) = 0
a(5) = -2
a(6) = 3
a(7) = 0
a(8) = -3
a(9) = 4
...
La tâche
Étant donné un entier non négatif n , sortez le n ème terme de la séquence ci-dessus. Vous pouvez choisir si vous utilisez la version à index zéro ou à index unique .
Cas de test:
Zéro indexé:
a(0) = 1
a(11) = -4
a(76) = 0
a(134) = -45
a(296) = -99
Ou si vous préférez un indexé:
a(1) = 1
a(12) = -4
a(77) = 0
a(135) = -45
a(297) = -99
C'est du code-golf , donc la soumission avec le plus petit nombre d'octets gagne!
[0, 0, 0, -1, 0, 1...
1
.Réponses:
Gelée, 7 octets
Zéro indexé. Cas de test ici.
Explication:
la source
JavaScript ES6, 18 octets
Il s'est avéré très similaire à la réponse de @ LeakyNun, mais je ne l'ai vue qu'après avoir posté la mienne.
Explication et non golfé
-~
est un raccourci pourMath.ceil
ou un arrondi:Afficher l'extrait de code
la source
Math.ceil
et-~
sont différents;Math.ceil(1) == 1
alors que-~1 == 2
n=>~(n/3)*~-(n%3)
MarioLANG,
9381 octetsun index
Essayez-le en ligne
Explication:
on commence par prendre l'imput
qui nous donne
nous décrémentons ensuite l'octet gauche et incrémentons l'octet droit avec
on se retrouve avec
nous avons ensuite mis en place la boucle
la boucle ira jusqu'à ce que la mémoire ressemble
il suffit alors de sortir le résultat
la source
;(
et>:(
. Bien que, deux fois,[<:
on puisse considérer un peu heureux. ; PPython 2, 24 octets
Programme complet:
la source
MATL,
1512 octetsCela utilise une indexation basée sur un.
Essayez-le en ligne! ou vérifier les cas de test
Explication:
la source
Q3/Xk-1:1G_)*
pourrait mieux fonctionner. Il peut probablement être modifié à la place pour une indexation basée sur 1.Haskell, 27 octets
Solution 28 octets légèrement plus intéressante:
(Les deux sont
0
indexés)la source
MATL , 8 octets
Le résultat est basé sur 1.
Essayez-le en ligne!
Explication
Cela construit le tableau 2D
puis utilise l'indexation linéaire pour extraire le terme souhaité. Des moyens d'indexation linéaire index vers le bas, puis à travers (donc dans le tableau ci - dessus les premières entrées de commande linéaire sont
1
,0
,-1
,2
,0
, ...)la source
Perl 5, 22 octets
21 plus un pour
-p
:Utilise l'indexation basée sur 1.
Explication:
-p
définit la variable$_
égale à l'entrée. Le code le fixe alors égal au$_%3
e élément, divisé par 3, de la liste basée sur 0(-$_,$_+2)
(où%
est modulo). Notez que si$_%3
est deux, alors il n'y a pas un tel élément, et la division suivante par 3 numérote l'indéfini à 0.-p
puis imprime$_
.la source
Bash,
2825 octetsla source
Perl 6 ,
2623 octets(Le plus court a été traduit à partir d'autres réponses)
Explication (de la première):
Tester:
la source
J,
1915 octetsProbablement besoin de jouer au golf plus loin ...
1 indexé.
Non golfé:
Où
>>
signifie entrée (STDIN) et<<
sortie (STDOUT).la source
Pyke,
87 octets (ancienne version)Essayez-le ici! - Notez que le lien ne durera probablement pas longtemps
Version la plus récente
Essayez-le ici!
la source
J, 27 octets
Bien que n'étant pas le plus golfique, je l'aime mieux, car il utilise un agenda.
En voici la décomposition arborescente:
Ceci est très similaire à la réponse J de Kenny, en ce sens qu'il choisit l'ampleur et le signe, mais c'est différent en ce que j'utilise un agenda pour choisir le signe.
la source
MATL, 8 octets
Cette solution utilise l'indexation basée sur 1 dans la séquence.
Essayez-le en ligne
Version modifiée montrant tous les cas de test
Explication
la source
Pyth, 10 octets
Essayez-le en ligne!
Explication:
Remarque: J'ai supposé la séquence indexée zéro.
la source
*@(1ZtZ)%Q3h/Q3
(1ZtZ)
=-L1 2
En fait, 10 octets
Essayez-le en ligne!
Explication:
la source
05AB1E, 7 octets
Code:
Expliqué:
la source
GeoGebra, 44 octets
où
n
est un indexé.Explication:
Il n'est pas nécessaire de générer tous les triplets
{n, 0, -n}
, mais c'est plus court que d'écrireceil(n/3)
ou quelque chose à cet effet. Notez qu'iln
doit être défini pour créer cet objet (s'il n'est pas défini au moment de son exécution, GeoGebra vous demandera de créer un curseur pourn
).la source
n
, entrez quelque chose commen=297
(cela vous donnera un curseur qui est bien configuré). Collez ensuite la formule dans la zone de saisie, qui doit maintenant se trouver sous len
. (Assurez-vous d'appuyer sur retour;) La formule doit correspondre aun
terme de la séquence et elle doit changer lorsque vous déplacez le curseur.Labyrinthe ,
171514 octetsEnregistré 3 octets en utilisant l'idée de Sok d'utiliser
1-(n%3)
au lieu de~(n%3-2)
.Le programme se termine avec une erreur (division par zéro), mais le message d'erreur est envoyé à STDERR.
Essayez-le en ligne!
Explication
Le programme est complètement linéaire, bien qu'un certain code soit exécuté en sens inverse à la fin.
Le pointeur d'instruction atteint maintenant une impasse et se retourne, il commence donc à exécuter le code depuis la fin:
la source
Erlang, 40 octets
Malheureusement, Erlang n'a pas d'opérateur modulo '%' et 'rem' nécessite les espaces, même avant le 3.
la source
Hexagonie , 25 octets
Ou, au format non réduit:
Essayez-le en ligne!
Ma première incursion dans Hexagony, donc je suis certain que je n'ai pas fait cela aussi efficacement que cela pourrait être fait ...
Calcule
-(n%3 - 1)
sur un bord de mémoire,n/3 + 1
sur un bord adjacent, puis les multiplie ensemble.la source
R, 28 octets
On dirait que c'est une variation de la plupart des réponses ici. Basé sur zéro.
La bonne chose à ce sujet est qu'il gère plusieurs entrées
À l'origine, je voulais faire ce qui suit, mais je ne pouvais pas couper les octets supplémentaires.
Utilise
rbind
pour ajouter des 0 et des négatifs à une plage de 1 pourn
ensuite renvoyer len
'ème terme (un basé).la source
Lot (Windows), 86 octets
Alternate.bat
Ce programme est exécuté comme
Alternate.bat n
oùn
est le numéro sur lequel vous souhaitez appeler la fonction.la source
APL, 12 caractères
0 3⊤
appartient à APLdivmod 3
.la source
Java 7,
383736 octetsMon premier golf, sois doux
Essayez-le ici! (cas de test inclus)
Edit: j'ai mal compté et j'ai également joué un autre personnage en le remplaçant
(-i%3+1)
par(1-i%3)
.la source
return
et utiliser un lambda Java 8.Rétine, 45 octets
Essayez-le en ligne!
Suite de tests.
Prend entrée / sortie en base dix. 1 indexé.
Entrée unaire, sortie base dix, 1 indexée: 40 octets
Essayez-le en ligne!
Suite de tests.
la source
MATLAB / Octave, 27 octets
Cela crée une fonction anonyme qui peut être appelée à l'aide de
ans(n)
. Cette solution utilise une indexation basée sur 1.Tous les cas de test
la source
Mathematica 26 octets
Avec 4 octets enregistrés grâce à Martin Ender.
Utilise la même approche que Suever.
la source
Octave, 23 octets
Sans aucun inconvénient ...
Utilise la magie d'indexation basée sur 1.
Explication
Crée une fonction anonyme qui:
Après l'étape de multiplication, nous aurons une matrice 3xn comme ceci (pour n = 12):
Faire des
n
colonnes est exagéré, mais c'est un nombre pratique qui est garanti d'être assez grand. L'indexation linéaire décompte chaque colonne de gauche à droite, de sorte que l'élément à indice linéaire4
serait2
.Tous les cas de test sur ideone .
la source
dc, 10
Utilise l'indexation basée sur 1.
la source