Skip to content

findscode/tproger-olympiad

Folders and files

NameName
Last commit message
Last commit date

Latest commit

 

History

5 Commits
 
 
 
 
 
 
 
 
 
 
 
 
 
 

Repository files navigation

Tproger-Olympiad

Monkeys? Where?

Данная программа написана для олимпиады от сайта https://tproger.ru/.

Задание: Напишите программу, выводящую время, большее текущего на 23 часа. Условия: От каждого участника принимается один исходный код на любом существующем языке программирования. Победитель будет выбираться по оригинальности идеи, количеству минут, которое администрация будет проигрывать с этой глупости и качества и забавности пояснения к алгоритму.

/-------------------------------/

Краткое описание моей программы:

Вступление

Давайте обо всем по порядку.
В интернетах существует множество сайтов, на которых можно узнать точное время в любом уголке земного шара. Мне была важна максимальная точность результата, поэтому, после долгих раздумий я выбрал https://www.ntp-servers.net/ (первый в выдаче Гугла по запросу "сервера времени").

Перед программистом в лице меня стоит вполне себе реальная задача - вывести на экран время, которое будет превосходить текущее на 23 часа. Где взять время я нашел, осталось только это время получить...

Часть 1. void html()

На Хабре когда-то проскакивала статья под названием "Программист я или просто хорошо гуглю?". Я тоже задался этим вопросом, ведь функцию, скачивающую разметку html страницы, я банально слизал почти с первого раза.
Зачем? Перед поиском этой функции я попробовал сохранить https://www.ntp-servers.net/ в формате .txt и, о чудо, покопавшись в разметке я находил среди тегов время на момент загрузки файла.

Дело оставалось за малым - скопировать функцию и заставить ее скачивать необходимы сайт. В файле out.txt появилось содержимое страницы, я уже открывал шампанское и звонил Машке, как вдруг понял, что теперь на местах красивых циферок стояли дефисы. Грустный тромбон. Nuff said.

Но что же это, в самом верху файла? Боги оказались милостивы - функция отправляла запрос сайту, тот, видимо, присылал его со всей сопутствующей информацией, в том числе и с датой передачи! Ну что же, на безрыбье и рак за рыбу сойдет, поэтому хватаю то, что дают, потом скажу, что так и рассчитывал сделать.

Часть 2. void stroka()

Короткая функция, много слов.
Как учил наш преподаватель, "Коль пальцев на руке хватило для необходимых шагов, то писать циклы не нужно". Методом тыка, я определил, что после 3-х getline() я получу нужную строку. Следуя словам старого гуру, открываю файловый поток, считываю в буфер под неприметным именем bb строки, по порядку, аж три раза. На третьем разе останавливаюсь - вот она, заветная "Date:".

Опять цитата, только уже от более великого человека, чем наш лектор. Сосед Кирюха однажды выдал: "Эти мои названия для переменных, всякие bb и rrr - защита от воровства технологий". Не могу не согласиться и не применить полезный урок на деле - в этой важной программе все мои переменные называю так только в целях информационной безопасности.

Часть 3. int time()

Переменная типа char под именем qq - мое хранилище для времени. Сугубо эмпирическим методом узнаю, что количество часов в строке bb располагается на 23 и 24 символах. Забираю их и привожу к типу int. 
Вы знаете, что такое безумие? Ага, многократное повторение одного и того же. Копировать мышкой - вот что такое безумие. На днях мне рассказали про Ctrl+C и Ctrl+V (да продлятся дни их). Вот, решил использовать новый тренд в программировании. Встречайте - оператор switch! 
В моем случае он помог мне с прибавлением 23-х часов к получаемому времени. Коль сейчас 12 часов - станет 11, но уже другого дня. Но я же вывожу время, вот поэтому мне дни не так и важны. Но это все лирика, нужно возвращаться к действительности.
Этот файл какой-то неправильный, и он дает неправильный мед(зачеркнуто) неправильное время, видимо, с места, где находится сервер. Думаю, еще один оператор switch поможет перевести время на то, каким пользуюсь я.

Часть 4, заключительная.

Вывести часы оказалось не так сложно. Всего работы - создать ненужный файл с разметкой левого сайта, отыскать там время, хоть и не там, где планировалось, ловкий ход со switch'ами, немного недочетов в коде и, вуаля, текущее время превращается в элегантную подделку. Минуты я решил вывести из той же строки, думаю, это будет очень грамотно и структурированно.

На этом отчет заканчиваю, если у Вас остались какие-то вопросы, прошу вас, обязательно обратитесь в ВК или на почту.

Программу запускал на MS VS12;
Часовой пояс - GMT+3

By Stearis.

Releases

No releases published

Packages

No packages published