Nuggets of Code
Jest to hipotetyczna sytuacja, w której jest piątek wieczorem, a zaprosiłeś zwykłych kumpli golfowych do udziału w swoim ulubionym hobby: golfie kodowym. Ponieważ jednak jest to tak wyczerpujące zadanie, musisz zebrać trochę pokarmu dla grupy, abyś mógł grać w golfa jak najwięcej z kodu.
Teraz ulubioną przekąską wszystkich są nuggetsy z kurczaka, ale jest problem: nie ma jednej paczki, która zaspokoi potrzeby wszystkich. Ponieważ jesteś już w golfowym nastroju, postanowiłeś stworzyć program, który dokładnie określi, jakie pakiety musisz kupić, aby móc zaspokoić potrzeby każdego z samorodków.
Rozmiary opakowań samorodków z kurczaka są wszędzie, aw zależności od miejsca zamieszkania na świecie zmieniają się również standardowe rozmiary. Jednak najbliższe [miejsce, które obsługuje samorodki] zawiera następujące rozmiary pakietów samorodków:
4, 6, 9, 10, 20, 40
Teraz możesz zauważyć, że nie możesz zamówić pewnych kombinacji bryłek. Na przykład 11samorodki nie są możliwe, ponieważ nie ma 11dokładnie takiej kombinacji . Możesz jednak zrobić 43, zdobywając 1 paczkę 20, 1 paczkę 10, 1 paczkę 9i 1 paczkę 4,
20 + 10 + 9 + 4 = 43 (597)
gdzie 597każdy termin jest podniesiony do kwadratu i zsumowany (wskazówka: optymalne rozwiązanie ma to jako najwyższą wartość) . Istnieją oczywiście inne sposoby tworzenia 43, ale jak wiadomo, im więcej samorodków na opakowanie, tym taniej robi na samorodek. Tak więc chcesz idealnie kupić najmniejszą liczbę paczek i jak najwięcej, aby zminimalizować koszty.
Zadanie
Powinieneś stworzyć program lub funkcję, która pobiera listę liczb całkowitych odpowiadających wymaganiom każdej osoby. Następnie należy obliczyć i wydrukować najbardziej opłacalne zamówienie α , aby kupić samorodki kurczaka. Najbardziej opłacalnym zamówieniem α jest kombinacja, w której suma kwadratów każdej ilości jest najwyższa. Jeśli nie ma absolutnie żadnego sposobu, aby kupić bryłki doskonale, trzeba wydrukować wartość falsy takie jak 0, False, Impossible!, lub, co jest dostępne w języku polskim.
Przykład I / O:
[2 7 12 4 15 3] => [20 10 9 4]
1, 1, 2, 1 => False
6 5 5 5 5 5 9 => 40
[6, 4, 9] => 9 10
1 => 0
199 => 40, 40, 40, 40, 20, 10, 9
2 => Impossible!
Oto lista idealnych rozwiązań dla pierwszych 400. Pamiętaj, że nie są one sformatowane w sposób, w jaki oczekiwałbym twojego, każde tuplema formę (N lots of M).
Zasady
- Brak standardowych luk.
- Bez użycia wbudowanych funkcji, które wykonują wszystkie lub większość zadań, takich jak
FrobeniusSolveMathematica.
α - Aby wyjaśnić to na przykładzie, możesz również zrobić 43, robiąc to 4 + 6 + 6 + 9 + 9 + 9 = 43 (319), ale nie byłoby to optymalne, a zatem niepoprawne wyjście, ponieważ suma kwadratów jest mniejsza niż kombinacja, którą zauważyłem we wstępie. Zasadniczo wyższa suma kwadratów = niższy koszt = najbardziej opłacalny.