Verwenden der Iteration zum Berechnen von Sequenzen
Normalerweise müssen Sie zum Lösen einer OEIS-Sequenzanforderung eine der auf der Seite angegebenen Formeln verwenden. Einige passen gut zu J, andere weniger. Rekursive Formeln sind unkompliziert, die Iteration ist jedoch möglicherweise nicht einfach. Ein Muster, mit dem ich angefangen habe, ist
(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
Dabei s
ist Wobei der erste Wert in der Sequenz f
ist, ein Verb, das den nächsten Term berechnet, wenn der vorherige Term angegeben ist, und n
der auf Null basierende Index des Terms, den Sie berechnen möchten. Diese Methode beruht auf der Tatsache, dass bei der Berechnung der Potenz einer Dyade die LHS an die Dyade gebunden wird, um eine neue Monade zu bilden, und diese Monade auf dem Anfangswert verschachtelt ist. Die dem Power-Adverb zugewiesene Dyade ist ein Hook, bei (]f)
dem der Index n
für die LHS und der Wert eines Terms in der Sequenz angegeben werden s
. Der Haken gilt f
auf s
als Monade, und dann ignoriert n
das Ergebnis zurück f s
.
Standardbibliothek
Manchmal werden Sie vielleicht feststellen, dass J ein Verb in seiner Standardbibliothek unterstützt . Beispielsweise sind die meisten bitweisen Ganzzahloperationen an Namen gebunden, die kürzer sind als die Verwendung des primitiven Aufrufs.
AND =: (17 b.) NB. it is actually '$:/ :(17 b.)'
Datums- und Zeitangaben sind ebenfalls verfügbar.
Bereiche
Wenn Sie eine Reihe von Werten haben [a, b, c]
und einen Bereich basierend auf dem Produkt bilden möchten [0, 1, 2, ..., a*b*c-1]
, besteht der typische Ansatz darin, das Produkt zu finden und dann einen Bereich zu bilden, der möglicherweise [:i.*/
6 Byte kostet. Ein kürzerer Weg ist ,@i.
für 4 Bytes, da i.
mehrdimensionale Arrays gebildet werden können, während immer noch hochgezählt wird, und durch Reduzieren wird ein gleichwertiger Bereich erzeugt.
Fortlaufend drucken
Eine stillschweigende Möglichkeit, einen Wert auszudrucken und ihn ohne explizite Schleife weiter zu verwenden, ist ([echo)
für einen monadischen Fall. echo
ist ein Verb in der Standardbibliothek, das seinen Inhalt stdout
in dem Format ausgibt, das im Interpreter verwendet wird. Der Hook gibt dann den gleichen Eingabewert mit dem linken [
Verb aus.
Basis 10 Stellen einer ganzen Zahl
Die Standardmethode zum Erfassen der 10-stelligen Basis einer Ganzzahl ist, 10#.inv]
dass 8 Byte zu viel kosten! Eine Alternative besteht darin, es in eine Zeichenfolge zu konvertieren und bei Rang 0 zu analysieren, "."0@":
wodurch ein Byte gespeichert wird. Eine noch bessere Möglichkeit ist ,.&.":
, ein weiteres Byte zu speichern, wodurch die endgültigen Kosten 6 Bytes anstelle von 8 Bytes betragen.
GolfScript gets its own way far too often
im Jahr 2019 hat etwas Lustiges .