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 🙂

Author: El Pop

Fernando "El Pop" Romo Nació y creció en la Ciudad de México, estudió y pasó de noche la carrera de Física en la Facultad de Ciencias de la UNAM, en su crisis existencial cursó algo de Ingeniería Electrónica en la UAM. En el pasado trabajó (o eso decía) en el Área de Ingeniería de Sistemas de Banamex, del cual harto del método laboral del banco, renuncia y pone su primera empresa de indias conocida como "Físicos Ingenieros y Matemáticos en Concertación, S.A. de C.V." (FIMAT), por razones de sanidad fiscal la cierra y abre la empresa "Origen de Sistemas, S.A. de C.V.", la cual vende y se va a trabajar a Acer Computec Latino América, toma cargo de la dirección de sistemas y lleva a cabo proyectos en la región. En una nueva crisis existencial, decide dejar Acer y abrir un portal dedicado al Software Libre llamado "La Cofradia Digital". Actualmente es presidente del Grupo de usuarios de Linux de México, A.C. (cargo para el cual ya se considera viejo), Director General de la empresa "Incuvox, S.A. de C.V.", Director de Voipcamp, S.C. y cuando le queda tiempo libre trabaja en algo que le permita mantener a sus hijos.

Leave a Reply