Patterns no Terminal: Desvende a Magia da Arte ASCII com Star Pattern, Number Pattern e Mais! Usando Dart 🔵💙
Enzo Lanze
Posted on April 29, 2024
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.
💖 💪 🙅 🚩
Enzo Lanze
Posted on April 29, 2024
Join Our Newsletter. No Spam, Only the good stuff.
Sign up to receive the latest update from our blog.
Related
programming Patterns no Terminal: Desvende a Magia da Arte ASCII com Star Pattern, Number Pattern e Mais! Usando Dart 🔵💙
April 29, 2024