バイナリクロック

バイナリクロック どう書く?org を見て、バイナリクロックを作ってみました。 既にAWK Users JP :: LL Golf Hole 6 - 10進数を2進数に基数変換するで 10 進数を 2 進数に変換する部分は完成していますので、簡単に書くことができます。

#! /usr/local/bin/gawk -f
# binclock.awk
# バイナリクロック
# usage: gawk -f binclock.awk

BEGIN {
    now_hour = strftime("%H");
    now_min  = strftime("%M");

    bin_now_hour = dec2bin(now_hour);
    bin_now_min  = dec2bin(now_min);

    gsub(/0/, "_", bin_now_hour);
    gsub(/1/, "#", bin_now_hour);
    gsub(/0/, "_", bin_now_min);
    gsub(/1/, "#", bin_now_min);

    print bin_now_hour;
    print bin_now_min;
}

# dec2bin():    10 進数を 2 進数に変換
#   in:     10 進数 (num)
#   out:    num の 2 進数
function dec2bin(num,    rem, str) {

    while (num > 0) {
        rem = int(num % 2);

        if (rem == 1) {
            str = "1" str;
        } else {
            str = "0" str;
        }
        num = int(num / 2);
    }

    return str;
}

ここの環境が UTF-8 の環境のため、日本語などの記号の幅が崩れるため 1 byte の文字を用いています。

$ gawk -f binclock.awk
#_##_
#_#__#

直感的に時間が分かりにくいのですが、22:41 です。

tag_gawk.pngtag_gawk.png