Utiliser l'itération pour calculer des séquences
En règle générale, la résolution d'un défi de séquence OEIS nécessite l'utilisation d'une des formules données sur sa page. Certains d'entre eux s'adaptent bien à J, et d'autres moins. Les formules récursives sont simples, cependant, l'itération peut ne pas être simple. Un modèle que j'ai commencé à utiliser est
(s(]f)^:[~]) n
] Gets n
s The first value in the sequence
~ Commute the argument order, n is LHS and s is RHS
[ Gets n
^: Nest n times with an initial argument s
(]f) Compute f s
Returns (f^n) s
où s
est la première valeur de la séquence, f
est un verbe qui calculera le terme suivant étant donné le terme précédent, et n
est l'index de base zéro du terme que vous souhaitez calculer. Cette méthode repose sur le fait que lors du calcul de la puissance d'une dyade, le LHS est lié à la dyade pour former une nouvelle monade, et cette monade est imbriquée sur la valeur initiale. La dyade donnée à l'adverbe de puissance est un crochet où (]f)
est donné l'indice n
sur le LHS et la valeur d'un terme dans la séquence s
. Le crochet s'appliquera f
en s
tant que monade, puis ignorera n
pour renvoyer le résultat de f s
.
Bibliothèque standard
Parfois, vous trouverez peut-être que J prendra en charge un verbe dans sa bibliothèque standard . Par exemple, la plupart des opérations entières au niveau du bit sont liées à des noms plus courts que l'utilisation de l'appel primitif.
AND =: (17 b.) NB. it is actually '$:/ :(17 b.)'
Des fonctions intégrées de date et d'heure sont également disponibles.
Gammes
Si vous avez un ensemble de valeurs [a, b, c]
et que vous souhaitez former une plage basée sur leur produit [0, 1, 2, ..., a*b*c-1]
, l'approche typique serait de trouver leur produit, puis de former une plage qui pourrait [:i.*/
coûter 6 octets. Une manière plus courte est ,@i.
de 4 octets car i.
peut former des tableaux multidimensionnels tout en comptant toujours, et l'aplatir produira une plage équivalente.
Impression en continu
Une manière tacite d'imprimer une valeur et de continuer à l'utiliser sans boucle explicite est ([echo)
pour un cas monadique. echo
est un verbe de la bibliothèque standard qui imprime son contenu stdout
dans le même format que celui utilisé dans l'interpréteur. Le crochet passe ensuite la même valeur d'entrée à l'aide du [
verbe gauche .
Base 10 chiffres d'un entier
La manière standard d'acquérir les 10 chiffres de base d'un entier est celle 10#.inv]
qui coûte 8 octets de trop! Une alternative consiste à le convertir en une chaîne et à l'analyser au rang 0, "."0@":
ce qui économise un octet, mais une méthode encore meilleure consiste à ,.&.":
enregistrer un autre octet, ce qui rend le coût final 6 octets au lieu de 8.
GolfScript gets its own way far too often
en 2019.