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. 🦋
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 comi--
. 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áveln
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.
## 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.
* *
** **
*** ***
**** ****
**********
**********
**** ****
*** ***
** **
* *
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.
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.
## 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 alines
, obtendo assim o resultado final.
*
***
*****
*******
*******
*****
***
*
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.
Top comments (0)