nashidos’s diary

アルゴリズムとか機械学習とか色々

Jupyterで競技プログラミングをするならスニペットを使おう

AtCoderなどの競技プログラミングではコーディングのスピードは非常に重要視されます。

そこで本記事では、コーディング時間を短縮するためにスニペットを利用する方法について紹介します。


実行環境

  • Windows10
  • Anaconda
  • Jupyter Notebook
  • Python3.7

拡張機能のインストール

Jupyterでスニペットを利用するにはまず拡張機能jupyter_contrib_nbextensionsをインストールする必要があります。

スニペット以外にも様々な拡張が使えるようになるのでスニペットを使わないとしてもインストールすることをお勧めします。

インストールは以下の手順で行うことができます。

pip install jupyter_contrib_nbextensions
jupyter contrib nbextension install --user

インストールが完了したらJupyterを起動もしくは再起動してください。

正しくインストールが完了していれば下記のようにNbextensionsと書かれたタブが増えているはずです。
Jupyter notebook

スニペット機能を有効化

スニペットの登録を登録するためにはまず、スニペット機能を有効にする必要があります。

Nbextensionsタブをクリックすると、下の画像のような画面が表示されます。
Nbextensions

スニペットを有効にするために「Snippets」にチェックマークを入れてください。

Snippets Menu」という似たような名前の拡張がありますが、別物なので注意しましょう。(自分でスニペットを登録することができるのがSnippets、デフォルトのスニペットを利用できるのがSnippets Menu)

スニペットの登録

それでは自分オリジナルのスニペットを登録してみましょう。

スニペットsnippets.jsonを編集することで登録することができます。

snippets.jsonは(jupyter --data-dir)/nbextensions/snippets/snippets.jsonにあります。

(jupyter --data-dir)はjupyterのパスを表しています。

Jupyterのパスは以下のコマンドで簡単に知ることができます。

jupyter --data-dir

snippets.jsonの中身は以下のようになっています。

{
    "snippets" : [
        {
            "name" : "example",
            "code" : [
                "# This is an example snippet!",
                "# To create your own, add a new snippet block to the",
                "# snippets.json file in your jupyter nbextensions directory:",
                "# /nbextensions/snippets/snippets.json",
                "import this"
            ]
        }
    ]
}

ここに自分オリジナルのスニペットを登録してみましょう。

ここでは例として素因数分解スニペットを作ろうと思います。

以下のように素因数分解のコードを登録してみました。

{
    "snippets" : [
        {
            "name" : "example",
            "code" : [
                "# This is an example snippet!",
                "# To create your own, add a new snippet block to the",
                "# snippets.json file in your jupyter nbextensions directory:",
                "# /nbextensions/snippets/snippets.json",
                "import this"
            ]
        },

        {
            "name" : "素因数分解",
            "code" : [
                "def is_prime(n):",
                "    if n == 1:",
                "        return False",
                "    for i in range(2,int(n**0.5)+1):",
                "        if n % i == 0:",
                "            return False",
                "    return True"
            ]
        }
    ]
}



スニペットの実行

適当にipynbファイルを開けてみると上のツールバーのところにSnippetsのドロップダウンメニューが追加されていると思います。

Jupyter Notebook

そしてクリックしてみると先ほど登録したスニペットが表示されるので、クリックすると登録したコードが新規セルに書き込まれます。

実行画面

おわりに

よく使う典型的な関数などはスニペットを利用することによって効率的に管理できそうですね。

個人的には実行したときに新規セルではなくて現在いるセルに追加してほしいなぁと思いました。

もし現在いるセルに追加する方法を知っている人がいればぜひコメント等で教えていただけると嬉しいです。

おわり。