Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- using System;
- using System.Collections.Generic;
- using System.Linq;
- using System.Text.RegularExpressions;
- namespace Interview
- {
- /* Задача:
- Даны два целых неотрицательных числа, записанных следующим образом. Каждая цифра записывается её
- английским названием, первая буква цифры большая, остальные - маленькие.
- Например, число 1293 записывается как "OneTwoNineThree", число 135 как "OneThreeFive", число 0
- как "Zero".
- Нужно сравнить эти два числа (сравнивать их нужно как числа) и вернуть:
- -1, если первое число меньше,
- 0, если значения чисел совпадают,
- 1, если первое число больше.
- Пример использования:
- var result = new NumberStringsComparer().Compare("OneTwoNineThree", "OneThreeFive");
- Для проверки решения необходимо запустить тесты.
- Подсказка:
- При использовании класса System.Numerics.BigInteger не пройдут тесты TestBig (числа из 200 тысяч цифр).
- */
- public class NumberStringsComparer
- {
- private static readonly string[] digits =
- {
- "Zero",
- "One",
- "Two",
- "Three",
- "Four",
- "Five",
- "Six",
- "Seven",
- "Eight",
- "Nine",
- };
- public int Compare(string first, string second)
- {
- var firstDigits = ConvertToDigits(first);
- var secondDigits = ConvertToDigits(second);
- return CompareListsOfDigits(firstDigits, secondDigits);
- }
- private List<int> ConvertToDigits(string s)
- {
- var list = Regex.Replace(s, @"([A-Z])", " $1").Split(' ').Skip(1).ToArray();
- return list.Select(x => digits.ToList().FindIndex(a => a == x)).ToList();
- }
- private int CompareListsOfDigits(List<int> first, List<int> second)
- {
- if (first.Count > second.Count) return 1;
- else if (first.Count < second.Count) return -1;
- else
- {
- for (int i = 0; i < first.Count; i++)
- {
- if (first[i] > second[i]) return 1;
- else if (first[i] < second[i]) return -1;
- else continue;
- }
- return 0;
- }
- }
- }
- }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement