Задача «Телефонная книга» не проходит все тесты - 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));
ИИ поможет Вам:
- решить любую задачу по программированию
- объяснить код
- расставить комментарии в коде
- и т.д