create an ascii progress bar
J, 78×0.75 = 58.5
'w p'=:_".1!:1]3
1!:2&4('%',~":100*p)(i.@[-<.@-:@-)&#}'[]'0 _1}' |'{~(w*p)>i.w
$ echo -n 79 0.15 | jconsole test.ijs [||||||||||| 15% ] $ echo -n 25 0.76 | jconsole test.ijs [||||||||||76%||||| ] $ echo -n 39 -0.12 [ _12% ] $ echo -n 25 7.6 | jconsole test.ijs [|||||||||760%||||||||||]
(Negative numbers in J are prefixed by _
, not -
. Luckily, dyadic ".
can parse both formats.)
Perl, 96×¾ = 72
#!/usr/bin/perl -ap
formline'[@'.'|'x($F[0]-3).']',100*$F[1].'%';
$_=$^A;s# |(.)#$1//($-[0]<$F[0]*$F[1]?'|':$&)#eg
That's by traditional Perl golf rules (#!
line not counted, except for the -
and switches if any).
$ echo 79 0.15 | perl test.pl [||||||||||| 15% ] $ echo 25 0.76 | perl test.pl [||||||||||76%||||| ] $ echo 39 -0.12 | perl test.pl [ -12% ] $ echo 25 7.6 | perl test.pl [|||||||||760%||||||||||]
PHP 84 x 0.75 = 63
Edit: A less 'pretty' version, but it should be valid according to the rules:
[<?=str_pad(!fscanf(STDIN,~Ú›Ú™,$a,$b),$a*min(1,$b),~ß)|str_pad(100*$b.~Ú,$a,_,2)?>]
Output:
$ echo 79 0.15 | php progress-bar.php
[⌂⌂⌂⌂⌂⌂⌂⌂⌂⌂⌂___________________________15%______________________________________]
$ echo 25 0.76 | php progress-bar.php
[⌂⌂⌂⌂⌂⌂⌂⌂⌂⌂⌂76%⌂⌂⌂⌂⌂______]
$ echo 39 -0.12 | php progress-bar.php
[_________________-12%__________________]
$ echo 25 7.6 | php progress-bar.php
[⌂⌂⌂⌂⌂⌂⌂⌂⌂⌂760%⌂⌂⌂⌂⌂⌂⌂⌂⌂⌂⌂]
Original (98 x 0.75 = 73.5)
[<?=strtr(str_pad(!fscanf(STDIN,~Ú›Ú™,$a,$b),$a*min(1,$b),~ß)|str_pad(100*$b.~Ú,$a,~ü,2),~ü,~ß)?>]
Output:
$ echo 79 0.15 | php progress-bar.php
[########### 15% ]
$ echo 25 0.76 | php progress-bar.php
[###########76%##### ]
$ echo 39 -0.12 | php progress-bar.php
[ -12% ]
$ echo 25 7.6 | php progress-bar.php
[##########760%###########]