Thanh tiến độ thời gian hoạt động


13

Viết chương trình phân tích đầu ra uptimevà tạo một thanh tiến trình gợi ý về mặt giải phẫu (như được hiển thị) với độ dài bằng với thời gian hoạt động hiện tại tính theo ngày:

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

(34 ngày = 34 dấu bằng)

Câu trả lời ngắn nhất thắng.


@dmckee: Cảm ơn bạn đã chỉnh sửa. Tuy nhiên, có một lỗi chính tả nhỏ: 'một cách giải phẫu' nên đọc 'một cách giải phẫu'.
Joey Adams

@Joey: Và tôi cũng viết sai chính tả "giải phẫu". Cảm ơn.
dmckee --- ex-moderator mèo con

5
Hmm, chỉ là một nitpick, một "thanh tiến trình" cho thứ gì đó không có kết thúc đã biết (vì vậy, bạn không thể đo lường tiến trình của nó) nghe có vẻ kỳ lạ. Có lẽ chỉ cần "thanh" là đủ?
houbysoft

2
Thời gian hoạt động của tôi là 27 phút :(
steenslag

1
@userunknown Nó có liên quan trong phiên bản đầu tiên của câu hỏi này. Hãy xem các chỉnh sửa ...
Gareth

Câu trả lời:


6

Ruby, 39

Không yêu cầu đầu vào (bằng cách tách ra):

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

Hoặc từ stdin (40 ký tự):

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

Giảm 2 ký tự bằng cách sử dụng phép nội suy chuỗi và ký tự bằng chữ:gets=~/up (\d*)/;puts "8#{?=*$1.to_i}D"
Michael Kohl

Số lượng ký tự hoàn toàn giống nhau bằng cách sử dụng phép nội suy và phép nối trong trường hợp này.
david4dev

Không, sao chép dán chúng vào trình chỉnh sửa của bạ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

Lưu một số ký tự ở dòng cuối cùng: $> <<? 8 +? = * $ 1.to_i +? D
steenslag

5

Bash, 71 ký tự

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

Tôi không thể tiết lộ nhiều về sự phát triển gen của mình trên internet, vì vậy thay vào đó tôi đang vẽ một hàng rào. Đó là cùng một số nhân vật. Hãy suy nghĩ về việc đặt lại pgiữa các cuộc gọi.

Bash thuần, 71 ký tự bao gồm uptime.

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

Chà, tốt, tốt ... của tôi lớn hơn của bạn.


Trong trường hợp không rõ ràng: bạn có thể trình bày theo ngôn ngữ yêu thích của mình nếu bạn muốn (nó không cần phải là bash thuần túy). Tôi có nên làm rõ câu hỏi?
Magnus Holm

5

Perl - 26 24 ký tự

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

Ran thích như vậy:

$ 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

chỉnh sửa : Bỏ trích dẫn cuối cùng 'D' - cảm ơn JB


Bạn có thể bỏ qua D.
JB

4

Haskell, 88 ký tự

Như thường lệ, Haskell không cung cấp khả năng chơi gôn cực đoan nhất của một số ngôn ngữ khác, nhưng không cho phép biểu hiện thanh lịch của các cấu trúc toán học tiềm ẩn vấn đề. Dựa trên công việc tinh thần của họ trong lĩnh vực này, tôi nhằm mục đích giới thiệu một triển khai Haskell của toán tử xấp xỉ Holkins-Krahulik . Tóm lại, toán tử bỏ qua cả hai đầu vào của nó và trả về chức năng in phallus được tham số hóa theo chiều dài trục.

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

4

Perl, 17 ký tự
Bây giờ với nói:

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

Sản lượng

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

là:

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

Sản lượng

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

(Tôi không thể "nói", thật đáng buồn)



3

35 ký tự

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

vì thế,

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

Chỉnh sửa : đã

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

Chỉnh sửa 2 : Nhận xét của JB (sử dụng \thay vì '')


1
Thoát khỏi không gian và dấu hoa thị bằng dấu gạch chéo ngược thay vì trích dẫn cho 2 ký tự.
JB

3

Windows PowerShell, 28

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

Ít nhất

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

mang lại đầu ra chính xác, do đó nó sẽ có thể xử lý uptimeđầu ra của nó. Tuy nhiên, tôi không thể kiểm tra vì GNUWin32 bao gồm một lỗi bị uptimecố đọc từ tệp không tồn tại (Lưu ý với mọi người khi chuyển các công cụ Unix: Đừng cố gắng cho rằng Windows là Unix và tuân thủ các nguyên tắc hoặc quy ước tương tự; không có tệp nào chứa thời gian khởi động trên Windows).


3

Lisp thông thường, 84 ký tự

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

Điều này lấy chuỗi thời gian hoạt động làm đầu vào. Có vẻ như phải có một bản đồ giải pháp ngắn hơn # 'viết lên một danh sách, nhưng nếu vậy tôi không thể đưa ra được.


+1 Bạn hiếm khi thấy Lisp chung được sử dụng ở đây.
Phương pháp trợ giúp

3

GolfScript (24 ký tự)

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

Haskell (73 ký tự)

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

C (131 ký tự)

#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 của bạn là 23 ký tự, không phải 24. Ngoài ra, bạn có thể rút ngắn nó xuống 16, sử dụng lựa chọn theo chỉ số (dấu bằng):' '/3=~8\'='*'D'
Cristian Lupascu

2

PHP, 62 ký tự

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

Không có đầu vào cần thiết, nó bóc ra.


2

Con trăn (42)

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

Lưu ý: Python 3 được sử dụng để giảm tổng số ký tự.


2

Python, 65 byte

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

kiểm tra:

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

Lisp thông thường, 57 ký tự

(không bao gồm triển khai / shebang dành riêng cho hệ điều hành)

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

Dựa trên nỗ lực để thỏa mãn câu trả lời của bác sĩ Pain mong muốn cách viết ngắn hơn một nhân vật. Điều này có thể được sử dụng trong một đường ống như trong câu hỏi.

(Chuỗi định dạng chỉ định xác minh đúng chuỗi trống (giữa ~<~>), trong trường có chiều rộng được chỉ định bởi một đối số, được đệm bằng =ký tự.)


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 ký tự

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

lời mời đến thư của bài tập:

uptime | ./cg1570uptime-bar.sh

Ngắn hơn nhiều

chỉ 54 ký tự:

với biến thể này:

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

gọi, không 100% theo quy định:

./cg1570uptime-bar.sh $(uptime)

đầu ra trong cả hai lần:

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

Thủ thuật không phải hàng ngày:

 read t u d w

đọc 06: 29: 53 = t, lên = u, 16 = d nghỉ ... = w
mà không có w, mọi thứ đến cuối cùng sẽ được đưa vào $ d.

mở rộng thường được sử dụng để dịch một tab thành một số khoảng trống và lấy tham số nếu bạn không thích 8.

Lấy tham số thứ 3 với $ 3 in echo -e '\t'|expand -t $3|sed 's/ /=/g'thậm chí còn ngắn hơn, nhưng cần một lời gọi, không phù hợp với các từ của quy tắc.


0

bash / zenity 38 phiên bản ngắn, 68 phiên bản dài hơn

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

Phiên bản ngắn kết thúc sau $ d, càng mất nhiều thời gian để chúng ta biết giá trị tối đa và muốn có văn bản hữu ích:

Ảnh chụp màn hình zenity như hiển thị thời gian hoạt động


0

Gema , 24 ký tự

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

Chạy mẫu:

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 byte

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

Không có đầu vào. Kết quả được gửi đến cửa sổ hoạt động.
Tích hợp A_TickCountlà số mili giây kể từ khi máy tính được khởi động lại.

Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.