#Mathematica, 53 bytes
Join@@(Reverse[Plus@@@#~Partition~UpTo@2]&/@Split@#)&
#Explanation
Split@#
Split the input into sublists consisting of runs of identical elements. i.e. {2, 2, 2, 4, 8, 8}
becomes {{2, 2, 2}, {4}, {8, 8}}
.
#~Partition~UpTo@2
Partition each of the sublist into partitions length at most 2. i.e. {{2, 2, 2}, {4}, {8, 8}}
becomes {{{2, 2}, {2}}, {{4}}, {{8, 8}}}
.
Plus@@@
Total each partition. i.e. {{{2, 2}, {2}}, {{4}}, {{8, 8}}}
becomes {{4, 2}, {4}, {16}}
.
Reverse
Reverse the results because Mathematica's Partition
command goes from left to right, but we want the partitions to be in other direction. i.e. {{4, 2}, {4}, {16}}
becomes {{2, 4}, {4}, {16}}
.
Join@@
Flatten the result. i.e. {{2, 4}, {4}, {16}}
becomes {2, 4, 4, 16}
.