if分岐を使わないFizzBuzz

プログラミング課題でよく知られたものとして、にFizzBuzz問題というものがある。 内容はWikipediaに記載されている通りで、いわばプログラミング初心者向け問題の代表格だ。 そんなプログラマなら誰でも知っているような有名な問題だからか、縛りプレイも盛んだ。

つい最近も、Twitterでif分岐を使わないでFizzBuzzを解けって課題が流れてきた。面白そうだったから、とりあえずやってみた。やってみたはいいんだけど、力技感が拭えない。もっとエレガントな感じにならないもんか。。。

あ、言語はJavaです。

import java.util.Arrays;
import java.util.List;
import java.util.function.IntFunction;

public class FizzBuzz {

    private static final IntFunction<String> FIZZ       = (v -> "FIZZ");
    private static final IntFunction<String> BUZZ       = (v -> "BUZZ");
    private static final IntFunction<String> FIZZBUZZ   = (v -> "FIZZ-BUZZ");
    private static final IntFunction<String> DEFAULT    = (v -> v + "");

    private static final List<IntFunction<String>> FUNC_DEFS = Arrays.asList(
            FIZZBUZZ, DEFAULT, DEFAULT, FIZZ, DEFAULT,
            BUZZ, FIZZ, DEFAULT, DEFAULT, FIZZ,
            BUZZ, DEFAULT, FIZZ, DEFAULT, DEFAULT
    );

    public static void main(String[] args) {
        int n = 31; // TODO: コマンドライン引数から取得する
        for (int i = 0; i < n; i++)
        {
            System.out.println(FUNC_DEFS.get(i % 15).apply(i));
        }
    }
}