Devo andare in banca e ritirare del denaro. Devo prelevare $ 30, $ 22 per pagare il mio compagno di stanza per Internet e $ 8 per il bucato. Poiché nessuno di questi può apportare modifiche, ho bisogno che i miei $ 30 siano divisi in due partizioni delle due dimensioni. Ciò significa che quando il cassiere mi chiede come voglio i miei $ 30 dovrò fare una richiesta. Potrei dire loro che lo voglio tra venti, cinque e cinque. Ma voglio rendere la mia richiesta il più semplice possibile per evitare di dovermi ripetere. Per semplificare la mia richiesta, potrei chiedere che il mio contante contenga venti e almeno 2 perché l'8 è implicito nel totale, ma meglio potrei semplicemente richiedere che una delle fatture che ricevo sia una banconota da un dollaro (Se tu non ne sono convinto provate a fare 29 dollari senza farne 8).
Quindi va tutto bene e dandy ma ho bisogno di fare questo calcolo ogni volta che vado in banca, quindi ho pensato di scrivere un programma per farlo (hai scritto un programma per farlo per me).
Il tuo programma o funzione dovrebbe prendere un elenco di numeri interi che rappresentano tutti i pagamenti che devo effettuare e un set di numeri interi che rappresentano le denominazioni delle fatture disponibili in banca, e devi produrre il più piccolo elenco di denominazioni in modo tale da ottenere il totale ciò include che l'elenco delle denominazioni può essere chiaramente diviso nell'elenco dei pagamenti.
Regole extra
Si può presumere che l'elenco delle denominazioni conterrà sempre un
1
oppure è possibile aggiungerlo a ciascun elenco.Alcuni input avranno più soluzioni minime. In questi casi è possibile produrre uno dei due.
Questo è code-golf, quindi le risposte verranno classificate in byte con meno byte migliori.
Casi test
Payments, denominations -> requests
{22,8} {1,2,5,10,20,50} -> {1} or {2}
{2,1,2} {1,5} -> {1}
{20,10} {1,2,5,10,20,50} -> {}
{1,1,1,1} {1,2} -> {1,1,1}
{20,6} {1,4,5} -> {1}
{2,6} {1,2,7} -> {2}
{22, 11} {1, 3, 30, 50} -> {1, 3}
{44, 22} {1, 3, 30, 50} -> {1, 3, 3, 30}
{2,6} {1,2,7} -> {2}
.
(If you are not convinced of this just try to make 29 dollars without making 9)
Intendi senza fare 8? O ho frainteso