Contribution:
Entier n
qui est >=0
ou >=1
( f(0)
est facultatif)
Production:
Le n
«e numéro dans la séquence ci-dessous, OU la séquence jusqu'au et incluant le n
« e numéro.
Séquence:
(0),1,-1,-3,0,5,-1,-7,0,9,-1,-11,0,13,-1,-15,0,17,-1,-19,0,21,-1,-23,0,25,-1,-27,0,29,-1,-31,0,33,-1,-35,0,37,-1,-39,0,41,-1,-43,0,45,-1,-47,0,49,-1,-51,0,53,-1,-55,0,57,-1,-59,0,61,-1,-63,0,65,-1,-67,0,69,-1,-71,0,73,-1,-75,0,77,-1,-79,0,81,-1,-83,0,85,-1,-87,0,89,-1,-91,0,93,-1,-95,0,97,-1,-99
Comment est construite cette séquence?
f(n=0) = 0
(facultatif)
f(n=1) = f(0) + n
ou f(n=1) = 1
f(n=2) = f(1) - n
f(n=3) = f(2) * n
f(n=4) = f(3) / n
f(n=5) = f(4) + n
etc.
Ou en pseudo-code:
function f(integer n){
Integer result = 0
Integer i = 1
Loop as long as i is smaller than or equal to n
{
if i modulo-4 is 1:
result = result plus i
if i modulo-4 is 2 instead:
result = result minus i
if i modulo-4 is 3 instead:
result = result multiplied with i
if i modulo-4 is 0 instead:
result = result integer/floor-divided with i
i = i plus 1
}
return result
}
Mais comme vous l'avez peut-être remarqué, la séquence comporte deux modèles:
0, ,-1, ,0, ,-1, ,0, ,-1, ,0, ,-1, ,0, ,-1, ,...
,1, ,-3, ,5, ,-7, ,9, ,-11, ,13, ,-15, ,17, ,-19,...
de sorte que toutes les autres approches aboutissant à la même séquence sont bien entendu parfaitement correctes également.
Règles du défi:
- Les entrées indexées 0 et indexées 1 donneront le même résultat (c'est pourquoi l'
f(0)
option est facultative pour les entrées indexées 0 si vous souhaitez l'inclure). - Vous êtes autorisé à sortir le
n
'ème numéro de cette séquence. Ou la séquence entière en haut et y compris len
numéro e. (Ilf(5)
peut donc en résulter soit5
ou0,1,-1,-3,0,5
.)- Si vous choisissez de sortir la séquence jusqu'au
n
numéro e inclus , le format de sortie est flexible. Peut être une liste / tableau, une virgule / espace / une chaîne délimitée par une nouvelle ligne ou être imprimé sur STDOUT, etc.
- Si vous choisissez de sortir la séquence jusqu'au
- La division (
/
) est une division entier / étage, qui arrondit vers 0 (et non vers l'infini négatif comme c'est le cas dans certaines langues).
Règles générales:
- C'est le code-golf , donc la réponse la plus courte en octets l'emporte.
Ne laissez pas les langues de golf de code vous décourager de publier des réponses avec des langues non-golfeur de code. Essayez de trouver une réponse aussi courte que possible pour «n'importe quel» langage de programmation. - Des règles standard s'appliquent à votre réponse, vous êtes donc autorisé à utiliser STDIN / STDOUT, des fonctions / méthodes avec les paramètres appropriés et des programmes complets de type retour. Ton appel.
- Les failles par défaut sont interdites.
- Si possible, veuillez ajouter un lien avec un test pour votre code.
- Veuillez également ajouter une explication si nécessaire.
Cas de test supplémentaires ci n=100
- dessus :
Input Output
1000 0
100000 0
123 -123
1234 -1
12345 12345
123456 0
Réponses:
JavaScript (ES6), 19 octets
Essayez-le en ligne!
Preuve
Supposons que nous avons les relations suivantes pour un n multiple de 4. Ces relations sont vérifiées trivialement pour les premiers termes de la séquence.
Et soit N = n + 4 . Ensuite, par définition:
Ce qui, par induction mathématique, prouve que les relations sont valables pour tout multiple de N de 4 .
la source
n%4
suite pour qu'il fonctionne avec des nombres supérieurs à 32 bits.05AB1E , 8 octets
Sort le
nth
nombreEssayez-le en ligne!
05AB1E , 14 octets
Affiche une liste de nombres jusqu'à N en utilisant les modèles de la séquence
Essayez-le en ligne!
Explication
Exemple utilisant N = 7
la source
Python 2 , 25 octets
Réponse du port d'Arnauld:
Essayez-le en ligne!
Solutions naïves:
Python 3 ,
5049 octetsEssayez-le en ligne!
Python 2 ,
78777658575352 octetsEssayez-le en ligne!
Utilisé un tas d'octets
int
, car le sol en python se divise, et non vers0
, comme dans la question.la source
J , 12 octets
Réponse du port d'Arnauld:
Essayez-le en ligne!
J , 28 octets
Solution naïve:
Sort le nième nombre
Essayez-le en ligne!
la source
TIS
-n
2
1
, 123 octetsSort le
n
numéro e pour0 <= n <= 999
. (La limite supérieure est due aux limitations linguistiques).Essayez-le en ligne!
TIS
-n
2
1
, 124 octetsSort le
n
numéro e pour0 <= n <= 999
. (La limite supérieure est due aux limitations linguistiques). Plusieursn
peuvent être fournis, séparés par des espaces.Essayez-le en ligne!
TIS
-n
3
1
, 192 octetsGénère les valeurs de
0..n
pour0 <= n <= 999
. (La limite supérieure est due aux limitations linguistiques).Essayez-le en ligne!
Tous utilisent des E / S numériques (le
-n
drapeau). Les deux premières solutions utilisent deux nœuds de calcul, l'un positionné au-dessus de l'autre. Le troisième a une pile de trois nœuds.Pour les deux premières solutions, le nœud supérieur lit l'entrée, envoie le nombre d'origine, puis soustrait à plusieurs reprises 4 jusqu'à ce que nous devenions négatifs, puis ajoute 5 à l'index de notre table de saut. C'est équivalent à
(n % 4) + 1
.La troisième solution a divisé cette tâche sur deux nœuds; celui du haut ne fait que répéter la limite jusqu'à la fin des temps, et le nœud du milieu compte en parallèle l'indice (par rapport à cette limite) et le modulo comme ci-dessus.
Le nœud inférieur des trois solutions est le même; il a une table de saut, et c'est là que la magie opère. Nous enregistrons le nombre original
ACC
, puisJRO
(probablement J ump R élatif O ffset) vers l' avant par1
,2
,3
ou4
, selon ce que le nœud dit ci - dessus.Travail en arrière:
4
sera a )NEG
mangéACC
, et b )ACC
descendra pour la sortie.3
va mettre1
enACC
, puis effectuez les étapes4
a et4
b .2
passera directement à l'étape4
b .1
vaSUB
tracterACC
hors lui - même ( la mise à zéro de manière efficaceACC
), puis faire étape2
, qui saute à4
b .la source
C (gcc) , 62 octets
Essayez-le en ligne!
la source
f(n){n=n%2>0?n*(2-n%4):n%4/-2;}
je l'ajouterais cependant comme deuxième réponse, car j'aime aussi votre approche récursive. :)Gelée , 8 octets
Essayez-le en ligne!
-1 merci à Lynn .
Ce que font les autres (port de la solution d'Arnauld), prend en charge
0
.Gelée , 17 octets
Essayez-le en ligne!
0
n'est pas pris en charge.la source
Java (JDK 10) , 25 octets
Essayez-le en ligne!
Plus court que l'algorithme de contender dans d'autres langues avec 28 octets
Essayez-le en ligne!
la source
Rétine , 46 octets
Essayez-le en ligne! Explication:
Convertissez en unaire.
Reconvertissez en décimal, mais laissez des
n%4+1
soulignements.Dans le cas où c'est 4, le résultat est
-n
.Cas 3:
-1
Cas 2:
n
Cas 1:
0
la source
Haskell , 50 octets
Essayez-le en ligne!
La solution d'Arnauld, portée sur Haskell, est de 23 octets:
la source
APL (Dyalog Classic) ,
2212 octetsÉpargne massive de 10 octets grâce aux remarques d'Erik l'Outgolfer. Je vous remercie!
Essayez-le en ligne!
Sort le nième nombre
Je ne connais pas APL, j'ai juste essayé de faire fonctionner mon port J de la solution d'Arnauld dans Dyalog APL.
la source
(0,⍵,¯1,-⍵)
par(0⍵¯1,-⍵)
. 2) Vous pouvez supprimer le1+
en supposant que la⎕IO
variable système est affectée à0
(oui, c'est autorisé). 3) Nous ne comptons généralement pas laf←
pièce lors de la soumission des fonctions. 4) Vous pouvez utiliser la⊃
fonction au lieu de l'[]
indexation. Tous ces éléments forment ceci:⎕IO←0
(ne comptez pas){(4|⍵)⊃0⍵¯1,-⍵}
4∘|⊃0,⊢,¯1,-
.4∘|⊃0,⊢,¯1,-
c'est exactement à quoi ressemblerait ma solution J4&|{0,],_1,-
dans APL. Merci encore!Cubix ,
2019 octetsEssayez-le en ligne!
Ports la même approche de cubix.
Sur un cube:
Le premier bit
^Iu:n>s1ns:u0s
crée la pile, puis3at
copie l'élément approprié dans TOS, puisO
sort et@
termine le programme.la source
Espace,
8483 octetsLettres
S
(espace),T
(tabulation) etN
(nouvelle ligne) ajoutées uniquement en surbrillance.[..._some_action]
ajouté à titre d'explication uniquement.Essayez-le en ligne (avec des espaces bruts, des tabulations et des nouvelles lignes uniquement).
Réponse JavaScript du port de @Arnauld .
Explication (exemple d'entrée
n=7
):Arrête avec erreur: sortie non définie.
la source