Pasek postępu działania

13

Napisz program, który analizuje dane wyjściowe uptimei generuje anatomicznie sugestywny pasek postępu (jak pokazano) o długości równej bieżącej dostępności w dniach:

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

(34 dni = 34 znaki równości)

Najkrótsza odpowiedź wygrywa.

Magnus Holm
źródło
@dmckee: Dzięki za edycję. Występuje jednak niewielki błąd ortograficzny: „anotomicznie” powinno brzmieć „anatomicznie”.
Joey Adams,
@Jey: I ja też źle napisałem „anatomicznie”. Dzięki.
dmckee --- były moderator kociak
5
Hmm, tylko nitpick, „pasek postępu” dla czegoś, co nie ma znanego końca (więc nie można zmierzyć jego postępu), brzmi dziwnie. Może wystarczy „bar”?
houbysoft
2
Mój czas pracy wynosi 27 minut :(
steenslag,
1
@userunknown Miało to znaczenie w pierwszej wersji tego pytania. Spójrz na zmiany ...
Gareth,

Odpowiedzi:

6

Ruby, 39 lat

Nie wymaga wprowadzania danych (przez wyłuskanie)

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

Lub ze standardowego (40 znaków):

gets=~/up (\d*)/;puts '8'+'='*$1.to_i+'D'
david4dev
źródło
Zmniejsz o 2 znaki, używając interpolacji łańcuchów i literału:gets=~/up (\d*)/;puts "8#{?=*$1.to_i}D"
Michael Kohl,
W tym przypadku liczba znaków jest dokładnie taka sama, używając interpolacji i konkatenacji.
david4dev
To nie jest, skopiuj wklej je do swojego edytora: 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
Zapisz niektóre znaki w ostatnim wierszu: $> <<? 8 +? = * $ 1.to_i +? D
steenslag
5

Bash, 71 znaków

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

Nie jestem aż tak dużo do wystawiania moich gen uptimes w internecie, tak Rysuję ogrodzenie zamiast. To ta sama liczba znaków. Pomyśl o resetowaniu pmiędzy połączeniami.

Pure Bash, 71 znaków, w tym uptime.

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

Cóż, cóż ... mój ... jest większy niż twój.

JB
źródło
W przypadku, gdy nie było to jasne: możesz użyć swojego ulubionego języka, jeśli chcesz (nie musi to być czysty bash). Czy powinienem wyjaśnić pytanie?
Magnus Holm,
5

Perl - 26 24 znaków

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

Biegł tak:

$ 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

edytuj : Nie cytuję końcowego „D” - dzięki JB

jho
źródło
Możesz cofnąć cytację z D.
JB
4

Haskell, 88 znaków

Jak to często bywa, Haskell nie oferuje najbardziej ekstremalnych możliwości gry w golfa w niektórych innych językach, ale pozwala na eleganckie wyrażenie struktur matematycznych leżących u podstaw problemu. Opierając się na ich przełomowej pracy w tej dziedzinie, zamierzam wprowadzić implementację operatora aproksymacji Holkins-Krahulik w Haskell . W skrócie, operator ignoruje oba dane wejściowe i zwraca funkcję drukowania fallusa sparametryzowaną długością wału.

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

źródło
4

Perl, 17 znaków
Teraz powiedz:

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

Wydajność

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

było:

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

Wydajność

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

(Nie mogę niestety powiedzieć)

Chris Kaufmann
źródło
3

57 znaków

python -c "print'8'+'='*int(raw_input().split()[2])+'D'"
Keith Randall
źródło
3

35 znaków

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

więc,

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

Edycja : był

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

Edycja 2 : komentarz JB (użyj \zamiast '')

Eelvex
źródło
1
Zamiast cudzysłowów dla 2 znaków, uciec od miejsca i gwiazdki odwrotnym ukośnikiem.
JB
3

Windows PowerShell, 28

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

Przynajmniej

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

daje poprawne wyjście, więc powinno być w stanie obsłużyć uptimewyjście. Nie mogę jednak przetestować, ponieważ GNUWin32 zawiera uszkodzony, uptimektóry próbuje odczytać z nieistniejącego pliku (Uwaga dla osób przenoszących narzędzia uniksowe: Nie próbuj zakładać, że Windows jest uniksowy i przestrzega tych samych zasad lub konwencji; tam nie ma pliku zawierającego czas rozruchu w systemie Windows).

Joey
źródło
3

Common Lisp, 84 znaków

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

Pobiera to ciąg uptime jako dane wejściowe. Wygląda na to, że powinno być krótsze mapowanie rozwiązania # 'napisz listę, ale jeśli tak, to nie mogę jej wymyślić.

Dr. Pain
źródło
+1 Rzadko widuje się tutaj Common Lisp.
Metoda pomocnicza
3

GolfScript (24 znaki)

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

Haskell (73 znaki)

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

C (131 znaków)

#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');}
marinus
źródło
twój Golfscript ma 23 znaki, a nie 24. Możesz także skrócić go do 16, używając wyboru według indeksu (znak równości):' '/3=~8\'='*'D'
Cristian Lupascu
2

PHP, 62 znaki

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

Nie wymaga żadnych danych wejściowych, działa.

Kevin Brown
źródło
2

Python (42)

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

Uwaga: Python 3 służy do zmniejszania całkowitej liczby znaków.

aviraldg
źródło
2

Python, 65 bajtów

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

test:

echo '23:01  up 34 days,  7:30, 5 users, load averages: 0.23 0.27 0.24'|./time.py
8==================================D
0b1t
źródło
1

PHP, 61

<?$n=split(' ',$argv[1]);$v=8;while($n[2]--)$v.'=';echo"$vD";
l0n3sh4rk
źródło
1

Common Lisp, 57 znaków

(wyłączając shebang implementacyjny / specyficzny dla systemu operacyjnego)

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

W oparciu o próbę zaspokojenia odpowiedzi Dr. Pain na krótszy sposób napisania powtarzającej się postaci. Tego można użyć w potoku, jak pokazano w pytaniu.

(Ciąg formatu określa, aby wyjustować do prawej pusty ciąg (między ~<i ~>), w polu o szerokości określonym przez argument, uzupełniony =znakiem.)

Kevin Reid
źródło
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============================================================================ ...
tartin
źródło
0

Bash 67 znaków

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

wezwanie do litery zadania:

uptime | ./cg1570uptime-bar.sh

Znacznie krótszy

tylko 54 znaki:

z tą odmianą:

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

wywołanie, a nie 100% zgodnie z zasadami:

./cg1570uptime-bar.sh $(uptime)

wyjście w obu czasach:

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

Sztuczki nie codzienne:

 read t u d w

odczytuje 06: 29: 53 = t, góra = u, 16 = d odpoczynek ... = w
bez w, wszystko do końca zostanie umieszczone na $ d.

Rozwiń jest zwykle używany do przetłumaczenia tabulatora na liczbę spacji i przyjmuje parametr, jeśli nie lubisz 8.

Chwytanie trzeciego parametru z 3 $ w echo -e '\t'|expand -t $3|sed 's/ /=/g'jest jeszcze krótsze, ale wymaga wywołania, nie pasującego do słów reguł.

nieznany użytkownik
źródło
0

bash / zenity 38 krótka wersja, 68 dłuższa wersja

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

Krótka wersja kończy się po $ d, dłużej bierze pod uwagę, że znamy wartość maksymalną i lubimy mieć pomocny tekst:

Zenity zrzutu ekranu jako wyświetlanie czasu pracy

nieznany użytkownik
źródło
0

Gema , 24 znaki

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

Przykładowy przebieg:

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
człowiek w pracy
źródło
0

AutoHotkey , 39 bajtów

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

Brak wejścia. Wynik jest wysyłany do aktywnego okna.
Wbudowana A_TickCountjest liczba milisekund od ponownego uruchomienia komputera.

Inżynier Toast
źródło