Je suis sûr que vous connaissez le système de prix de 9,99 $, au lieu d'utiliser 10 $. Eh bien, dans votre nouveau travail d'administrateur système dans un grand magasin de vente au détail, ils veulent que les prix adhèrent à un schéma similaire:
- Tous les prix sont en dollars entiers, pas de cents.
- Tous les prix doivent se terminer par 5 ou 9, en arrondissant au plus proche mais en augmentant si le dernier chiffre est juste entre 5 et 9. (S'applique au dernier chiffre 2 et 7)
- L'entrée la plus basse est de 1 $, et le prix le plus bas devrait être de 5 $.
Votre entrée est une liste d'entiers:
12
8
41
27
144
99
3
Et la sortie devrait une liste des nouveaux prix. Dans le cas ci-dessus:
15
9
39
29
145
99
5
Réponses:
Brainfuck, 4428 octets (invalide)
Une fois que j'ai su que l'algorithme fonctionnait, j'ai perdu tout intérêt et je n'ai pas terminé le gestionnaire d'entrée. C'est pourquoi cette solution résout techniquement le problème, mais est très difficile à utiliser. Lorsque vous démarrez le programme dans un interpréteur interactif (plus vite c'est mieux), vous pouvez saisir votre "numéro". Il doit être entré dans Base256 si votre interprète ne prend pas en charge la conversion de numéro (le mien le fait). Le prix maximum que vous pouvez saisir est donc de 255.
Il effectue ensuite un modulo en boucle si le nombre est supérieur à 9 pour séparer tous les chiffres sauf le dernier. Les résultats de la division sont enregistrés, tandis que le dernier chiffre est arrondi à 5 ou 9. Ensuite, ils sont ajoutés et imprimés. Ensuite, le programme nettoie tous les registres utilisés (probablement exagérés) et demande le numéro suivant.
Il gère tous les cas spéciaux (
$1
,$20/$21 -> $19
etc.). Regardez-le courir pour le numéro4
ici (environ 3 minutes, vidéo raccourcie):Code
la source
CJam,
1917 octetsTestez-le ici.
Prend les entrées sous forme de liste de style CJam et renvoie les retours à la ligne séparés.
Explication
la source
Python 2, 47
Si nous regardons la séquence de valeurs arrondies, nous voyons qu'elles viennent par blocs de 5.
Nous trouvons le bloc numérique dans lequel nous nous trouvons
(n+3)/5
(appelez cette valeurJ
). Ensuite, nous obtenons le bon multiple de5
avecJ*5
, et ajustons les choses comme30
vers le bas29
en soustrayant1
chaque fois qu'ilJ
est pair.Pour
1
donner un cas spécial5
plutôt que-1
, nous passons le résultat àmax(5,_)
.la source
meS,-*hJ/-d2K5K%J2KQ
m-|*K5hJ/-d2K6%J2Q
lambda l:[((n+3)/5*5or 6)-(n-2)/5%2for n in l]
Rétine, 32 octets
Accepte l'entrée dans une liste séparée par des virgules. Il doit y avoir une virgule de fin. Sorties au même format.
Explication:
la source
R,
51494743 octetsIl devrait y avoir de la place pour améliorer cela, mais je pense qu'une stratégie différente pourrait être meilleure. Prend un vecteur d'entiers de l'analyse et génère un vecteur d'entiers. Essentiellement, cela utilise la division entière pour arrondir le nombre, ajoute 1 et le multiplie par cinq. Tout ce qui est divisible par 10 a 1 emporté. Si n = 1, il incrémente la division entière de 1.
Essai
la source
Python 3,
7482 octetsJ'ai lutté pour la brièveté des valeurs inférieures à 11 et l'exigence de 1 pour évaluer à 5.
la source
Pyth,
21182928 octetsMerci à @Jakube d'avoir coupé 3 octets!
Essayez-le ici.
EDIT: Apparemment, il n'était pas valide. Je l'ai réparé au prix de 11 octets; Je vais essayer de jouer au golf plus.
la source
eQ
est la même chose que%Q10
, vous pouvez également inline l'affectation:I<KeQ6+-QK5;E+-QK9
9
, si le dernier chiffre est0
ou1
Pyth, 21 octets
Malheureusement, je dois dépenser 4 octets pour gérer correctement 1 $.
la source
1
avec seulement 2 octets cependant.mt|t+d@jC"²a<"6ed6Q
Pyth, 18 octets
Essayez-le en ligne: démonstration ou suite de tests
Cette réponse est basée sur la solution Python / Pyth de @ xor. La principale différence est que je traite le cas spécial
1
différemment. Le résultat réel pour1
serait0 - 1 = -1
. En utilisant Python,or
je peux remplacer le0
par un6
, résultant en6 - 1 = 5
. Cela évite la douleur de prendre le maximum5
et le résultat.Explication:
la source
Hassium , 133 octets
Exécutez et voyez le développé en ligne: http://hassiumlang.com/Hassium/index.php?code=4f1c14f4d699b11da7a6392a74b720c4
la source
TI-BASIC, 19 octets
Utilise l'algorithme de xnor. TI-BASIC obtient gratuitement la vectorisation et la multiplication, mais nous dépensons quelques octets de plus car il n'a pas de modulo.
la source
Haskell, 114 octets
Explication:
La fonction
g
renvoie9-n
ifn>6
ou else5-n
ifn>1
ou else-n-1
.g
reçoit le dernier chiffre et renvoie ce qui doit être ajouté au numéro d'entrée.f
utiliseg
pour obtenir la solution (plus beaucoup de manipulation de chaînes).main
affiche le résultat def
pour chaque ligne d'entrée.la source
Rubis,
5550 + 1 octetsLancez - le avec le
n
drapeau, comme suit:ruby -n prices.rb
. Entrez chaque prix sur une ligne distincte.la source