my (@a, %h);
$_ = '1:1,2:1,3:2,500:2,505:1';
#234567890#234567890#234567890#234567890#234567890#234567890
# 47 characters ...
%h=map{@@=/[^:]+/g;$a[$#a+1]=$@[0];@@}/[^,]+/g;
# 44 ...
%h=map{@@=/[^:]+/g;push@a,$@[0];@@}/[^,]+/g;
# Based on duff's whimsy above ... 42 characters
%h=@a=/[^:,]+/g;@a=@a[grep!($_%2),0..$#a];
# Further whimsy ... 29 characters
%h=/[^:,]+/g;@a=/([^,:]+):/g;
Rules:
- You can assume all the code above the counting line.
- Bonus points if you run under strict and warnings.
Being right, does not endow the right to be rude; politeness costs nothing. Being unknowing, is not the same as being stupid. Expressing a contrary opinion, whether to the individual or the group, is more often a sign of deeper thought than of cantankerous belligerence. Do not mistake your goals as the only goals; your opinion as the only opinion; your confidence as correctness. Saying you know better is not the same as explaining you know better.
| [reply] [d/l] |
If you convert my answer to use short variable names and remove the ?: you get 44 relevant chars
#234567890#234567890#234567890#234567890#234567890#234567890
s/(\d+):(\d+)(,|$)/$h{$1}=$2;push(@a,$1)/ge;
| [reply] [d/l] |
| [reply] [d/l] |
I'm not a golfer, but...
tr/:/,/;%h=eval;@a=keys%h;
Update
y/:/,/;%h=eval;@a=keys%h;
Update 2
If the ordering of @a is important, how about
@a=/(\d+):/g;y/:/,/;%h=eval;
| [reply] [d/l] [select] |
This doesn't preserve the order of the keys. That's a problem.
Being right, does not endow the right to be rude; politeness costs nothing. Being unknowing, is not the same as being stupid. Expressing a contrary opinion, whether to the individual or the group, is more often a sign of deeper thought than of cantankerous belligerence. Do not mistake your goals as the only goals; your opinion as the only opinion; your confidence as correctness. Saying you know better is not the same as explaining you know better.
| [reply] |
| [reply] |