Разыскиваются звезды кода

640х255

На улице нарядили ёлки, и это значит, что очень скоро нас ждут новогодние праздники и немного свободного времени! Для активных молодых людей это значит, что можно вложить это время “в себя”, научиться чему-то новому, чтобы стать лучше, умнее и показать всему миру свою крутизну. Специально для вас мы приготовили проект CodeStars!

В этом проекте ты сможешь показать свои навыки, решив дюжину задачек по программированию. Заодно это хороший повод узнать что-то новое и чему-то научиться! Для решения задач мы рекомендуем использовать Visual Studio (доступную студентам по программе DreamSpark, либо бесплатную Community Edition) и язык C# – это позволяет решить все задачи достаточно просто.

Задачи расположены в порядке увеличения сложности, но решить первые – очень просто! Разберем решение простейшей задачи:

Музыкальная группа “Кнопкодавы” любит использовать в своих песнях много слов с буквами Z – настолько много, что в газетах написали, что это самая популярная буква в их песнях! Нам нужно проверить, действительно ли это так. Прилагаемый файл содержит тексты песен этой группы – нам необходимо вывести 5 самых популярных букв, используемых в песнях, в порядке убывания популярности.

Для решения этой задачи используем Visual Studio, в которой создадим консольное приложение на C#. Во всех задачах будет проще всего использовать именно консольные приложения.

image

В консольном приложении будет всего один главный файл проекта Program.cs, и в нем – одна главная выполняемая функция Main, внутрь которой нужно будет вписать решение:

image

Для начала считаем содержимое файла в одну строку. Здесь мы предполагаем, что составители задачи поступили гуманно и не дали нам слишком длинный файл, который не может поместиться в строку. Правильнее, конечно, было бы считывать файл посимвольно, но в данном случае мы слегка упрощаем:

 var file = File.OpenText(@"c:\temp\songz.txt");
 var input = file.ReadToEnd();

Далее, для подсчета частоты букв, будем использовать массив целых чисел из 26 элементов. Нулевой элемент будет соответствовать букве ‘a’. Для начала обнулим все элементы:

 var freq = new int[26];
 for (var i = 0; i < 26; i++) freq[i] = 0;

Посчитаем частоту вхождения английских букв в тект. При этом не забудем изначально преобразовать текст к нижнему регистру с помощью функции .ToLower(), а также будет считать только буквы, игнорируя все остальные символы. Обратите внимание, что номер символа x в массиве получается с помощью выражения (x-‘a’):

 foreach(var x in input.ToLower())
 {
    if (x >= 'a' && x <= 'z') freq[x - 'a']++;
 }

Наконец, выведем 5 самых частых букв в порядке уменьшения частоты. Для этого на каждом из шагов цикла от 1 до 5 будем искать букву с максимальной частотой, выводить её на экран, и потом обнулять соответствующую частоту:

 for (int k=0;k<5;k++)
 {
     int n = 0;
     for (int i=1;i<26;i++)
     {
         if (freq[i] > freq[n]) n = i;
     }
     Console.Write((char)('a' + n));
     freq[n] = 0;
 }

Наконец, не забудьте поставить последней строчкой программы Console.ReadKey(), чтобы экран с консолью не исчезал сразу после выполнения программы. Запускаем нашу программу и получаем ответ:

image

Получившийся ответ вводим на сайте CodeStars – в виде строчки, из строчных или прописных букв (система должна понимать несколько возможных вариантов правильного ответа).

Если вы захотите посмотреть полный исходный код решения – оно доступно на GitHub. Я буду очень рад, если кто-нибудь улучшит его – принимаются pull requests!

Задачки, приведенные на CodeStars, хорошо подходят для обучения основам алгоритмики. Если вы начинаете осваивать программирование "с нуля", то для ознакомления с языком C# рекомендую видеокурс "Увлекательное программирование на C#", а для более детального погружения в синтаксис - более подробный курс в виде текстового пособия. А дальше - включайте голову!

Удачной прокачки ваших программерских скиллов под Новый год!

songz.txt