日常の進捗

主に自分のための,行為とその習慣化の記録

Mod:Coding Challenge #16: Fractal Trees - L-System

f:id:takawo:20170914144451p:plain

最近のYoutube、字幕の自動生成が精度が高くて英語が聞き取りやすい。動画の中で言っている

L-System is a recursive way of generating sentences over and over again using string replacement.

が今回の肝っぽい。特定の文字列を置き換えることを再帰的に繰り返すことで、文を生成する仕組みがLシステム。ここでのAxiom(公理)は、文字列を置換するルールのこと。

例えば、2つの文字ABを、

A AB
B A

というふうに、次の世代で変換するというルールを設けたとする。

この時、繰り返し変換していくと、最初に設定した文字列Aは、こんな感じで変化していく。

0: A
1: AB
2: ABA
3: ABAAB
4: ABAABABA
5: ABAABABAABAAB 

この繰り返しをまずProcessingで書いてみることにする。条件分岐でも書けると思うけど連想配列を使いたかったので、HashMapで書いてみた。

import java.util.HashMap;
import java.util.Iterator;
import java.util.Map;

String axiom = "A";
HashMap<String, String> rule;

rule = new HashMap<String, String>();
rule.put("A", "AB");
rule.put("B", "A");
for (int depth = 0; depth < 10; depth++) {
  String str = "";
  for (int i = 0; i < axiom.length(); i++) {
    String s = String.valueOf(axiom.charAt(i));
    Iterator iterator = rule.entrySet().iterator();
    while (iterator.hasNext()) {
      Map.Entry entry = (Map.Entry)iterator.next();
      String keyName = (String)entry.getKey();
      String valName = (String)entry.getValue();
      if (s.equals(keyName)) {
        str += valName;
      }
    }
  }
  axiom = str;
  println(depth + ": " + axiom);
}

実行すると出力結果はこんな感じになる。

0: AB
1: ABA
2: ABAAB
3: ABAABABA
4: ABAABABAABAAB
5: ABAABABAABAABABAABABA
6: ABAABABAABAABABAABABAABAABABAABAAB
7: ABAABABAABAABABAABABAABAABABAABAABABAABABAABAABABAABABA
8: ABAABABAABAABABAABABAABAABABAABAABABAABABAABAABABAABABAABAABABAABAABABAABABAABAABABAABAAB
9: ABAABABAABAABABAABABAABAABABAABAABABAABABAABAABABAABABAABAABABAABAABABAABABAABAABABAABAABABAABABAABAABABAABABAABAABABAABAABABAABABAABAABABAABABA

シンプルなルールから複雑なパターンが出来る。

で、ここまで出来たところから、次はルールを変更する。

F FF+[+F-F-F]-[-F+F+F]

というもの。ルールは一つだけど複雑っていうか強力で、寿司虚空編ぽい。あっちはこんなもんじゃないけど。

comic.pixiv.net

とにかく、Processingのコードをルールの部分に合わせて、depthを少なめにして書き換えてみると

import java.util.HashMap;
import java.util.Iterator;
import java.util.Map;

String axiom = "F";
HashMap<String, String> rule;

