Бар часу прогресу


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" має читати "анатомічно".
Джої Адамс

@Joey: І я анатомічно написав неправильно. Спасибі.
dmckee --- кошеня колишнього модератора

5
Гм, просто дива, "смуга прогресу" для чогось не має відомого кінця (так що ви не можете виміряти його прогрес) звучить дивно. Може, достатньо було б просто "бару"?
houbysoft

2
Моя тривалість роботи - 27 хвилин :(
steenslag

1
@userunknown Це мало значення в першій версії цього питання. Погляньте на правки ...
Гарет

Відповіді:


6

Рубі, 39

Введення даних не потрібно (шляхом обстрілу):

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

Або від stdin (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

Баш, 71 символ

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

Я не так сильно розкриваю своє покоління в Інтернеті, тому замість цього малюю паркан. Це те саме число символів. Подумайте про скидання pміж дзвінками.

Чистий баш, 71 символ у тому числі uptime.

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

Ну, що ж, добре ... моя більша за твою.


У випадку, якщо це було не зрозуміло: ви можете розмовляти зі своєю улюбленою мовою, якщо хочете (не потрібно, щоб це був просто баш). Чи варто уточнити питання?
Магнус Холм

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

Хаскелл, 88 символів

Як це часто буває, Хаскелл не пропонує найвищої гольфності деяких інших мов, але дозволяє вишукано виражати математичні структури, що лежать в основі цієї проблеми. Спираючись на їх семінарну роботу в цій галузі, я маю на меті впровадити 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
Увімкніть простір та зірочку зі зворотною косою рисою, а не цитатами на два знаки.
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

Лист звичайний, 84 символи

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

Це приймає рядок продовження часу, як вхідний. Здається, що повинно бути коротше відображення рішення # ', напишіть список, але якщо так, я не можу його придумати.


+1 Ви рідко бачите тут звичайного 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');}

ваш Гольфскрипт - 23 знаки, а не 24. Також ви можете скоротити його до 16, використовуючи виділення за індексом (знак рівності):' '/3=~8\'='*'D'
Крістіан Лупаску,

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

Пітон, 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

Лист звичайний, 57 символів

(за винятком програми shebang, що стосується впровадження / ОС)

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

На основі спроби задовольнити бажання відповіді доктора Пейна про коротший спосіб написання повторного персонажа. Цей може бути використаний у трубопроводі, як показано в питанні.

(Рядок формату вказує на правильне виправдання порожнього рядка (між ~<і ~>) у полі ширини, визначеної аргументом, доданим =символом.)


1

К, 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, вгору = u, 16 = d відпочинок ... = w
без w, все до кінця буде поставлено в $ d.

розширення зазвичай використовується для перекладу вкладки на кількість пробілів і приймає параметр, якщо вам не подобається 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, чим довше враховується те, що ми знаємо максимальне значення та любимо мати корисний текст:

Знімок екрана як відображення в режимі тривалості


0

Гема , 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- це кількість мілісекунд після перезавантаження комп'ютера.

Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.