Wyzwanie
Biorąc pod uwagę dwa wielkie ciągi szesnastkowe (oba o długości 6 znaków, XXXXXX i RRRRRR) reprezentujące wartości RGB (od 000000
do FFFFFF
włącznie) oraz dodatnią niezerową liczbę całkowitą N, wyświetl liniowe przejście kolorów N + 2 wygenerowanych z XXXXXX na RRRRRR spowoduje to gradient kolorów.
Przykład
Wejście
FF3762
F08800
9
Wynik
Uwaga: w naszym przykładzie poprosiłem o 9 pośrednich kroków między dwoma kolorami, dlatego 11 linii zostanie wyświetlonych od koloru początkowego do koloru końcowego
FF3762
FD3F58
FC474E
FA4F44
F9573A
F75F31
F66727
F46F1D
F37713
F17F09
F08800
Ostrzeżenia
Chociaż przeszedłem prosty liniowy proces wyprowadzania wartości liczb całkowitych dla kolorów tymczasowych przed przekształceniem ich z powrotem w szesnastkowy, twoje metody mogą się różnić. Proszę rozważyć różne sposoby odpowiedniego zaokrąglania liczb w górę / w dół .
Testowanie
Aby uczynić to interesującym, udostępniłem fragment kodu umożliwiający testowanie kodu, w tym przycisk zapewniający dwa losowe kolory do testowania kodu. Wyświetlanie wyników jest opcjonalne, ale zalecane!
c1=()=>('00000'+(Math.random()*(1<<24)|0).toString(16)).slice(-6);
$("#col").click(function(){
alert("Your two colors are: "+c1()+" and "+c1()+".");
});
$("#colors").blur(function(){
$("#test").empty();
var colArr = $("#colors").val().split("\n");
for(c in colArr){
$("#test").append('<div class="tester" style="background-color:#'+colArr[c]+';">'+colArr[c]+'</div>')
}
});
.tester{height: 20px;
width: 60px;padding: 4px;border: 1px solid black;}
<script src="https://ajax.googleapis.com/ajax/libs/jquery/2.1.1/jquery.min.js"></script>
<button id="col">Your two colors</button><br />
<textarea id="colors"></textarea>
<div id="test">
</div>
1) Możesz uzyskać dostęp do dwóch losowych kolorów do testu, klikając przycisk „Twoje dwa kolory”. 2) Liczba kroków pośrednich będzie taka sama jak liczba znaków w nazwie użytkownika PPCG łącznie ze spacjami, w przypadku „WallyWest” będzie to 9 (jak w moim przykładzie powyżej). 3) Uruchom kod z dwoma kolorami i liczbą, a kiedy już utworzysz listę, możesz wkleić dane wyjściowe do obszaru tekstowego i tabulować je, aby uzyskać wygenerowany gradient kolorów.
Mój przykład pokazano tutaj:
Muszę przyznać, że wygląda to niesamowicie!
Uwaga: jak już wspomniałem, pokazanie testowania wyników za pomocą fragmentu kodu jest opcjonalne, ale zalecane! :)
Wynik
Dane wyjściowe listy muszą mieć postać N + 2 zestawów 6-cyfrowych liczb szesnastkowych oddzielonych wierszami (\ n), jak pokazano w moim przykładzie powyżej. Wyjście może być w formie oddzielnych linii, przestrzeń / oddzielonych przecinkami listę, tablicą lub cokolwiek jest najlepsza dla danego języka ... (Dzięki @nimi do głów w górę) Proszę pamiętać, że jeśli plan testowania kodu z fragment kodu, niezależnie od tego, jak rozdzielisz każdy „kolor”, zależy od Ciebie.
Zasady
To jest golf golfowy, więc zwycięzca otrzyma najkrótsze rozwiązanie w bajtach. Naturalnie brak luk . Dane wejściowe muszą akceptować dwa ciągi i liczbę (która, jak powiedziałem, będzie równoważna liczbie liter w nazwie użytkownika na PPCG, a zatem wynikowy wynik zawsze będzie miał co najmniej trzy linie.
Odpowiedzi:
MATL , 31 bajtów
Wykorzystuje interpolację liniową z zaokrąglaniem w dół. Format wejściowy to
Wypróbuj online!
Wyjście graficzne, 31 bajtów
Jest to wynik dla danych wejściowych
Wypróbuj w MATL Online ! Tłumacz jest obecnie w fazie eksperymentalnej. Jeśli nie otrzymasz żadnych wyników, odśwież stronę i ponownie naciśnij „Uruchom”.
źródło
JavaScript (ES6), 130 bajtów
źródło
Dyalog APL , 44 bajty
Zachęty do N , a B eginning przebarwień, to E nding kolorze. Potrzeby,
⎕IO←0
które są domyślne w wielu systemach.h[
...]
indeksuj w h (która ma wartość, gdy skończymy oceniać zawartość nawiasu)N←⎕
monit o numeryczne N (4)1+
dodaj jeden do N (5)(
...)÷
użyj tego, aby podzielić wynik ...⍞⍞
monit o dwa ciągi znaków [„7E0E7E”, „FF3762”](
...)∘⍳¨
znajdź indeksy znaków każdego ciągu w ...⎕D,⎕A
D igits, po których następuje A alfabeth←
przypisane do hteraz mamy „0123456789ABCDEFGHIJKLMNOPQRSTUVWXYZ”
E B←
przypisz wskaźniki do E i B [[7,14,0,14,7,14], [15,15,3,7,6,2]]-/
odejmij i załącz B z E [[-8, -1, -3,7,1,12]]dotychczasowy wynik to [[-1,6, -0,2, -0,6,1,4,4,0,2,2,4]]
(
...)×
pomnóż to przez ...2+N
dwa plus N (6)⍳
pierwsze liczby całkowite [0,1,2,3,4,5]daje nam to [[0,0,0,0,0,0,0], [- 1,6, -0,2, -0,6,1,4,4,0,2,2,4], [- 3,2, -0,4, -1,2,2.8,0.4,4.8 ], ...]
B∘+¨
dodać B do każdego [[15,15,3,7,6,2], [13.4,14.8,2.4,8.4,6.2,4.4], [11.8,14.6,1.8,9.8,6.4,6.8], ... ]⌊
zaokrąglić w dół [[15,15,3,7,6,2], [13,14,2,8,6,4], [11,14,1,9,6,6], ...]↑
zrobić listę list w tabelitutaj indeksujemy do h , dając
który jest taki sam jak
i drukuje jako
Wypróbuj APL online!
źródło
Pyth - 35 bajtów
Okropnie grał w golfa, po prostu się poddał.
Wypróbuj online tutaj .
Przykład:
źródło
7cb472 93fb8a 8
i otrzymywać tylko 10 linii wyniku podczas testowania kodu?93fb8a
... Czy twój kod wyprowadził dwa wiersze o tej samej wartości?PowerShell v2 +,
176159150 bajtówPobiera dane wejściowe jako dwa ciągi i liczbę, a następnie przekształca ciąg początkowy w tablicę ciągów podzieloną na każde dwa znaki, zapisuje to w
$x
. Następnie wyprowadzamy dane wyjściowe$a
jako sekcję początkową i zapętlamy od++$n
do1
(aby zapewnić prawidłowe ustawienie ogrodzenia).Każda iteracja ustawia pomocnika
$j
na bieżącą liczbę (używaną później w celu upewnienia się, że mamy odpowiednią liczbę kroków między miejscem, w którym aktualnie jesteśmy do celu) i oblicza następny krok na podstawie pętli$x
.Każda wewnętrzna pętla jest tylko zadaniem. Jesteśmy ustawienie
$x
w odpowiednim miejscu równa nowego łańcucha"{0:x2}"
przy użyciu-f
operatora Ormat.x2
Tutaj określa dwucyfrową wyjście szesnastkowy, a wejście jest po prawej stronie od-f
operatora. PowerShell ma natywny operator szesnastkowy do dziesiętnego0x
, więc to długie wyrażenie zagnieżdżone w parens używa tego operatora do konwersji bieżącego heksadecymalnego na liczby, odejmując, aby znaleźć różnicę, która jeszcze nie została wykonana (dokonane przez dynamiczne dzielenie$b
tutaj, tak jak to zrobiliśmy$a
, i używając modulo, aby wybrać odpowiedni element), dzieląc przez$j
pozostałe kroki, rzutując na an[int]
(PowerShell domyślnie zaokrągla bankiera) i odejmuje tę liczbę kroków od bieżącego heksa, aby uzyskać to, co powinno być naszym następnym heksem.Wynik tego obliczenia jest przechowywany z powrotem w
$x
postaci trzech elementów szesnastkowych. Jest to zamknięte w parens, aby utworzyć kopię w potoku, i-join
połączone razem w jeden ciąg. Wszystkie te łańcuchy wynikowe są pozostawione w potoku, a dane wyjściowe za pośrednictwem niejawnego mająWrite-Output
miejsce podczas wykonywania programu.Przykład
Dostałem 0ba7c5 i 6c0e50 za moje dwa kolory, a TimmyD ma w nim 6 znaków.
źródło
Python 2, 189 bajtów
źródło
[Groovy] Ostatnia aktualizacja (199 bajtów) - zgodnie z życzeniem
Non-golf
Golf
Wypróbuj finał tutaj: https://groovyconsole.appspot.com/script/5130696796405760
PONIŻSZE WERSJE STARE, ODRZUCONE PRZEZ OP
Groovy (123 bajtów)
Golf
Non-golf
Wejścia
Przykład wyjścia
prowadzi do
Wypróbuj sam: https://groovyconsole.appspot.com/script/5184465357766656
Z dołączonymi konwersjami szesnastkowymi
Chyba też trochę oszukuję ... Oto skrypt z użyciem hexa:
Nowy kod z konwersjami szesnastkowymi:
188 znaków podczas gry w golfa:
Wyjście dla 000000 do FFFFFF i 16 (długość nazwy użytkownika)
źródło
{s-> s.split("(?<=\\G.{2})").collect{Integer.parseInt(it,16)}}('FFFFFF')
Wyniki w [255,255,255] Mogę dodać 62 bajty do mojego kodu za pomocą tej konwersji, jeśli naprawdę tego chcesz.R, 68 bajtów
Istnieje wbudowana funkcja interpolująca dwa kolory:
Wejście:
Wyjście: wektor z wartościami
Specyfikacja kolorów w R wymaga symbolu skrótu.
Narysujmy coś, na przykład funkcję:
źródło
FF3762 F08800 15
?C,
175169168 bajtówNie golfowany:
Dzięki @ h-walters za golenie 5 bajtów!
źródło
puts
robi składnia ponownie?printf()
, ale nie wykonuje żadnego formatowania, zamiast tego po prostu drukuje podany ciąg znaków i dodaje nowy wiersz.puts("")
do trzeciej części pierwszej pętli for (;
po stanie się,
wcześniej) ... +0 bajtów. Pozwala to jednak usunąć nawiasy klamrowe po drugiej pętli ... -2 bajty. Możesz zapisać kolejny 1 bajt, usuwając 3 zj<3
i zastępując goprintf
instrukcją (jest to podstępne ... printf zwróci tylko 2, ale nadal musi oceniać po raz trzeci).0
wj=0
. Gdy wszystko tu będzie na swoim miejscu, twój program powinien być o 5 bajtów krótszy i co najmniej 50% dziwniejszy.sh + ImageMagick, 81 bajtów
stosowanie:
(„-depth 8” nie jest konieczne, jeśli twój IM jest skompilowany z domyślną wartością 8bpp)
źródło