欠席者を探せ (EPOCH@まつやま - 本選 4)

前回の AWK Users JP :: 2 人の相性度は? (EPOCH@まつやま - 本選 3) に続いて 4 問目で、「欠席者を探せ」という問題です。 本選第 1 ステージの問題 (PDF) の 4 問目になります。

これはAWK Users JP :: 2 人の相性度は? (EPOCH@まつやま - 本選 3 でも同じなのですが、アルファベットをひとつひとつ列挙していると苦しいので、sprintf() 関数からアルファベットを生成します。 sprintf("%c", 65) が "A" になることを利用しています。

#! /usr/local/bin/gawk -f
# epoch_problem_H4.awk
# 欠席者を探せ
# usage: gawk -f epoch_problem_H4.awk file

{
    for (i = 1; i <= length($0); i++) {
        arr[substr($0, i, 1)]++;
    }

    for (i = 1; i <= 26; i++) {
        alpha = sprintf("%c", i + 64);
        if (arr[alpha] == 0) {
            print alpha;
        }
    }
}

基本的には awk で良く使われる uniq と同じように文字をひとつずつ配列のインデックスにしてカウントし、これが 0 (ゼロ) のものを表示すれば良いことになります。

$ echo 'ABCDFGHIJKLMNOPQRSTUVWXYZ' | gawk -f epoch_problem_H4.awk
E

知っているのと知っていないので差が大きいのですが、こうしたことを知っていなくても解けますので、落ち着いて自分の頭でロジックを組み立てれば良さそうです。

tag_nawk.pngtag_nawk.pngtag_nawk.pngtag_nawk.png