unknown

unknown

OEISの数列を実装する

created: 2021-09-03

少し前から、オンラインの整数列大辞典 OEISの数列を TypeScript でちょこちょこ実装している。

レポジトリ

動機

天才エピソードが好きな少年なら誰でも、ラマヌジャンの数に対する規則性を見出す神秘的な能力についてのエピソードにわくわくしたはずで、ぼくもその一人である。

無論、今からラマヌジャンを目指すのは無理だが、日常的に数字や数列を眺めて、先を予測する訓練を続けていれば、それなりに数学力も上達するのではないかという魂胆から、OEIS をちょこちょこ読み始めた。

しかし、OEIS は数式や関連する数列、Mathematica や Haskell のコード、レファレンスなどがざっと羅列されていて、門外漢にはなかなかに読みづらく、項目をざっと眺めたところで理解できた気は全くしない。

そこで、数列へ理解を深めることと、プログラミング力の向上をテーマとして、ある程度書き慣れている JavaScript(現在は TypeScript)での実装をすることにした。

構成

各スクリプトは、OEIS で付番された数列の番号と同名であり、基本的には次の三つの関数を持っており、各関数には対応するテストがある。

  • isA...: 引数に指定した数が、その数列に含まれるかどうかを boolean で返す関数。
  • genA...Num: その数列で、引数に指定したインデックスの要素を返す関数。
  • genA...Seq: 指定したインデックスまでの数列を生成する関数。

また、指定した範囲の自然数列生成や、ある数の約数の配列生成など、数列を扱う上で便利な機能は、QJS というクラスの静的メソッドとして実装している。(ちなみにこの名称は、ぼくにとってのプログラミング入門のきっかけとなった吉田武先生の名著『素数夜曲』において実装される、数論専用言語"QueenScheme"をもじっている)

future work

ちまちまと自分の楽しみとしてやっているプロジェクトだけれど、将来的は次のような使い方をしていきたいと思っている。

  • C++や Go、Scheme など、自分の興味ある言語の書き方を習得するプロジェクトとして使っていきたい
  • OEIS 本体を読むときに、自分および他の人の理解の助けとなるような機能を実装できたら良い
  • QJS がそれなりに使い物になりそうだったら、正数列を扱うのに便利なモジュールとして npm にアップする