La tâche est simple. Donne- moi des 1000, 500et des 100notes.
Comment ? vous pourriez demander. Ne vous inquiétez pas, pas besoin de voler une banque car il y a un distributeur de billets à proximité qui accepte votre carte de crédit. Mais votre limite de crédit est juste suffisante pour la tâche, vous devez donc être prudent avec les retraits.
Défi
Compte tenu du nombre de 1000, 500et les 100notes nécessaires, calculer les retraits spécifiques nécessaires pour obtenir au moins les nombreuses notes. À chaque retrait, le GAB peut recracher chacune des notes selon les règles suivantes:
- Le montant retiré (
A) est inférieur à5000- Si
A%1000 == 0, alors ATM crache 1500note, 5100notes et1000notes de repos - Sinon, si
A%500 == 0l'ATM crache 5100notes, reste des1000notes - Sinon
A%1000 < 500, le guichet automatique crache desfloor(A/1000)1000notes et des100notes de repos - Sinon
A%1000 > 500, le guichet automatique crache desfloor(A/1000)1000notes, 1500et des100notes de repos
- Si
- Le montant retiré est supérieur ou égal à
5000- Si
A%1000 == 0, alors l'ATM crache 2500notes et1000notes de repos - Sinon, si
A%500 == 0le GAB crache 1500note et des1000notes de repos - Sinon
A%1000 < 500, le guichet automatique crache desfloor(A/1000)1000notes et des100notes de repos - Sinon
A%1000 > 500, le guichet automatique crache desfloor(A/1000)1000notes, 1500et des100notes de repos
- Si
Pour plus de précision, voici un tableau complet des notes retirées pour tous les montants possibles jusqu'à 7000(vous pouvez retirer plus, mais le schéma ne change pas par la suite). La commande est <1000> <500> <100>:
100 => 0 0 1 2500 => 2 0 5 4800 => 4 1 3
200 => 0 0 2 2600 => 2 1 1 4900 => 4 1 4
300 => 0 0 3 2700 => 2 1 2 5000 => 4 2 0
400 => 0 0 4 2800 => 2 1 3 5100 => 5 0 1
500 => 0 0 5 2900 => 2 1 4 5200 => 5 0 2
600 => 0 1 1 3000 => 2 1 5 5300 => 5 0 3
700 => 0 1 2 3100 => 3 0 1 5400 => 5 0 4
800 => 0 1 3 3200 => 3 0 2 5500 => 5 1 0
900 => 0 1 4 3300 => 3 0 3 5600 => 5 1 1
1000 => 0 1 5 3400 => 3 0 4 5700 => 5 1 2
1100 => 1 0 1 3500 => 3 0 5 5800 => 5 1 3
1200 => 1 0 2 3600 => 3 1 1 5900 => 5 1 4
1300 => 1 0 3 3700 => 3 1 2 6000 => 5 2 0
1400 => 1 0 4 3800 => 3 1 3 6100 => 6 0 1
1500 => 1 0 5 3900 => 3 1 4 6200 => 6 0 2
1600 => 1 1 1 4000 => 3 1 5 6300 => 6 0 3
1700 => 1 1 2 4100 => 4 0 1 6400 => 6 0 4
1800 => 1 1 3 4200 => 4 0 2 6500 => 6 1 0
1900 => 1 1 4 4300 => 4 0 3 6600 => 6 1 1
2000 => 1 1 5 4400 => 4 0 4 6700 => 6 1 2
2100 => 2 0 1 4500 => 4 0 5 6800 => 6 1 3
2200 => 2 0 2 4600 => 4 1 1 6900 => 6 1 4
2300 => 2 0 3 4700 => 4 1 2 7000 => 6 2 0
2400 => 2 0 4
Liste fournie par Martin
The Catch
Étant donné que la limite de crédit de votre carte de crédit est juste suffisante, vous devez vous assurer que le montant total retiré sur l'ensemble des retraits est le minimum possible pour la saisie / exigence donnée des notes.
Contribution
L'entrée peut être dans n'importe quel format favorable pour trois nombres correspondant au nombre de notes requises de valeur 1000, 500et 100. Pas nécessairement dans cet ordre.
Sortie
La sortie est le montant à retirer dans chaque transaction, séparé par une nouvelle ligne.
Exemples
Entrée (format <1000> <500> <100>):
3 4 1
Sortie:
600
600
600
3600
quelques autres:
7 2 5
5000
3500
1 2 3
600
1700
21 14 2
600
600
600
1600
5000
5000
5000
5000
5000
Hypothèses
- Vous pouvez supposer que le GAB contient un nombre infini de billets de chaque montant.
- Vous pouvez également supposer que vous pouvez effectuer un nombre illimité de transactions.
- De plus, la solution à certaines valeurs d'entrée peut ne pas être unique, vous pouvez donc sortir n'importe quelle solution qui remplit le montant minimum possible et les conditions minimales requises pour les notes.
Comme d'habitude, vous pouvez écrire une entrée de lecture de programme complète via STDIN / ARGV et imprimer la sortie vers STDOUT ou une fonction prenant une entrée via des arguments et retourne soit une liste d'entiers correspondant aux montants, soit une chaîne avec des montants séparés par une nouvelle ligne.
C'est le code-golf donc le code le plus court en octets gagne.
21 14 2terminer dans un délai raisonnable?