(На основе этой проблемы Math.SE , которая также предоставляет некоторую графику)
У меня есть палка, которая выглядит примерно так:
Я хочу, чтобы это выглядело примерно так:
Однако я не опытный художник, поэтому, прежде чем я начну такой амбициозный проект «Сделай сам», я хочу убедиться, что я не над головой.
Ваша программа должна сказать мне, сколько этапов задействовано в рисовании этой флешки. Каждый шаг включает в себя рисование сплошной области сплошным цветом, который покрывает предыдущие слои краски. Для приведенного выше примера я мог бы нарисовать левую половину синим, правую половину красным, а затем две отдельные зеленые области в общей сложности на 4 шага (зеленый не непрерывно окрашивается).
Вот это в ASCII:
------
bbb---
bbbrrr
bgbrrr
bgbrgr
Есть пара разных способов покрасить эту палку и в итоге получить тот же результат. Однако меня интересует только оценка времени, которая составляет четыре шага.
Цель
Ваша программа должна вывести минимальное количество шагов, необходимых для рисования флешки с заданной цветовой схемой. Схема рисования будет иметь вид строки символов, а на выходе будет число. Это код гольф. Кратчайшая программа выигрывает.
вход
Ваша программа получит схему раскраски палки в виде цепочки букв. Каждая уникальная буква (с учетом регистра) представляет уникальный цвет.
YRYGR
grG
GyRyGyG
pbgbrgrp
hyghgy
Выход
Эти цифры являются наименьшим количеством шагов, необходимых для рисования палочек.
4
3
4
5
4
Пояснения
Вот так я и пришел к вышеприведенным цифрам. Ваша программа не должна выводить это:
-----
YYY--
YRY--
YRYG-
YRYGR
---
g--
gr-
grG
-------
GGGGGGG
GyyyGGG
GyRyGGG
GyRyGyG
--------
pppppppp
pbbbpppp
pbbbrrrp
pbgbrrrp
pbgbrgrp
------
-yyyyy
-ygggy
hygggy
hyghgy
Изменить: я добавлю больше тестов, если они окажутся более сложными.