逆fizzbuzz 別解
逆fizzbuzzの別解。手続き脳。
前回は充分な長さのfizzbuzz列が必要だったが、この範囲を越えるようなパターンを与えると検出できなくなる。
そこで素直な実装。与えられたパターンが順に条件を満たすか見ていき、パターンの最後まで行ったら合格。ただし制限があり、パターンの走査のやり直しはLimit回まで。
#! /usr/local/bin/gawk -f BEGIN{ Limit=100 } { start=step=fbz($1) while(start<Limit) { for(i=1;i<=NF;i++) { t=fbzmatch($i,start+i-1); if(t!=0) break; if(i==NF) { for(j=start;j<start+NF;j++) print j; next } } start=start+step } print "no match." } function fbzmatch(str,n) { if(str=="fizzbuzz") return n%15 if(str=="fizz") return n%3 if(str=="buzz") return n%5 if(n%3!=0 && n%5!=0 ) return 0 return -1 } function fbz(str) { if(str=="fizzbuzz") return 15 if(str=="fizz") return 3 if(str=="buzz") return 5 return 1 }