Étant donné une décimale sous la forme de <float>, <precision>
, vous dessinez la représentation graphique de la partie décimale (c'est-à-dire la fraction) du flotteur. Exemples:
Entrée:,
6.75, 4
sortie:6||| 7 ----
6.75
(premier nombre de l'entrée) est le nombre à expliquer,4
(le deuxième nombre de l'entrée) est le nombre de tirets sous les tuyaux.6
est le plancher 6,75,7
est le plafond6.75
. Le nombre de tuyaux est ledecimal part of first input number * second input number
.Entrée:,
10.5, 6
sortie:10||| 11 ------
Entrée:,
20.16, 12
sortie20|| 21 ------------
.16
prend en fait 1,92 tuyaux, mais comme je ne peux pas dessiner 1,92 tuyaux, je le plafonne à 2.Entrée:,
1.1, 12
sortie:1| 2 ------------
.1
est de 1,2 tuyau dans ce cas, il est donc fixé à 1 tuyau.En outre, un cas de bord. Entrée:
5, 4
(c'est-à-dire que le nombre est un entier), sortie:5 6 ----
- Le nombre à expliquer est le flottant positif, limité uniquement par vos capacités linguistiques.
- Le nombre de précision est un entier pair, supérieur à 2 (c'est-à-dire que la précision minimale requise est 4). Il peut également être arbitraire.
- > = n.5 tuyaux sont arrondis à n + 1 (ie 1,5 est arrondi à 2 et 2,5 est arrondi à 3). <n.5 les tuyaux sont arrondis à n (c'est-à-dire que 1,4 est arrondi à 1 et 2,4 est arrondi à 2).
- Si cela serait plus pratique pour votre langue, vous pouvez prendre l'entrée comme un tableau, par exemple
[6.75, 4]
. Si vous prenez l'entrée dans l'ordre inverse, c'est[4, 6.75]
-à- dire , veuillez le spécifier dans votre réponse.
5.0 4
: entrée : tire-t-elle de5
à6
ou de4
à5
, ou est-elle acceptable? Entrée1.25 2
: a-t-elle 0 ou 1|
s, et pourquoi (c'est-à-dire quelle est la règle d'arrondi)? Le premier nombre de l'entrée doit-il être positif? Quelle est sa précision et sa magnitude maximales? Le deuxième nombre de l'entrée doit-il être positif? Si c'est négatif, tirons-nous en arrière?Réponses:
CJam, 32 octets
Prend la précision en premier et la seconde décimale, séparées par un espace.
Exécutez tous les cas de test.
Explication
la source
Mathematica, 119 octets
J'ai essayé ... Test:
la source
Japt,
4746 octetsJuste un tas d'ajouts et de répétitions.
Essayez-le en ligne
la source
(U-Uf)
équivaut àU%1
enregistrer deux octets.Java,
253206181 octetsEnregistrement de 47 octets grâce à @Kenney en insérant les conditions et les variables utilisées une fois et en triant les variables redondantes.
Encore 25 octets enregistrés grâce à @Kenney en insérant 2 boucles avec des opérateurs ternaires.
Manipulation de cordes pure:
Version des boucles intégrées (181 octets):
Version 4 boucles (206 octets):
Version non golfée:
Exemple de travail ici sur ideone.com . Le programme complet accepte l'entrée STDIN en tant que
<float>,<precision>
.REMARQUE: les
Math.round(float)
tours de Java utilisentRoundingMode.HALF_UP
par défaut, ce qui est le comportement requis de l'OP.La sortie des cas de test fournis était différente de celle fournie par le PO.
la source
a
(jamais utilisé), vous mettre à 233. Vous pourriez sauver une autre 23 pour obtenir à 210 octets: remplacementq.length()
deb
sauvegarde 13:int g=(int)f, b=(""+g).length(), c=b, i=0;
. Incrémenter l'itérateur dans l'état de lafor
sauvegarde 6, et inlined
(utilisé une fois) permet d' économiser 4:int c = b; for(;i++<b;)h+=" "; for(;i++<=b+p;)h+="-"; for(i=c;i<c+Math.round((f-g)*p);i++)q+="|"; for(;i++<p+b;)q+=" ";
.\n
b
est devenu obsolète aswell ;-) Vous pouvez toujours enregistrer 1 octet dans le 2ème pour:for(;i++<=c+p;)
. Vous pouvez enregistrer le fichier avec des fins de ligne Unix sur Windows, mais malheureusement Java n'autorise pas les chaînes multilignes .for(;i<c+p;)h+=i++<c?" ":"-";for(i=c;i<p+c;)q+=i++<c+Math.round((f-g)*p)?"|":" ";
Javascript ES6,
105104 octets1 octet enregistré grâce à, euh, comment tapez-vous ՊՓԼՃՐՊՃՈԲՍԼ de toute façon?
la source
(f,p)=>(i=f|0)+("|"[r="repeat"](j=(f-i)*p+.5|0)+" "[r](p-j))+(i+1)+("\n"+i).replace(/\d/g," ")+"-"[r](p)
\n
par une nouvelle ligne. Et assurez-vous de l'envelopper dans des chaînes de modèle.Haskell, 113 octets
Exemple d'utilisation:
properFraction
divise la décimale en sa partie entière et fraction. La sortie est une liste des parties (nombre initial, barres, espaces, ...) qui est concaténée en une seule chaîne (via>>=id
).la source
main
wrapper pour un programme complet).MATL , 49 octets
Utilise la version 6.0.0 du langage / compilateur. Fonctionne sur Matlab ou Octave.
Prend les nombres dans le même ordre que dans le défi.
Exemples
Explication
la source
Perl, 90 octets
Attend l'entrée comme arguments de ligne de commande. Enregistrer dans un fichier (par exemple
90.pl
) et exécuter en tant queperl 90.pl 6.75 4
Avec commentaires
la source
Stackgoat ,
3127 octetsSimilaire à la plupart des autres réponses. Je vais voir si je peux jouer au golf plus. L'entrée peut être séparée par des virgules, séparée par des espaces ou presque n'importe quoi.
Non compétitif car Stackgoat a été créé après ce défi
Explication
la source
Lua, 157 octets
Long, mais ne trouve pas de solution plus courte
Non golfé
Vous pouvez tester lua en ligne , les cas de test suivants pourraient être utiles :)
la source
C,
233231 octetsNon golfé:
la source
Python 3,
116108 octetslien trinket.io
Merci à Seeq d'avoir sauvé quelques caractères.
Première version:
Version non golfée:
la source
;
. Vous ne l'utilisezh
qu'une seule fois, vous devez donc l'inclure également. Doit sauver quelques caractères.h
plus délicat. Pour que la concaténation et lalen
fonction dans les deux dernières lignes fonctionnent,l
doit être une chaîne,h
doit donc être remplacée parstr(int(l)+1)
. Le réglageh
avant la conversionl
enregistre quelques caractères.