Pièces et billets en euros

26

Comme la majorité des pays utilisant l'euro ont le ,séparateur décimal, vous devez également l'utiliser.

La tâche consiste à sortir toutes les valeurs des pièces et billets en euros dans l'ordre croissant. Vous devez également mettre la fin ,00sur les valeurs entières.

0,01 0,02 0,05 0,10 0,20 0,50 1,00 2,00 5,00 10,00 20,00 50,00 100,00 200,00 500,00

J'accepte les deux sorties vers stdout ou une fonction renvoyant un tableau / liste. Si la sortie est vers stdout, les séparateurs acceptables entre les valeurs sont: espace, tabulation ou retour à la ligne.

Il n'y aura pas de réponse acceptée, sauf si je vois quelqu'un que je trouve très créatif.

, donc je veux connaître la réponse la plus courte par langue.

Mise à jour:

Les 0zéros non significatifs ne sont pas acceptables. Désolé, je devrais être clair avant.

Mise à jour 2:

Il est également acceptable une fonction renvoyant une chaîne.

sergiol
la source
1
peut-il y avoir un espace de fuite?
dzaima
1
@dzaima: oui. :)
sergiol
1
Les zéros non significatifs sont-ils acceptables (comme 000,01etc.)?
Jonathan Allan
8
La réponse acceptée est la réponse qui remporte le défi. Vous pouvez soit accepter la réponse la plus courte, soit aucune réponse, mais pas arbitraire.
Dennis
2
@KevinCruijssen: Voir la réponse de Dennis pour référence: codegolf.stackexchange.com/a/141484/29325
sergiol

Réponses:

27

Pure Bash, 48

s={1,2,5}
eval echo 0,0$s 0,${s}0 ${s}{,0,00},00

Essayez-le en ligne .

Traumatisme numérique
la source
Bien joué! Vous avez la coche!
sergiol
3
Je n'ai jamais remarqué le modèle ... et j'utilise la monnaie depuis 15 ans ..
Stephan Bijzitter
@StephanBijzitter de nombreuses devises fonctionnent comme ça.
NieDzejkob
7

Japt , 23 22 octets

-1 octet grâce à @Shaggy

5Æ#}ì ®eX-2 x2 d".,"
c

Renvoie un tableau de chaînes.

Essayez-le en ligne! avec le -Rdrapeau à des éléments de réseau de sortie sur des lignes séparées.

Justin Mariner
la source
Aller multiligne pour 22 octets .
Shaggy
7

Python 2 , 72 octets

print[('%.2f'%(10**(x/3-2)*(5>>~x%3))).replace(*'.,')for x in range(15)]

Essayez-le en ligne!

L'expression 5>>~x%3mappe les entiers non négatifs 1, 2, 5, 1, 2, 5...

Cela fonctionne parce que 5, 2, 1sont les bons-bitshifts successives de 5( 0b1010b100b1); nous les parcourons à l'envers.

Lynn
la source
6

Fusain , 36 octets

EE×125⁵⁺⁺×0⁻²÷κ³ι×0÷κ³⁺⁺✂ι⁰±²¦¹,✂ι±²

Essayez-le en ligne! Le lien est vers la version détaillée du code. Explication:

   125                                  String `125`
  ×   ⁵                                 Repeated 5 times
 E                                      Map over each character
              ÷κ³   ÷κ³                 Integer divide loop index by 3
            ⁻²                          Subtract from 2
          ×0      ×0                    Repeat the string `0` x times
        ⁺⁺       ι                      Concatenate with the character
E                                       Map over each resulting string
                         ✂ι⁰±²¦¹        Slice off the last two digits
                                ✂ι±²    Extract the last two digits
                       ⁺⁺       ,       Concatenate with a comma
                                        Implicitly print one per line
Neil
la source
6

SOGLOnline offline, 27 26 25 24 23 22 21 octets

