What a clever inefficiency! I was trying to find a way
to generate a list of numbers that was at least as big as
each list, but failed...
With ?: I can save some, and shaving with map$foo,@list
tricks I can save some more. This brings the safe version
down to 48 characters.
sub Mix {
map{my$i=$_;map$i<@$_?$$_[$i]:(),@_}0..map@$_,@_
}
That matches what was done unsafely before. But
unfortunately for sanity's sake observe the following
33 character entry:
sub Mix {
map{splice@$_,0,1}map@_,map@$_,@_
}
I have written saner code...
UPDATE
Saved 3 chars on the unsafe example, there is no need
for a nice numerical list when I will be just converting
the elements...
UPDATE 2
Sheesh. And the safe example can be modified to the
rather bizarre 45 character beast:
sub Mix {
map{splice@$_,0,1}map@_,map@$_,@_=map[@$_],@_
}
UPDATE 3
I give up on shrinking this. However I have 4 variations
on the key 33 char sub. In terms of efficiency of
execution, the following wins:
sub Mix {
map{map{splice@$_,0,1}(@_)x@$_}@_
}
So that is (barring the unexpected) my final answer. |