Pues Josech lanzó en Facebook un reto de hacer un programa en una sola linea que sume los valores de un array multi-dimensional, así que acepté el reto.
Código compacto y con variables abreviadas:
perl -e '@A=[1,2,[3,4],5,6,[7,8,[9,10,[11,[12,13,[14,15,16]],17,18],19]],20];sub c{my$r=shift;my$s=0;if($r=~/array/i){for(my$i=0;$i<=(@{$r}-1);$i++){$s+=c($r->[$i]);}}else{$s+=$r;}return$s;}print c(\@A)."\n";'
El código mas bonito esta aca:
#!/usr/bin/perl
use strict;
use Data::Dumper;
my @Array = [1,2,[3,4],5,6,[7,8,[9,10,[11,[12,13,[14,15,16]],17,18],19]],20];
sub Cuenta_Array {
my $ref_array = shift;
my $sum = 0;
if ($ref_array =~ /array/i) {
for (my $i=0; $i <= (@{ $ref_array } - 1) ; $i++) {
$sum += Cuenta_Array($ref_array->[$i]);
}
}
else {
$sum += $ref_array;
}
return $sum;
}
print Dumper(\@Array) . "\n";
print Cuenta_Array(\@Array) . "\n";
El uso de Data::Dumper es solo para desplegar el arreglo y vean su estructura.
El resto es un poco de recursividad 🙂
Leave a Reply
You must be logged in to post a comment.