Je dois aller à la banque et retirer de l'argent. J'ai besoin de retirer 30 dollars, 22 dollars pour payer mon coloc pour Internet et 8 dollars pour le linge. Comme aucun de ceux-ci ne peut rendre la monnaie, j'ai besoin que mes 30 dollars soient divisés en deux partitions des deux tailles. Cela signifie que lorsque le caissier me demande comment je veux mes 30 $, je vais devoir faire une demande. Je pourrais leur dire que je le veux dans vingt, cinq et cinq. Mais je veux que ma demande soit aussi simple que possible afin d'éviter de devoir me répéter. Pour simplifier ma demande, je pourrais demander que mon argent en contienne 20 et au moins 2 parce que le total 8 est implicite, mais mieux encore, je pourrais simplement demander que l’une des factures que je reçoive soit un dollar ne sont pas convaincus de cela, essayez simplement de gagner 29 dollars sans en faire 8).
Donc tout va bien, mais je dois faire ce calcul chaque fois que je vais à la banque, alors je pensais écrire un programme pour le faire (avez-vous écrit un programme pour le faire pour moi).
Votre programme ou fonction doit contenir une liste d’entiers représentant tous les paiements que je dois effectuer et un ensemble d’entiers représentant les valeurs nominales des factures disponibles à la banque. Vous devez générer la plus petite liste de valeurs nominales de sorte que le total cela inclut cette liste de dénominations peut être proprement divisée en la liste de paiements.
Règles supplémentaires
Vous pouvez supposer que la liste des dénominations contiendra toujours un
1
ou vous pourrez l’ajouter vous-même à chaque liste.Certaines entrées auront plusieurs solutions minimales. Dans ces cas, vous pouvez sortir l’un ou l’autre.
C'est du code-golf donc les réponses seront notées en octets, moins d'octets étant meilleurs
Cas de 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)
Vous voulez dire sans faire 8? Ou ai-je mal compris