Novas arvorezinhas (1.0 e 2.0) em Perl
A arvorezinha em Perl que existe, não desenha a arvorezinha toda, com código escrito por quem faz o código da arvorezinha. Na minha opinião isso não respeitava o standard. Como tal achei que devia fazer uma arvorezinha como deve ser em Perl:
A versão 1.0:
print "*"x$_,"\n" for(1 .. 5);
Para este não ser um post demasiado parvo. Resolvi fazer uma arvorezinha em versão 2.0. em Perl. Inspirei-me no código do falso, mas não consegui resolver o bug do tronco (também não tentei muito):
use 5.010; use strict; use warnings; # I'm not playing Perl Golf! our $RAMO = "*"; our $ESPACO = qq/ /; our $TRONCO = "#"; run(); sub run { my $altura = $ARGV[0] || 0; desenha_ramos($altura); desenha_tronco($altura); } sub desenha_ramos { my ($altura) = @_; for(1 .. $altura) { my $linha = desenha_elemento(1, ($altura - $_), $ESPACO); $linha .= $RAMO for( 1 .. (($_ * 2) - 1) ); say $linha; } } sub desenha_tronco { my ($altura) = @_; my $largura = ($altura * 2) - 1; $altura = ($altura / 2); for(1 .. $altura) { if($altura % 2) { my $sombra = desenha_elemento(0, (($largura / 4) - 1), $ESPACO); my $tronco = desenha_elemento(0, (($largura / 2) - 1), $TRONCO); say $sombra.$tronco; } else { my $sombra = desenha_elemento(0, ($largura / 4), $ESPACO); my $tronco = desenha_elemento(1, (($largura / 2) - 1), $TRONCO); say $sombra.$tronco; } } } sub desenha_elemento { my ($min, $max, $tipo_elemento) = @_; my $elemento = $tipo_elemento; $elemento = sprintf("%s%s", $elemento, $tipo_elemento) for($min .. $max); return $elemento; }
falta a prova dos 9...
[…] is even and when it’s odd. It’s a sql version of the formulas present in the reference implementation. Unfortunately it depends heavily on the connect by level which isn’t part of MySQL or […]