プログラマーの力量を見極める--面接官になったら尋ねるべき質問実例集 ホワイトボードテストを実装してみる

元ネタ:プログラマーの力量を見極める--面接官になったら尋ねるべき質問実例集 - ZDNet Japan
面白そうなので少し試してみた。
以下C#で。※効率とかコードの綺麗さとかテストコードとかは無視で。。

数値Xのフィボナッチ数を計算する。

static int Getフィボナッチ数(int x)
{
  // F(0) = 0, F(1) = 1 のとき、F(n) = F(n-1) + F(n-2)
  if (x < 0)
  {
    throw new ArgumentOutOfRangeException("x", "x >= 0");
  }
  if (x <= 1)
  {
    return x;
  }
  int fnマイナス1 = 1;
  int fnマイナス2 = 0;
  for (int i = 2; i < x; i++)
  {
    int tmpマイナス1 = fnマイナス1;
    fnマイナス1 += fnマイナス2;
    fnマイナス2 = tmpマイナス1;
  }
  return fnマイナス1 + fnマイナス2;
}

指定された数値Xが素数であるかどうかを判定する。

static bool Is素数(int x)
{
  // 1 とその数以外では割れない1より大きい自然数
  // エラストテネスの篩 を少し利用。効率は無視(無駄がある)。
  if (x < 2) return false;

  int root = (int)Math.Sqrt(x);

  for (int i = 2; i <= root; i++)
  {
    if (x % i == 0)
    {
      return false;
    }
  }
  return true;
}

ループを使わずに配列の順序を逆にする。

static int[] ループを使わずに反転(int[] target)
{
  // ループを使わずに反転、Reverse とか Linq とか使わずに。再帰処理。
  if (target == null)
  {
    throw new ArgumentNullException("target");
  }
  if (target.Length <= 1)
  {
    return target;
  }
  int[] ret = new int[target.Length];
  反転処理(target, ret, 0);
  return ret;
}
static void 反転処理(int[] src, int[] dest, int targetIndex)
{
  if (targetIndex == src.Length) return;

  dest[(src.Length - 1) - targetIndex] = src[targetIndex];
  反転処理(src, dest, ++targetIndex);
}

Fizz Buzz

static void FizzBuzz(int x)
{
  if (x < 1) 
  {
    throw new ArgumentOutOfRangeException("x", "x >= 1");
  }
  for (int i = 1; i <= x; i++)
  {
    if (i % 15 == 0)
    {
      Console.WriteLine("Fizz Buzz");
    }
    else if (i % 3 == 0)
    {
      Console.WriteLine("Fizz");
    }
    else if (i % 5 == 0)
    {
      Console.WriteLine("Buzz");
    }
    else
    {
      Console.WriteLine(i);
    }
  }
}