Wprowadzenie:
(Źródło: Wikipedia )
Kiedy spojrzymy na tęczę, zawsze będzie miała kolory od góry do dołu:
Czerwony; Pomarańczowy; żółty; Zielony; niebieski; indygo; fioletowy
Jeśli spojrzymy na te pojedyncze pierścienie, czerwony pierścień jest oczywiście większy niż pierścień fioletowy.
Ponadto możliwe jest jednoczesne posiadanie dwóch lub nawet trzech tęcz.
Wszystkie powyższe kombinacje zostaną wykorzystane w tym wyzwaniu:
Wyzwanie:
Biorąc pod uwagę listę liczb całkowitych o dokładnym rozmiarze 7, gdzie każda wartość wskazuje dostępne cząstki koloru, które mogą tworzyć tęcze (gdzie największy wskaźnik wskazuje na czerwony, a najmniejszy wskaźnik wskazuje na fioletowy), wyprowadza ilość tęczy, którą można utworzyć.
Jedna liczba całkowita tęczy musi mieć co najmniej 3x fiolet, 4x indygo, 5x niebieski, 6x zielony, 7x żółty, 8x pomarańczowy, 9x czerwony. Druga tęcza na niej będzie jeszcze większa niż czerwony pierścień pierwszej tęczy (w tym jedna przestrzeń między nimi), więc będzie potrzebowała co najmniej 11x fioletu, 12x indygo, 13x niebieskiego, 14x zielonego, 15x żółtego, 16x pomarańczowego , 17x czerwony oprócz tego, z czego korzysta pierwsza tęcza. Trzecia tęcza znów zacznie się od 19x fioletu.
Przykład:
Lista wejściowa: Dane [15,20,18,33,24,29,41]
wyjściowe:2
Dlaczego? Mamy 15x fiolet i potrzebujemy co najmniej 3 + 11 = 14 na dwie tęcze. Mamy 20 indygo i potrzebujemy co najmniej 4 + 12 = 16 na dwie tęcze. Itd. Mamy wystarczająco dużo kolorów na dwie tęcze, ale nie na tyle, aby uformować trzy tęcze, więc wynik jest 2
.
Zasady konkursu:
- Liczby całkowite w tablicy wejściowej są gwarantowane jako nieujemne (
>= 0
). - Gwarantujemy, że lista wejściowa ma dokładnie rozmiar 7.
- Kiedy nie można utworzyć tęcze, wysyłamy
0
. - Format wejściowy i wyjściowy jest elastyczny. Może być listą lub tablicą liczb całkowitych dziesiętnych, można pobrać ze STDIN. Dane wyjściowe mogą być zwracane przez funkcję dowolnego rozsądnego typu danych wyjściowych lub drukowane bezpośrednio do STDOUT.
Minimalna ilość kolorów wymagana dla n
ilości tęcz:
Amount of Rainbows Minimum amount per color
0 [0,0,0,0,0,0,0]
1 [3,4,5,6,7,8,9]
2 [14,16,18,20,22,24,26]
3 [33,36,39,42,45,48,51]
4 [60,64,68,72,76,80,84]
5 [95,100,105,110,115,120,125]
etc...
Główne zasady:
- To jest golf golfowy , więc wygrywa najkrótsza odpowiedź w bajtach.
Nie pozwól, aby języki kod-golfowe zniechęcały Cię do publikowania odpowiedzi w językach niekodujących golfa. Spróbuj znaleźć możliwie najkrótszą odpowiedź na „dowolny” język programowania. - Do odpowiedzi mają zastosowanie standardowe reguły , więc możesz używać STDIN / STDOUT, funkcji / metody z odpowiednimi parametrami i zwracanymi typami, pełnych programów. Twoja decyzja.
- Domyślne luki są zabronione.
- Jeśli to możliwe, dodaj link z testem swojego kodu.
- Zalecane jest również dodanie wyjaśnienia do odpowiedzi.
Przypadki testowe:
Input: [15,20,18,33,24,29,41]
Output: 2
Input: [3,4,5,6,7,8,9]
Output: 1
Input: [9,8,7,6,5,4,3]
Output: 0
Input: [100,100,100,100,100,100,100]
Output: 4
Input: [53,58,90,42,111,57,66]
Output: 3
Input: [0,0,0,0,0,0,0]
Output: 0
Input: [95,100,105,110,115,120,125]
Output: 5
Input: [39525,41278,39333,44444,39502,39599,39699]
Output: 98
0,0,0,0,0,0,0
Krawędzi przypadek chociaż :( (nie pasuje do logiki 1-GAP)Odpowiedzi:
Pyth , 14 bajtów
Zestaw testowy!
W jaki sposób?
Algortihm
Po pierwsze, zacznijmy od wzoru, na którym opiera się ta odpowiedź. Nazwijmy funkcję, która daje niezbędną ilość cząstek koloru , gdzie jest liczbą warstw, a jest indeksem koloru, opartym na 0. Po pierwsze, zauważamy, że dla samej warstwy (gdzie ma indeks 1, w tym przypadku) potrzebujemy cząstek . Mając to na uwadze, sumujemy wyniki każdego dla każdej warstwy :do( n , i ) n ja nth n L ( n , i ) = i + 3 + 8 ( n - 1 ) L ( k , i ) k
Dlatego wiemy już, że maksymalna liczba możliwych warstw, nazywana , musi spełniać nierówność , gdzie jest elementem listy wejściowej.k C(k,i)≤Ii Ii ith
Realizacja
Implementuje to funkcję i iteruje ( ) po liście danych wejściowych, przy czym to indeks (oparty na 0), a to element. Dla każdej wartości program wyszukuje pierwszą dodatnią liczbę całkowitą dla której (logiczna negacja , warunek, który wyprowadziliśmy wcześniej), a następnie znajduje minimalny wynik i zmniejsza to. W ten sposób, zamiast poszukiwania najwyższej liczby całkowitej, że robi spełniać warunek, szukamy najniższy że nie i odjąć jeden z nich w celu uzupełnienia offset 1.k b T b < C ( T , i ) C ( T , i ) ≤ bC k b T b<C(T,i) C(T,i)≤b
.e
źródło
Python 2 ,
6461 bajtówWypróbuj online!
Każdy kolor tęczy używa
(3+i)+n*8
dla warstwyn
i kolorui
(0 = fioletowy itp.)Całkowita przez x warstw wynosi:
(3*i)*x + 8*x*(x+1)
.Po prostu rozwiązujemy dla n i przyjmujemy minimalną wartość.
Zapisano:
źródło
05AB1E ,
181716 bajtów-1 bajt dzięki Magic Octopus Urn
Wypróbuj online!
Ilość koloru potrzebna dla n tęczy wynosi n (4n + [-1, 0, 1, 2, 3, 4, 5]) .
źródło
[ND4*6Ý<+*¹›1å#N
działa, ale nie wiem dlaczego. -1 bajt.N>
robić - bo już¾>
wcześniej.JavaScript (ES6), 49 bajtów
Wypróbuj online!
W jaki sposób?
Ale do celów golfowych zaczynamy od,
n === undefined
a następnie używamy ujemnych wartościn
. Pierwsza iteracja zawsze kończy się powodzeniem, ponieważ ocenia się prawą stronę nierównościNaN
. Dlatego pierwszym znaczącym testem jest drugi zn == -1
.źródło
Galaretka , 18 bajtów
Wypróbuj online!
Wykorzystuje wyjaśnienie w odpowiedzi 05AB1E Okx.
źródło
Excel VBA, 78 bajtów
Anonimowa funkcja, która pobiera dane wejściowe z zakresu
[A1:G1]
i danych wyjściowych do bezpośredniego okna VBE.źródło
Węgiel drzewny , 21 bajtów
Wypróbuj online! Link jest do pełnej wersji kodu. Objaśnienie: Bezpośrednio oblicza liczbę tęczy możliwą dla każdego koloru z formułą I wyprowadzoną niezależnie, ale okazuje się być taka sama jak formuła @ TField.
źródło
JavaScript (Node.js) , 54 bajty
Port odpowiedzi @TFeld
Wypróbuj online!
źródło
Galaretka , 14 bajtów
To było trudne!
Monadyczny link akceptujący listę siedmiu liczb całkowitych, która daje liczbę całkowitą, możliwą liczbę tęczy.
Wypróbuj online! Lub zobacz pakiet testowy .
W jaki sposób?
Niestety, jakakolwiek naiwna metoda wydaje się zajmować 16 bajtów, jedna taka metoda jest
Ṃɓ_J×¥H÷‘H<¬Ȧð€S
, jednak okazuje się, że zastosowana tutaj metoda jest znacznie bardziej wydajna i krótsza!Ta metoda buduje więcej niż tę samą liczbę stosów tęczy, gdy liczy się cząstki, w tym pasma ultrafioletowe , i dodaje 1 dla każdego możliwego stosu.
Testem tego jest sprawdzenie, czy istnieje tylko jedno pasmo NIE jest możliwe, biorąc pod uwagę, że potrzebujemy cząsteczek pasma ultrafioletowego, ale otrzymaliśmy zero.
źródło
§ỊS
!05AB1E , 14 bajtów
Wypróbuj online!
Algorytm Pytha ⟶ 05AB1E Algorytm
Istnieje wiele metod, które można wypróbować, aby rozwiązać to wyzwanie w 05AB1E, więc wypróbowałem kilka z nich i okazało się, że jest najkrótszy. Dostosowując powyższą formułę z mojej odpowiedzi w Pythonie, pamiętając, że 05AB1E użyło indeksowania 1, możemy skonstruować naszą funkcję w następujący sposób:
Zauważ, że ta równość nie jest precyzyjna (ale obecnie nie znam sposobu, aby sformułować to bardziej formalnie) i że rozwiązania tego równania przyniosą liczby zmiennoprzecinkowe, ale naprawiamy to za pomocą podziału podłogi zamiast podziału dokładnego później. W każdym razie, aby kontynuować naszą dyskusję, większość z was zapewne bardzo dobrze zna rozwiązania takiego równania , więc oto:
To jest właśnie relacja, którą realizuje ta odpowiedź.
źródło
C ++,
127125 bajtówOgolił 2 bajty dzięki Kevinowi Cruijssenowi.
Wypróbuj online!
Funkcja przyjmuje tablicę w stylu C złożoną z siedmiu liczb całkowitych i zwraca liczbę całkowitą.
Wyjaśnienie:
źródło
for(int c=0;c<7;c++){int q=c-1;q=(std::sqrt(q*q+16*x[c])-q)/8;o=o>q?q:o;}
tak:for(int c=0,q;c<7;c++,o=o>q?q:o)q=(std::sqrt(--c*c-c+16*x[++c]))/8;
. A może mógłbyś podać link do TIO z kodem testowym?