Reto “One line” de Josech

3.7
(3)

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 🙂

How useful was this post?

Click on a star to rate it!

Average rating 3.7 / 5. Vote count: 3

No votes so far! Be the first to rate this post.

One thought on “Reto “One line” de Josech

Leave a Reply