>>712 Perl5

use feature qw{signatures say};
sub f($n, $c, @s) {
 if (1 < $n) {
  $c, f($n - 1, @s);
 } elsif (1 == $n) {
  $c, f(0, $c, @s);
 } else {
  $c, f(0, $c, splice @s, 1) if $c eq $s[0];
 }
}

say f 7, qw[A A B B B C C D D D E];
say f 3, qw[A A B B B];

※見易くするためインデントは全角スペースに置換してあります。


実行結果

$ perl 21_712.pl
AABBBCC
AABBB