Задача «Телефонная книга» не проходит все тесты - 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#:
Листинг программы
  1. using System;
  2. using System.Collections.Generic;
  3. using System.Linq;
  4. using System.Text;
  5. using System.Threading.Tasks;
  6. namespace ConsoleApp119
  7. {
  8. class Program
  9. {
  10. static int Comparer(string s1, string s2)
  11. {
  12. if (char.IsUpper(s1[0]) && char.IsLower(s2[0])) return -1;
  13. if (char.IsUpper(s2[0]) && char.IsLower(s1[0])) return 1;
  14. return string.Compare(s1, s2, false);
  15. }
  16. static void Main(string[] args)
  17. {
  18. List<string> lines = new List<string>();
  19. List<string> row = new List<string>();
  20. List<string> strok = new List<string>();
  21. List<string> lstsort = new List<string>();
  22. List<List<string>> mass = new List<List<string>>();
  23. string current = "";
  24. string temp = "";
  25. int k = 0;
  26. string str1 = "";
  27. string str2 = "";
  28. string str3 = "";
  29. while ((current = Console.ReadLine()) != null)
  30. {
  31. if (k % 2 == 0)
  32. {
  33. temp = current;
  34. }
  35. if ((k % 2 != 0) && (current.Length > 5))
  36. {
  37. current = current.Replace("(", "");
  38. current = current.Replace(")", "");
  39. current = current.Replace("-", "");
  40. if ((current.Substring(0, 2) == "+7") && (current.Length == 12))
  41. {
  42. temp = temp + "|" + current;
  43. lines.Add(temp);
  44. }
  45. if ((current.Substring(0, 1) == "8") && (current.Length == 11))
  46. {
  47. current = current.Remove(0, 1);
  48. current = current.Insert(0, "+7");
  49. temp = temp + "|" + current;
  50. lines.Add(temp);
  51. }
  52. if (current.Length == 7)
  53. {
  54. temp = temp + "|" + "+7495" + current;
  55. lines.Add(temp);
  56. }
  57. }
  58. k++;
  59. }
  60. lines.Sort(Comparer);
  61. row = lines[0].Split('|').ToList<string>();
  62. str1 = row[0];
  63. str2 = row[1];
  64. str3 = str1 + "|" + str2;
  65. lstsort.Add(row[0]);
  66. for (int i = 1; i < lines.Count; i++)
  67. {
  68. row = lines[i].Split('|').ToList<string>();
  69. lstsort.Add(row[0]);
  70. if (row[0] != str1)
  71. {
  72. strok.Add(str3);
  73. str3 = row[0] + "|" + row[1];
  74. }
  75. if ((row[0] == str1) && (row[1] != str2))
  76. {
  77. str3 = str3 + " " + row[1];
  78. }
  79. str1 = row[0];
  80. str2 = row[1];
  81. }
  82. strok.Add(str3);
  83. lstsort.Sort();
  84. for (int i = 1; i < lstsort.Count; i++)
  85. {
  86. if (lstsort[i] == lstsort[i - 1])
  87. {
  88. lstsort.Remove(lstsort[i - 1]);
  89. i = i - 1;
  90. }
  91. }
  92. for (int i = 0; i < lstsort.Count; i++)
  93. {
  94. for (int j = 0; j < strok.Count; j++)
  95. {
  96. row = strok[j].Split('|').ToList<string>();
  97. if (row[0] == lstsort[i])
  98. {
  99. Console.WriteLine(row[0]);
  100. Console.WriteLine(row[1]);
  101. }
  102. }
  103. }
  104. Console.ReadLine();
  105. }
  106. }
  107. }

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

textual
Листинг программы
  1. var list = new List<string>
  2. {
  3.     "A",
  4.     "a",
  5.     "b",
  6.     "bbb",
  7.     "Bbb",
  8.     "bBB",
  9.     "Aaa",
  10.     "BBb",
  11.     "bbB",
  12.     "BBB",
  13.     "aAa",
  14.     "AAA",
  15.     "AAa",
  16.     "B"
  17. };
  18.  
  19. list.Sort(Comparer);
  20. Console.WriteLine(string.Join(Environment.NewLine, list));

ИИ поможет Вам:


  • решить любую задачу по программированию
  • объяснить код
  • расставить комментарии в коде
  • и т.д
Попробуйте бесплатно

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

9   голосов , оценка 4.556 из 5

Нужна аналогичная работа?

Оформи быстрый заказ и узнай стоимость

Бесплатно
Оформите заказ и авторы начнут откликаться уже через 10 минут
Похожие ответы