Çalışma Süresi İlerleme Çubuğu


13

uptimeGün içindeki mevcut çalışma süresine eşit bir uzunluğa sahip çıktıyı ayrıştıran ve anatomik olarak düşündüren bir ilerleme çubuğu (gösterildiği gibi) üreten bir program yazın :

$ uptime
23:01  up 34 days,  7:30, 5 users, load averages: 0.23 0.27 0.24
$ uptime|<command>
8==================================D

(34 gün = 34 eşit işaret)

En kısa cevap kazanır.


@dmckee: Düzenleme için teşekkürler. Bununla birlikte, küçük bir yazım hatası vardır: 'anotomik' bir 'anatomik olarak' okumalıdır.
Joey Adams

@Joey: Ben de "anatomik olarak" yanlış yazdım. Teşekkürler.
dmckee --- eski moderatör yavru kedi

5
Hmm, sadece bir nitpick, bilinen bir sonu olmayan bir şey için bir "ilerleme çubuğu" (böylece, ilerlemesini ölçemezsiniz) kulağa garip geliyor. Belki sadece "bar" yeterlidir?
houbysoft

2
Çalışma süresi 27 dakikadır :(
steenslag

1
@userunknown Bu sorunun ilk sürümü ile ilgiliydi. Düzenlemelere bir göz atın ...
Gareth

Yanıtlar:


6

Yakut, 39

Giriş gerekmez (bombardımanı yaparak):

`w`=~/up (\d*)/;puts '8'+'='*$1.to_i+'D'

Veya stdin'den (40 karakter):

gets=~/up (\d*)/;puts '8'+'='*$1.to_i+'D'

Dize enterpolasyonu ve bir karakter değişmez değeri kullanarak 2 karakter azaltın:gets=~/up (\d*)/;puts "8#{?=*$1.to_i}D"
Michael Kohl

Karakter sayımı bu durumda enterpolasyon ve birleştirme kullanılarak tamamen aynıdır.
david4dev

Değil, kopyaları editörünüze yapıştırın: twitpic.com/49413j
Michael Kohl

'gets=~/up (\d*)/;puts "8#{"="*$1.to_i}D"'.length=="gets=~/up (\d*)/;puts '8'+'='*$1.to_i+'D'".length#true
david4dev

Son satırdaki bazı karakterleri kaydedin: $> <<? 8 +? = * $ 1.to_i +? D
steenslag

5

Bash, 71 karakter

a=`uptime` a=${a#*p } a=${a%% *};while((a--));do p==$p;done;echo I${p}I

Ben internette gen zamanlarımı açığa çıkarmak için pek fazla değilim , bu yüzden bunun yerine bir çit çiziyorum. Aynı karakter sayısı. pAramalar arasında sıfırlamayı düşünün .

Saf bash, 71 karakter dahil uptime.

$ uptime
 23:35:12 up 159 days,  4:15, 15 users,  load average: 1.07, 0.63, 0.38

,Ey, ţey, ţey ... benimki senden daha büyük.


Net değilse: İsterseniz en sevdiğiniz dile gidebilirsiniz (saf bash olması gerekmez). Soruyu netleştirmeli miyim?
Magnus Holm

5

Perl - 26 24 karakter

/p (\d+)/;say+8,"="x$1,D

Böyle koştu:

$ uptime
 04:52:39 up 17 days, 11:27,  3 users,  load average: 0.21, 0.07, 0.02
$ uptime | perl -nE '/p (\d+)/;say+8,"="x$1,D'
8=================D

edit : Final 'D' unquoted - teşekkürler JB


D.
JB

4

Haskell, 88 karakter

Çoğu zaman olduğu gibi, Haskell diğer bazı dillerin en uç golfçülüğünü sunmaz, ancak sorunun altında yatan matematiksel yapıların zarif bir ifadesine izin verir. Bu alandaki seminal çalışmalarına dayanarak, Holkins-Krahulik Yaklaşım operatörünün Haskell uygulamasını tanıtmayı amaçlıyorum . Kısaca, operatör her iki girişini de dikkate almaz ve şaft uzunluğuna göre parametrelenmiş bir fallus-baskı fonksiyonu döndürür.

_⁑≈≈≈⊃_=(\n->concat["8",take n$repeat '=',"D"])
main=interact$(0⁑≈≈≈⊃1).read.(!!2).words

4

Perl, 17 karakter
Şununla birlikte:

say+8,"="x$F[2],D

Verim

uptime | perl -naE 'say+8,"="x$F[2],D'

oldu:

print"8"."="x$F[2]."D"

Verim

]# uptime | perl -anle 'print"8"."="x$F[2]."D"'
8=========================D

(Ne yazık ki "söyleyemem")



3

35 karakter

awk '{printf"#%"$3"sp",p}'|tr \  \*

yani,

uptime
12:27μμ  up 111 days,  2:36, 1 user, load averages: 0,07 0,03 0,00
uptime | awk '{printf"#%"$3"sp",p}'|tr ' ' '*'

#***************************************************************************************************************p

Düzenleme : (önceki değeri)

printf "#%`awk '{print $3}'`sp"|tr ' ' '*'

Düzenleme 2 : JB'nin yorumu ( \yerine kullanın '')


1
2 karakterden alıntı yapmak yerine boşluktan ve yıldız işaretinden kaçın.
JB

3

Windows PowerShell, 28

"8$('='*(-split$input)[2])D"

En azından

echo 23:01  up 34 days,  7:30, 5 users, load averages: 0.23 0.27 0.24|powershell -file uptime.ps1 

doğru çıktı verir, bu nedenle çıktısını işleyebilmelidir uptime. Yine de test edemiyorum, çünkü GNUWin32 uptimevar olmayan bir dosyadan okumaya çalışan bir kırık içerdiğinden (Unix araçlarını taşıyan kişilere not: Windows'un bir Unix olduğunu ve aynı ilkelere veya kurallara bağlı olduğunu varsaymaya çalışmayın; orada Windows'ta önyükleme süresini içeren bir dosya değildir).


3

Ortak Lisp, 84 karakter

(defun p(s)(write 8)(loop repeat(read-from-string(subseq s 9))do(write'=))(write'D))

Bu, çalışma zamanı dizesini girdi olarak alır. Bir liste üzerine yazmak için daha kısa bir çözüm eşlemesi olmalı gibi görünüyor, ama eğer öyleyse bu konuda gelemiyorum.


+1 Burada Common Lisp'in nadiren kullanıldığını görürsünüz.
Yardımcı Yöntem

3

GolfScript (24 karakter)

' '/{(;}3*(\;~'='*8\'D'

Haskell (73 karakter)

main=getLine>>=putStr.('8':).(++"D").(`take`repeat '=').read.(!!2).words

C (131 karakter)

#define r(a);read(0,x,a),
#define p ;putchar(
x[9];main(i){for(r(1)i<3;i+=*x==32)r(9)0
p'8');for(i=atoi((int)x+2);i--p'='))p'D');}

Golfscript'iniz 24 karakter değil, 23 karakterdir. Ayrıca, dizine göre seçimi kullanarak 16'ya kısaltabilirsiniz (işarete eşittir):' '/3=~8\'='*'D'
Cristian Lupascu

2

PHP, 62 karakter

<?$d=split(" ",`uptime`);echo 8;while($d[3]--)echo"=";echo"D";

Hiçbir girdi gerekli, kabuk.


2

Python (42)

print('8'+int(input().split()[2])*"="+'D')

Not: Toplam karakter sayısını azaltmak için Python 3 kullanılır.


2

Python, 65 Bayt

import sys
print '8'+'='*int(sys.stdin.readline().split()[2])+'D'

Ölçek:

echo '23:01  up 34 days,  7:30, 5 users, load averages: 0.23 0.27 0.24'|./time.py
8==================================D

1

PHP, 61

<?$n=split(' ',$argv[1]);$v=8;while($n[2]--)$v.'=';echo"$vD";

1

Ortak Lisp, 57 karakter

(uygulama / işletim sistemine özgü shebang hariç)

#!/opt/local/bin/sbcl --script
(do()((eql(read-char)#\p)(format t"8~v,,,'=<~>D"(read))))

Dr.Pain'in cevabının tekrarlanan bir karakter yazmanın daha kısa bir yoluna olan isteğini yerine getirme çabasına dayanarak . Bu, soruda gösterildiği gibi bir boru hattında kullanılabilir.

(Biçim dizesi , bir bağımsız değişken tarafından belirtilen genişlik alanında, karakter kullanılarak doldurulmuş boş dizenin ( ~<ve arasında ~>) sağa yaslanmasını belirtir =.)


1

K, 35

-1"8",(("I"$(" "\:0:0)@3)#"="),"D";

.

$ uptime
17:21:47 up 242 days,  7:22, 35 users,  load average: 0.33, 0.34, 0.44
$ uptime | q t.k
8============================================================================ ...

0

Bash 67 karakter

read t u d w
echo -e '\t'|expand -t $d|sed 's/^/8/;s/ /=/g;s/$/B/;'

ödev mektubuna çağırma:

uptime | ./cg1570uptime-bar.sh

Çok daha kısa

sadece 54 karakter:

bu varyasyon ile:

echo -e '\t'|expand -t $3|sed 's/^/8/;s/ /=/g;s/$/B/;'

kurallara uygun olarak% 100 değil çağırma:

./cg1570uptime-bar.sh $(uptime)

her iki durumda da çıktı:

uptime && uptime | ./cg1570uptime-bar.sh 
06:29:53 up 16 days, 21:03, 10 users,  load average: 1.29, 1.34, 1.23
8================B

Günlük olmayan numaralar:

 read t u d w

06: 29: 53 = t, yukarı = u, 16 = d dinlenme ... = w
olmadan w, sonuna kadar her şey $ d'ye konur.

genişletme normalde bir sekmeyi bir miktar boşluğa çevirmek için kullanılır ve 8'i beğenmezseniz bir parametre alır.

3. parametreyi 3 $ girişle yakalamak echo -e '\t'|expand -t $3|sed 's/ /=/g'daha da kısadır, ancak kuralların sözcüklerine uymayan bir çağrıyı gerektirir.


0

bash / zenity 38 kısa versiyon, 68 daha uzun versiyon

read c o d e
zenity --scale --value=$d --max-value=497 --text=uptime

Kısa sürüm $ d'den sonra sona erer, bir maksimum değeri bildiğimiz ve yararlı metne sahip olmak istediğimiz daha uzun sürer:

Çalışma zamanı ekranı olarak ekran görüntüsü zenginliği


0

Gema , 24 karakter

<D> d=8@repeat{$1;=}D;?=

Örnek çalışma:

bash-4.4$ uptime
 18:35:31 up 13 days,  7:53, 16 users,  load average: 0.31, 0.85, 1.24

bash-4.4$ uptime | gema '<D> d=8@repeat{$1;=}D;?='
8=============D

0

AutoHotkey , 39 bayt

d:=A_TickCount//=8.64e+7
Send 8{= %d%}D

Giriş yok. Sonuç aktif pencereye gönderilir.
Yerleşik A_TickCountbilgisayar yeniden başlatılması beri milisaniye sayısıdır.

Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.