Wcześniej wszystkie 1337 dzieci używało suwaków tekstowych w pokojach rozmów. Nie wiem o was, ale chcę czuć się tak, jak oni. Jedyny problem polega na tym, że ich stare skrypty i aplikacje były mocno powiązane z oprogramowaniem, dla którego zostały stworzone, więc nie mogę po prostu korzystać z tej niesamowitej funkcjonalności gdziekolwiek chcę. Chcę też, aby rozwiązanie było łatwe do przenoszenia, więc musisz zminimalizować kod, aby zmieścił się na mojej dyskietce (wolałbym nosić tylko jedną dyskietkę, ale jeśli kod źródłowy jest zbyt duży Mogę nosić więcej niż jeden : P ).
Wejście
- Lista kolorów (rgb, hex, nazwy itp.)
- Tekst do sformatowania
Twój program powinien oczekiwać, że lista kolorów będzie zawierać co najmniej 2 kolory.
Tekst do sformatowania może mieć dowolną długość większą niż zero, a znaki będą ograniczone do ascii drukowalnych. (Wskazówka: dłuższe wprowadzanie tekstu może wymagać ponownego użycia kolorów pośrednich dla kolejnych znaków)
Wynik
Tekst wyjściowy nie powinien różnić się od tekstu wejściowego w żaden inny sposób niż czcionka i / lub znaczniki / style (Uwaga: jeśli twój wynik zawiera znaczniki html, musisz kodować dane wejściowe w formacie html). Możesz wyprowadzać tekst ze znacznikami / stylami (tagi stylu HTML, kolory konsoli itp.) Lub obraz wyblakłego tekstu. Wszystkie heksy kolorów powinny być obecne na wydruku, chyba że dane wejściowe nie zawierają wystarczającej liczby znaków, aby spełnić to wymaganie. W takim przypadku zapoznaj się z regułami pierwszeństwa, aby określić, które heksy kolorów powinny być obecne na wydruku. Kolejność lub te kolory na wydruku powinny nadal być kolejnością wprowadzania.
Zasady pierwszeństwa kolorów
- W przypadku, gdy na wejściu jest jeden znak, zostanie użyty pierwszy kolor
- W przypadku, gdy są tylko dwie postacie, użyty zostanie pierwszy i ostatni kolor
- W przypadku, gdy jest więcej niż trzy kolory i więcej kolorów niż znaków, pierwszeństwo mają pierwsze i ostatnie kolory, a następnie pozostałe kolory w kolejności wprowadzania.
- W przypadku, gdy znaków jest więcej niż kolorów, postacie powinny przechodzić z jednego koloru do drugiego przy użyciu kolorów pośrednich
Przykłady (odpowiednio zasady pierwszeństwa 1-3):
# Kolory | Kolor 0 | ... | Kolor n | Tekst
3 ff0000 0000ff ffff00 M
-> -> ->
3 ff0000 0000ff ffff00 hi
4 ff0000 0000ff ffff00 0fff00 sup
Aby było jasne, kolor tekstu powinien zanikać z jednego koloru szesnastkowego na drugi. Zanikanie nie musi być idealnie jednolite, ale nie powinno być nagłą zmianą koloru, chyba że nie ma wystarczającej liczby postaci, aby ładnie zaniknąć. Zasadniczo to zanikanie uzyskuje się poprzez wybranie kolorów pośrednich dla każdego ze znaków poprzez zwiększenie / zmniejszenie wartości rgb o pewien przedział określony przez liczbę znaków, z którymi trzeba pracować, oraz różnicę między kolorami. Na przykład, jeśli potrzebujemy jednego koloru pomiędzy (# ff0000) a (# 000000), możemy wybrać, ponieważ znajduje się on pośrodku. Optymalna wydajność będzie wyglądać raczej ładnie.
Przykład (reguła pierwszeństwa 4):
3 ff0000 ff7f00 f0ff00 To be or not to be, that is the question...
->
-LUB-
<span style="color:#ff0000;">T</span><span style="color:#ff0600;">o</span><span style="color:#ff0c00;"> </span><span style="color:#ff1200;">b</span><span style="color:#ff1800;">e</span><span style="color:#ff1e00;"> </span><span style="color:#ff2400;">o</span><span style="color:#ff2a00;">r</span><span style="color:#ff3000;"> </span><span style="color:#ff3600;">n</span><span style="color:#ff3c00;">o</span><span style="color:#ff4300;">t</span><span style="color:#ff4900;"> </span><span style="color:#ff4f00;">t</span><span style="color:#ff5500;">o</span><span style="color:#ff5b00;"> </span><span style="color:#ff6100;">b</span><span style="color:#ff6700;">e</span><span style="color:#ff6d00;">,</span><span style="color:#ff7300;"> </span><span style="color:#ff7900;">t</span><span style="color:#ff7f00;">h</span><span style="color:#fe8500;">a</span><span style="color:#fe8b00;">t</span><span style="color:#fd9100;"> </span><span style="color:#fc9700;">i</span><span style="color:#fb9d00;">s</span><span style="color:#fba400;"> </span><span style="color:#faaa00;">t</span><span style="color:#f9b000;">h</span><span style="color:#f9b600;">e</span><span style="color:#f8bc00;"> </span><span style="color:#f7c200;">q</span><span style="color:#f6c800;">u</span><span style="color:#f6ce00;">e</span><span style="color:#f5d400;">s</span><span style="color:#f4da00;">t</span><span style="color:#f4e100;">i</span><span style="color:#f3e700;">o</span><span style="color:#f2ed00;">n</span><span style="color:#f1f300;">.</span><span style="color:#f1f900;">.</span><span style="color:#f0ff00;">.</span>
W odpowiedzi określ sposób wyświetlania wyników (w formacie html, w konsoli, jako obraz itp.).
* Wszystkie czarne tła służą wyłącznie do podkreślenia kolorów i nie są wymagane
Punktacja
To jest golf golfowy , więc wygrywa najkrótsza odpowiedź (w bajtach).
Jeśli uda ci się dodać blaknięcie do poszczególnych postaci, na zawsze będę myśleć, że jesteś fajny (ale nie ma żadnej premii do zdobycia, ponieważ nie będzie to sprawiedliwe dla niektórych języków)
#000000
i#ff0000
nie jest#800000
.000000
iff0000
powinna byćb40000
(255*sqrt((0+1)/2)
)Odpowiedzi:
JavaScript (ES6), 290 bajtów
źródło
Pyth, 126 bajtów
Obowiązkowa średnia kwadratowa średnia zamiast bezpośredniej średniej arytmetycznej.
Wypróbuj online!
Przykładowe dane wyjściowe:
źródło
Java,
702662 znakówDwie funkcje gry w golfa:
Ponieważ nikt nie może tego przeczytać: oto obie funkcje w wersji bez golfa w klasie:
Tutaj masz górną granicę własnego kodu. Wykorzystanie polega na wywołaniu
colorize
(lub c w wersji golfowej) i przekazaniu tekstu oraz szeregu kodów kolorów szesnastkowych. Funkcja zwróci ciąg znaków z tagami HTML, podobnie jak OP, dlatego potrzebujesz sposobu na renderowanie HTML.Algorytm jest łatwiejszy, jak wygląda pytanie. Pierwsza postać zawsze otrzymuje pierwszy kolor, ostatnia zawsze ostatnia.
Jeśli w tekście jest więcej kolorów niż znaków, po prostu iterujemy tekst i kolory i stosujemy je.Zabawne jest to, że zanikają: zacząłem od sprawdzenia, w jakiej odległości znajdują się kolory na tekście. Zasadniczo obliczam czerwoną, zieloną i niebieską różnicę między dwoma podanymi kolorami, a następnie dodaję część tej różnicy do pierwszego koloru, w zależności od tego, gdzie znak jest między kolorami. Jeśli pozostawi odstęp dwóch kolorów, zaczynamy od nowego z następnymi dwoma kolorami. Jest to powtarzane dla wszystkich oprócz ostatniego znaku, który, jak wiemy, jest zawsze ostatnim kolorem. Daje to bardzo piękne blaknięcie.To pytanie było bardzo zabawne! Dzięki!
Aktualizacje
Teraz nie zajmuję się wszystkimi przypadkami specjalnie. Zamiast tego przycinam kolory, jeśli są ich dwa, i stosuję funkcję przenikania do każdego łańcucha. Jeśli będzie więcej kolorów niż tekstu, kolory zostaną przycięte, a funkcja zanikania będzie działać dokładnie jak zwykłe mapowanie.
źródło