Implemente um gerador de gráficos usando sistemas de Lindenmayer. Seu programa deve ler uma descrição de um L-system e produzir uma imagem SVG. Seu programa aceitará conexões TCP. Cada conexão pode dar os seguintes comandos:
(Onde "programa" é a descrição de um L-system)
Um L-system é semelhante a uma gramática gerativa; este artigo descreve de maneira razoável o que é um L-system. Há também este, e a entrada na Wikipedia.
O primeiro exemplo do primeiro artigo mencionado nesta página é:
A A -> I[+A][-A]IA I -> II
Onde I significa "desenhe um segmento reto", e + significa "inclua o próximo a direita".
O L-system acima determina a geração de uma árvore. O sistema inicia com o axioma A. Para desenvolver um A, o sistema deve gerar um segmento reto, incluir dois ramos (um à direita, [+A} e um à esquerda, [-A]), e depois incluir mais um segmento reto. Finalmente, deve incluir no final um outro sistema descrito recursivamente como A.
Usando S-expressões, poderíamos descrever este sistema assim:
(l-system 'A '(A (I (+ A) (- A) I A)) '(I II))
Deve haver uma maneira de especificar o ângulo entre ramos. Por exemplo,
(l-system 'A '(A (I (1.0472 A) (-0.78540 A) I A)) '(I II))
Os ramos à direita serão construídos fazendo um ângulo de π/3 = 1.0472 com o ramo central; já os da esquerda terão ângulo de π/4 = 0.78540.
Há muito mais sobre sistemas de Lindenmayer. Havendo interesse, consulte o livro (que hoje é livre) "The algorithmic Beauty of Plants".