正常运行时间进度栏


13

编写一个程序,分析程序的输出uptime并生成一个解剖上提示性的进度条(如图所示),其长度等于当前的正常运行时间(以天为单位):

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

(34天= 34个等号)

最短答案胜出。


@dmckee:感谢您的编辑。但是,存在一个较小的拼写错误:“阳极”应读为“解剖”。
乔伊·亚当斯

@Joey:我也拼错了“解剖”的意思。谢谢。
dmckee ---前主持人小猫,

5
嗯,只是一个无聊的事情,一个“进度条”,用于没有已知目的(因此,您无法衡量其进度)的东西听起来很奇怪。也许只要“酒吧”就足够了?
houbysoft 2011年

2
我的正常运行时间是27分钟:(
steenslag 2011年

1
@userunknown它与该问题的第一个版本相关。看看编辑...
Gareth 2012年

Answers:


6

红宝石,39岁

无需输入(通过掏空):

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

或从标准输入(40个字符):

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

通过使用字符串插值和字符文字来减少2个字符:gets=~/up (\d*)/;puts "8#{?=*$1.to_i}D"
Michael Kohl

在这种情况下,使用内插和串联的字符数完全相同。
david4dev 2011年

不是,复制并将其粘贴到您的编辑器中: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 2011年

在最后一行保存一些字符:$> <<?8 +?= * $ 1.to_i +?D
steenslag 2011年

5

Bash,71个字符

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

我没有那么多为我露出在互联网上的正常运行时间,所以我画一个篱笆来代替。这是相同的字符数。考虑p在通话之间进行重置。

纯bash,包括71个字符uptime

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

好吧,好吧...我的比你大。


以防万一还不清楚:如果您愿意,您可以掏出自己喜欢的语言(它不一定是纯bash)。我应该澄清这个问题吗?
Magnus Holm

5

Perl- 26个 24个字符

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

像这样跑:

$ 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

编辑:未引用最后的'D'-感谢JB


您可以解除引用的D.
JB

4

Haskell,88个字符

通常,Haskell不会提供其他某些语言中最极端的高尔夫功能,但可以很好地表达问题背后的数学结构。基于他们在这一领域的开创性工作,我旨在介绍Holkins-Krahulik逼近算子的Haskell实现。简而言之,操作员将忽略其两个输入,并返回由轴长参数化的阴茎打印功能。

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

4

Perl,17个字符
现在说:

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

产量

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

原为:

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

产量

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

(可惜我不能“说”)



3

35个字符

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

所以,

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

编辑:是

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

编辑2:JB的评论(用\代替''


1
使用反斜杠转义空格和星号,而不是引用2个字符。
JB

3

Windows PowerShell,28

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

至少

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

产生正确的输出,因此它应该能够处理uptime的输出。不过,我无法测试,因为GNUWin32包含一个uptime试图从不存在的文件中读取的损坏文件(移植Unix工具的人员注意:不要试图假设Windows是Unix并遵循相同的原理或约定;那里在Windows上没有包含启动时间的文件)。


3

普通Lisp,84个字符

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

这将正常运行时间字符串作为输入。似乎应该有一个较短的解决方案,将#'写在列表上,但如果这样,我将无法提出。


+1您很少在这里看到Common Lisp。
Helper Method

3

GolfScript(24个字符)

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

Haskell(73个字符)

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

C(131个字符)

#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是23个字符,而不是24个字符。此外,您可以通过按索引(等号)进行选择将其缩短为16个字符:' '/3=~8\'='*'D'
Cristian Lupascu 2012年

2

PHP,62个字符

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

无需输入,它便会消失。


2

巨蟒(42)

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

注意:Python 3用于减少字符总数。


2

Python,65字节

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

测试:

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

Common Lisp,57个字符

(不包括实施/特定于操作系统的shebang)

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

基于尝试满足Pain博士回答的希望的一种较短的书写重复字符的方式的愿望。可以在问题中所示的管道中使用此代码。

(格式字符串指定在参数指定宽度的字段中使用字符对空白字符串进行右对齐(在~<和之间~>=。)


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

重击67个字符

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

调用作业字母:

uptime | ./cg1570uptime-bar.sh

矮得多

仅54个字符:

有了这个变化:

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

调用,而不是按照规则的100%:

./cg1570uptime-bar.sh $(uptime)

两次输出:

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

非日常花样:

 read t u d w

读取06:29:53 = t,up = u,16 = d rest ... = w
不带w,最后的所有内容都将放入$ d。

expand通常用于将制表符转换为一定数量的空白,如果不喜欢,则采用参数8。

用$ 3 in echo -e '\t'|expand -t $3|sed 's/ /=/g'来抓取第三个参数甚至更短,但是需要调用,不适合规则的要求。


0

bash / zenity 38短版,68较长版

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

简短的版本在$ d之后结束,较长的版本考虑到我们知道一个max-value并喜欢使用有用的文本:

截图zenity作为正常运行时间显示


0

Gema,24个字符

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

样品运行:

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

自动热键,39个字节

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

无输入。结果发送到活动窗口。
内置时间A_TickCount是自重新引导计算机以来的毫秒数。

By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.