Podczas podnoszenia ciężarów chcę uzyskać określony ciężar, mocując kilka płyt do pręta.
Mam następujące tablice:
- 6 płytek po 1 kg każda
- 6 płytek po 2,5 kg każda
- 6 płytek po 5 kg każda
- 6 płytek po 10 kg każda
Sam pręt waży 10 kg.
Dozwolone jest jedynie mocowanie płyt parami - są one przymocowane na każdym końcu pręta, a układ na dwóch końcach musi być całkowicie symetryczny (np. Przymocowanie dwóch 5-kilogramowych płyt na jednym końcu i jednej 10-kilogramowej płyty na drugi koniec jest zabroniony ze względów bezpieczeństwa).
Stwórz program lub funkcję, która mówi mi, ile płyt każdego rodzaju muszę użyć, aby uzyskać daną całkowitą wagę. Dane wejściowe to liczba całkowita większa niż 11; wynikiem jest lista / tablica / ciąg 4 liczb. Jeśli nie jest możliwe połączenie istniejących płyt w celu uzyskania docelowej masy, wypisz zerową / pustą tablicę, niepoprawny ciąg, wyrzuć wyjątek lub coś takiego.
Jeśli istnieje kilka rozwiązań, kod musi wypisać tylko jedno (nie zmuszaj użytkownika do wyboru - jest zbyt zajęty innymi rzeczami).
Przypadki testowe:
12 -> [2 0 0 0] - 2 plates of 1 kg plus the bar of 10 kg
13 -> [0 0 0 0] - a special-case output that means "impossible"
20 -> [0 0 2 0] - 2 plates of 5 kg + bar
20 -> [0 4 0 0] - a different acceptable solution for the above
21 -> [6 2 0 0] - 6 plates of 1 kg + 2 plates of 2.5 kg + bar
28 -> [0 0 0 0] - impossible
45 -> [0 2 6 0] - a solution for a random number in range
112 -> [2 4 6 6] - a solution for a random number in range
121 -> [6 6 6 6] - maximal weight for which a solution is possible
Jeśli Twój kod wyświetla liczby w odwrotnej kolejności (od grubej płyty do lekkiej), podaj ją wyraźnie, aby uniknąć pomyłek.
źródło
Odpowiedzi:
Galaretka , 22 bajty
Wypróbuj online! lub zweryfikuj wszystkie przypadki testowe .
Jak to działa
źródło
MATL ,
2928 bajtówW przypadku danych wejściowych, które nie mają rozwiązania, tworzy to puste dane wyjściowe (bez błędów).
Wypróbuj online!
Wyjaśnienie
źródło
Mathematica, 70 bajtów
Funkcja anonimowa. Pobiera na wejściu liczbę i albo wyświetla listę, albo błędy i zwraca,
{}[[1]]
jeśli nie ma rozwiązania.źródło
Galaretka, 25 bajtów
Wypróbuj tutaj.
źródło
2,5,10,20
->2,5,⁵,20
,
jest diadem? Całe moje życie jest kłamstwem,
to diada , ale może być również używana do literałów.2,5,⁵,20
Nie jest to jednak dosłowne (2,5
i20
są, ale,
,⁵
i,
atomy), tak, że trzeba coś połączyć linki.Python 3, 112 bajtów
Anonimowa funkcja, która pobiera za pomocą argumentu masę docelową i zwraca liczbę każdej płytki jako listę. Jeśli nie ma rozwiązania, generowany jest błąd. To czysta brutalna siła.
Jak to działa
Wypróbuj na Ideone
źródło
Brachylog , 50 bajtów
Zwraca,
false
gdy nie jest to możliwe.źródło
Pyth,
343125 bajtówZestaw testowy.
Błędy w niemożliwości.
Jest to w zasadzie brutalna siła.
Jest to dość szybkie, ponieważ istnieje tylko 256 możliwych ustawień.
źródło
Scala, 202 bajty
Zdecydowano, że Scala nie ma tu dużo miłości, dlatego przedstawiam (prawdopodobnie nie optymalne) rozwiązanie w Scali.
Program generuje w odwrotnej kolejności i z dodatkowymi śmieciami w porównaniu do rozwiązań na poczcie. Gdy nie znaleziono rozwiązania, drukuje 0.
Uwaga: Mogłem nie usunąć dowolny z nowej linii lub spacjami bo Scala jest głupi, więc myślę, że w celu zmniejszenia rozmiaru, metoda musi być przerobione chyba brakowało mi coś oczywistego.
źródło
APL, 40 bajtów
W ⎕IO ← 0. Po angielsku:
10+2×,∘.+⌿1 2.5 5 10∘.×⍳4
: zbuduj tablicę wszystkich możliwych wag, obliczając zewnętrzną sumę wag 4D według rodzaju wagi;⍵⍳⍨
: przeszukaj indeks podanego. Jeśli nie zostanie znaleziony, indeks wynosi 1 + suma tablicy w kroku 1;(4⍴4)⊤
: reprezentują indeks w podstawie 4, to znaczy obliczają współrzędne danego ciężaru w przestrzeni 4D;2×
: przenieś wynik do przestrzeni problemowej, gdzie współrzędne powinny być interpretowane jako połowa liczby płyt.Przykład: {2 × (4⍴4) ⊤⍵⍳⍨10 + 2 ×, ⊃∘. + / ↓ 1 2,5 5 10∘. × ⍳4} 112 2 4 6 6
Bonus : ponieważ APL jest językiem tablicowym, można przetestować kilka wag jednocześnie. W takim przypadku wynik jest transponowany:
źródło
JavaScript (ES6), 109 bajtów
Zwraca
00-2
w przypadku błędu. Alternatywne rozwiązanie, które zwracaundefined
błąd, również 109 bajtów:źródło