Reto “One line” de Josech

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 🙂


0 votes, average: 0.00 out of 50 votes, average: 0.00 out of 50 votes, average: 0.00 out of 50 votes, average: 0.00 out of 50 votes, average: 0.00 out of 5 (0 votes, average: 0.00 out of 5)
You need to be a registered member to rate this post.
Loading...
Perl, Programacion | RSS 2.0 |     119 views

RSS feed

Comments »

No comments yet.

Name (required)
E-mail (required - never shown publicly)
URI
Your Comment (smaller size | larger size)
You may use <a href="" title=""> <abbr title=""> <acronym title=""> <b> <blockquote cite=""> <cite> <code> <del datetime=""> <em> <i> <q cite=""> <s> <strike> <strong> in your comment.

Trackback responses to this post