Сообщение администратору
Имя:
Почта:
Сообщение:
Вход на сайт
Логин:
Пароль:

Статистика
Поделиться
Поддержка  •  Дневник  •  О сайте  •  Реклама  •  Поставить баннер  •  Прислать  •  Хроника  •  Translate  •  Рекомендованное  •  Написать администратору OpenToWork Гости: 11    Участники: 1 Авторизация Авторизация   Регистрация 
Метод Научного Тыка
RULVEN
Поиск  
О сайте, обо всём что меня окружает, интересует, волнует, касается. Поддержать
«« Следующая Вернуться в список Предыдущая »»

15 февраля 2023 года, среда, 18:35

Заметка #150168

Ну вот, все тесты готовы. Завтра надо заслать. Хотя думаю что это уже не имеет значения.

using System;
using System.Collections.Generic;
using System.Linq;
using System.Text.RegularExpressions;

/**
 * Generates various statistics about the tweets data set returned by the given TweetsApiService instance.
 */
namespace CodeScreen.Assessments.TweetsApi
{
    class TweetDataStatsGenerator
    {
        private readonly TweetsApiService TweetsApiService;
        private List<Tweet> Tweets { get; set; }

        public TweetDataStatsGenerator(TweetsApiService tweetsApiService)
        {
            TweetsApiService = tweetsApiService;
        }

        public void LoadTweets(string userName)
        {
            if (string.IsNullOrEmpty(userName))
                throw new ArgumentNullException("User name cannot be empty.");

            Tweets ??= TweetsApiService.GetTweetsAsync(userName).Result;
        }

        /**
         * Retrieves the highest number of tweets that were created on any given day by the given user.
         *
         * A day's time period here is defined from 00:00:00 to 23:59:59
         * If there are no tweets for the given user, this method should return 0.
         *
         * @param userName the name of the user
         * @return the highest number of tweets that were created on a any given day by the given user
        */
        public int GetMostTweetsForAnyDay(string userName)
        {
            LoadTweets(userName);
            if (!Tweets.Any())
                return 0;

            var date = new DateTime(DateTime.Now.Year, DateTime.Now.Month, DateTime.Now.Day);
            var maxTweetsPerDay = 0;
            var perDayCounter = 0;
            foreach (var tweet in Tweets.OrderBy(x => x.DateCreated))
            {
                if (date.Day != tweet.DateCreated.Day)
                {
                    if (maxTweetsPerDay < perDayCounter)
                    {
                        maxTweetsPerDay = perDayCounter;
                        perDayCounter = -1;
                    }
                }
                else
                    perDayCounter++;

                date = tweet.DateCreated;
            }

            return maxTweetsPerDay;
        }

        /**
         * Finds the ID of longest tweet for the given user.
         *
         * You can assume there will only be one tweet that is the longest.
         * If there are no tweets for the given user, this method should return null.
         *
         * @param userName the name of the user
         * @return the ID of longest tweet for the given user
        */
        public string GetLongestTweet(string userName)
        {
            LoadTweets(userName);
            if (!Tweets.Any())
                return "";

            var longestTweet = Tweets.OrderByDescending(x => x.Text.Length).First();

            return longestTweet.Id;
        }

        /**
         * Retrieves the most number of days between tweets by the given user, wrapped as an OptionalInt.
         *
         * This should always be rounded down to the complete number of days, i.e. if the time is 12 days & 3 hours, this
         * method should return 12.
         * If there are no tweets for the given user, this method should return 0.
         *
         * @param userName the name of the user
         * @return the most number of days between tweets by the given user
        */
        public int FindMostDaysBetweenTweets(string userName)
        {
            LoadTweets(userName);
            if (!Tweets.Any())
                return 0;

            var date = new DateTime(DateTime.Now.Year, DateTime.Now.Month, DateTime.Now.Day);
            var daysBetween = 0;
            foreach (var tweet in Tweets.OrderBy(x => x.DateCreated))
            {
                var timeRange = tweet.DateCreated - date;
                if (daysBetween < timeRange.Days)
                    daysBetween = timeRange.Days;

                date = tweet.DateCreated;
            }

            return daysBetween;
        }

