Biorąc pod uwagę obraz, który ma tylko czarno-białe piksele i lokalizację (x, y), która jest białym pikselem, pokoloruj białe piksele na podstawie ich minimalnej odległości na Manhattanie od (x, y) na ścieżce, która obejmuje tylko przemieszczenie innych białych pikseli.
Odcienia barwnego pikseli muszą być proporcjonalne do odległości od (x, y), a więc na pikselu (x, y) będą miały odcień w zakresie od 0 ° (czysty kolor czerwony), a piksele najdalej z (x, y), będzie miał odcień 360 ° (także czerwony), a pozostałe odcienie będą płynnie i liniowo mieszać się między nimi. Nasycenia i wartość musi być zarówno 100%.
Jeśli biały piksel nie jest podłączony do (x, y) przez inne białe piksele, musi pozostać biały.
Detale
- Dane wejściowe będą składały się z nazwy pliku obrazu lub nieprzetworzonych danych obrazu oraz liczb całkowitych xiy.
- Obraz wyjściowy można zapisać do pliku lub przesłać strumieniowo na standardowe wyjście w dowolnym standardowym formacie pliku obrazu lub po prostu wyświetlić.
- Wartość x wynosi 0 na skrajnych lewych pikselach i zwiększa się w prawo. Wartość y wynosi 0 w najwyższych pikselach i rośnie w dół. (x, y) zawsze będzie w granicach obrazu.
- Dozwolone są zarówno pełne programy, jak i funkcje.
Najkrótszy kod w bajtach wygrywa.
Przykłady
Wszystkie te obrazy zostały zmniejszone, aby zaoszczędzić miejsce. Kliknij je, aby wyświetlić w pełnym rozmiarze.
Obraz wejściowy:
(x,y) = (165,155)
i (x,y) = (0,0)
Obraz wejściowy i wyjściowy za pomocą (x,y) = (0,0)
:
Obraz wejściowy i wyjściowy za pomocą (x,y) = (600,350)
:
Obraz wejściowy i wyjściowy za pomocą (x,y) = (0,0)
:
Obraz wejściowy i wyjściowy za pomocą (x,y) = (0,0)
:
Opcjonalny bonus -30%: użyj odległości euklidesowej. Sugestia dla twojego algorytmu jest następująca (ogólny zarys):
- Mają piksel początkowy.
- Wypełnienie z tego piksela.
- Dla każdego piksela osiągniętego w wypełnieniu powodziowym
- Przejście od piksela początkowego do tego piksela w krokach co pół jednostki, w linii prostej.
- Na każdym kroku zastosuj
int()
do współrzędnych xiy. Jeśli piksel na tych współrzędnych jest czarny, zatrzymaj się. W przeciwnym razie kontynuuj. (Jest to metoda widoczności.) - Każdy osiągnięty piksel, który otacza biały piksel i / lub piksel, który był wcześniej oznaczony znacznie większą odległością (tj. +10), staje się pikselem początkowym.
W bardziej meta sensie, algorytm ten rozciąga się na każdy piksel osiągalny w linii prostej od pikseli początkowych / już kolorowych, a następnie „cali” wokół krawędzi. Bit „znacznie większej odległości” ma na celu przyspieszenie algorytmu. Szczerze mówiąc, tak naprawdę nie ma znaczenia, w jaki sposób wdrażasz odległość euklidesową, po prostu musi wyglądać mniej więcej tak.
Tak wygląda pierwszy przykład z odległością euklidesową przy użyciu powyższego algorytmu:
Wprowadź obraz i (x,y) = (165,155)
Bardzo dziękuję Calvin'sHobby i trichoplax za pomoc w napisaniu tego wyzwania! Baw się dobrze!