(Basé sur ce problème Math.SE , qui fournit également des graphiques)
J'ai un bâton qui ressemble un peu à ceci:

Je veux que ça ressemble un peu à ceci:

Je ne suis pas un peintre expert, cependant, avant de commencer un projet de bricolage aussi ambitieux, je veux m'assurer que je ne suis pas au-dessus de ma tête.
Votre programme devrait me dire combien d'étapes sont nécessaires pour peindre ce bâton. Chaque étape consiste à peindre une zone continue avec une couleur unie, qui recouvre les couches précédentes de peinture. Pour l'exemple ci-dessus, je pourrais peindre la moitié gauche bleue, la moitié droite rouge, puis les deux zones vertes séparées pour un total de 4 étapes (le vert n'est pas continuellement peint).

Le voici en ASCII:
------
bbb---
bbbrrr
bgbrrr
bgbrgr
Il y a deux façons différentes de peindre ce bâton et de se retrouver avec le même résultat. Cependant, je ne m'intéresse qu'à l'estimation du temps, qui est en quatre étapes.
Objectif
Votre programme doit produire le nombre minimum d'étapes nécessaires pour peindre un bâton avec une palette de couleurs donnée. Le schéma de peinture sera sous la forme d'une chaîne de caractères, tandis que la sortie sera un nombre. C'est le golf de code. Le programme le plus court gagne.
Contribution
Votre programme recevra le schéma de coloration d'un bâton sous la forme d'une chaîne de lettres. Chaque lettre unique (sensible à la casse) représente une couleur unique.
YRYGR
grG
GyRyGyG
pbgbrgrp
hyghgy
Production
Ces nombres sont le moins d'étapes nécessaires pour peindre les bâtons.
4
3
4
5
4
Explications
C'est ainsi que je suis arrivé aux chiffres ci-dessus. Votre programme n'a pas besoin de produire ceci:
-----
YYY--
YRY--
YRYG-
YRYGR
---
g--
gr-
grG
-------
GGGGGGG
GyyyGGG
GyRyGGG
GyRyGyG
--------
pppppppp
pbbbpppp
pbbbrrrp
pbgbrrrp
pbgbrgrp
------
-yyyyy
-ygggy
hygggy
hyghgy
Edit: je vais ajouter plus de cas de test s'ils s'avèrent être des cas de test plus difficiles.