Advertisement
MyOnAsSalat

Untitled

May 15th, 2019
217
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
C# 2.73 KB | None | 0 0
  1. using System;
  2. using System.Collections.Generic;
  3. using System.Linq;
  4. using System.Text.RegularExpressions;
  5. namespace Interview
  6. {
  7.     /* Задача:
  8.  
  9.     Даны два целых неотрицательных числа, записанных следующим образом. Каждая цифра записывается её
  10.     английским названием, первая буква цифры большая, остальные - маленькие.
  11.  
  12.     Например, число 1293 записывается как "OneTwoNineThree", число 135 как "OneThreeFive", число 0
  13.     как "Zero".
  14.  
  15.     Нужно сравнить эти два числа (сравнивать их нужно как числа) и вернуть:
  16.     -1, если первое число меньше,
  17.     0, если значения чисел совпадают,
  18.     1, если первое число больше.
  19.  
  20.     Пример использования:
  21.     var result = new NumberStringsComparer().Compare("OneTwoNineThree", "OneThreeFive");
  22.  
  23.     Для проверки решения необходимо запустить тесты.
  24.  
  25.     Подсказка:
  26.     При использовании класса System.Numerics.BigInteger не пройдут тесты TestBig (числа из 200 тысяч цифр).
  27.     */
  28.  
  29.     public class NumberStringsComparer
  30.     {
  31.         private static readonly string[] digits =
  32.         {
  33.             "Zero",
  34.             "One",
  35.             "Two",
  36.             "Three",
  37.             "Four",
  38.             "Five",
  39.             "Six",
  40.             "Seven",
  41.             "Eight",
  42.             "Nine",
  43.         };
  44.  
  45.         public int Compare(string first, string second)
  46.         {
  47.             var firstDigits = ConvertToDigits(first);
  48.             var secondDigits = ConvertToDigits(second);
  49.             return CompareListsOfDigits(firstDigits, secondDigits);
  50.         }
  51.        
  52.  
  53.         private List<int> ConvertToDigits(string s)
  54.         {
  55.             var list = Regex.Replace(s, @"([A-Z])", " $1").Split(' ').Skip(1).ToArray();
  56.             return list.Select(x => digits.ToList().FindIndex(a => a == x)).ToList();
  57.         }
  58.  
  59.         private int CompareListsOfDigits(List<int> first, List<int> second)
  60.         {
  61.             if (first.Count > second.Count) return 1;
  62.             else if (first.Count < second.Count) return -1;
  63.             else
  64.             {
  65.                 for (int i = 0; i < first.Count; i++)
  66.                 {
  67.                     if (first[i] > second[i]) return 1;
  68.                     else if (first[i] < second[i]) return -1;
  69.                     else continue;
  70.                 }
  71.                 return 0;
  72.             }
  73.         }
  74.     }
  75. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement