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