La tâche est simple. Donne- moi des 1000
, 500
et des 100
notes.
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
, 500
et les 100
notes 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 1500
note, 5100
notes et1000
notes de repos - Sinon, si
A%500 == 0
l'ATM crache 5100
notes, reste des1000
notes - Sinon
A%1000 < 500
, le guichet automatique crache desfloor(A/1000)
1000
notes et des100
notes de repos - Sinon
A%1000 > 500
, le guichet automatique crache desfloor(A/1000)
1000
notes, 1500
et des100
notes de repos
- Si
- Le montant retiré est supérieur ou égal à
5000
- Si
A%1000 == 0
, alors l'ATM crache 2500
notes et1000
notes de repos - Sinon, si
A%500 == 0
le GAB crache 1500
note et des1000
notes de repos - Sinon
A%1000 < 500
, le guichet automatique crache desfloor(A/1000)
1000
notes et des100
notes de repos - Sinon
A%1000 > 500
, le guichet automatique crache desfloor(A/1000)
1000
notes, 1500
et des100
notes 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
, 500
et 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 2
terminer dans un délai raisonnable?