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 🙂
Cada punto y coma es una línea nueva. Ese código tiene varias líneas.
Estás como con el instalador de Gentoo de Cicloid en una sola línea.