$ cat pm_1198523_2.pl #!env perl use strict; use warnings; my ($R, $C, $sz); # Row, Column and element size $sz = 5; for my $r ([0,0], [1,0], [1,1], [2,0], [2,1], [2,2], [12,5]) { ($R,$C) = @$r; my $seek_addr = seek_addr($R, $C, $sz); print "[$R,$C] => $seek_addr\n"; } sub seek_addr { my ($R, $C, $sz) = @_; ($R,$C) = ($C,$R) if $R < $C; my $slot = $R*($R+1)/2 + $C; return $sz * $slot; } $ perl pm_1198523_2.pl [0,0] => 0 [1,0] => 5 [1,1] => 10 [2,0] => 15 [2,1] => 20 [2,2] => 25 [12,5] => 415