おっぱい解析向けライブラリを移植してみる

hirax.net::おっぱい解析向けライブラリを書いてみる!? 第1回 にインスパイヤされて、おっぱい解析ライブラリを awk に移植してみます。 Mathematica は大学時代に少し遠巻きに見ていただけなのですが、この Mathematica で書かれた超重要基本ライブラリを移植してみます。

#! /usr/local/bin/gawk -f
# oppai.awk

BEGIN {
    print cup2cm("C");
    print cm2cup(30);
}

# cup2cm:   カップサイズからアンダーバストとトップバストの差を求める
#   input:  カップサイズ
#   output: アンダーバストとトップバストの差 (cm)
function cup2cm(str) {
    if (str == "AAA") {
        return 5;
    }

    if (str == "AA") {
        return 7.5;
    }

    if (str == "ZZ") {
        return 75;
    }

    if (str == "ZZZ") {
        return 77.5;
    }

    return (ord(str) - ord("A")) * 2.5 + 10;
}

# cm2cup:   アンダーバストとトップバストの差からカップサイズを求める
#   input:  アンダーバストとトップバストの差 (cm)
#   output: カップサイズ
function cm2cup(num) {
    if (num <= 6.25) {
        return "AAA";
    }

    if (num <= 8.75) {
        return "AA";
    }

    if (num >= 77.5) {
        return "ZZZ";
    }

    if (num >= 75) {
        return "ZZ";
    }

    return chr(round((num - 10) / 2.5 + 65));
}

# round:    四捨五入
#   input;  数値
#   output: 整数で四捨五入された数値
function round(num) {
    return int(num + 0.5);
}

# ord() と chr() 関数
# Ref.: /usr/share/awk/ord.awk
function _ord_init(    low, high, i, t) {
    low = sprintf("%c", 7)                  # BEL is ascii 7

    if (low == "\a") {                      # regular ascii
        low = 0;
        high = 127;
    } else if (sprintf("%c", 128 + 7) == "\a") {
        # ascii, mark parity
        low = 128;
        high = 255;
    } else {                                # ebcdic(!)
        low = 0;
        high = 255;
    }

    for (i = low; i <= high; i++) {
        t = sprintf("%c", i);
        _ord_[t] = i;
    }
}

function ord(str,    c) {
    _ord_init();
    # only first character is of interest
    c = substr(str, 1, 1);
    return _ord_[c];
}

function chr(c) {
    # force c to be numeric by adding 0
    return sprintf("%c", c + 0);
}

ほぼ Mathematica と同じように移植を行いましたが、ToCharacterCode に相当する ord 関数と FromCharacterCode 関数に相当する chr() 関数は AWK Users JP :: シーザー暗号 で使ったもの (gawk 標準ライブラリからの抜粋) を用いています。 四捨五入は AWK Users JP :: 切り下げ、切り上げ、四捨五入 でも使われていますが、用途的に考えてマイナスはないだろうという、おっぱい基本原理を考慮したものになっています。(注: そんな原理はありません)

では、実行してみます。

$ gawk -f oppai.awk
15
I

さて、hirax.net::おっぱい解析向けライブラリを書いてみる!? 第1回 とタイトルがなっていることから考えて、何回かあるのでしょうかね。 3D グラフィックが必要になれば、awk で OpenGL を使ってグリグリしてみたいものです。 というか、ぜひ教えて欲しいです。

gawk のライブラリの ord() と chr() は日本語が使えませんが、cup2cm("超") とか cup2cm("弩") とかで表示されたりすると楽しそうですね。

tag_gawk.png tag_gawk.png