Problema
Te dan una secuencia de bolas de colores (rojo R
y verde G
). Una de esas posibles secuencias es:
RGGGRRGGRGRRRGGGRGRRRG
En el menor número de movimientos posible, debe hacerlo de modo que cada bola tenga un color diferente al de sus vecinos (es decir, la secuencia se alterna).
RGRGRGRGRGRGRGRGRGRGRG
Debe escribir un programa que pueda convertir una secuencia desordenada (en este caso, una cadena) con números iguales de "R" y "G" en una secuencia donde los elementos se alternan. A continuación se muestra una sesión de ejemplo, para un algoritmo ingenuo ( <
se ingresa al programa, >
se emite. No es necesario incluir los puntos en la entrada o salida).
< RGGGRRGGRGRRRGGGRGRRRG
> RGGRGRGGRGRRRGGGRGRRRG
> RGRGGRGGRGRRRGGGRGRRRG
> RGRGRGGGRGRRRGGGRGRRRG
> RGRGRGGRGGRRRGGGRGRRRG
> RGRGRGGRGRGRRGGGRGRRRG
> RGRGRGGRGRGRGRGRGGRRRG
> RGRGRGGRGRGRGRGRGRGRRG
> RGRGRGGRGRGRGRGRGRGRGR
> RGRGRGRGGRGRGRGRGRGRGR
> RGRGRGRGRGGRGRGRGRGRGR
> RGRGRGRGRGRGGRGRGRGRGR
> RGRGRGRGRGRGRGGRGRGRGR
> RGRGRGRGRGRGRGRGGRGRGR
> RGRGRGRGRGRGRGRGRGGRGR
> RGRGRGRGRGRGRGRGRGRGGR
> RGRGRGRGRGRGRGRGRGRGRG (15 moves)
Otra posibilidad es generar "5,7", por ejemplo, para indicar el intercambio de las posiciones 5 y 7.
Usted puede colocar ya sea rojo o verde en primer lugar, y usted no tiene que ser coherente. Cada secuencia tendrá la misma longitud que cualquier otra secuencia.
Solo puede intercambiar dos letras en cada movimiento (no es necesario que sean adyacentes).
Criterios ganadores
El programa debe mostrar cada paso del proceso de clasificación. El programa que realiza la menor cantidad de movimientos totales para todas las cadenas a continuación, gana. Si hay un empate, el código más corto ganará.
Cadenas de entrada
Las siguientes cadenas se utilizarán para probar los programas:
GGGGGGGGGGRRRRRRRRRR
GGRRGGRRGGRRGGRRGGRR
RRGGGGRRRRGGGGRRRRGG
GRRGRGGGGRRRGGGGRRRR
GRGGGRRRRGGGRGRRGGRR
RGRGRGRGRGRGRGRGRGRG
La última secuencia debería resultar en cero movimientos.