Uptime-Statusanzeige


13

Schreiben Sie ein Programm, das die Ausgabe von analysiert uptimeund einen anatomisch anregenden Fortschrittsbalken (wie abgebildet) mit einer Länge erzeugt, die der aktuellen Betriebszeit in Tagen entspricht:

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

(34 Tage = 34 Gleichheitszeichen)

Kürzeste Antwort gewinnt.


@dmckee: Danke für die Bearbeitung. Es gibt jedoch einen kleinen Rechtschreibfehler: "Anotomisch" sollte "Anatomisch" lauten.
Joey Adams

@ Joey: Und ich habe auch "anatomisch" falsch geschrieben. Vielen Dank.
dmckee --- Ex-Moderator Kätzchen

5
Hmm, nur ein Trottel, ein "Fortschrittsbalken" für etwas, das kein bekanntes Ende hat (man kann also seinen Fortschritt nicht messen), klingt seltsam. Vielleicht würde nur "Bar" ausreichen?
Houbysoft

2
Meine Betriebszeit beträgt 27 Minuten :(
steenslag

1
@userunknown Es hatte Relevanz in der ersten Version dieser Frage. Schauen Sie sich die Änderungen an ...
Gareth

Antworten:


6

Rubin, 39

Keine Eingabe erforderlich (durch Ausschälen):

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

Oder von Standard (40 Zeichen):

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

Reduzieren Sie um 2 Zeichen, indem Sie Zeichenfolgeninterpolation und ein Zeichenliteral verwenden:gets=~/up (\d*)/;puts "8#{?=*$1.to_i}D"
Michael Kohl

Die Anzahl der Zeichen ist in diesem Fall durch Interpolation und Verkettung genau gleich.
david4dev

Kopieren Sie sie und fügen Sie sie in Ihren Editor ein: 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

Speichern Sie einige Zeichen in der letzten Zeile: $> <<? 8 +? = * $ 1.to_i +? D
steenslag

5

Bash, 71 Zeichen

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

Ich bin nicht so sehr damit beschäftigt, meine Gen- Uptimes im Internet zu veröffentlichen, also male ich stattdessen einen Zaun. Es ist die gleiche Anzahl von Zeichen. Denken Sie daran, pzwischen den Anrufen zurückzusetzen.

Pure Bash, einschließlich 71 Zeichen uptime.

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

Na ja, na ja, meine ist größer als deine.


Für den Fall, dass es nicht klar war: Sie können Ihre Lieblingssprache auswählen, wenn Sie möchten (es muss keine reine Bash sein). Sollte ich die Frage klären?
Magnus Holm

5

Perl - 26 24 Zeichen

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

Lief so:

$ 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 : Nicht zitiertes 'D' - danke JB


Sie können das Zitat von D.
JB

4

Haskell, 88 Zeichen

Wie so oft bietet Haskell nicht die extremste Golffähigkeit einiger anderer Sprachen, erlaubt jedoch einen eleganten Ausdruck der mathematischen Strukturen, die dem Problem zugrunde liegen. Aufbauend auf ihrer wegweisenden Arbeit in diesem Bereich möchte ich eine Haskell-Implementierung des Holkins-Krahulik-Approximationsoperators vorstellen . Kurz gesagt, der Bediener ignoriert beide Eingaben und gibt eine durch die Wellenlänge parametrisierte Phallus-Druckfunktion zurück.

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

4

Perl, 17 Zeichen
Jetzt mit sagen:

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

Ausbeuten

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

war:

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

Ausbeuten

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

(Ich kann leider nicht "sagen")



3

35 Zeichen

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

so,

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

Bearbeiten : war

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

Edit 2 : Kommentar von JB ( \statt verwenden '')


1
Escape-Space und Sternchen mit einem Backslash anstelle von Anführungszeichen für 2 Zeichen.
JB

3

Windows PowerShell, 28

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

Mindestens

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

liefert die korrekte Ausgabe, sollte also in der Lage sein, die uptimeAusgabe zu verarbeiten. Ich kann es jedoch nicht testen, da GNUWin32 einen Fehler enthält uptime, der versucht, aus einer nicht vorhandenen Datei zu lesen ist keine Datei, die die Startzeit unter Windows enthält).


3

Common Lisp, 84 Zeichen

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

Dies übernimmt die Uptime-Zeichenfolge als Eingabe. Es scheint, dass es eine kürzere Lösung geben sollte, die eine Liste überschreibt, aber wenn ja, kann ich es nicht finden.


+1 Common Lisp wird hier nur selten verwendet.
Helfer-Methode

3

GolfScript (24 Zeichen)

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

Haskell (73 Zeichen)

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

C (131 Zeichen)

#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');}

Ihr Golfscript ist 23 Zeichen, nicht 24. Sie können es auch durch Auswahl nach Index (Gleichheitszeichen) auf 16 verkürzen:' '/3=~8\'='*'D'
Cristian Lupascu

2

PHP, 62 Zeichen

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

Es sind keine Eingaben erforderlich.


2

Python (42)

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

Hinweis: Python 3 wird zur Reduzierung der Gesamtzahl der Zeichen verwendet.


2

Python, 65 Bytes

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

Prüfung:

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 Zeichen

(außer Implementierung / OS-spezifischer Shebang)

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

Basierend auf dem Versuch, den Wunsch von Dr. Pain nach einer kürzeren Schreibweise für eine wiederholte Figur zu erfüllen . Dieser kann wie in der Frage gezeigt in einer Pipeline verwendet werden.

(Die Formatzeichenfolge gibt an, dass die leere Zeichenfolge (zwischen ~<und ~>) in einem durch ein Argument angegebenen Feld mit dem =Zeichen aufgefüllt rechtsbündig ausgerichtet werden soll .)


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 Zeichen

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

Aufruf zum Brief der Aufgabe:

uptime | ./cg1570uptime-bar.sh

Viel kürzer

nur 54 Zeichen:

mit dieser variante:

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

Aufruf, nicht 100% in Übereinstimmung mit den Regeln:

./cg1570uptime-bar.sh $(uptime)

Ausgabe in beiden Zeiten:

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

Nicht alltägliche Tricks:

 read t u d w

liest 06: 29: 53 = t, up = u, 16 = d Rest ... = w
ohne w, alles bis zum Ende würde in $ d gesetzt.

expand wird normalerweise verwendet, um eine Registerkarte in eine Anzahl von Leerzeichen zu übersetzen, und verwendet einen Parameter, wenn Sie 8 nicht mögen.

Das Aufrufen des 3. Parameters mit $ 3 in echo -e '\t'|expand -t $3|sed 's/ /=/g'ist noch kürzer, erfordert jedoch einen Aufruf, der nicht den Worten der Regeln entspricht.


0

Bash / Zenity 38 kurze Version, 68 längere Version

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

Die kurze Version endet nach $ d, je länger berücksichtigt wird, dass wir einen Maximalwert kennen und gerne hilfreichen Text haben:

Screenshot-Zenity als Uptime-Anzeige


0

Gema , 24 Zeichen

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

Probelauf:

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 Bytes

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

Keine Eingabe. Das Ergebnis wird an das aktive Fenster gesendet.
Der eingebaute in A_TickCountist die Anzahl der Millisekunden seit der Computer neu gestartet wurde.

Durch die Nutzung unserer Website bestätigen Sie, dass Sie unsere Cookie-Richtlinie und Datenschutzrichtlinie gelesen und verstanden haben.
Licensed under cc by-sa 3.0 with attribution required.