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 […]