Curva de Hilbert

Difícil

porEWErick Weil

A curva de Hilbert é um fractal para preencher o espaço, onde cada iteração irá ficar mais detalhada.

5 primeiras iterações da curva de Hilbert.

Para ser implementada com código pode-se utilizar uma definição recursiva a partir das regras abaixo (L-sistema).

Alfabeto : A, B

Constantes : F + −

Axioma : A

Regras de produção:

  • A → +BF−AFA−FB+
  • B → −AF+BFB+FA−

Aqui, "F" significa "avançar", "+" significa "virar à esquerda 90°", "-" significa "virar à direita 90°" (veja gráficos de tartaruga), e "A" e "B" são ignorados durante o desenho.

A iteração 0 você chama A e não executa nenhuma outra função, ficando "+F-F-F+", com uma caneta você à coloca no papel e segue as etapas, começando olhando para a direita:

  1. + Vire à esquerda 90º
  2. F Frente
  3. - Vire à direita 90º
  4. F Frente 
  5. - Vire à direita 90º
  6. F Frente
  7. + Vire à esquerda 90º

Ao final você tem a primeira iteração que é um U de ponta cabeça.

Para as próximas iterações você continua chamando recursivamente as funções entre si, criando uma sequência de etapas cada vez maior na medida que aumenta-se o limite da recursão, mas as etapas elementares são as mesmas.

Formatação da saída

Veja nos exemplos de teste que deve-se utilizar os caracteres especiais para desenhar a curva, que são:

  • Linha reta horizontal: ─
  • Linha rata vertical: │
  • Canto superior esquerdo: ┌
  • Canto superior direito: ┐
  • Canto inferior esquerdo: └
  • Canto inferior direito: ┘

Não deve escrever mais nada além dos caracteres da curva, nem um espaço a mais no final de cada linha.

Testes públicos

Entrada

0

Saída esperada

┌─┐
┘ └

Entrada

1

Saída esperada

┌─┐ ┌─┐
│ └─┘ │
└─┐ ┌─┘
──┘ └──

Entrada

2

Saída esperada

┌─┐ ┌─┐ ┌─┐ ┌─┐
│ └─┘ │ │ └─┘ │
└─┐ ┌─┘ └─┐ ┌─┘
┌─┘ └─────┘ └─┐
│ ┌───┐ ┌───┐ │
└─┘ ┌─┘ └─┐ └─┘
┌─┐ └─┐ ┌─┘ ┌─┐
┘ └───┘ └───┘ └