Problema
Você recebe uma sequência de bolas coloridas (vermelho R
e verde G
). Uma dessas seqüências possíveis é:
RGGGRRGGRGRRRGGGRGRRRG
No menor número de movimentos possível, você deve fazer com que cada bola tenha uma cor diferente dos seus vizinhos (ou seja, a sequência se alterna).
RGRGRGRGRGRGRGRGRGRGRG
Você deve escrever um programa que possa converter uma sequência não ordenada (neste caso, uma sequência) com números iguais de "R" e "G" em uma sequência na qual os itens se alternam. Um exemplo de sessão está abaixo, para um algoritmo ingênuo ( <
é entrada no programa, >
é saída. Não é necessário incluir os pontos de intercalação na entrada ou saída).
< RGGGRRGGRGRRRGGGRGRRRG
> RGGRGRGGRGRRRGGGRGRRRG
> RGRGGRGGRGRRRGGGRGRRRG
> RGRGRGGGRGRRRGGGRGRRRG
> RGRGRGGRGGRRRGGGRGRRRG
> RGRGRGGRGRGRRGGGRGRRRG
> RGRGRGGRGRGRGRGRGGRRRG
> RGRGRGGRGRGRGRGRGRGRRG
> RGRGRGGRGRGRGRGRGRGRGR
> RGRGRGRGGRGRGRGRGRGRGR
> RGRGRGRGRGGRGRGRGRGRGR
> RGRGRGRGRGRGGRGRGRGRGR
> RGRGRGRGRGRGRGGRGRGRGR
> RGRGRGRGRGRGRGRGGRGRGR
> RGRGRGRGRGRGRGRGRGGRGR
> RGRGRGRGRGRGRGRGRGRGGR
> RGRGRGRGRGRGRGRGRGRGRG (15 moves)
Outra possibilidade é emitir "5,7", por exemplo, para indicar a troca das posições 5 e 7.
Você pode posicionar quer vermelho ou verde em primeiro lugar, e você não tem que ser consistente. Cada sequência terá o mesmo comprimento que qualquer outra sequência.
Você pode trocar apenas duas letras em cada movimento (elas não precisam ser adjacentes).
Critérios Vencedores
O programa deve mostrar cada etapa do processo de classificação. O programa que faz o menor número total de movimentos para todas as seqüências abaixo, vence. Se houver um empate, o código mais curto vencerá.
String de entrada
As seguintes seqüências de caracteres serão usadas para testar os programas:
GGGGGGGGGGRRRRRRRRRR
GGRRGGRRGGRRGGRRGGRR
RRGGGGRRRRGGGGRRRRGG
GRRGRGGGGRRRGGGGRRRR
GRGGGRRRRGGGRGRRGGRR
RGRGRGRGRGRGRGRGRGRG
A última sequência deve resultar em zero movimentos.