编写一个程序,分析程序的输出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个等号)
最短答案胜出。
编写一个程序,分析程序的输出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个等号)
最短答案胜出。
Answers:
无需输入(通过掏空):
`w`=~/up (\d*)/;puts '8'+'='*$1.to_i+'D'
或从标准输入(40个字符):
gets=~/up (\d*)/;puts '8'+'='*$1.to_i+'D'
gets=~/up (\d*)/;puts "8#{?=*$1.to_i}D"
'gets=~/up (\d*)/;puts "8#{"="*$1.to_i}D"'.length=="gets=~/up (\d*)/;puts '8'+'='*$1.to_i+'D'".length
#true
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
好吧,好吧...我的比你大。
通常,Haskell不会提供其他某些语言中最极端的高尔夫功能,但可以很好地表达问题背后的数学结构。基于他们在这一领域的开创性工作,我旨在介绍Holkins-Krahulik逼近算子的Haskell实现。简而言之,操作员将忽略其两个输入,并返回由轴长参数化的阴茎打印功能。
_⁑≈≈≈⊃_=(\n->concat["8",take n$repeat '=',"D"])
main=interact$(0⁑≈≈≈⊃1).read.(!!2).words
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的评论(用\
代替''
)
"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上没有包含启动时间的文件)。
(defun p(s)(write 8)(loop repeat(read-from-string(subseq s 9))do(write'=))(write'D))
这将正常运行时间字符串作为输入。似乎应该有一个较短的解决方案,将#'写在列表上,但如果这样,我将无法提出。
' '/{(;}3*(\;~'='*8\'D'
main=getLine>>=putStr.('8':).(++"D").(`take`repeat '=').read.(!!2).words
#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');}
' '/3=~8\'='*'D'
read t u d w
echo -e '\t'|expand -t $d|sed 's/^/8/;s/ /=/g;s/$/B/;'
调用作业字母:
uptime | ./cg1570uptime-bar.sh
矮得多
有了这个变化:
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'
来抓取第三个参数甚至更短,但是需要调用,不适合规则的要求。