Ten tweet zawiera listę możliwych zamówień na Skrzydła chińskiej restauracji 1 :
Przy zamawianiu pizzy zwykle obliczam, jaki rozmiar daje mi najlepszy stosunek ceny do pizzy, co jest prostym obliczeniem. Jednak zminimalizowanie ceny zamówienia w tej restauracji nie jest tak prostym zadaniem, dlatego chciałbym być przygotowany na następne zamówienie.
Wyzwanie
Biorąc pod uwagę liczbę całkowitą większą lub równą , Twoim zadaniem jest zwrócić jedno możliwe zamówienie, które minimalizuje cenę (ogólnie najtańszą) i liczbę ofert.
Przykład
Gdybym zamówił Skrzydeł, okazałoby się, że najlepsza okazja kosztuje 111,20 . Istnieje jednak wiele zamówień, które będą kosztować tę kwotę, a mianowicie:
[50,50],[25,25,50],[25,25,25,25]
Ponieważ pierwsze zamówienie wykorzysta najmniejszą liczbę ofert ( ), wynik będzie [50,50]
.
Zasady
- Wejście będzie jakąś liczbą całkowitą
- Wynikiem będzie lista / tablica / ... rozmiarów zamówień, które sumują się do i minimalizują cenę zamówienia
- możesz zwrócić wszystkie możliwe zamówienia
Przypadki testowe
4 -> [4] (4.55)
23 -> [23] (26.10)
24 -> [6,18],[9,15],[12,12] (27.20)
31 -> [6,25] (34.60)
32 -> [4,28],[6,26],[7,25] (35.75)
33 -> [4,29],[5,28],[6,27],[7,26],[8,25] (36.90)
34 -> [6,28],[9,25] (38.00)
35 -> [35] (39.15)
125 -> [125] (139.00)
200 -> [25,50,125] (222.40)
201 -> [26,50,125] (223.55)
250 -> [125,125] (278.00)
251 -> [26,50,50,125] (279.15)
418 -> [15,28,125,125,125],[18,25,125,125,125] (465.20)
1001 -> [26,50,50,125,125,125,125,125,125,125] (1113.15)
12345 -> [15,80,125,125,125,125,125,125,125,125,125,125,125,125,125,125,125,125,125,125,125,125,125,125,125,125,125,125,125,125,125,125,125,125,125,125,125,125,125,125,125,125,125,125,125,125,125,125,125,125,125,125,125,125,125,125,125,125,125,125,125,125,125,125,125,125,125,125,125,125,125,125,125,125,125,125,125,125,125,125,125,125,125,125,125,125,125,125,125,125,125,125,125,125,125,125,125,125,125,125],[25,70,125,125,125,125,125,125,125,125,125,125,125,125,125,125,125,125,125,125,125,125,125,125,125,125,125,125,125,125,125,125,125,125,125,125,125,125,125,125,125,125,125,125,125,125,125,125,125,125,125,125,125,125,125,125,125,125,125,125,125,125,125,125,125,125,125,125,125,125,125,125,125,125,125,125,125,125,125,125,125,125,125,125,125,125,125,125,125,125,125,125,125,125,125,125,125,125,125,125],[45,50,125,125,125,125,125,125,125,125,125,125,125,125,125,125,125,125,125,125,125,125,125,125,125,125,125,125,125,125,125,125,125,125,125,125,125,125,125,125,125,125,125,125,125,125,125,125,125,125,125,125,125,125,125,125,125,125,125,125,125,125,125,125,125,125,125,125,125,125,125,125,125,125,125,125,125,125,125,125,125,125,125,125,125,125,125,125,125,125,125,125,125,125,125,125,125,125,125,125] (13728.10)
Uwaga: listy te testami wszystkich możliwych wyjść w tym cenę, jesteś zobowiązany jedynie do wyjścia jednego , a ty nie wymaga wyjścia cena!
1: Można znaleźć dane jako CSV tutaj .
Odpowiedzi:
JavaScript (ES6), 123 bajty
Zwraca kolejność jako ciąg rozdzielony spacjami.
Wypróbuj online!
W jaki sposób?
źródło
JavaScript (Node.js) ,
112108106105 bajtówWypróbuj online!
Zoptymalizowane na podstawie odpowiedzi Arnaulda
Różnice
467 bajtów)źródło
Retina 0.8.2 ,
160155 bajtówWypróbuj online! Link zawiera nagłówek, który testuje wszystkie wartości zn do 1, usuń go, jeśli chcesz tylko przetestować n samo. Wykorzystuje algorytm @ Arnauld. Edycja: Zapisano 5 bajtów, kupując 95 skrzydeł jako 80 + 15 zamiast 50 + 45. Objaśnienie:
Konwertuj na unary.
Powtarzaj, aż nie będzie można kupić więcej ofert.
Znajdź sposób zakupu ofert, a następnie przechwyć i zduplikuj jedną z ofert.
Konwertuj przechwyconą ofertę na dziesiętną i odejmij jąn .
Oferty są kupowane pod następującymi warunkami:
Kup 80 skrzydeł, jeśli pozostawia 0, 6, 9, 12, 15, 18, 25 lub 28 skrzydeł.
Kup 70 skrzydeł, jeśli to wszystko, czego potrzebujemy.
Kup 9 skrzydeł, jeśli pozostawi to 15 lub 40 skrzydeł.
Kup 30, 35, 40 lub 45 skrzydeł, jeśli to wszystko, czego potrzebujemy.
Kup 26, 27, 28 lub 29 skrzydeł, jeśli tylko tego potrzebujemy.
Kup od 4 do 23 skrzydeł, jeśli to wszystko, czego potrzebujemy.
Kup 125, 50 lub 25 skrzydeł, jeśli możemy i jeśli nadal możemy dokładnie kupić więcej skrzydeł. Pamiętaj, że mamy te opcje na końcu zmiany, więc najpierw dokładnie testowane są dokładne zakupy.
źródło