Задача «Телефонная книга» не проходит все тесты - C#

Узнай цену своей работы

Формулировка задачи:

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

Телефонная книга

ограничение по времени на тест2 секунды ограничение по памяти на тест256 мегабайт вводstdin выводstdout Вам дана телефонная книга в виде последовательности пар строк. Первая строка — имя абонента, вторая — его номер. Телефон может быть в одном из форматов: +7xxxxxxxxxx (ровно 11 цифр, «x» — любая цифра); 8xxxxxxxxxx (ровно 11 цифр, «x» — любая цифра); xxxxxxx (ровно 7 цифр, «x» — любая цифра). Кроме цифр в произвольные позиции телефонных номеров могут быть вставлены дефисы и скобки. Например, телефон «+7(917)100-00-00» считается корректным. Требуется упорядочить телефонную книгу, используя следующие правила: объедините контакты с одинаковыми именами (регистр букв имеет значение); приведите все телефоны к одной записи вида «+7xxxxxxxxxx» (ровно 11 цифр, без дополнительных символов), при этом если телефон соответствует третьему формату, то добавьте в начало префикс «+7495»; удалите дубликаты в списке телефонов каждого абонента; при обработке пропустите записи из книги, в которых телефон не подходит ни под один из указанных форматов.

Входные данные

Входные данные состоят из набора пар строк, где первая строка означает имя, а вторая — номер телефона. Имя — это непустая последовательность заглавных и строчных латинских букв и пробелов. Имя не может начинаться или заканчиваться пробелом. Телефон — это непустая последовательность из цифр, скобок и знаков «+» и «-». Входные данные состоят не более чем из 1000 строк.

Выходные данные

Выведите телефонную книгу в виде последовательность пар строк, в первой строке выведите имя абонента, во второй — список телефонов в лексикографическом порядке, относящихся к этому абоненту. Для каждого из абонентов его список телефонов не должен содержать дубликатов. Описания абонентов выводите в лексикографическом порядке их имен. Если для абонента в записной книжке не указано ни одного корректного номера, то выводить его не следует.
Примеры из условия задачи(они отработали):

входные данные

Vincent van Gogh +79170123456 Archimedes 8(911)321-85-85 Vincent van Gogh 321-85-85 Vincent van Gogh 18238585 George Washington +7-(919)-01-23-4-5-6 Peter 8

выходные данные

Archimedes +79113218585 George Washington +79190123456 Vincent van Gogh +74953218585 +79170123456
Код программы, реализованной мной на C#:
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
 
namespace ConsoleApp119
{
    class Program
    {
        static int Comparer(string s1, string s2)
        {
            if (char.IsUpper(s1[0]) && char.IsLower(s2[0])) return -1;
            if (char.IsUpper(s2[0]) && char.IsLower(s1[0])) return 1;
            return string.Compare(s1, s2, false);
        }
        static void Main(string[] args)
        {
            List<string> lines = new List<string>();
            List<string> row = new List<string>();
            List<string> strok = new List<string>();
            List<string> lstsort = new List<string>();
            List<List<string>> mass = new List<List<string>>();
            string current = "";
            string temp = "";
            int k = 0;
            string str1 = "";
            string str2 = "";
            string str3 = "";
            while ((current = Console.ReadLine()) != null)
            {
                if (k % 2 == 0)
                {
                    temp = current;
                }
                if ((k % 2 != 0) && (current.Length > 5))
                {
                    current = current.Replace("(", "");
                    current = current.Replace(")", "");
                    current = current.Replace("-", "");
                    if ((current.Substring(0, 2) == "+7") && (current.Length == 12))
                    {
                        temp = temp + "|" + current;
                        lines.Add(temp);
                    }
                    if ((current.Substring(0, 1) == "8") && (current.Length == 11))
                    {
                        current = current.Remove(0, 1);
                        current = current.Insert(0, "+7");
                        temp = temp + "|" + current;
                        lines.Add(temp);
                    }
                    if (current.Length == 7)
                    {
                        temp = temp + "|" + "+7495" + current;
                        lines.Add(temp);
                    }
                }
                k++;
            }
            lines.Sort(Comparer);
            row = lines[0].Split('|').ToList<string>();
            str1 = row[0];
            str2 = row[1];
            str3 = str1 + "|" + str2;
            lstsort.Add(row[0]);
            for (int i = 1; i < lines.Count; i++)
            {
                row = lines[i].Split('|').ToList<string>();
                lstsort.Add(row[0]);
                if (row[0] != str1)
                {
                    strok.Add(str3);
                    str3 = row[0] + "|" + row[1];
                }
                if ((row[0] == str1) && (row[1] != str2))
                {
                    str3 = str3 + " " + row[1];
                }
                str1 = row[0];
                str2 = row[1];
            }
            strok.Add(str3);
            lstsort.Sort();
            for (int i = 1; i < lstsort.Count; i++)
            {
                if (lstsort[i] == lstsort[i - 1])
                {
                    lstsort.Remove(lstsort[i - 1]);
                    i = i - 1;
                }
            }
            for (int i = 0; i < lstsort.Count; i++)
            {
                for (int j = 0; j < strok.Count; j++)
                {
                    row = strok[j].Split('|').ToList<string>();
                    if (row[0] == lstsort[i])
                    {
                        Console.WriteLine(row[0]);
                        Console.WriteLine(row[1]);
                    }
                }
            }
            Console.ReadLine();
        }
    }
}

Решение задачи: «Задача «Телефонная книга» не проходит все тесты»

textual
Листинг программы
var list = new List<string>
{
    "A",
    "a",
    "b",
    "bbb",
    "Bbb",
    "bBB",
    "Aaa",
    "BBb",
    "bbB",
    "BBB",
    "aAa",
    "AAA",
    "AAa",
    "B"
};
 
list.Sort(Comparer);
Console.WriteLine(string.Join(Environment.NewLine, list));

Оцени полезность:

9   голосов , оценка 4.556 из 5
Похожие ответы