2010/10/26

[C#]数字を漢数字に変換する

このエントリーをはてなブックマークに追加

数字を漢数字に変換する

数字を漢数字に変換する関数です。
12345は「一万二千三百四十五」、11111は「一万千百十一」、100000001は「一億一」にならないといけません。
要点は三つ。
  1. 間に数がないときは万、億、兆(大数という)を足さない。
  2. 位の数が1のとき、十、百、千の桁には一を足さない。
  3. 0のときは詰める。

ソースコード
private string toKansuji(long number) {
    if (number == 0) {
        return "〇";
    }
        
    string[] kl = new string[] { "", "十", "百", "千" };
    string[] tl = new string[] { "", "万", "億", "兆", "京" };
    string[] nl = new string[] { "", "一", "二", "三", "四", "五", "六", "七", "八", "九" };
    string str = "";
    int keta = 0;
    while (number > 0) {
        int k = keta % 4;
        int n = (int)(number % 10);
                
        if (k == 0 && number % 10000 > 0) {
            str = tl[keta / 4] + str;
        }
                
        if (k != 0 && n == 1) {
            str = kl[k] + str;
        } else if (n != 0) {
            str = nl[n] + kl[k] + str;
        }
                
        keta++;
        number /= 10;
    }
    return str;
}

昔書いたテーマを思い起こしてみたものですが、「どう書く?」のお題になってたようでした。
まあ、みんな似たようなコードになりますな。

どう書く?org - 整数の漢数字表記
http://ja.doukaku.org/38/

2010/10/20

円充填(circle-packing)

このエントリーをはてなブックマークに追加
円充填という概念があることを知ったので、遊んでました。コードなし、画像だけです。

その1

その2


真面目に勉強もせず、だらだらと自前で適当にコーディングを進めすぎたせいで、ぜんぜん納得いかず。かといって、汎用的にもなりそうにないし、処理には時間食うし。何かできそうだけれど、このまま続けても消耗モードになりそうなので、一時離れるつもりでここに書いておきます。何か思いついたらまた触る。

綺麗に隙間なく並べるにはどうやったらいいんだろう。どうしても不自然な隙間が連なってしまうんだなー。

元画像


円充填
Circle packing theorem

2010/10/03

[javascript]canvasでフィルタ処理

このエントリーをはてなブックマークに追加
canvasのgetImageDataとpuImageDataを駆使して非線形の座標変換による変形処理をしました。

・ねじる


・ふくらむ


・裏返る


・波立つ



懸念はやっぱり処理速度で、どの程度の実用できるレベルなのかというところ。
デモはこちらからです。

なお、まともに見れるのはGoogleChromeかSafariくらいなのでご注意を。FireFox3.6でも辛いです。
ブラウザベースでそこそこ遊べるので、面白い玩具を見つけたなって感じです。