つりあわない男女
さて、今回もawkでパズルを解いてみます。
perlでやろうと思ったのですが、出来なかったので、awkに戻ってきてしまいました。(^^)/
あるイベント会場に男女が集まてきました。 到着した順番に1列に並んで、入場を待っています。 イベントの主催者であるあなたは、ある位置で区切って2つのグループに分けたいと思っています。 男性20人、女性10人が到着した場合、どこで区切っても2つのグループのいずれも男女の数が異なって しまうような到着順が何通りあるか求めてください
コツは男女が同数になる場所をカウントしないということです。
#!usr/bin/awk -f BEGIN{ boy = 20; girl = 10; boy++; girl++; ary[0][0] = 1; for(i = 0; i < girl; i++){ for(j = 0; j < boy; j++){ if((i != j) && (boy - j != girl -i)){ # 男女が同数でなければ if(j > 0){ ary[i][j] += ary[i][j - 1]; } if(i > 0){ ary[i][j]+= ary[i - 1][j]; } } } } print (ary[girl - 2][boy - 1] + ary[girl - 1][boy - 2]); }
awk -f q09.awk 2417416