Задачка 7. SNTPДля того чтоб компы поддерживали животрепещущее время, они могут

Задача 7. SNTP

Для того чтоб компы поддерживали животрепещущее время, они могут обращаться

к серверам четкого времени SNTP (Simple Network Time Protocol). К раскаянию, компьютер

не может просто получить время у сервера, поэтому что информация по сети передаётся не

моментально: пока известие с текущим временем дойдёт до компьютера, оно потеряет свою

актуальность. Протокол взаимодействия клиента (компьютера, запрашивающего четкое

время) и сервера (компьютера, выдающего четкое время) выглядит последующим образом:

1) Клиент посылает запрос на сервер и запоминает время отправления A

(по клиентскому времени).

2) Сервер получает запрос в момент медли B (по четкому серверному медли)

и посылает клиенту извещенье, содержащее время B.

3) Клиент получает ответ на собственный запрос в момент медли C (по клиентскому времени)

и запоминает его. Сейчас клиент, из догадки, что сетевые задержки при

передаче известий от клиента серверу и от сервера клиенту схожи, может

найти и установить для себя четкое время, используя знаменитые значения A, B, C.

Вам предстоит воплотить метод, с точностью до секунды определяющий четкое

время для установки на клиенте по известным A, B и C. При необходимости округлите

результат до целого числа секунд по правилам математики (в наименьшую сторону, если

дробная часть числа меньше , по другому в великую сторону).

Вероятно, что, пока клиент ждал ответа, по клиентскому медли успели наступить

новые сутки, но известно, что меж отправкой клиентом запроса и получением ответа

от сервера прошло менее 24 часов.

Программка получает на вход три временные ловки A, B, C. Каждая временная метка

состоит из трёх целых чисел: количества часов, количества минут, количества секунд. То есть

1-ые три строки входных данных содержат числа Ah, Am, As часы, минуты, секунды

момента A по клиентскому времени. Последующие три строки содержат числа Bh, Bm, Bs часы,

минутки, секунды момента B по медли сервера. Последующие три строчки содержат числа Сh,

Сm, Сs часы, минутки, секунды момента С по времени клиента.

Программка обязана вывести три целых числа: часы, минутки, секунды вычисленного

точного медли, которое обязан установить для себя клиент.

Пример входных и выходных данных

Ввод

15

1

0

18

9

45

15

1

40
Вывод:
18

10

5
ПРИМЕЧАНИЕ
Клиент отправил запрос в 15:01:00 по своим часам, сервеР получил запрос в 18:09:45 по своим часам. Клиент получиЛ ответ в 15:01:40, в этот момент четкое время будет 18:10:05.

Система оценивания

Решение, верно работающее только для случаев, когда все три входных медли

и ответ на задачку принадлежат одним суткам, будет оцениваться в 6 баллов.

Задать свой вопрос
1 ответ

!/usr/bin/env python3

from collections import namedtuple

Timestamp = namedtuple('Timestamp', ['h', 'm', 's'])

Timestamp.__str__ = lambda self: "h:02:m:02:s:02".format(

h=self.h, m=self.m, s=self.s

)

def get_timestamp(s):

slices = (

(0, 2), (3, 5), (6, 9),

)

return Timestamp(*(int(s[l:r]) for l, r in slices))

SECS_IN_MINUTE = 60

SECS_IN_HOUR = SECS_IN_MINUTE * 60

SECS_IN_DAY = SECS_IN_HOUR * 24

def get_seconds(t):

ret = t.h * SECS_IN_HOUR

ret += t.m * SECS_IN_MINUTE

ret += t.s

return ret

Timestamp.__int__ = get_seconds

def get_timestamp_from_seconds(secs):

h = secs // SECS_IN_HOUR

h %= 24

secs %= SECS_IN_HOUR

m = secs // SECS_IN_MINUTE

secs %= SECS_IN_MINUTE

s = secs

return Timestamp(h, m, s)

A, B, C = [int(get_timestamp(input())) for _ in range(3)]

tm2 = 2*B + (C-A) % SECS_IN_DAY

tm = tm2 // 2 + tm2 % 2

tm = get_timestamp_from_seconds(tm)

print(tm)

, оставишь ответ?
Имя:*
E-Mail:


Добро пожаловать!

Для того чтобы стать полноценным пользователем нашего портала, вам необходимо пройти регистрацию.
Зарегистрироваться
Создайте собственную учетную запить!

Пройти регистрацию
Авторизоваться
Уже зарегистрированны? А ну-ка живо авторизуйтесь!

Войти на сайт