La Cofradía Digital » Blog Archive » Reto “One line” de Josech

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 |     358 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

http://cofradia.org/feed/">Entries (RSS) | Comments (RSS)