3の倍数と3がつく数字のときだけアホになるサクラエディタのマクロ

やはり、プログラマたるものNabeAtzz問題はやっておきたい。

単に数字を出力するやつはいろんな人がやってるので、自分はサクラエディタのマクロにしてみた。

このマクロを実行すると、エディタ内のテキストのうち、3の倍数と3がつく数字のときだけアホになる。

nabeatzz.js

if(Editor.GetSelectedString(0).length == 0) Editor.SelectAll();
var source = Editor.GetSelectedString(0);

Number.prototype.has_num = function(n){
    if(this == 0) return false;
    if(this % n == 0) return true;
    return (function(a, b){
        if(a == 0) return false;
        if(a % 10 == b) return true;
        return arguments.callee(Math.floor(a / 10), b);
    })(this, n);
};
Number.prototype.to_aho = function(){
    var ahonums = [
        ['', 'いち', 'に', 'さぁん', 'し', 'ご', 'ろく', 'しち', 'はち', 'きゅう'],
        ['', 'じゅう', 'にーじゅ', 'さぁんじゅ', 'よぉんじゅ', 'ごぉじゅ', 'ろくじゅ', 'ななじゅ', 'はちじゅ', 'きゅうじゅ'],
        ['', 'ひゃく', 'にひゃく', 'さんびゃく', 'よんひゃく', 'ごひゃく', 'ろっぴゃく', 'ななひゃく', 'はっぴゃく', 'きゅうひゃく'],
        ['', 'せん', 'にせん', 'さんぜん', 'よんせん', 'ごせん', 'ろくせん', 'ななせん', 'はっせん', 'きゅうせん'],
        ['', 'いちまん', 'にまん', 'さんまん', 'よんまん', 'ごまん', 'ろくまん', 'ななまん', 'はちまん', 'きゅうまん']
    ];
    var r = [];
    var s = this.toString();
    if(ahonums.length < s.length) return s;
    for(var i = 0; i < s.length; i++){
        var d = Number(s.charAt(s.length - 1 - i));
        r.unshift(ahonums[i][d]);
    }
    return r.join('');
};

Editor.InsText(source.replace(/\d+/g, function(m){
    var num = Number(m)
    if(num.has_num(3)) return num.to_aho();
    return m;
}));

数字は99999まで対応。

さっそく試してみる

1 2 3 4 5
6 7 8 9 10
11 12 13 14 15
16 17 18 19 20
21 22 23 24 25
26 27 28 29 30
31 32 33 34 35
36 37 38 39 40

上記をサクラエディタに入力し、マクロ実行。

1 2 さぁん 4 5
ろく 7 8 きゅう 10
11 じゅうに じゅうさぁん 14 じゅうご
16 17 じゅうはち 19 20
にーじゅいち 22 にーじゅさぁん にーじゅし 25
26 にーじゅしち 28 29 さぁんじゅ
さぁんじゅいち さぁんじゅに さぁんじゅさぁん さぁんじゅし さぁんじゅご
さぁんじゅろく さぁんじゅしち さぁんじゅはち さぁんじゅきゅう 40

こうなる。たぶん合ってる。

どんな文書にでも使える

エディタのマクロなので、どんなテキストにでも使える。

JavaScriptネットスケープコミュニケーションズのBrendan Eichによって開発され、Netscape Navigator 2.0 で実装された。開発当初はLiveScriptと呼ばれていたが、1995年にSun Microsystemsの開発したプログラミング言語Javaが当時大きな注目を浴びており、NetscapeSun Microsystemsが技術提携していた事もあった為、JavaScriptという名前に変更された。1996年にマイクロソフトのInternet Explorer3.0に搭載されるようになると、その手軽さからJavaScriptは急速に普及していく。1997年、通信に関する標準を策定する国際団体Ecma Internationalによって JavaScript の中核的な仕様がECMAScriptとして標準化され (ECMA 262, ISO/IEC 16262, JIS X 3060)、多くの Webブラウザで利用できるようになった。ネットスケープ社は、自社サーバ製品で、WEBアプリケーション開発言語としての実装も行ったが、こちらは余り普及しなかった。

JavaScript - Wikipedia

上記の文章をサクラエディタに入力して、マクロを実行。

JavaScriptネットスケープコミュニケーションズのBrendan Eichによって開発され、Netscape Navigator 2.0 で実装された。開発当初はLiveScriptと呼ばれていたが、せんきゅうひゃくきゅうじゅご年にSun Microsystemsの開発したプログラミング言語Javaが当時大きな注目を浴びており、NetscapeSun Microsystemsが技術提携していた事もあった為、JavaScriptという名前に変更された。1996年にマイクロソフトInternet Explorerさぁん.0に搭載されるようになると、その手軽さからJavaScriptは急速に普及していく。1997年、通信に関する標準を策定する国際団体Ecma Internationalによって JavaScript の中核的な仕様がECMAScriptとして標準化され (ECMA 262, ISO/IEC 16262, JIS X さんぜんろくじゅ)、多くの Webブラウザで利用できるようになった。ネットスケープ社は、自社サーバ製品で、WEBアプリケーション開発言語としての実装も行ったが、こちらは余り普及しなかった。

こうなった。「Internet Explorerさぁん.0」とかアホだwwww

作ってみた感想

いざやってみると、いろいろとJavaScriptの大事なところが詰まったコードになった。

  • prototypeにメソッドを拡張
  • 3がつく数字を調べるために再帰
  • 配列の配列を使って数字をアホに変換
  • String#replaceの第2引数に匿名関数を渡す

JavaScript入門にはちょうどいい。