rule = new HashMap<String, String>();
rule.put("F", "FF+[+F-F-F]-[-F+F+F]");
for (int depth = 0; depth < 4; depth++) {
  String str = "";
  for (int i = 0; i < axiom.length(); i++) {
    String s = String.valueOf(axiom.charAt(i));
    Iterator iterator = rule.entrySet().iterator();
    while (iterator.hasNext()) {
      Map.Entry entry = (Map.Entry)iterator.next();
      String keyName = (String)entry.getKey();
      String valName = (String)entry.getValue();
      if (s.equals(keyName)) {
        str += valName;
      }
    }
  }
  axiom = str;
  println(depth + ": " + axiom);
}
0: FF+[+F-F-F]-[-F+F+F]
1: FF+[+F-F-F]-[-F+F+F]FF+[+F-F-F]-[-F+F+F]FF+[+F-F-F]-[-F+F+F]FF+[+F-F-F]-[-F+F+F]FF+[+F-F-F]-[-F+F+F]FF+[+F-F-F]-[-F+F+F]FF+[+F-F-F]-[-F+F+F]FF+[+F-F-F]-[-F+F+F]
2: FF+[+F-F-F]-[-F+F+F]FF+[+F-F-F]-[-F+F+F]FF+[+F-F-F]-[-F+F+F]FF+[+F-F-F]-[-F+F+F]FF+[+F-F-F]-[-F+F+F]FF+[+F-F-F]-[-F+F+F]FF+[+F-F-F]-[-F+F+F]FF+[+F-F-F]-[-F+F+F]FF+[+F-F-F]-[-F+F+F]FF+[+F-F-F]-[-F+F+F]FF+[+F-F-F]-[-F+F+F]FF+[+F-F-F]-[-F+F+F]FF+[+F-F-F]-[-F+F+F]FF+[+F-F-F]-[-F+F+F]FF+[+F-F-F]-[-F+F+F]FF+[+F-F-F]-[-F+F+F]FF+[+F-F-F]-[-F+F+F]FF+[+F-F-F]-[-F+F+F]FF+[+F-F-F]-[-F+F+F]FF+[+F-F-F]-[-F+F+F]FF+[+F-F-F]-[-F+F+F]FF+[+F-F-F]-[-F+F+F]FF+[+F-F-F]-[-F+F+F]FF+[+F-F-F]-[-F+F+F]FF+[+F-F-F]-[-F+F+F]FF+[+F-F-F]-[-F+F+F]FF+[+F-F-F]-[-F+F+F]FF+[+F-F-F]-[-F+F+F]FF+[+F-F-F]-[-F+F+F]FF+[+F-F-F]-[-F+F+F]FF+[+F-F-F]-[-F+F+F]FF+[+F-F-F]-[-F+F+F]FF+[+F-F-F]-[-F+F+F]FF+[+F-F-F]-[-F+F+F]FF+[+F-F-F]-[-F+F+F]FF+[+F-F-F]-[-F+F+F]FF+[+F-F-F]-[-F+F+F]FF+[+F-F-F]-[-F+F+F]FF+[+F-F-F]-[-F+F+F]FF+[+F-F-F]-[-F+F+F]FF+[+F-F-F]-[-F+F+F]FF+[+F-F-F]-[-F+F+F]FF+[+F-F-F]-[-F+F+F]FF+[+F-F-F]-[-F+F+F]FF+[+F-F-F]-[-F+F+F]FF+[+F-F-F]-[-F+F+F]FF+[+F-F-F]-[-F+F+F]FF+[+F-F-F]-[-F+F+F]FF+[+F-F-F]-[-F+F+F]FF+[+F-F-F]-[-F+F+F]FF+[+F-F-F]-[-F+F+F]FF+[+F-F-F]-[-F+F+F]FF+[+F-F-F]-[-F+F+F]FF+[+F-F-F]-[-F+F+F]FF+[+F-F-F]-[-F+F+F]FF+[+F-F-F]-[-F+F+F]FF+[+F-F-F]-[-F+F+F]FF+[+F-F-F]-[-F+F+F]FF+[+F-F-F]-[-F+F+F]FF+[+F-F-F]-[-F+F+F]FF+[+F-F-F]-[-F+F+F]FF+[+F-F-F]-[-F+F+F]FF+[+F-F-F]-[-F+F+F]FF+[+F-F-F]-[-F+F+F]
3: FF+[+F-F-F]-[-F+F+F]FF+[+F-F-F]-[-F+F+F]FF+[+F-F-F]-[-F+F+F]FF+[+F-F-F]-[-F+F+F]FF+[+F-F-F]-[-F+F+F]FF+[+F-F-F]-[-F+F+F]FF+[+F-F-F]-[-F+F+F]FF+[+F-F-F]-[-F+F+F]FF+[+F-F-F]-[-F+F+F]FF+[+F-F-F]-[-F+F+F]FF+[+F-F-F]-[-F+F+F]FF+[+F-F-F]-[-F+F+F]FF+[+F-F-F]-[-F+F+F]FF+[+F-F-F]-[-F+F+F]FF+[+F-F-F]-[-F+F+F]FF+[+F-F-F]-[-F+F+F]FF+[+F-F-F]-[-F+F+F]FF+[+F-F-F]-[-F+F+F]FF+[+F-F-F]-[-F+F+F]FF+[+F-F-F]-[-F+F+F]FF+[+F-F-F]-[-F+F+F]FF+[+F-F-F]-[-F+F+F]FF+[+F-F-F]-[-F+F+F]FF+[+F-F-F]-[-F+F+F]FF+[+F-F-F]-[-F+F+F]FF+[+F-F-F]-[-F+F+F]FF+[+F-F-F]-[-F+F+F]FF+[+F-F-F]-[-F+F+F]FF+[+F-F-F]-[-F+F+F]FF+[+F-F-F]-[-F+F+F]FF+[+F-F-F]-[-F+F+F]FF+[+F-F-F]-[-F+F+F]FF+[+F-F-F]-[-F+F+F]FF+[+F-F-F]-[-F+F+F]FF+[+F-F-F]-[-F+F+F]FF+[+F-F-F]-[-F+F+F]FF+[+F-F-F]-[-F+F+F]FF+[+F-F-F]-[-F+F+F]FF+[+F-F-F]-[-F+F+F]FF+[+F-F-F]-[-F+F+F]FF+[+F-F-F]-[-F+F+F]FF+[+F-F-F]-[-F+F+F]FF+[+F-F-F]-[-F+F+F]FF+[+F-F-F]-[-F+F+F]FF+[+F-F-F]-[-F+F+F]FF+[+F-F-F]-[-F+F+F]FF+[+F-F-F]-[-F+F+F]FF+[+F-F-F]-[-F+F+F]FF+[+F-F-F]-[-F+F+F]FF+[+F-F-F]-[-F+F+F]FF+[+F-F-F]-[-F+F+F]FF+[+F-F-F]-[-F+F+F]FF+[+F-F-F]-[-F+F+F]FF+[+F-F-F]-[-F+F+F]FF+[+F-F-F]-[-F+F+F]FF+[+F-F-F]-[-F+F+F]FF+[+F-F-F]-[-F+F+F]FF+[+F-F-F]-[-F+F+F]FF+[+F-F-F]-[-F+F+F]FF+[+F-F-F]-[-F+F+F]FF+[+F-F-F]-[-F+F+F]FF+[+F-F-F]-[-F+F+F]FF+[+F-F-F]-[-F+F+F]FF+[+F-F-F]-[-F+F+F]FF+[+F-F-F]-[-F+F+F]FF+[+F-F-F]-[-F+F+F]FF+[+F-F-F]-[-F+F+F]FF+[+F-F-F]-[-F+F+F]FF+[+F-F-F]-[-F+F+F]FF+[+F-F-F]-[-F+F+F]FF+[+F-F-F]-[-F+F+F]FF+[+F-F-F]-[-F+F+F]FF+[+F-F-F]-[-F+F+F]FF+[+F-F-F]-[-F+F+F]FF+[+F-F-F]-[-F+F+F]FF+[+F-F-F]-[-F+F+F]FF+[+F-F-F]-[-F+F+F]FF+[+F-F-F]-[-F+F+F]FF+[+F-F-F]-[-F+F+F]FF+[+F-F-F]-[-F+F+F]FF+[+F-F-F]-[-F+F+F]FF+[+F-F-F]-[-F+F+F]FF+[+F-F-F]-[-F+F+F]FF+[+F-F-F]-[-F+F+F]FF+[+F-F-F]-[-F+F+F]FF+[+F-F-F]-[-F+F+F]FF+[+F-F-F]-[-F+F+F]FF+[+F-F-F]-[-F+F+F]FF+[+F-F-F]-[-F+F+F]FF+[+F-F-F]-[-F+F+F]FF+[+F-F-F]-[-F+F+F]FF+[+F-F-F]-[-F+F+F]FF+[+F-F-F]-[-F+F+F]FF+[+F-F-F]-[-F+F+F]FF+[+F-F-F]-[-F+F+F]FF+[+F-F-F]-[-F+F+F]FF+[+F-F-F]-[-F+F+F]FF+[+F-F-F]-[-F+F+F]FF+[+F-F-F]-[-F+F+F]FF+[+F-F-F]-[-F+F+F]FF+[+F-F-F]-[-F+F+F]FF+[+F-F-F]-[-F+F+F]FF+[+F-F-F]-[-F+F+F]FF+[+F-F-F]-[-F+F+F]FF+[+F-F-F]-[-F+F+F]FF+[+F-F-F]-[-F+F+F]FF+[+F-F-F]-[-F+F+F]FF+[+F-F-F]-[-F+F+F]FF+[+F-F-F]-[-F+F+F]FF+[+F-F-F]-[-F+F+F]FF+[+F-F-F]-[-F+F+F]FF+[+F-F-F]-[-F+F+F]FF+[+F-F-F]-[-F+F+F]FF+[+F-F-F]-[-F+F+F]FF+[+F-F-F]-[-F+F+F]FF+[+F-F-F]-[-F+F+F]FF+[+F-F-F]-[-F+F+F]FF+[+F-F-F]-[-F+F+F]FF+[+F-F-F]-[-F+F+F]FF+[+F-F-F]-[-F+F+F]FF+[+F-F-F]-[-F+F+F]FF+[+F-F-F]-[-F+F+F]FF+[+F-F-F]-[-F+F+F]FF+[+F-F-F]-[-F+F+F]FF+[+F-F-F]-[-F+F+F]FF+[+F-F-F]-[-F+F+F]FF+[+F-F-F]-[-F+F+F]FF+[+F-F-F]-[-F+F+F]FF+[+F-F-F]-[-F+F+F]FF+[+F-F-F]-[-F+F+F]FF+[+F-F-F]-[-F+F+F]FF+[+F-F-F]-[-F+F+F]FF+[+F-F-F]-[-F+F+F]FF+[+F-F-F]-[-F+F+F]FF+[+F-F-F]-[-F+F+F]FF+[+F-F-F]-[-F+F+F]FF+[+F-F-F]-[-F+F+F]FF+[+F-F-F]-[-F+F+F]FF+[+F-F-F]-[-F+F+F]FF+[+F-F-F]-[-F+F+F]FF+[+F-F-F]-[-F+F+F]FF+[+F-F-F]-[-F+F+F]FF+[+F-F-F]-[-F+F+F]FF+[+F-F-F]-[-F+F+F]FF+[+F-F-F]-[-F+F+F]FF+[+F-F-F]-[-F+F+F]FF+[+F-F-F]-[-F+F+F]FF+[+F-F-F]-[-F+F+F]FF+[+F-F-F]-[-F+F+F]FF+[+F-F-F]-[-F+F+F]FF+[+F-F-F]-[-F+F+F]FF+[+F-F-F]-[-F+F+F]FF+[+F-F-F]-[-F+F+F]FF+[+F-F-F]-[-F+F+F]FF+[+F-F-F]-[-F+F+F]FF+[+F-F-F]-[-F+F+F]FF+[+F-F-F]-[-F+F+F]FF+[+F-F-F]-[-F+F+F]FF+[+F-F-F]-[-F+F+F]FF+[+F-F-F]-[-F+F+F]FF+[+F-F-F]-[-F+F+F]FF+[+F-F-F]-[-F+F+F]FF+[+F-F-F]-[-F+F+F]FF+[+F-F-F]-[-F+F+F]FF+[+F-F-F]-[-F+F+F]FF+[+F-F-F]-[-F+F+F]FF+[+F-F-F]-[-F+F+F]FF+[+F-F-F]-[-F+F+F]FF+[+F-F-F]-[-F+F+F]FF+[+F-F-F]-[-F+F+F]FF+[+F-F-F]-[-F+F+F]FF+[+F-F-F]-[-F+F+F]FF+[+F-F-F]-[-F+F+F]FF+[+F-F-F]-[-F+F+F]FF+[+F-F-F]-[-F+F+F]FF+[+F-F-F]-[-F+F+F]FF+[+F-F-F]-[-F+F+F]FF+[+F-F-F]-[-F+F+F]FF+[+F-F-F]-[-F+F+F]FF+[+F-F-F]-[-F+F+F]FF+[+F-F-F]-[-F+F+F]FF+[+F-F-F]-[-F+F+F]FF+[+F-F-F]-[-F+F+F]FF+[+F-F-F]-[-F+F+F]FF+[+F-F-F]-[-F+F+F]FF+[+F-F-F]-[-F+F+F]FF+[+F-F-F]-[-F+F+F]FF+[+F-F-F]-[-F+F+F]FF+[+F-F-F]-[-F+F+F]FF+[+F-F-F]-[-F+F+F]FF+[+F-F-F]-[-F+F+F]FF+[+F-F-F]-[-F+F+F]FF+[+F-F-F]-[-F+F+F]FF+[+F-F-F]-[-F+F+F]FF+[+F-F-F]-[-F+F+F]FF+[+F-F-F]-[-F+F+F]FF+[+F-F-F]-[-F+F+F]FF+[+F-F-F]-[-F+F+F]FF+[+F-F-F]-[-F+F+F]FF+[+F-F-F]-[-F+F+F]FF+[+F-F-F]-[-F+F+F]FF+[+F-F-F]-[-F+F+F]FF+[+F-F-F]-[-F+F+F]FF+[+F-F-F]-[-F+F+F]FF+[+F-F-F]-[-F+F+F]FF+[+F-F-F]-[-F+F+F]FF+[+F-F-F]-[-F+F+F]FF+[+F-F-F]-[-F+F+F]FF+[+F-F-F]-[-F+F+F]FF+[+F-F-F]-[-F+F+F]FF+[+F-F-F]-[-F+F+F]FF+[+F-F-F]-[-F+F+F]FF+[+F-F-F]-[-F+F+F]FF+[+F-F-F]-[-F+F+F]FF+[+F-F-F]-[-F+F+F]FF+[+F-F-F]-[-F+F+F]FF+[+F-F-F]-[-F+F+F]FF+[+F-F-F]-[-F+F+F]FF+[+F-F-F]-[-F+F+F]FF+[+F-F-F]-[-F+F+F]FF+[+F-F-F]-[-F+F+F]FF+[+F-F-F]-[-F+F+F]FF+[+F-F-F]-[-F+F+F]FF+[+F-F-F]-[-F+F+F]FF+[+F-F-F]-[-F+F+F]FF+[+F-F-F]-[-F+F+F]FF+[+F-F-F]-[-F+F+F]FF+[+F-F-F]-[-F+F+F]FF+[+F-F-F]-[-F+F+F]FF+[+F-F-F]-[-F+F+F]FF+[+F-F-F]-[-F+F+F]FF+[+F-F-F]-[-F+F+F]FF+[+F-F-F]-[-F+F+F]FF+[+F-F-F]-[-F+F+F]FF+[+F-F-F]-[-F+F+F]FF+[+F-F-F]-[-F+F+F]FF+[+F-F-F]-[-F+F+F]FF+[+F-F-F]-[-F+F+F]FF+[+F-F-F]-[-F+F+F]FF+[+F-F-F]-[-F+F+F]FF+[+F-F-F]-[-F+F+F]FF+[+F-F-F]-[-F+F+F]FF+[+F-F-F]-[-F+F+F]FF+[+F-F-F]-[-F+F+F]FF+[+F-F-F]-[-F+F+F]FF+[+F-F-F]-[-F+F+F]FF+[+F-F-F]-[-F+F+F]FF+[+F-F-F]-[-F+F+F]FF+[+F-F-F]-[-F+F+F]FF+[+F-F-F]-[-F+F+F]FF+[+F-F-F]-[-F+F+F]FF+[+F-F-F]-[-F+F+F]FF+[+F-F-F]-[-F+F+F]FF+[+F-F-F]-[-F+F+F]FF+[+F-F-F]-[-F+F+F]FF+[+F-F-F]-[-F+F+F]FF+[+F-F-F]-[-F+F+F]FF+[+F-F-F]-[-F+F+F]FF+[+F-F-F]-[-F+F+F]FF+[+F-F-F]-[-F+F+F]FF+[+F-F-F]-[-F+F+F]FF+[+F-F-F]-[-F+F+F]FF+[+F-F-F]-[-F+F+F]FF+[+F-F-F]-[-F+F+F]FF+[+F-F-F]-[-F+F+F]FF+[+F-F-F]-[-F+F+F]FF+[+F-F-F]-[-F+F+F]FF+[+F-F-F]-[-F+F+F]FF+[+F-F-F]-[-F+F+F]FF+[+F-F-F]-[-F+F+F]FF+[+F-F-F]-[-F+F+F]FF+[+F-F-F]-[-F+F+F]FF+[+F-F-F]-[-F+F+F]FF+[+F-F-F]-[-F+F+F]FF+[+F-F-F]-[-F+F+F]FF+[+F-F-F]-[-F+F+F]FF+[+F-F-F]-[-F+F+F]FF+[+F-F-F]-[-F+F+F]FF+[+F-F-F]-[-F+F+F]FF+[+F-F-F]-[-F+F+F]FF+[+F-F-F]-[-F+F+F]FF+[+F-F-F]-[-F+F+F]FF+[+F-F-F]-[-F+F+F]FF+[+F-F-F]-[-F+F+F]FF+[+F-F-F]-[-F+F+F]FF+[+F-F-F]-[-F+F+F]FF+[+F-F-F]-[-F+F+F]FF+[+F-F-F]-[-F+F+F]FF+[+F-F-F]-[-F+F+F]FF+[+F-F-F]-[-F+F+F]FF+[+F-F-F]-[-F+F+F]FF+[+F-F-F]-[-F+F+F]FF+[+F-F-F]-[-F+F+F]FF+[+F-F-F]-[-F+F+F]FF+[+F-F-F]-[-F+F+F]FF+[+F-F-F]-[-F+F+F]FF+[+F-F-F]-[-F+F+F]FF+[+F-F-F]-[-F+F+F]FF+[+F-F-F]-[-F+F+F]FF+[+F-F-F]-[-F+F+F]FF+[+F-F-F]-[-F+F+F]FF+[+F-F-F]-[-F+F+F]FF+[+F-F-F]-[-F+F+F]FF+[+F-F-F]-[-F+F+F]FF+[+F-F-F]-[-F+F+F]FF+[+F-F-F]-[-F+F+F]FF+[+F-F-F]-[-F+F+F]FF+[+F-F-F]-[-F+F+F]FF+[+F-F-F]-[-F+F+F]FF+[+F-F-F]-[-F+F+F]FF+[+F-F-F]-[-F+F+F]FF+[+F-F-F]-[-F+F+F]FF+[+F-F-F]-[-F+F+F]FF+[+F-F-F]-[-F+F+F]FF+[+F-F-F]-[-F+F+F]FF+[+F-F-F]-[-F+F+F]FF+[+F-F-F]-[-F+F+F]FF+[+F-F-F]-[-F+F+F]FF+[+F-F-F]-[-F+F+F]FF+[+F-F-F]-[-F+F+F]FF+[+F-F-F]-[-F+F+F]FF+[+F-F-F]-[-F+F+F]FF+[+F-F-F]-[-F+F+F]FF+[+F-F-F]-[-F+F+F]FF+[+F-F-F]-[-F+F+F]FF+[+F-F-F]-[-F+F+F]FF+[+F-F-F]-[-F+F+F]FF+[+F-F-F]-[-F+F+F]FF+[+F-F-F]-[-F+F+F]FF+[+F-F-F]-[-F+F+F]FF+[+F-F-F]-[-F+F+F]FF+[+F-F-F]-[-F+F+F]FF+[+F-F-F]-[-F+F+F]FF+[+F-F-F]-[-F+F+F]FF+[+F-F-F]-[-F+F+F]FF+[+F-F-F]-[-F+F+F]FF+[+F-F-F]-[-F+F+F]FF+[+F-F-F]-[-F+F+F]FF+[+F-F-F]-[-F+F+F]FF+[+F-F-F]-[-F+F+F]FF+[+F-F-F]-[-F+F+F]FF+[+F-F-F]-[-F+F+F]FF+[+F-F-F]-[-F+F+F]FF+[+F-F-F]-[-F+F+F]FF+[+F-F-F]-[-F+F+F]FF+[+F-F-F]-[-F+F+F]FF+[+F-F-F]-[-F+F+F]FF+[+F-F-F]-[-F+F+F]FF+[+F-F-F]-[-F+F+F]FF+[+F-F-F]-[-F+F+F]FF+[+F-F-F]-[-F+F+F]FF+[+F-F-F]-[-F+F+F]FF+[+F-F-F]-[-F+F+F]FF+[+F-F-F]-[-F+F+F]FF+[+F-F-F]-[-F+F+F]FF+[+F-F-F]-[-F+F+F]FF+[+F-F-F]-[-F+F+F]FF+[+F-F-F]-[-F+F+F]FF+[+F-F-F]-[-F+F+F]FF+[+F-F-F]-[-F+F+F]FF+[+F-F-F]-[-F+F+F]FF+[+F-F-F]-[-F+F+F]FF+[+F-F-F]-[-F+F+F]FF+[+F-F-F]-[-F+F+F]FF+[+F-F-F]-[-F+F+F]FF+[+F-F-F]-[-F+F+F]FF+[+F-F-F]-[-F+F+F]FF+[+F-F-F]-[-F+F+F]FF+[+F-F-F]-[-F+F+F]FF+[+F-F-F]-[-F+F+F]FF+[+F-F-F]-[-F+F+F]FF+[+F-F-F]-[-F+F+F]FF+[+F-F-F]-[-F+F+F]FF+[+F-F-F]-[-F+F+F]FF+[+F-F-F]-[-F+F+F]FF+[+F-F-F]-[-F+F+F]FF+[+F-F-F]-[-F+F+F]FF+[+F-F-F]-[-F+F+F]FF+[+F-F-F]-[-F+F+F]FF+[+F-F-F]-[-F+F+F]FF+[+F-F-F]-[-F+F+F]FF+[+F-F-F]-[-F+F+F]FF+[+F-F-F]-[-F+F+F]FF+[+F-F-F]-[-F+F+F]FF+[+F-F-F]-[-F+F+F]FF+[+F-F-F]-[-F+F+F]FF+[+F-F-F]-[-F+F+F]FF+[+F-F-F]-[-F+F+F]FF+[+F-F-F]-[-F+F+F]FF+[+F-F-F]-[-F+F+F]FF+[+F-F-F]-[-F+F+F]FF+[+F-F-F]-[-F+F+F]FF+[+F-F-F]-[-F+F+F]FF+[+F-F-F]-[-F+F+F]FF+[+F-F-F]-[-F+F+F]FF+[+F-F-F]-[-F+F+F]FF+[+F-F-F]-[-F+F+F]FF+[+F-F-F]-[-F+F+F]FF+[+F-F-F]-[-F+F+F]FF+[+F-F-F]-[-F+F+F]FF+[+F-F-F]-[-F+F+F]FF+[+F-F-F]-[-F+F+F]FF+[+F-F-F]-[-F+F+F]FF+[+F-F-F]-[-F+F+F]FF+[+F-F-F]-[-F+F+F]FF+[+F-F-F]-[-F+F+F]FF+[+F-F-F]-[-F+F+F]FF+[+F-F-F]-[-F+F+F]FF+[+F-F-F]-[-F+F+F]FF+[+F-F-F]-[-F+F+F]FF+[+F-F-F]-[-F+F+F]FF+[+F-F-F]-[-F+F+F]FF+[+F-F-F]-[-F+F+F]FF+[+F-F-F]-[-F+F+F]FF+[+F-F-F]-[-F+F+F]FF+[+F-F-F]-[-F+F+F]FF+[+F-F-F]-[-F+F+F]FF+[+F-F-F]-[-F+F+F]FF+[+F-F-F]-[-F+F+F]FF+[+F-F-F]-[-F+F+F]FF+[+F-F-F]-[-F+F+F]FF+[+F-F-F]-[-F+F+F]FF+[+F-F-F]-[-F+F+F]FF+[+F-F-F]-[-F+F+F]FF+[+F-F-F]-[-F+F+F]FF+[+F-F-F]-[-F+F+F]FF+[+F-F-F]-[-F+F+F]FF+[+F-F-F]-[-F+F+F]FF+[+F-F-F]-[-F+F+F]FF+[+F-F-F]-[-F+F+F]FF+[+F-F-F]-[-F+F+F]FF+[+F-F-F]-[-F+F+F]FF+[+F-F-F]-[-F+F+F]FF+[+F-F-F]-[-F+F+F]FF+[+F-F-F]-[-F+F+F]FF+[+F-F-F]-[-F+F+F]FF+[+F-F-F]-[-F+F+F]FF+[+F-F-F]-[-F+F+F]FF+[+F-F-F]-[-F+F+F]FF+[+F-F-F]-[-F+F+F]FF+[+F-F-F]-[-F+F+F]FF+[+F-F-F]-[-F+F+F]FF+[+F-F-F]-[-F+F+F]FF+[+F-F-F]-[-F+F+F]FF+[+F-F-F]-[-F+F+F]FF+[+F-F-F]-[-F+F+F]FF+[+F-F-F]-[-F+F+F]FF+[+F-F-F]-[-F+F+F]FF+[+F-F-F]-[-F+F+F]FF+[+F-F-F]-[-F+F+F]FF+[+F-F-F]-[-F+F+F]FF+[+F-F-F]-[-F+F+F]FF+[+F-F-F]-[-F+F+F]FF+[+F-F-F]-[-F+F+F]FF+[+F-F-F]-[-F+F+F]FF+[+F-F-F]-[-F+F+F]FF+[+F-F-F]-[-F+F+F]FF+[+F-F-F]-[-F+F+F]FF+[+F-F-F]-[-F+F+F]FF+[+F-F-F]-[-F+F+F]FF+[+F-F-F]-[-F+F+F]FF+[+F-F-F]-[-F+F+F]FF+[+F-F-F]-[-F+F+F]FF+[+F-F-F]-[-F+F+F]FF+[+F-F-F]-[-F+F+F]FF+[+F-F-F]-[-F+F+F]FF+[+F-F-F]-[-F+F+F]FF+[+F-F-F]-[-F+F+F]FF+[+F-F-F]-[-F+F+F]FF+[+F-F-F]-[-F+F+F]FF+[+F-F-F]-[-F+F+F]FF+[+F-F-F]-[-F+F+F]FF+[+F-F-F]-[-F+F+F]FF+[+F-F-F]-[-F+F+F]FF+[+F-F-F]-[-F+F+F]FF+[+F-F-F]-[-F+F+F]FF+[+F-F-F]-[-F+F+F]FF+[+F-F-F]-[-F+F+F]FF+[+F-F-F]-[-F+F+F]FF+[+F-F-F]-[-F+F+F]FF+[+F-F-F]-[-F+F+F]FF+[+F-F-F]-[-F+F+F]FF+[+F-F-F]-[-F+F+F]FF+[+F-F-F]-[-F+F+F]FF+[+F-F-F]-[-F+F+F]FF+[+F-F-F]-[-F+F+F]FF+[+F-F-F]-[-F+F+F]FF+[+F-F-F]-[-F+F+F]FF+[+F-F-F]-[-F+F+F]FF+[+F-F-F]-[-F+F+F]FF+[+F-F-F]-[-F+F+F]FF+[+F-F-F]-[-F+F+F]FF+[+F-F-F]-[-F+F+F]FF+[+F-F-F]-[-F+F+F]FF+[+F-F-F]-[-F+F+F]FF+[+F-F-F]-[-F+F+F]FF+[+F-F-F]-[-F+F+F]FF+[+F-F-F]-[-F+F+F]FF+[+F-F-F]-[-F+F+F]FF+[+F-F-F]-[-F+F+F]FF+[+F-F-F]-[-F+F+F]FF+[+F-F-F]-[-F+F+F]FF+[+F-F-F]-[-F+F+F]FF+[+F-F-F]-[-F+F+F]FF+[+F-F-F]-[-F+F+F]FF+[+F-F-F]-[-F+F+F]FF+[+F-F-F]-[-F+F+F]FF+[+F-F-F]-[-F+F+F]FF+[+F-F-F]-[-F+F+F]FF+[+F-F-F]-[-F+F+F]FF+[+F-F-F]-[-F+F+F]FF+[+F-F-F]-[-F+F+F]

