Sześciokątne teselacje lub nachylenia płaszczyzny są trójkolorowe - co oznacza, że przy użyciu tylko trzech kolorów, takich jak czerwony, niebieski i zielony, każdy sześciokąt można pokolorować bez żadnych dwóch sześciokątów, które mają wspólną granicę. Częściowy przykład pokazujący taki wzór.
Biorąc pod uwagę częściowe kafelkowanie heksagonalne w ASCII (przez STDIN, czytanie z pliku itp.), Zmień kolory znaków (za pomocą kodów ANSI, manipulacji obrazem itp.), Aby pasowały do tego koloru. Skręt jest środkiem sześciokątów ( *
poniżej) to trzy kolory, a linie między nimi muszą być mieszanką dwóch odpowiadających im *
kolorów heksa . Jeśli linia znajduje się na zewnętrznej granicy, powinna pasować do odpowiedniej *
.
Na przykład, biorąc pod uwagę częściowe sześciokątne układanie płytek
/ \ / \ / \ / \
| * | * | * | * |
\ / \ / \ / \ /
| * | * | * |
\ / \ / \ /
przypuśćmy, że zdecydujemy się pokolorować lewy górny heks *
na Czerwony, a jego dwóch sąsiadów na Niebieski i Zielony (zgodnie z ruchem wskazówek zegara). Następnie |
linia musi być Magenta, a /
linia żółta. Jeśli nadal będziemy kolorować, w końcu otrzymamy coś takiego (powiększonego dla przejrzystości):
Lub, dla wejścia
/ \
| * |
/ \ /
| * |
/ \ /
| * |
\ /
możesz go tak pokolorować (powiększony dla przejrzystości):
Kilka dodatkowych przypadków testowych (twój kod powinien być w stanie obsłużyć te):
/ \ / \
| * | * |
\ / \ /
| * |
/ \ / \
| * | * |
\ / \ /
/ \
| * |
\ / \
| * |
/ \ /
| * |
\ /
/ \
| * |
\ /
Zasady
- Gwarantowane wejście ma co najmniej jeden sześciokąt i żadne wejście nie będzie miało „dziury”.
- Nie musisz rozpoczynać kolorowania od czerwonego, o ile zachowasz zasadę trzech kolorów.
- Jeśli częściowe kafelki mogą być dwukolorowe, możesz to zrobić bez kary (tak jak w drugim przykładzie) - niekoniecznie musisz ekstrapolować częściowe kafelki na pełne kafelki.
- Centra sześciokąta
*
muszą być zabarwione na czerwono, niebiesko lub zielono, natomiast linie między nimi muszą mieć kolor cyjan, żółty lub purpurowy. Na przykład posiadanie karmazynu*
jest niedozwolone, a czerwony|
lub\
lub/
musi znajdować się na zewnętrznej granicy rysunku. Zobacz Kolory poniżej. - Jeśli twoja konsola nie ma tych dokładnych kolorów, użyj najbliższego przybliżenia i podaj w odpowiedzi, jakiego przybliżenia używasz.
- Dopuszczalne lub końcowe białe spacje, w tym końcowe znaki nowej linii, są dopuszczalne, o ile znaki są w linii.
- Częściowe kafelkowanie można wprowadzić za pomocą spacji, aby utworzyć prostokąt, jeśli ułatwi to kodowi.
- Dopuszczalny jest pełny program lub funkcja. Jeśli funkcja, możesz zwrócić dane wyjściowe zamiast je drukować.
- Dane wyjściowe mogą być wysyłane do konsoli, zapisane jako obraz itp.
- Standardowe luki są zabronione.
- To jest golf golfowy, więc obowiązują wszystkie zwykłe zasady gry w golfa, a wygrywa najkrótszy kod (w bajtach).
Kolory i mieszanki kolorów:
Trzy dostępne kolory podstawowe to (z kodami kolorów w formacie dziesiętnym RGB):
- Czerwony
(255,0,0)
- Zielony
(0,255,0)
- niebieski
(0,0,255)
Kombinacje to:
- Czerwony i zielony łączą się, tworząc żółty
(255,255,0)
- Niebieski i zielony łączą się, tworząc Cyan
(0,255,255)
- Czerwony i niebieski tworzą magenta
(255,0,255)
źródło
*
Odpowiedzi:
JavaScript (ES6),
219203201 bajtówObjaśnienie: Każda postać jest owinięta
font
znacznikiem, aby ustawić jej kolor, który jest obliczany przez sprawdzenie każdego kwadratu, plus kwadraty dwa po lewej i prawej stronie, oraz cztery kwadraty jeden po przekątnej, dla*
si, a jeśli tak, łączenie kolorów wszystkich*
znaleziono. Te*
kolory są wybrane po prostu poprzez koordynowania ich poziomy modulo 3 i przesunięcie bitową odpowiednio. Edit: Saved 2 bajty przez przejście z#RRGGBB
do#RGB
kolorów.źródło
JavaScript (ES6), 210 bajtów (przy użyciu HTML + CSS)
Podobne do mojego podejścia do płótna ; lokalizuje wszystkie
*
s w ciągu wejściowym i zapisuje sześciokąty na stronie w postaci absolutnie pozycjonowanych<pre>
elementów. Ponieważmix-blend-mode
jest ustawiony nalighten
, dodawanie kolorów odbywa się automatycznie, gdy znaki nakładają się na siebie.Pokaż fragment kodu
źródło
Python 2 , 279 bajtów
Wypróbuj online!
Gra w golfa i naprawiono dzięki user202729!
-27 bajtów dzięki Mr. Xcoder
-24 bajtów dzięki Jonathan Frech
źródło
2-abs(i)
jest2-(i&1)
w tym kontekście, 336 bajtów.\033
może to być\33
(zapisywanie jednego bajtu) lub rzeczywisty\x1b
znak ( zapisywanie trzech bajtów ).=
i a;
na dwa,
i a=
.Python 2 ,
346331 bajtówWypróbuj online!
źródło
HTML (Canvas) + JavaScript (ES6), 13 + 251 = 264 bajty
Lokalizuje wszystkie
*
s w ciągu wejściowym i maluje sześciokąt ASCII na płótnie w odpowiednich pozycjach. PonieważglobalCompositeOperation='lighter'
dodawanie kolorów odbywa się automatycznie, gdy znaki nakładają się na siebie.HTML
JavaScript
W
scale()
celu zwiększenia widoczności we fragmencie dodano mnożnik i dodatkowe polecenie.Pokaż fragment kodu
Zobacz także moje podejście oparte na CSS .
źródło
MATLAB / Octave , 223 bajty
W nieco starszym formacie kodu:
Dane wejściowe są traktowane jako tablica 2D, na przykład wprowadzenie następujących po wyświetleniu monitu o wprowadzenie:
O ile mi wiadomo, MATLAB nie ma możliwości wyświetlania kolorów na konsoli (z wyjątkiem brudnych hacków Java, które dyskontuję). W związku z tym wynik jest drukowany na rysunku.
Kolorowanie uzyskuje się poprzez znalezienie położenia wszystkich
*
na wejściu, a następnie w tablicy kolorów RGB (p
), pole 1 x 5x3 (255 w reprezentacji kolorów MATLAB) jest pisane na środku*
. Pole jest zapisywane w kolorze odpowiadającym indeksowi mod-3 wzdłuż każdej linii, przy czym linie parzyste mają przesunięty indeks koloru o przesunięcie.W ten sposób powstaje matryca kolorów, w której nakładające się pola będą dawały wymagany kolor mieszany. Powyższy przykład tworzy następującą matrycę kolorów.
Białe i czarne obszary nie mają znaczenia, ponieważ w tych miejscach drukowana jest spacja, co oznacza, że nie widzimy niewłaściwego koloru.
Po utworzeniu matrycy kolorów wyświetlamy każdy znak na rysunku za pomocą
text
polecenia, ustawiając kolor tekstu na odpowiedni wpis w matrycy kolorów. Powyższy przykład wyświetli:źródło