Patterns no Terminal: Desvende a Magia da Arte ASCII com Star Pattern, Number Pattern e Mais! Usando Dart 🔵💙
Tags: programming, dart, beginners, braziliandevs
Published: 2024-04-29 16:34:59


## Olá, Bugmakers! Tudo bem? Hoje, vamos desvendar o mundo dos patterns, algoritmos que transformam seu terminal em uma tela de arte! Preparem-se para criar desde estrelinhas brilhantes (Star Pattern) ✨ até números mágicos (Number Pattern)!  E para começar, vamos desenhar uma borboleta encantadora (Butterfly Pattern)!

### Este pattern cria uma linda borboleta usando estrelas (como o nome sugere) no seu terminal. 🦋

```dart
main() {
  int n = 5;

  for (var i = 1; i <= n; i++) {
    for (int j = 1; j <= i; j++) {
      stdout.write("*");
    }

    for (int k = 1; k <= 2 * (n - i); k++) {
      stdout.write(" ");
    }

    for (var l = 1; l <= i; l++) {
      stdout.write("*");
    }
    print("");
  }
  
  for (var i = n; i >= 1; i--) {
    for (int j = 1; j <= i; j++) {
      stdout.write("*");
    }

    for (int k = 1; k <= 2 * (n - i); k++) {
      stdout.write(" ");
    }

    for (var l = 1; l <= i; l++) {
      stdout.write("*");
    }
    print("");
  }
}

```

- Como podemos ver, esse é um código bem extenso. Temos duas partes: na primeira, iteramos com `i++`, e na segunda, decrementamos com `i--`. O restante do código é igual nas duas partes. Não vou explicar o fluxo completo aqui, pois o post ficaria muito extenso. No entanto, é importante entender que a variável `n` representa a quantidade de linhas que serão impressas no terminal. Isso ficará mais claro em outros exemplos, onde utilizei o nome lines. Neste exemplo, vamos analisar a conta matemática para imprimir os espaços em branco. Observando os loops, a estrutura for parece simples para quem já está familiarizado com ela. Vejamos a primeira conta como exemplo.
```math
## primeira iteração
5 - 1 = 4
2 x 4 = 8

## segunda
5 - 2 = 3 
2 x 3 = 6

## terceira
5 - 3 = 2
2 x 2 = 4

## quarta 
5 - 4 = 1
2 x 1 = 2

## 5 e ultima
5 - 5 = 0
2 x 0 = 0
``` 
Pronto, o primeiro resultado deu 8. Ou seja, se você quiser contar os espaços, temos 8 espaços entre a estrela da esquerda e a da direita neste primeiro loop. Lembrando que quem imprime as estrelas são os laços J e L.
 ```bash
*        *
**      **
***    ***
****  ****
**********
**********
****  ****
***    ***
**      **
*        *
```

### Agora, vamos para o Diamond Pattern! Como o nome sugere, este pattern imprime um diamante no seu terminal. Embora seja mais simples que o Butterfly Pattern, a lógica é a mesma: loops para linhas, espaços em branco e estrelas.

```dart
main() {
  int lines = 4;

  for (var i = 1; i <= lines; i++) {
    for (var j = 1; j <= lines - i; j++) {
      stdout.write(" ");
    }
    for (int k = 1; k <= 2 * i - 1; k++) {
      stdout.write("*");
    }
    print("");
  }

  for (var i = lines; i >= 1; i--) {
    for (var j = 1; j <= lines - i; j++) {
      stdout.write(" ");
    }
    for (int k = 1; k <= 2 * i - 1; k++) {
      stdout.write("*");
    }
    print("");
  }
}

```

Podemos ver que o loop `k` possui uma conta aritmética para imprimir as estrelas. Se você analisar, verá que a conta está correta. Na primeira iteração, o i vale 1 e a conta fica fácil. Vejamos o exemplo.
```math
## primeira iteração
i = 1 
2 x i - 1 = 1

## segunda
i = 2 
2 x i - 1 = 3

## terceira

i = 3
2 x i - 1 = 5

# quarta e ultima
i = 4 
2 x i - 1 = 7

```
- Este resultado é a primeira parte do diamante. A segunda parte consiste em decrementar nosso `i` até que ele seja igual a `lines`, obtendo assim o resultado final.
```bash
   *
  ***
 *****
*******
*******
 *****
  ***
   *
```

#### Chegamos ao fim deste post! Ainda vou pegando o ritmo de como fazer postagem, mas ainda há muitos outros padrões que quero abordar, como o "hollow rectangle". Prometo trazer mais conteúdo sobre algoritmos em Dart para enriquecer nossa comunidade. E quando eu desenvolver um projeto legal, prometo publicar aqui no dev.to o passo a passo completo. Até a próxima, devs!

qualquer explicação errada que eu tenha me equivocado, deixe aqui nos comentários, vamos aprender juntos. 👊🏻💙

- Escrito por Enzo Lanzellotti.
- Revisado pelo Gemini.