排他的論理和で作る三角形
awkネタ
有名な「パスカルの三角形」は「右上の数と左上の数の和」を配置していきますが、今回は「排他的論理和」を使います。
01段目:1
02段目:11
03段目:101
04段目:1111
05段目:10001
06段目:110011
07段目:1010101
08段目:11111111
09段目:100000001
10段目:1100000011
11段目:10100000101
12段目:111100001111
上から順番に配置していった時、2014番目の「0」が出力されるのは何段目?
gawk では、xor関数があります。
xor(v1,v2) 引数のビットごとのXOR値を返す
#!/usr/bin/gawk -f BEGIN{ count = 0; # 0が出現した回数 line = 1; # 現在の行数 row[1] = 1; # 現在の行の値 next_row[1] = 1; while(count < 2014){ for(i = 1; i <= length(row) - 1; i++){ cell = xor(row[i] , row[i + 1]); next_row[i + 1] = cell; if (cell == 0){ # 0の場合にカウント count++; } } next_row[length(next_row) + 1] = 1; line++; # 行数を増やして次の行へ for(j = 1; j <= length(next_row); j++){ row[j] = next_row[j]; } } print line; # 2014個カウントした行を出力 }
実行してみます。
gawk -f q21.awk 75