        /**
         * Retrieves the most popular hash tag tweeted by the given user.
         *
         * Note that the string returned by this method should include the hashtag itself.
         * For example, if the most popular hash tag is "#Java", this method should return "#Java".
         * If there are no tweets for the given user, this method should return null.
         *
         * @param userName the name of the user
         * @return the most popular hash tag tweeted by the given user.
        */
        public string GetMostPopularHashTag(string userName)
        {
            LoadTweets(userName);
            if (!Tweets.Any())
                return "";

            var regex = new Regex(@"#\w+");
            var hashTags = new Dictionary<string, int>();
            foreach (var matches in Tweets.Select(tweet => regex.Matches(tweet.Text)))
            {
                foreach (var match in matches)
                {
                    var key = match.ToString();
                    if (string.IsNullOrEmpty(key))
                        continue;
                    if (!hashTags.ContainsKey(key))
                        hashTags.Add(key, 1);
                    else
                        hashTags[key] += 1;
                }
            }
            var mostPopularTag = hashTags.OrderByDescending(x => x.Value).FirstOrDefault();
            
            return mostPopularTag.Key ?? "";
        }
    }
}

Мне нравится 0    Мне не нравится 0
новые комментарии сверху

Комментарии: 0
Нет ни одного комментария.
Поделиться ссылкой:
Последние комментарии

Пн 10.03.2025 04:33
Наконец-то это произошло, объём работы проделан просто огроменный. Этот технический долг обошёлся дорого по затратам, времени и сил. Но это был необходимый шаг в развитии проекта.
Ср 04.12.2024 21:25
Спасибо, денёк сегодня был непростой, но какие-то вопросы получилось успешно разрулить.
Чт 19.09.2024 11:57
"Гражданин, вы задаёте слишком много лишних вопросов. Дайте мне рот, я расскажу как могу говорить."...
Пн 01.07.2024 10:02
Вот и я смотрю, что мрак, вроде все ищут, но при этом никому не нужен и не важно какой опыт работы и уровень работ...
Ср 19.06.2024 19:50
Спасибо, нелегко всё-таки терять тех кто дорог. Она ушла как-то быстро, меньше чем за неделю. То носилась, была активная, и как-то стало ей плохеть и всё. Ну ей сейчас уже не жарко, не холодно, ни весело ни скучно.
Сб 15.06.2024 04:11
Два раза подумал и всё оказалось не так просто и однозначно. Идея моего поста в том что в последнее время у меня вынужденно уходит очень много времени на то что не даёт результата. Полезная работа может превратиться в бесполезную. Вот...
Чт 11.04.2024 21:40
Истинную причину всего этого не узнает никто кроме тех кто принимает такие решения. Мало знаешь по специальности - плохо. Знаешь достаточно много - тоже плохо. Так если спец с опытом, ему не нужно долго учиться, сразу может выполнять задачи. Здесь...
Чт 14.03.2024 00:20
Спасибо! У сайта уже есть какая никакая история, надеюсь этот спектакль продолжится без приключений. Интересно посмотреть что тут будет к декабрю 2024. Здесь уже достаточно интересного контента, и хотелось бы его больше. Больше всякого разного. И вообще работы по развитию...
Вт 26.12.2023 09:33
В декабре планирую закончить всякое разное по всему сайту и в январе начать работу над местной микросоциалкой и управлением контентом для пользователей. Надо будет решить, использовать FTP или что-то более модное.
Вт 05.12.2023 10:31
Про гороскоп это конечно сильно. Походу у них там HR какая-то девочка в розовом летающая в облаках.
Разработано на основе BlackNight CMS
Release v.2025-05-17
© 2000–2025 Blackball
Дизайн & программирование:
О сайтеРеклама
Visitors
Web-site performed by Sergey Drozdov
BlackballРекламаСтатистикаПоддержка
МузыкаПлейлистыКиноВидеоИгрыАудиоПрограммыСтатьиКартинкиЮморФорумДневник сайтаПрислать контентРекомендованное
ЧасыLava LampWazeНастройка WindowsFleshlight