IrofGen

いろふ Advent Calendar 2014の7日目の記事です.
前の日は@kazuhito_mさんのNBM: いろふさんの"ふんいきbot"、作って動かしてみた #irof_historyでした.
明日は@mike_neckさんです.

2014年はirof史において欠かすことのできない一年でしょう.
なぜなら,とある書籍*1によって,今まで不明だったirofインスタンスのクラス*2が判明したからです.

今回はそのクラスからいくつか情報を頂いてirofクラスから生成されうるインスタンスを生成してみます.

public class IrofGen
{
    private static final String BOIN = "oaiu";
    private static final String SHIIN = "nzkhrfm";
    private static final Random r = new Random();

    public String gen()
    {
        return this.takes(BOIN, SHIIN, BOIN, SHIIN);
    }

    private String takes(String... targets)
    {
        return Arrays.stream(targets)
            .map(this::take)
            .collect(StringBuilder::new, StringBuilder::append, StringBuilder::append)
            .toString();
    }

    private char take(String target)
    {
        return (char)target.chars()
            .skip(r.nextInt(target.length()))
            .findFirst().getAsInt();
    }
}

BOINとSHIINがirofクラスからお借りした情報です.
そして,irofインスタンスはBOIN + SHIIN + BOIN + SHIINの組み合わせです.
なので,これらからランダムに一字づつ取るようにしました.

public class Main
{
    public static void main(String[] args)
    {
        IrofGen irofGen = new IrofGen();

        IntStream.range(0, 10)
            .mapToObj($ -> irofGen.gen())
            .forEach(System.out::println);
    }
}

実行してみましょう.

omam
imuf
amam
amih
ufum
imuz
azoh
ikuh
azif
azin

irofインスタンス#equalsが真になるのが出るのはいつになることやら.

*1:www.amazon.co.jp/dp/4774169315/

*2:こっちの世界での実体