鳳鳴は祖父の俳号

日記 メモ そんなの

逆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
}