Задача «Телефонная книга» не проходит все тесты - C#
Формулировка задачи:
Задача не проходит все тесты. Пример, указанный в условии работает, а потом тестировщик пробует еще несколько различных вариантов входных данных. Какой вариант не сработал, он не показывает. Помогите пожалуйста разобраться, какие условия в моем коде не соблюдены.
Условие задачи:
Примеры из условия задачи(они отработали):
Код программы, реализованной мной на 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 +79170123456using 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));