(Виходячи з цієї проблеми 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
Редагувати: Я додаю більше тестових випадків, якщо вони виявляться складнішими тестовими.