プログラマーの力量を見極める--面接官になったら尋ねるべき質問実例集 ホワイトボードテストを実装してみる
元ネタ:プログラマーの力量を見極める--面接官になったら尋ねるべき質問実例集 - 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); } } }