একটি আসকি অগ্রগতি বার তৈরি করুন


12

ভাল, এটি এই প্রশ্নের অনুরূপ কিছু তবে কিছুটা পার্থক্য সহ। অগ্রগতি বারের প্রস্থ এবং কতটা কাজ করা হয়েছে তা জানতে আপনাকে একটি প্রোগ্রাম লিখতে হবে। এবং তারপরে নিম্নলিখিত বৈশিষ্ট্যগুলি সহ একটি অগ্রগতি বার আঁকুন:

  • প্রস্থ নির্দেশ করে যে আপনাকে কতগুলি অক্ষর অগ্রগতি বার আঁকতে হবে

  • অগ্রগতি ০.১ এর মধ্যে একটি ভাসমান পয়েন্ট মানের মাধ্যমে দেওয়া হয়।

  • অগ্রগতি বারের প্রথম এবং শেষ অক্ষরটি অন্য সমস্ত চরিত্রের থেকে আলাদা কিছু হওয়া উচিত, উদাহরণস্বরূপ "[" এবং "]"

  • আপনার প্রোগ্রামটি শুরু থেকে কতটা অগ্রগতি পেরিয়ে গেছে তার জন্য দুটি আলাদা অক্ষর ব্যবহার করা উচিত

  • দশমিক সংখ্যা + "%" চিহ্ন ব্যবহার করে আপনাকে প্রগতি বারের ঠিক মাঝখানে কতটা কাজ করা হবে তা লিখতে হবে।

চূড়ান্ত ইনপুটগুলি পরিচালনা করার জন্য বোনাস পয়েন্ট , যেমন 150% বা -5% কাজ হয়ে গেছে।

অক্ষরের সংখ্যা * (বোনাস ছাড়াই বা 0.75 প্রস্থের বোনাস ছাড়াই) স্কোর করা

বৈধ আউটপুটগুলির কয়েকটি উদাহরণ

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

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

39 -0.12
[                 -12%                 ]

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

কীভাবে ইনপুট নেওয়া হয়? কমান্ড লাইন? Stdin? উপরের যে কোনটি?
lochok

@ লোকোক আমার ধারণা স্টিডিন আরও ভাল পছন্দ হবে।
Ali1S232

উত্তর:


3

পিএইচপি 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%###########]

আমি ভাবছি আমি কীভাবে আপনার কোডটি চালাতে পারি।
Ali1S232

এটিকে পিএইচপি ফাইল হিসাবে সংরক্ষণ করুন। এটি দুটি প্যারামিটারকে একটি পৃথক পৃথক স্ট্রিং হিসাবে STDIN হিসাবে প্রেরণ করুন। উদাহরণস্বরূপ: [উইন্ডোজ / লিনাক্স কমান্ড প্রম্পট] প্রতিধ্বনি 79 0.15 | পিএইচপি প্রগ্রেস-বার.এফপি আপনার পিএইচপি-ক্লাই (কমান্ড লাইন ইন্টারফেস) ইনস্টল করতে হবে। উইন্ডোজের জন্য বেশিরভাগ পিএইচপি ইনস্টলারগুলির এটি (বা optionচ্ছিক) অন্তর্ভুক্ত থাকতে হবে, অ্যাপ্লিকেশন সহ লিনাক্স php5-cli ইনস্টল করতে হবে
প্রিমো

আমি এই উত্তরটি নির্বাচন করেছি, যতক্ষণ না আমি পরীক্ষিত হিসাবে এটি সর্বদাই প্রত্যাশার মতো কাজ করেছে, যখন যে পূর্বসূরীর একটি প্রদান করেছেন কখনও কখনও মাঝখানে ঠিক সেই সংখ্যাটি মুদ্রণ করে না।
Ali1S232

4

জে, 78 × 0.75 = 58.5

'w p'=:_".1!:1]3
1!:2&4('%',~":100*p)(i.@[-<.@-:@-)&#}'[]'0 _1}' |'{~(w*p)>i.w
cho প্রতিধ্বনি -n 79 0.15 | jconsole test.ijs
[||||||||||| 15%]
$ প্রতিধ্বনি -n 25 0.76 | jconsole test.ijs
[|||||||||| 76% ||||| ]   
$ প্রতিধ্বনি -n 39 -0.12
[_12%]
$ প্রতিধ্বনি -n 25 7.6 | jconsole test.ijs
[||||||||| 760% ||||||||||]   

(জেতে নেতিবাচক সংখ্যাগুলি উপসর্গ করেছে _, না -। ভাগ্যক্রমে, ডায়াডিক ".উভয় ফর্ম্যাটকে পার্স করতে পারে))


এটি প্রদর্শিত বারের সংখ্যা গণনা করার সময় কি শতাংশের দ্বারা নেওয়া স্থানকে বাদ দেয়? এটি আমার থেকে পৃথক ফলাফল পেয়েছে বলে মনে হচ্ছে।
grc

@grc ১০০ টি কলাম সহ, প্রতিটি শতাংশই একটি একক বার (যদিও অন্যান্য উপাদান যেমন বন্ধনী বা সংখ্যা / শতাংশ দ্বারা গোপন করা হয়)।
প্রশংসাপত্র

ঠিক আছে আমি এখন এটি পেতে। ভাল কাজ :)
grc

@Phemient এখন আমি লক্ষ্য করেছি -0.12 ক্ষেত্রে, আপনি বাম অংশে 18 টি এবং ডান অংশে 16 টি স্থান মুদ্রণ করছেন। এর অর্থ _12%ঠিক মাঝখানে নয় in
Ali1S232

3

পার্ল, 96 × ¾ = 72

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

এটি traditionalতিহ্যবাহী পার্ল গল্ফ নিয়ম অনুসারে ( #!লাইন গণনা করা হয়নি, -সুইচগুলি বাদে এবং যদি থাকে তবে)।

$ প্রতিধ্বনি 0.1 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%###########################]

এটি সর্বদা দুটি অক্ষর খুব প্রশস্ত
প্যাট্রিক অসিটি

@ প্যাডে আপনি কেন এটি দুটি চর খুব প্রশস্ত বলে মনে করেন? প্রথম লাইনে একটি -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()?
Ali1S232

আপনি কি বোঝাতে চেয়েছেন?
জিআরসি 0

আমার খারাপ কিছু না, আমি আপনাকে কোডটি ভুল বুঝেছি।
Ali1S232

তবে আপনার কোড -12% কেস হ্যান্ডেল করে না বলে মনে হচ্ছে।
Ali1S232

এর অর্থ কী? এই মুহুর্তে এটি শতাংশের সাথে খালি বারটি প্রিন্ট করে।
জিআরসি 0

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 টি শার্প রয়েছে, সুতরাং মুদ্রিত সংখ্যাটি ঠিক তেমনটি নয় মধ্যে.
Ali1S232

1

নোড.জেএস: 135chars, * 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%                                     ]

পি এর ভাসমান পয়েন্টের মান হওয়া উচিত, ০.১.১
Ali1S232

@ গেজেট লক্ষ্য করার জন্য ধন্যবাদ সংশোধন করা হয়েছে :)
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

এমএটিএল , স্কোর 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

এক্সেল ভিবিএ, 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%
আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.