最後に樹木の描画に当てはめてみる。第3階層の描画に1分ほどかかったので文字列操作とHashMapが重たい。しまった。

import java.util.HashMap;
import java.util.Iterator;
import java.util.Map;

float angle = 25;
String axiom = "F";
float depth = 0;
HashMap<String, String> rule;
void setup() {
  size(960, 540);
  colorMode(HSB, 360, 100, 100);
  rule = new HashMap<String, String>();
  rule.put("F", "FF+[+F-F-F]-[-F+F+F]");
}

void mousePressed() {
  depth++;
  generate();
  redraw();
}


void draw() {
  float len = 10;
  background(220,20,20);
  translate(width/2, height);
  stroke(0, 0, 100, 50);
  for (int i = 0; i < axiom.length(); i++) {
    String str = String.valueOf(axiom.charAt(i));
    if (str.equals("F")) {
      line(0, 0, 0, -len);
      translate(0, -len);
    } else if (str.equals("+")) {
      rotate(radians(angle));
    } else if (str.equals("-")) {
      rotate(-radians(angle));
    } else if (str.equals("[")) {
      pushMatrix();
    } else if (str.equals("]")) {
      popMatrix();
    }
  }
  resetMatrix();
  noLoop();
}

void generate() {
  for (int j = 0; j < depth; j++) {
    String str = "";
    for (int i = 0; i < axiom.length(); i++) {
      String s = String.valueOf(axiom.charAt(i));
      Iterator iterator = rule.entrySet().iterator();
      while (iterator.hasNext()) {
        Map.Entry entry = (Map.Entry)iterator.next();
        String keyName = (String)entry.getKey();
        String valName = (String)entry.getValue();
        if (s.equals(keyName)) {
          str += valName;
        }else{
          str += s;
        }
      }
    }
    axiom = str;
  }
  //println(axiom);
}

リファレンス