(Com base neste problema Math.SE , que também fornece alguns gráficos)
Eu tenho um stick que fica assim:
Eu quero que fique assim:
No entanto, não sou um pintor especialista, portanto, antes de iniciar um projeto tão ambicioso de bricolage, quero ter certeza de que não estou enlouquecendo.
Seu programa deve me dizer quantas etapas estão envolvidas na pintura desse bastão. Cada etapa envolve pintar uma área contínua com uma cor sólida, que cobre as camadas anteriores de tinta. No exemplo acima, pude pintar a metade esquerda azul, a metade direita vermelha e as duas áreas verdes separadas por um total de 4 etapas (a verde não é pintada continuamente).
Aqui está em ASCII:
------
bbb---
bbbrrr
bgbrrr
bgbrgr
Existem algumas maneiras diferentes de pintar esse bastão e acabar com o mesmo resultado. No entanto, estou interessado apenas na estimativa de tempo, que é de quatro etapas.
Objetivo
Seu programa deve produzir o número mínimo de etapas necessárias para pintar um pedaço de pau com um determinado esquema de cores. O esquema de pintura será na forma de uma sequência de caracteres, enquanto a saída será um número. Isso é código de golfe. O programa mais curto vence.
Entrada
Seu programa receberá o esquema de cores para um bastão na forma de uma sequência de letras. Cada letra exclusiva (diferencia maiúsculas de minúsculas) representa uma cor única.
YRYGR
grG
GyRyGyG
pbgbrgrp
hyghgy
Resultado
Esses números são o menor número de etapas necessárias para pintar os palitos.
4
3
4
5
4
Explicações
Foi assim que cheguei aos números acima. Seu programa não precisa produzir isso:
-----
YYY--
YRY--
YRYG-
YRYGR
---
g--
gr-
grG
-------
GGGGGGG
GyyyGGG
GyRyGGG
GyRyGyG
--------
pppppppp
pbbbpppp
pbbbrrrp
pbgbrrrp
pbgbrgrp
------
-yyyyy
-ygggy
hygggy
hyghgy
Editar: adicionarei mais casos de teste se eles se revelarem mais difíceis.