アップタイムプログレスバー


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:編集してくれてありがとう。ただし、小さなスペルミスがあります。「anotomically」は「anatomically」と読みます。
ジョーイアダムス

@Joey:そして、「解剖学的に」スペルミスもしました。ありがとう。
dmckee ---元モデレーター子猫

5
うーん、単なるひとつまみであり、既知の目的がない(進行状況を測定できない)ものの「進行状況バー」は奇妙に聞こえます。たぶん「バー」で十分でしょうか?
houbysoft

2
私の稼働時間は27分です:(
steenslag

1
@userunknownこの質問の最初のバージョンには関連性がありました。編集内容
ガレス

回答:


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"
マイケル・コールズ

この場合、文字カウントは補間と連結を使用してまったく同じです。
david4dev

そうではありません。コピーしてエディターに貼り付けてください: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

最後の行にいくつかの文字を保存します:$> <<?8 +?= * $ 1.to_i +?D
steenslag

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である必要はありません)。質問を明確にする必要がありますか?
マグナスホルム

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. UNQUOTEできる
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

Common Lisp、84文字

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

これは、アップタイム文字列を入力として受け取ります。リストを上書きする短いソリューションマッピングが必要なようですが、もしそうなら、私はそれを思い付くことができません。


+1ここでCommon Lispが使用されることはめったにありません。
ヘルパーメソッド

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はあなたがインデックスによって選択を使用して、16にそれを短縮することができ、23文字ではなく、また、24である(等号):' '/3=~8\'='*'D'
クリスティアンLupascu


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

Common Lisp、57文字

(実装/ OS固有のシバンを除く)

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

ペイン博士の答えを満たすための試みに基づいて「繰り返し文字を書くためのより短い方法への願い」ます。これは、質問に示されているように、パイプラインで使用できます。

(空の文字列(の間に右詰めにフォーマット文字列を指定~<して~>)は、引数で指定された幅の分野では、使用して埋め=文字を。)


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で3番目のパラメーターを取得すること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がわかっていて有用なテキストが必要であることを考慮に入れます:

稼働時間表示としてのスクリーンショットの禅


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

AutoHotkey、39バイト

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

入力なし。結果はアクティブなウィンドウに送信されます。
ビルトインA_TickCountは、コンピューターが再起動されてからのミリ秒数です。

弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.