Ascii प्रगति बार बनाएँ


12

ठीक है, यह इस प्रश्न के समान है लेकिन थोड़े अंतर के साथ। आपको प्रगति पट्टी की चौड़ाई और कितना काम करना है, यह पूछने के लिए एक कार्यक्रम लिखना होगा। और फिर निम्नलिखित विशेषताओं के साथ एक प्रगति पट्टी बनाएं:

  • चौड़ाई इंगित करती है कि प्रगति पट्टी को खींचने के लिए आपको कितने वर्णों का उपयोग करना है

  • प्रगति 0..1 के बीच एक फ्लोटिंग पॉइंट वैल्यू के माध्यम से दी गई है।

  • प्रगति बार में पहला और अंतिम चरित्र अन्य सभी चरित्रों से अलग होना चाहिए, उदाहरण के लिए "[" और "]"

  • आपके कार्यक्रम को दो अलग-अलग पात्रों का उपयोग करना चाहिए जो शुरू से ही कितनी प्रगति से गुजरे हैं

  • आपको एक दशमलव संख्या + "%" चिह्न का उपयोग करके प्रगति पट्टी के ठीक बीच में कितना काम करना है, यह लिखना होगा।

चरम इनपुट से निपटने के लिए बोनस बिंदु , जैसे 150% या -5% काम किया गया।

पात्रों की स्कोरिंग संख्या * (1 बिना बोनस या 0.75 चौड़ाई बोनस)

वैध आउटपुट के कुछ उदाहरण

79 0.15
[||||||||||||                         15%                                     ]

