Voici les 100 premiers numéros d'une séquence simple:
0,1,0,2,1,4,3,7,6,11,10,16,15,22,21,29,28,37,36,46,45,56,55,67,66,79,78,92,91,106,105,121,120,137,136,154,153,172,171,191,190,211,210,232,231,254,253,277,276,301,300,326,325,352,351,379,378,407,406,436,435,466,465,497,496,529,528,562,561,596,595,631,630,667,666,704,703,742,741,781,780,821,820,862,861,904,903,947,946,991,990,1036,1035,1082,1081,1129,1128,1177,1176,1226
Comment fonctionne cette séquence?
n: 0 1 2 3 4 5 6 7 8 9 10 11 12
0, 1-1=0, 2-1=1, 4-1=3, 7-1=6, 11-1=10, 16-1=15,
0+1=1, 0+2=2, 1+3=4, 3+4=7, 6+5=11, 10+6=16, 15+7=22
a(0) = 0
- Pour chaque impair
n
(index 0), c'esta(n-1) + X
(oùX=1
et augmente de 1 à chaque fois qu'il est accédé) - Pour chaque pair
n
(indexé 0), c'esta(n-1) - 1
Défi:
Un des:
- Étant donné un entier en entrée
n
, sortez len
'ème nombre dans la séquence. - Étant donné un entier d'entrée
n
, sortez les premiersn
nombres de la séquence. - Sortez la séquence indéfiniment sans prendre d'entrée ( ou prendre une entrée vide non utilisée ).
Règles du défi:
- L'entrée
n
peut être indexée à 0 ou à 1. - Si vous sortez (une partie de) la séquence, vous pouvez utiliser une liste / tableau, imprimer sur STDOUT avec n'importe quel délimiteur (espace, virgule, nouvelle ligne, etc.). Ton appel.
- Veuillez indiquer laquelle des trois options vous avez utilisée dans votre réponse.
- Vous devrez prendre en charge au moins les 10 000 premiers numéros (le 10 000 e numéro est
12,497,501
).
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 autres que le golf 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, fonctions / méthode 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 possible.
Cas de test:
Collez avec les 10 001 premiers chiffres de la séquence. N'hésitez pas à choisir celui que vous souhaitez.
Quelques chiffres plus élevés:
n (0-indexed) Output:
68,690 589,772,340
100,000 1,249,975,000
162,207 3,288,888,857
453,271 25,681,824,931
888,888 98,765,012,346
1,000,000 124,999,750,000
ÎGDN+D<
génère la séquence, mais saisir le nième élément semble ... difficile en 3 octets.Octave , 32 octets
Essayez-le en ligne!
Sort le nième nombre, indexé 0. Utilise la même formule que plusieurs autres réponses.
la source
APL (Dyalog Unicode) ,
1612 octets SBCSFonction de préfixe tacite anonyme. 0 indexé.
Essayez-le en ligne!
+/
la somme de⊢↑
la premièren
éléments∘∊
du ϵ nlistés (aplatis)¯1,¨⍨
négatif-un-apposé à chacun⍳
premiersn
ɩ ndices (0 àn
–1la source
Gelée , 6 octets
Un lien monadique acceptant (indexé 1)
n
qui revienta(n)
.Essayez-le en ligne! Ou consultez la suite de tests
Comment?
la source
PHP ,
7364555147 octetsPremière méthode
Première réponse de golf de code!
Je suis sûr qu'il existe des astuces PHP pour le raccourcir et les mathématiques peuvent probablement être améliorées.
Prend n comme premier argument et sort le nième nombre de la séquence.
Moins 9 octets en supprimant "$ x = 0;" et "$ i = 0".
Moins 9 octets grâce à @Kevin Cruijssen améliorant la boucle for et la perte de la balise de fin.
Moins 1 octet à l'aide de bits ou "|" plutôt que "(int)"
Moins 3 octets grâce à @Dennis car vous pouvez supprimer les balises en l'exécutant depuis la ligne de commande avec "php -r 'code here'"
Essayez-le en ligne!
Deuxième méthode
Correspond à ma réponse précédente avec une toute nouvelle méthode!
Utiliser XOR et l'opérateur tenary pour basculer entre les sommes dans la boucle.
Edit: Cela ne fonctionne pas pour n = 0 et je n'ai aucune idée pourquoi. $ i n'est pas assigné, donc il devrait être 0, donc la boucle
($i<$argv[1])
devrait échouer comme(0<0==false)
, donc un $ x non assigné devrait sortir comme 0 et non 1.Essayez-le en ligne!
Troisième méthode
La conversion de la formule Excel @Wernisch créée en PHP donne une solution de 47 octets
Essayez-le en ligne!
la source
?>
. Suppression$x=0
et$i=0
est en effet autorisé (sinon,$x=$i=0
aurait également été plus courte). De plus, la boucle peut être raccourciefor(;$i<$y+1;)$x+=$i++;
. Soit -15 octets au total. Profitez de votre séjour! :)R , 35 octets
Essayez-le en ligne!
Je pensais que c'était une alternative intéressante à la réponse de @ JayCe car elle ne portait pas très bien vers les langues sans support intégré pour les matrices, et se trouve être tout aussi golfique.
1 indexé, retourne les premiers
n
éléments de la séquence.Comment ça marche:
rbind(n<-1:scan(),-1)
construit la matrice suivante:Parce que R contient les matrices dans l'ordre des colonnes, si nous devions convertir cela en a
vector
, nous obtiendrions un vecteurqui si nous prenons une somme cumulée de, nous obtiendrions
qui est la séquence, juste sans le début
0
.diffinv
heureusement ajoute le zéro de tête, nous prenons donc les premièresn-1
valeurs de la matrice etdiffinv
eux, en obtenant les premièresn
valeurs de la séquence.la source
diffinv
!R ,
3534 octetsEssayez-le en ligne!
Première option de sortie.Même formule que beaucoup d'autres réponses (je voudrais pointer vers la première réponse fournissant la formule, je ne peux pas la comprendre).
Deuxième et troisième options de sortie ci-dessous:
R , 43 octets
Essayez-le en ligne!
R , 51 octets
Essayez-le en ligne!
la source
Matlab / Octave,
3126 octets5 octets enregistrés thx à Luis Mendo!
la source
fix
place defloor
, etn/2+.5
au lieu deceil(n/2)
fix()
et ne s'attendait pas1:n/2+.5
à travailler - tant de choses qui pourraient mal tourner, mais elles ne le font pas :)Java (JDK 10) , 20 octets
Essayez-le en ligne!
Port de TFeld's Python 2 anwser , alors allez leur donner un upvote! ;)
la source
QBasic 1.1 , 49 octets
1 indexé.
la source
QBasic 1.1 , 30 octets
Utilise l'algorithme de TFeld. 0 indexé.
la source
QBasic, 31 octets
La solution «juste implémenter la spécification» est légèrement plus longue que la solution d' Erik .
Cela sort indéfiniment. Pour les exécuter, je recommande de changer la dernière ligne en quelque chose comme
LOOP WHILE INPUT$(1) <> "q"
, qui attendra une pression de touche après chaque deuxième entrée de séquence et quittera si la touche enfoncée estq
.la source
C # (.NET Core) , 56 octets
-2 octets grâce à Kevin Crujssen
Essayez-le en ligne!
1 indexé. Résultats
a(n)
Non golfé:
la source
i=1;for(;i<n;i++)
peut êtrei=0;for(;++i<n;)
eti%2==0
peut êtrei%2<1
.do-while
vérifiera après avoir terminé la première itération. :)if
avec unefor
boucle. Par exemple:if(t>0)for(i=0;i<l;i++)
àfor(i=0;t>0&i<l;i++)
. Cependant, je n'ai presque jamais pu utiliser cela dans mes réponses.Husk ,
1198 octetsEnregistré un octet grâce à H.PWiz.
Sorties sous forme de liste infinie.
Essayez-le en ligne!
Explication
la source
Dodos , 69 octets
Essayez-le en ligne!
C'est en quelque sorte la réponse la plus longue.
Explication.
la source
Fusain , 15 octets
Essayez-le en ligne! 0 indexé. Le lien est vers la version détaillée du code. La formule serait probablement plus courte, mais quel est le plaisir là-dedans? Explication:
la source
JavaScript,
494845 octetsEssayez-le en ligne!
Pas aussi jolie que la réponse @tsh, mais la mienne fonctionne pour un plus grand nombre.
Et maintenant merci @tsh, pour la
eval
solution!la source
<=x+1
peut être<x+2
x=>eval('for(i=0,r=1;++i<x+2;)r+=i%2?-1:i/2')
devrait être plus court.eval
retourne la dernière valeur modifiée? Je ne comprends toujours pas complètement ce qu'il peut faire.do
déclaration dans une version ultérieure).Befunge 93, 26 octets
Fonctionne indéfiniment
Essayez-le en ligne , bien que la sortie devienne un peu bancale et redescende après x = 256, TIO ne peut probablement pas gérer les caractères supérieurs à U + 256. Fonctionne très bien sur https://www.bedroomlan.org/tools/befunge-playground (Chrome uniquement, malheureusement. Avec Firefox, les lignes de fin sont supprimées au moment de l'exécution, pour une raison quelconque ...)
la source
J , 17 octets
Un port de la solution APL d'Adám.
Essayez-le en ligne!
la source
Pyth , 8 octets
Renvoie
n
le numéro de la séquence, indexé 0. Essayez-le en ligneExplication, avec exemple pour
n=5
:la source
Perl 6 ,
3826 octetsEssayez-le
Basé sur l'ingénierie inverse de la réponse Python de TFeld .
Essayez-le
Étendu
38 octets (générateur de séquence):
Notez que cela a l'avantage que vous pouvez transmettre
*
pour obtenir la séquence entière, ou transmettre une plage pour générer plus efficacement plusieurs valeurs.26 octets (calcul direct):
la source
05AB1E , 8 octets
Essayez-le en ligne!
Basé sur l'approche Jelly de Jonathan Allan (qui était probablement basée sur une modification de la question par OP avec une autre définition de la séquence), donc 1-indexé.
la source
I
place de¹
), mais l'approche générale et le nombre d'octets sont exactement les mêmes:;<LO>IÉ-
Convexe ,
109 octetsEssayez-le en ligne!
Basé sur l'approche Jelly de Jonathan Allan (qui était probablement basée sur une modification de la question par OP avec une autre définition de la séquence). 1 indexé.
Explication:
la source
Gelée , 6 octets
Renvoyez les premiers
n
chiffres.Essayez-le en ligne!
la source