vivanov a7ac719875 lab 5 | 11 mesiacov pred | |
---|---|---|
.gitignore.txt | 11 mesiacov pred | |
readme.md | 11 mesiacov pred |
First exercise: "Номера автобусов"
Задачу я решил еще до того, как вы показывали нам его решение, поэтому я не стал ничего менять.
Первым делом я создал переменную, в которую поместил условие. Строчка кода выглядит данным образом:
string bukvi = @"^[A-Z]{1}\d{3}[A-Z]{2}$";
Данный способ записи условия нашел на просторах интернета.
Затем я использовал функцию: "Regex". Она позволяет проверять, подходят ли введенные вами данные условию. Строчка кода выглядит данным образом:
Regex check = new Regex(bukvi);
Затем я использовал цикл и проверял входные данные с условием. Строчка кода выглядит данным образом:
while (true)
{
if (check.IsMatch(input))
{
Console.WriteLine("True");
break;
}
Полный код выглядит следующим образом:
using System.Text.RegularExpressions;
string bukvi = @"^[A-Z]{1}\d{3}[A-Z]{2}$";
Regex check = new Regex(bukvi);
Console.WriteLine();
string input = Console.ReadLine();
while (true)
{
if (check.IsMatch(input))
{
Console.WriteLine("True");
break;
}
else
{
Console.WriteLine("False");
break;
}
}
Second exercise: "Сжатие бинарных последовательностей"
Сначала я создал переменную: "no_way" и поместил туда весь английский алфавит. Затем запрашиваю данные от пользователя и создаю массив: "splt", в котором разделяю введенную строку, когда встречаю символ: "1". Дальше идет цикл для каждой подстроки в "splt". Затем идет определение длинны строки. И в конце, если длинна строка равна нулю, то вывести: "a", а если нет, то он выведет букву, соответствующей длинны строки.
string no_way = "absdefghijklmnopqrstuvwxyz";
string input = Console.ReadLine();
string[] splt = input.Split("1");
for (int i = 0; i < splt.Length-1; i++)
{
int lng = splt[i].Length;
if (splt[i].Length == 0)
{
Console.Write("a");
}
else
{
Console.Write(no_way[lng]);
}
}
Third exercise: "Стрелки"
Решение данной задачи абсолютно такое же, как и решение первой. Код выглядит следующим образом:
using System.Text.RegularExpressions;
string arrow1 = ">>-->";
string arrow2 = "<--<<";
Regex check1 = new Regex(arrow1);
Regex check2 = new Regex(arrow2);
string input = Console.ReadLine();
while (true)
{
if (check1.IsMatch(input))
{
Console.WriteLine("True");
break;
}
else if (check2.IsMatch(input))
{
Console.WriteLine("True");
break;
}
else
{
Console.WriteLine("False");
break;
}
}
Fourth exercise: "Нумеролог"
Сначала я запросил данные у пользователя и конвертировал их в цифры. Код выглядит следующим образом:
Console.Write("input your age: ");
string input = Console.ReadLine();
int age = Convert.ToInt32(input);
Затем преобразовал введенное количество лет в секунды. Потом идет цикл, проверка данных на число и затем сложил цифры получивсшегося числа.
int sum_age = (age*31536000);
Console.WriteLine("your age in sec: " + sum_age);
int sum = 0;
foreach (char digit in input)
{
if (char.IsDigit(digit))
{
sum += int.Parse(digit.ToString());
}
Console.Write("I don't know what is it: " + sum);
}
Полный код выглядит таким образом:
Console.Write("input your age: ");
string input = Console.ReadLine();
int age = Convert.ToInt32(input);
int sum_age = (age*31536000);
Console.WriteLine("your age in sec: " + sum_age);
int sum = 0;
foreach (char digit in input)
{
if (char.IsDigit(digit))
{
sum += int.Parse(digit.ToString());
}
Console.Write("I don't know what is it: " + sum);
}
Fifth exercise: "Перестановка"
Первым делом я запрашиваю данные у пользователя и переношу их на нижний регистр. Как я понял, это нужно для упрощенной работы с данными, ибо без этого моя программа работала не корректно. Код выглядит следующим образом:
Console.WriteLine("input first name: ");
string first_name = Console.ReadLine().ToLower();
Console.WriteLine("input second name: ");
string second_name = Console.ReadLine().ToLower();
Затем идет проверка с помощью метода IaAnagram. Он позволяет проверить можно ли получить одно имя из другого. Код выглядит так:
if (IsAnagram(first_name,second_name))
{
Console.WriteLine("True");
}
else
{
Console.WriteLine("False");
}
Дальше я создаю новые переменные и убираю пробелы с помощью того же метода IsAnagram. Код выглядит следующим образом:
static bool IsAnagram(string first_string, string second_string)
{
first_string = first_string.Replace(" ", string.Empty);
second_string = second_string.Replace(" ", string.Empty);
Затем я начинаю сравнивать длинну строк. Код выглядит таким образо:
if (first_string.Length != second_string.Length)
{
return false;
}
Следующим делом я создаю массив и преобразую строки в массив. Код выглядит так:
char[] first_array = first_string.ToCharArray();
char[] second_array = second_string.ToCharArray();
Затем я отсортировал данные полученных мной массивов в алфавитный порядок. Код выглядит таким образом:
Array.Sort(first_array);
Array.Sort(second_array);
Следующими строчками кода я просто преобразовываю массивы обратно в строки и сравниваю их.
string final_array1 = new string(first_array);
string final_array2 = new string(second_array);
return final_array1 == final_array2;
Полный код выглядит таким образом:
Console.WriteLine("input first name: ");
string first_name = Console.ReadLine().ToLower();
Console.WriteLine("input second name: ");
string second_name = Console.ReadLine().ToLower();
if (IsAnagram(first_name,second_name))
{
Console.WriteLine("True");
}
else
{
Console.WriteLine("False");
}
static bool IsAnagram(string first_string, string second_string)
{
first_string = first_string.Replace(" ", string.Empty);
second_string = second_string.Replace(" ", string.Empty);
if (first_string.Length != second_string.Length)
{
return false;
}
char[] first_array = first_string.ToCharArray();
char[] second_array = second_string.ToCharArray();
Array.Sort(first_array);
Array.Sort(second_array);
string final_array1 = new string(first_array);
string final_array2 = new string(second_array);
return final_array1 == final_array2;
}