25 0.76
[##########76%#####.....]

39 -0.12
[                 -12%                 ]

25 7.6
[##########760%#########]

इनपुट कैसे लिया जाता है? कमांड लाइन? Stdin? ऊपर मे से कोई?
लोचोक

@lochok मुझे लगता है कि स्टड एक बेहतर विकल्प होगा।
अली

जवाबों:


3

PHP 84 x 0.75 = 63

संपादित करें: एक कम 'सुंदर' संस्करण, लेकिन यह नियमों के अनुसार मान्य होना चाहिए:

[<?=str_pad(!fscanf(STDIN,~Ú›Ú™,$a,$b),$a*min(1,$b),~ß)|str_pad(100*$b.~Ú,$a,_,2)?>]

आउटपुट:

$ 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%⌂⌂⌂⌂⌂⌂⌂⌂⌂⌂⌂]


मूल (98 x 0.75 = 73.5)

[<?=strtr(str_pad(!fscanf(STDIN,~Ú›Ú™,$a,$b),$a*min(1,$b),~ß)|str_pad(100*$b.~Ú,$a,~ü,2),~ü,~ß)?>]

आउटपुट:

$ 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%###########]

मैं सोच रहा हूं कि मैं आपका कोड कैसे चला सकता हूं।
अली

इसे php फ़ाइल के रूप में सहेजें। इसे दो पैरामाटर्स को एक अलग स्ट्रेग के रूप में STDIN के रूप में भेजें। उदाहरण के लिए: [विंडोज़ / लिनक्स कमांड प्रॉम्प्ट] गूंज 79 0.15 | php प्रगति-बार.php आपको php-cli (कमांड लाइन इंटरफ़ेस) स्थापित करने की आवश्यकता होगी। विंडोज़ के लिए अधिकांश php इंस्टॉलर में यह शामिल होना चाहिए (या वैकल्पिक), apt-get install के साथ linux-phi5-cli
primo

मैंने इस उत्तर को तब से चुना है जब तक मैंने यह परीक्षण किया है कि हमेशा एक उम्मीद के मुताबिक काम किया है, जबकि एक जो कि कभी-कभी प्रदान किया जाता है वह संख्या को बिल्कुल बीच में प्रिंट नहीं करता है।
अली

4

जे, 78 × 0.75 = 58.5

'w p'=:_".1!:1]3
1!:2&4('%',~":100*p)(i.@[-<.@-:@-)&#}'[]'0 _1}' |'{~(w*p)>i.w
$ इको-एन 79 0.15 | jconsole test.ijs
[||||||||||| 15%]
$ इको-एन 25 0.76 | jconsole test.ijs
[|||||||||| 76% ||||| ]   
$ इको-एन 39 -0.12
[_12%]
$ इको-एन 25 7.6 | jconsole test.ijs
[||||||||| 760% ||||||||||]   

(J में ऋणात्मक संख्याएँ उपसर्ग हैं _, न कि -। सौभाग्य से, डाइएडिक ".दोनों स्वरूपों को पार्स कर सकते हैं।)


क्या यह प्रतिशत द्वारा लिए गए स्थान को बाहर निकालता है जब यह प्रदर्शित करने के लिए बार की संख्या की गणना करता है? क्योंकि यह खदान से अलग परिणाम प्राप्त करने के लिए लगता है।
grc

@grc 100 कॉलम के साथ, प्रत्येक प्रतिशत एक बार है (भले ही अन्य तत्वों जैसे कोष्ठक या संख्या / प्रतिशत द्वारा छिपाया गया हो)।
अपरिमेय

ठीक है, मैं अभी ले आता हूं। अच्छी नौकरी :)
grc

@ephemient अब मैंने -0.12 मामले में देखा है, आप बाएं हिस्से में 18 रिक्त स्थान और 16 दाहिने भाग में प्रिंट कर रहे हैं। इसका मतलब _12%बिल्कुल बीच में नहीं है।
अली

3

पर्ल, 96 × ¾ = 72

#!/usr/bin/perl -ap
formline'[@'.'|'x($F[0]-3).']',100*$F[1].'%';
$_=$^A;s# |(.)#$1//($-[0]<$F[0]*$F[1]?'|':$&)#eg

यह पारंपरिक पर्ल गोल्फ नियमों ( यदि कोई है और स्विच के #!अलावा कोई गिनती नहीं है -)।

$ गूंज 79 0.15 | perl test.pl
[||||||||||| 15%]
$ गूंज 25 0.76 | perl test.pl
[|||||||||| 76% ||||| ]
$ गूंज 39 -0.12 | perl test.pl
[-12%]
$ गूंज 25 7.6 | perl test.pl
[||||||||| 760% ||||||||||]

2

रूबी - स्कोर 93 (124 वर्ण)

w=gets.to_i-2
f=$_[/ .+/].to_f
e=f<0?0:f>1?w:(f*w).to_i
b='#'*e+' '*(w-e)
b[(w-l=(s='%d%'%(100*f)).size)/2,l]=s
puts"[#{b}]"

फिर भी एक और रूबी कार्यान्वयन। ऊपर वर्णित रूप में STDIN से इनपुट पढ़ता है। आप वर्णों का आदान-प्रदान कर सकते हैं '#', ' 'और '[', ']'सीधे कोड में।

45 0.88
[####################88%##############      ]

60 1.22
[###########################122%###########################]

यह दो वर्णों के लिए भी व्यापक है
पैट्रिक ऑस्सिटी

@padde आपको क्या लगता है कि यह दो वर्ण बहुत चौड़ा है? पहली पंक्ति में -2 है।
हावर्ड

2

पायथन - 158 155 148 143 138 अक्षर (103.5 का स्कोर)

x,y=raw_input().split()
x=int(x)-2
y=float(y)
p=`int(y*100)`+"%"
b="|"*int(x*y+.5)+" "*x
print"["+b[:(x-len(p))/2]+p+b[(x+len(p))/2:x]+"]"

यदि इनपुट अल्पविराम द्वारा अलग किया गया था, तो यह 30 वर्ण छोटा हो सकता है।


आपने उपयोग क्यों नहीं किया r=p.length()?
अली

आपका मतलब क्या है?
grc

मेरा कुछ भी बुरा नहीं है, मैं सिर्फ आपको गलत समझा।
अली

लेकिन आपका कोड -12% मामले को संभालने के लिए प्रतीत नहीं होता है।
अली

इसका क्या मतलब है? फिलहाल यह प्रतिशत के साथ एक खाली बार प्रिंट करता है।
grc

1

क्यू, 90 चार्ट, कोई बोनस नहीं

{-1 @[x#" ";(1+(!)(_)x*y;0;((_)x%2)+(!)(#)($)a;x-1);:;("|";"[";a:,[;"%"]($)(100*y);"]")];}

प्रयोग

q){-1 @[x#" ";(1+(!)(_)x*y;0;((_)x%2)+(!)(#)($)a;x-1);:;("|";"[";a:,[;"%"]($)(100*y);"]")];}[50;0.15]
[|||||||                 15%                     ]

q){-1 @[x#" ";(1+(!)(_)x*y;0;((_)x%2)+(!)(#)($)a;x-1);:;("|";"[";a:,[;"%"]($)(100*y);"]")];}[30;0.35]
[||||||||||    35%           ]

q){-1 @[x#" ";(1+(!)(_)x*y;0;((_)x%2)+(!)(#)($)a;x-1);:;("|";"[";a:,[;"%"]($)(100*y);"]")];}[40;0.85]
[|||||||||||||||||||85%||||||||||||    ]

1

स्केल 149:

val w=readInt 
val p=readFloat
println(("["+"|"*(p*w).toInt+" "*((w-p*w).toInt)+"]").replaceAll("(^.{"+(w/2-3)+"}).{5}","$1 "+(p*100).toInt+("% ")))

ungolfed:

def progressbar (width: Int, pos: Double) {
  println ((
    "["+
    "|"*(pos*width).toInt+
    " "*((width-pos*width).toInt)+
    "]").
    replaceAll ("(^.{" + (width/2-3) + "}).{5}", "$1 " + (p * 100).toInt + ("% ")))}
}

मैंने तय किया, पठनीयता के लिए, आपको वास्तव में प्रगति संख्या के आसपास एक स्थान की आवश्यकता है:

(44 to 54).map (x => b (100, x/100.0))
[||||||||||||||||||||||||||||||||||||||||||||   44%                                                  ]
[|||||||||||||||||||||||||||||||||||||||||||||  45%                                                  ]
[|||||||||||||||||||||||||||||||||||||||||||||| 46%                                                  ]
[|||||||||||||||||||||||||||||||||||||||||||||| 47%                                                  ]
[|||||||||||||||||||||||||||||||||||||||||||||| 48%                                                  ]
[|||||||||||||||||||||||||||||||||||||||||||||| 49%                                                  ]
[|||||||||||||||||||||||||||||||||||||||||||||| 50%                                                  ]
[|||||||||||||||||||||||||||||||||||||||||||||| 51%                                                  ]
[|||||||||||||||||||||||||||||||||||||||||||||| 52% |                                                ]
[|||||||||||||||||||||||||||||||||||||||||||||| 53% ||                                               ]
[|||||||||||||||||||||||||||||||||||||||||||||| 54% |||                                              ]

1

सी, 145 वर्ण, स्कोर = 108.75

float p;s;m;char x[99];main(){scanf("%d%f",&s,&p);sprintf(x+s/2-1,"%.0f%%",p*100);for(;m<s;)x[++m]||(x[m]=m<p*s?35:32);x[s-1]=93;*x=91;puts(x);}

हालांकि मुझे वास्तव में स्प्रिंटफ का आपका विचार पसंद आया था, लेकिन यह एक छोटी सी समस्या उत्पन्न करता है, 20 1इनपुट के साथ अपने कार्यक्रम की जांच करें यह [#######100%######]इस मामले में आउटपुट उत्पन्न करेगा इस संख्या के 7 शार्प हैं और दायीं ओर 5 शार्प हैं, इसलिए छपी संख्या ठीक नहीं है मध्य।
अली

1

नोड.जेएस: 135 अंक, * 0.75 बोनस अंक के लिए, इसलिए 101.25chars।

a=process.argv,i=a[2],p=a[3],o=i/2|0,f=i-i*p,x=['['];for(;i--;){x.push((i<f?' ':'|')+(i-o?'':p*100+'%'));}console.log(x.join('')+']');

ungolfed:

a = process.argv, // console inputs
i = a[2], // input 1 -> width
p = a[3], // input 2 -> percent complete
o = i / 2 | 0, // half of i, without any decimal places
f = i - i * p, // how far along the bar to draw spaces
x = ['[']; // start an array
while(i--){ // while i > 0
    x.push( // add to the array
    (i < f ? ' ' : '|') // a space, or | depending on how far along the bar we are
    + (i - o ? '' : p * 100 + '%')); // and if we're halfway, add the percentage complete
}
console.log(x.join('') + ']'); // then write out the array as a string, with a trailing ]

उत्पादन:

D:\mercurial\golf\ascii>node progressBar.js 25 7.6
[|||||||||||||760%||||||||||||]

D:\mercurial\golf\ascii>node progressBar.js 39 -0.12
[                    -12%                   ]

D:\mercurial\golf\ascii>node progressBar.js 79 0.15
[|||||||||||                             15%                                       ]

1

पीएचपी-128x0.75 => 96

<?fscanf(STDIN,'%d%d',$w,$p);$v='[';for($i=1;$i<$w-1;)$v.=($i++==$w/2-1)?$p*($i+=2)/$i.'%':(($i<$w*$p/100)?'|':' ');echo"$v]";?>

<?fscanf(STDIN,'%d%f',$w,$p);$v='[';for($i=1;$i<$w-1;)$v.=($i++==$w/2-1)?$p*100*($i+=2)/$i.'%':(($i<$w*$p)?'|':' ');echo"$v]";?>

सी, 149 * 0.75 = 111.75

main(w,i){float p;for(i=printf("[",scanf("%d%f",&w,&p));i<w-1;)(i++==w/2-1)?printf("%.0f%%",p*100*(i+=2)/i):printf("%c",i<=(p*w)?'|':' ');puts("]");}

आउटपुट:

80
0.75
[||||||||||||||||||||||||||||||||||||||75%||||||||||||||||||                   ]

80
7.60
[||||||||||||||||||||||||||||||||||||||760%|||||||||||||||||||||||||||||||||||||]


80
-0.12
[                                      -12%                                     ]

p एक अस्थायी बिंदु मान होना चाहिए,
0.21 के

@ गजेट को नोटिस लाने के लिए धन्यवाद। सुधारा गया है :)
l0n3sh4rk

0

जावास्क्रिप्ट 127 125, कोई बोनस नहीं

l=9,p="0.99",f=l*p|0,m=l/2|0,x=["]"];for(;l--;)x.unshift(l>=f?"-":"+");x[m++]=p[2],x[m++]=p[3],x[m]="%";alert("["+x.join(""))
//[+++99%++-]

उपयोग:l=9 अन्य लंबाई के साथ बदलें और / या p="0.99"अन्य प्रतिशत के साथ बदलें

नोट:0.X0 इसके बजाय शून्य के साथ समाप्त करें0.X


0

MATL , स्कोर 35.25 (47 * 0.75)

qqtl&O61bti*Xl:(HG100*V37hyn2/kyny+q&:(91w93v!c

इसे ऑनलाइन आज़माएं!

स्पष्टीकरण:

         % implicit input, say w = 79
qq       % decrement input by 2 (to allow brackets on either side)
tl&O     % duplicate and create array with that many zeros
61       % Push '=' character
b        % bubble up w-2 from below
ti*      % duplicate and multiply by second input, say p = 0.15
         %  stack: [[0;0;0;...;0], 61, 77, 11.55]
Xl       % take minimum of (w-2) and (w-2)*p
         %  (used when p > 1, makes eligible for bonus)
:        % create range 1 to that value 
         %  stack: [[0;0;0;...;0], 61, [1 2 3 4 5 ... 11]]
(        % assign into the first array the value 61 ('=') at the 
         %  indices denoted by the third array
HG       % push second input again
100*V    % multiply by 100 and convert to string
37h      % append the '%' symbol to it
yn2/k    % compute half of the length of the output array
yny+q    % copy of that + length of the 'N%' string - 1
         % stack: [[61;61;61;...;0;0;0], '15%', 38, 40]
&:       % make a range from the first to the second (38 to 40)
(        % assign the 'N%' string at those places into the output array
91w93    % surround by '[' (ASCII 91) and ']' (93) characters
v!       % combine into a single array, make it horizontal for display, 
c        % change it to character type (implicitly displayed)

0

एक्सेल VBA, 108 * .75 = 81 बाइट्स

एक फ़ंक्शन जो इनपुट लेता है [A1]और [B1]कंसोल से आउटपुट करता है

s=""&[MID(IFERROR(REPT("",A1*B1),"")&REPT("",A1),2,A1-2)]&"":n=100*[B1]:Mid(s,([A1]-len(n))/2)=n &"%":?s

उत्पादन

इनपुट के साथ [A1]=25और[B1]=.76

76%

इनपुट के साथ [A1:B1].Resize(1,2)=Split("32 -.5")

-50%

इनपुट के साथ [A1:B1].Resize(1,2)=Split("40 10.01")

1001%
हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.