TL;DR
空の行に数式を入力し、macOSではCmd+Alt+c
、WindowsではCtrl+Alt+c
を押すと概算の計算結果が表示されるVSCode拡張機能です. 2^25
や5C3
や10!
などといった記号を含むものも計算できます.
使用可能な演算一覧
演算子 | 演算子 | |
---|---|---|
足し算 | + | |
引き算 | - | |
掛け算 | * | |
割り算 | / | 結果が小数の場合は小数点以下が切り捨てられます。 |
組み合わせ | nCr | 大文字小文字は不問です。 |
階乗 | n! | |
対数(底2) | log(n) | 括弧が必須です。結果が小数の場合は小数点以下が切り捨てられます。 |
括弧 | () |
※入力の空白は全て無視されます。
仕様・使用例など
最近ときどきAtCoderというサイトで競技プログラミングをしているのですが、思いついた解法が実行時間制限に間に合うかどうかの計算がVSCode内で完結できるとエレガントだなと思い、今日少し時間があったのでVSCodeの拡張機能を作ってみました。
例えば2²⁰₁₀C₅をパパッと計算したいとき、新しい行に
2^20*10c5
と入力してmacOSではCmd+Alt+c
、WindowsではCtrl+Alt+c
を押すと
2^20*10c5 = 264,241,152
と結果が出ます。この例では実行時間制限に間に合わなそうですね。
JavaScriptのBigInt型で計算しているので、用途はよく分かりませんが10000!
とか10000c5000
とかも平気な顔して計算します。
その他
数式の構文解析
例えば1+2*3
を左から読んで実行してしまうと答えが9
になってしまい、括弧なども使えません。
再帰を使えばできそうだなぁ、でもかなり面倒だなぁ、などと思いながら調べていたところ、操車場アルゴリズムというものに行き当たりました。
このアルゴリズムでは、数と演算子を保持するスタックを用意して左から数式を読んでいき、次に読んだ演算子の優先順位がスタック最後尾の演算子の優先順序よりも低い場合にはそうでなくなるまでスタックの演算子を潰していきます。
今回はこのアルゴリズムを実装して入力を逆ポーランド記法に変換し、その後簡単なスタックマシンで結果を計算しています。math.jsなどを使った方が楽だったかもしれません。
VSCodeの拡張機能開発について
こちらはnpm
さえインストールされていればpublishするところまで全く難しくなく、とてもスムーズに開発できました。
おわりに
VSCodeの拡張機能開発は初めてでしたが、とても開発が楽で3時間程度で完成してしまいました。また何か思いついたら作ろうと思います。