252¹5∙īυ;{⁴Ζ.,ŗP*F⁾?½

Essayez-le ici!

Le lien en ligne n'affiche pas de zéros à la fin, mais la version hors ligne fait que Javas BigDecimals est agréable.

Explication:

252¹5∙īυ;{⁴Ζ.,ŗP*F⁾?½
252¹                 push the array [2, 5, 2]
    5∙               multiply vertically by 5
      īυ;            push 0.01 below that - the main number
         {           iterate over that array - [2,5,2,2,5,2,2,5,2,2,5,2,2,5,2]
          ⁴            duplicate the main number
           Ζ.,ŗ        replace "." with ","
               P       output in a new line
                *      multiply the main number with the current item of the array
                 F⁾?   if the current array item-2 isn't 0, then
                    ½    divide by 2

POUR s'exécuter dans l'interpréteur hors ligne, téléchargez le référentiel SOGLOnlines , accédez au compilateur / interprète, ouvrez l'un des .pdefichiers avec Traitement , puis faites le fichier -> exporter pour votre système d'exploitation (sinon vous ne pouvez pas donner d'arguments à un programme de traitement: /), puis exécutez le programme compilé avec un argument sur le chemin du fichier avec le code. Ensuite, stdout contiendra ceci .

2L¼2¹5∙īυ;{⁴Ζ.,ŗP*pour 18 octets fonctionne presque mais le montant zéro augmente, ce qui entraîne 0,01 0,02 0,050 0,100 0,200 0,5000 1,0000 2,0000 5,00000 10,00000 20,00000 50,000000 100,000000 200,000000 500,0000000(les nouvelles lignes sont remplacées par des espaces)

dzaima
la source
2
Format de sortie incorrect: "Vous devez également mettre la fin ,00sur les valeurs entières." (J'imagine que cela est également destiné à inclure le suivi le ,0cas échéant)
Jonathan Allan
Vous devez corriger votre message en fonction de l'observation de @JonathanAllan. JonathanAllan, merci
sergiol
@JonathanAllan: Hmmmpf, permettez-moi de prendre votre commentaire avec un grain de sel. L'auteur du message dit: " Le lien en ligne n'affiche pas de zéros à la fin, mais la version hors ligne fait que Javas BigDecimals est agréable. ". Je n'ai donc aucun moyen de vérifier si le script se comporte bien ou non sur la version hors ligne.
sergiol
@sergiol Ah, j'ai raté ce texte. Je me demande pourquoi l'interprète en ligne est implémenté différemment à cet égard - dzaima ...?
Jonathan Allan
Je crois que l' interprète en ligne est écrit en JavaScript tandis que celui hors ligne est écrit en traitement. Les solutions ne doivent pas non plus être testables en ligne. : P
totalement humain
6

Java 8, 109 108 81 80 octets

Merci à @ OlivierGrégoire pour l'idée Locale

x->{for(double i=.001;i<11;)System.out.printf("%.2f %.2f %.2f ",i*=10,i*2,5*i);}

Essayez-le en ligne!

Roberto Graham
la source
Vous pouvez enregistrer un octet en passant à un paramètre inutilisé (meta post à ce sujet) : Essayez-le en ligne
Justin Mariner
100 octets .
Olivier Grégoire
2
81 octets . Fonctionne sur mon système car mes paramètres régionaux par défaut sont be_FR. "Travailler sur mon système" est assez bon. Je ne trouve pas le méta-post lié à cela, mais vous pouvez l'utiliser. Pour le simuler, il suffit d'avoir Locale.setDefault(Locale.FRENCH);dans la partie non compétitive du TIO.
Olivier Grégoire
1
@ OlivierGrégoire Voici le méta-post pertinent , et vous avez en effet raison qu'il soit autorisé. J'ai même demandé à OP de vérifier, et il m'a lié à la réponse de Dennis avec un lien vers ce meta post.
Kevin Cruijssen
1
80 octets:x->{for(double i=.001;i<11;)System.out.printf("%.2f %.2f %.2f ",i*=10,i*2,5*i);}
Nevay
5

APL (Dyalog) , 30 28 octets

Programme complet. Sorties séparées par des espaces vers STDOUT.

'\.'R','2⍕×\.01,142 2.5 2

Essayez-le en ligne!

2 2.5 2 la liste;
[2,2.5,2]

14⍴ cyclique r Eshape de longueur 14;
[2,2.5,2,2,2.5,2,2,2.5,2,2,2.5,2,2,2.5]

.01 ajouter 0,01;
[0.01,2,2.5,2,2,2.5,2,2,2.5,2,2,2.5,2,2,2.5]

×\ multiplication cumulative;
[0.01,0.02,0.05,0.1,0.2,0.5,1,2,5,10,20,50,100,200,500]

2⍕ format avec deux décimales;
" 0.01 0.02 0.05 0.10 0.20 0.50 1.00 2.00 5.00 10.00 20.00 50.00 100.00 200.00 500.00"

 donner que (à séparer ','de 2)

'\.'⎕R',' PCRE R Les périodes de EPlacez par des virgules;
" 0,01 0,02 0,05 0,10 0,20 0,50 1,00 2,00 5,00 10,00 20,00 50,00 100,00 200,00 500,00"

Adam
la source
4

R 70 , 50 octets

inspiré par @Giuseppe:

format(c(1,2,5)*10^rep(-2:2,e=3),ns=2,de=",",sc=F)

Essayez-le ici!

Non golfé

format(c(1,2,5)*10^rep(-2:2, each = 3),
   nsmall = 2, 
   decimal.mark = ",",
   scientific = FALSE)
AndriusZ
la source
Je ne pouvais gérer que 56 en utilisant une méthode similaire, juste avec un t (externe ()) plutôt que le rep (). Je ne sais pas si nous sommes autorisés à utiliser cet espace blanc principal, cela coûterait 4 octets à réparer.
CriminallyVulgar
3

JavaScript (ES6), 83 octets

Renvoie un tableau.

_=>[...'125'.repeat(k=5)].map(c=>(c*(c-1?k:k*=10)/5e3).toFixed(2).split`.`.join`,`)

Démo


Version récursive (ES7), 84 octets

Renvoie une chaîne avec un espace de fin.

f=(i=0)=>i<15?('125'[i%3]/100*10**(i/3|0)).toFixed(2).split`.`.join`,`+' '+f(i+1):''

Démo

Arnauld
la source
3

Python 2 , 80 77 75 73 octets

-2 octets grâce à @ Mr.Xcoder
-1 octets grâce à @EriktheOutgolfer
-2 octets grâce à @totallyhuman
-2 octets grâce à @Lynn

print[('%.2f'%(v*m)).replace(*'.,')for m in.01,.1,1,10,100for v in 1,2,5]

Essayez-le en ligne!

ovs
la source
@EriktheOutgolfer oublie de supprimer des espaces
M. Xcoder
J'ai oublié de spécifier quel type de séparateur entre les valeurs est acceptable. Ne vous inquiétez pas, la nouvelle ligne est acceptable.
sergiol
2

Rétine , 42 octets


5$*0
0
$'1$`¶$'2$`¶$'5$`¶
..¶
,$&
m`^00?

Essayez-le en ligne! Explication: Il existe quinze valeurs, avec 1, 2 et 5 à chacun des cinq emplacements. La première étape insère cinq 0. La deuxième étape les répète en carré, puis change la diagonale de fin en 1, puis duplique ces lignes trois fois avec 2 et 5. La troisième étape insère les virgules et la dernière étape supprime les zéros de tête inutiles.

Neil
la source
1

Fusain , 37 octets

”{➙∧N\`�4✳×″↶tι⦄|Q~(↥↗⁻“Q§U‴w⎇δUη◨÷¤G”

Essayez-le en ligne! Le lien est vers la version détaillée.

Ouais, la compression!

totalement humain
la source
1

Bash , 88 octets

s=125
for i in {0..14};{ printf %1.2f\  `bc<<<"scale=2;${s:i%3:1}*10^$[i/3-2]"`|tr . ,;}

Essayez-le en ligne!

Justin Mariner
la source
3
Après tout ce travail acharné, echo 0,01 0,02 0,05 0,10 0,20 0,50 1,00 2,00 5,00 10,00 20,00 50,00 100,00 200,00 500,00c'est la même durée :(
Digital Trauma
@DigitalTrauma Mais ce n'est pas amusant: P
Justin Mariner
1

JavaScript (ES6), 81 octets

Renvoie un tableau.

_=>[...Array(13),b=.005,i=0].map(p=>(b*=++i%3?2:2.5).toFixed(2).replace(".",","))

Démo


OK je
la source
1

Lisp commun, 95 octets

(dotimes(i 5)(dolist(j'(1 2 5))(princ(substitute #\, #\.(format()"~$ "(*(expt 10(- i 2))j))))))

Essayez-le en ligne!

Renzo
la source
1

Husk , 28 octets

ṁm↔ṪöJ',CtN`J§¤eR'0≥≤2ḣ5"125

Essayez-le en ligne!

Juste une manipulation de chaîne, car Husk est terrible pour formater les nombres à virgule flottante.

Explication

ṁm↔ṪöJ',CtN`J§¤eR'0≥≤2ḣ5"125
                        "125  The string "125".
                      ḣ5      The range [1,2,3,4,5].
   Ṫö                         Compute their outer product wrt this function:
                               Arguments are number n (say 3) and character c (say '5').
             §     ≥≤2         Compute max(0,n-2+1) and max(0,2-n+1),
                R'0            repeat '0' those numbers of times,
              ¤e               and put them into a list: ["00",""]
           `J                  Join with c: "005"
        CtN                    Split to lengths 2 and at most 3: ["00","5"]
     J',                       Join with ',': "00,5"
                              This gives a 2D array of the outputs reversed.
ṁ                             Map and concatenate
 m↔                           map reversal.
                              Implicitly print separated by newlines.
Zgarb
la source
1

C ++, 138 120 octets

-18 octets grâce à MSalters

#include<iostream>
void p(){for(auto&a:{"0,0%d ","0,%d0 ","%d,00 ","%d0,00 ","%d00,00 "})for(int b:{1,2,5})printf(a,b);}

Version codée en dur, par Lynn, 116 octets

#include<ios>
void p(){puts("0,01 0,02 0,05 0,10 0,20 0,50 1,00 2,00 5,00 10,00 20,00 50,00 100,00 200,00 500,00");}
HatsuPointerKun
la source
Vous devez inclure un exemple en ligne pour les personnes qui le voient fonctionner. Je l'ai déjà fait pour vous: tio.run/…
sergiol
Pas besoin de vet f: void p(){for(auto&a:{"0,0%d ","0,%d0 ","%d,00 ","%d0,00 ","%d00,00 "})for(int b:{1,2,5})printf(a,b);}- seulement 120 octets
MSalters
#include<ios>␤void p(){puts("0,01 0,02 0,05 0,10 0,20 0,50 1,00 2,00 5,00 10,00 20,00 50,00 100,00 200,00 500,00");}est de 116 octets.
Lynn
1

R , 70 61 octets

options(scipen=9,OutDec=",")
print(c(1,2,5)*10^rep(-2:2,e=3))

Essayez-le en ligne!

-9 octets grâce à Rui Barradas

Outgolfed par AndriusZ

Giuseppe
la source
Je pense qu'il n'y a pas 1000 €, 2000 € et 5000 €
AndriusZ
Vous pouvez économiser 5 octets en supprimantprint
AndriusZ
en mélangeant vos et mes réponses, nous pouvons atteindre 50 octets -format(c(1,2,5)*10^rep(-2:2,e=3),ns=2,de=",",sc=9)
AndriusZ
@AndriusZ Je pense que vous avez toujours besoin d'un printautour de cette réponse, mais vous devez l'afficher vous-même; Je viens d'utiliser la méthode la plus barbare pour modifier les paramètres, en utilisant formatla réflexion nécessaire.
Giuseppe
1
Vous pouvez économiser 8 octets en combinant les deux optionsen un. options(OutDec=",",scipen=5).
Rui Barradas
1

05AB1E , 25 octets

125S5иεN3÷°*т/'.',:N2›i0«

Renvoie une liste de chaînes.

Essayez-le en ligne.

Explication:

125                          # Push 125
   S                         # Split to a list of digits: [1,2,5]
    5и                       # Repeat it 5 times: [1,2,5,1,2,5,1,2,5,1,2,5,1,2,5]
      ε                      # Map each to:
       N3÷                   #  Integer-divide the map-index by 3
          °                  #  Take it to the power 10
           *                 #  Multiply the current map number with it
            т/               #  Divide it by 100
              '.',:          #  Replace all "." with ","
                   N2i      #  And if the map-index is larger than 2:
                       0«    #   Append a "0"

125S5иpourrait être •}•15∍(push compressé 125; agrandissez-le à la taille 15:) 125125125125125et '.',:pourrait être „.,`:(push string ".,", pop et push les caractères en tant qu'éléments séparés dans la pile) pour le même nombre d'octets: Essayez-le en ligne.
En outre, N3÷°*т/peut être raccourci à N3÷Í°*(où Ísoustrait 2), mais malheureusement, nous avons besoin de /tous les nombres deviennent des décimales, alors que la N3÷Í°*plupart des nombres restent des nombres entiers.

Kevin Cruijssen
la source
1

T-SQL, 104 octets

SELECT FORMAT(p*n,'0\,00')
FROM(VALUES(1),(2),(5))a(n),(VALUES(1),(10),(100),(1E3),(1E4))b(p)
ORDER BY p,n

Les sauts de ligne sont uniquement pour la lisibilité.

Plus ennuyeux que la PRINTversion triviale (90 octets):

PRINT'0,01 0,02 0,05 0,10 0,20 0,50 1,00 2,00 5,00 10,00 20,00 50,00 100,00 200,00 500,00'
BradC
la source
Vous pouvez ajouter à votre réponse une démo en ligne: rextester.com/IBKO53221
sergiol
Et supprimez les nouvelles lignes pour qu'il soit plus golfique: rextester.com/ZANC22480
sergiol
0

Rétine , 58 octets


¶0¶00¶000¶0000¶
.*¶
1$&2$&5$&
^
¶
+`¶(.?.?¶)
¶0$1
..¶
,$&

Essayez-le en ligne!

ovs
la source
1
J'ai revérifié avec une question à l'OP - les zéros de tête ne sont pas acceptables :(
Jonathan Allan
Vous devez corriger votre message en fonction de l'observation de @JonathanAllan. JonathanAllan, merci
sergiol
@sergiol l'a corrigé
2017
0

Rubis , 66 62 octets

-2.upto 2{|m|[1,2,5].map{|v|$><<('%.2f '.%v*10**m).tr(?.,?,)}}

4 octets de moins grâce à Lynn !

Essayez-le en ligne!

Cristian Lupascu
la source
-2.upto 2{…}enregistre 3 octets. '%.2f '.%v*10**menregistre un octet (appelant la %méthode!)
Lynn
0

C # (.NET Core) , 107 octets

Console.Write("0,01{0}2{0}5 0,10 0,20 0,50 1{1}2{1}5{1}1{2}2{2}5{2}10{2}20{2}50{2}"," 0,0",",00 ","0,00 ");

Exécuter

ronflement
la source
0

JavaScript - 96 octets

x=>{for(o="",b=-2;b<3;b++)for(n of[1,2,5])o+=(n*10**b).toFixed(2).replace(".",",")+" ";return o}

Et voici une approche fonctionnelle légèrement plus longue (98 caractères):

x=>[].concat.apply([],[.01,.1,1,10,100].map(n=>[n,n*2,n*5])).map(n=>n.toFixed(2).replace(".",","))
Matt Consto
la source
0

Tcl , 80 octets

lmap d {-2 -1 0 1 2} {lmap c {1 2 5} {puts [regsub \\. [format %.2f $c\e$d] ,]}}

Essayez-le en ligne!

Tcl , 90 octets

lmap d {.01 .1 1 10 100} {lmap c {1 2 5} {puts [regsub \\. [format %.2f [expr $c*$d]] ,]}}

Essayez-le en ligne!

Encore très long, le golf plus tard!

sergiol
la source