diff --git a/course-2021-1/exercises/01-primitive-types/Numbers.Tests/Numbers.Tests.csproj b/course-2021-1/exercises/01-primitive-types/Numbers.Tests/Numbers.Tests.csproj
index 8a03330f..88fd3661 100644
--- a/course-2021-1/exercises/01-primitive-types/Numbers.Tests/Numbers.Tests.csproj
+++ b/course-2021-1/exercises/01-primitive-types/Numbers.Tests/Numbers.Tests.csproj
@@ -1,7 +1,7 @@
- netcoreapp2.0
+ net5.0
false
diff --git a/course-2021-1/exercises/01-primitive-types/Numbers/FloatNumbers.cs b/course-2021-1/exercises/01-primitive-types/Numbers/FloatNumbers.cs
index 9cb1d053..106b4745 100644
--- a/course-2021-1/exercises/01-primitive-types/Numbers/FloatNumbers.cs
+++ b/course-2021-1/exercises/01-primitive-types/Numbers/FloatNumbers.cs
@@ -17,7 +17,8 @@ internal static double GetNaN()
Необходимо вернуть значение, не используя непосредственно саму константу.
Для этого подумай, какой смысл в себе несет эта константа и где бы она могла стать результатом операции или вычисления функции.
*/
- throw new NotImplementedException();
+ //throw new NotImplementedException();
+ return 0.0 / 0.0;
}
///
@@ -28,20 +29,26 @@ internal static double GetNaN()
internal static bool IsNaN(double d)
{
// Подсказка: по аналогии с константами типа int, у типа double тоже есть свой набор констант.
- throw new NotImplementedException();
+ //throw new NotImplementedException();
+ return double.IsNaN(d);
}
///
/// Возвращает результат сравнения двух вещественнозначных чисел.
///
/// -1 - первое меньше второго, 0 - значения равны, 1 - первое больше второго.
- internal static int Compare(/* дополни сигнатуру метода как считаешь правильным */)
+ internal static int Compare(double a, double b, double eps)
{
/*
Подумай, почему это задание дано в части про вещественнозначные числа. И почему не дана полная сигнатура метода.
Если сходу идей нет, перестань искать подвох и просто реализуй дословно. Теперь еще раз посмотри на код и подумай в чем может быть проблема, сколько должно быть аргументов.
*/
- throw new NotImplementedException();
+ //throw new NotImplementedException();
+ if (Math.Abs(a - b) < eps)
+ return 0;
+ if (a > b)
+ return 1;
+ return -1;
}
// и все?!! О_о
diff --git a/course-2021-1/exercises/01-primitive-types/Numbers/Integers.cs b/course-2021-1/exercises/01-primitive-types/Numbers/Integers.cs
index b1d90398..760a248d 100644
--- a/course-2021-1/exercises/01-primitive-types/Numbers/Integers.cs
+++ b/course-2021-1/exercises/01-primitive-types/Numbers/Integers.cs
@@ -46,7 +46,8 @@ internal static int HalfIntMaxValue()
Особенно это касается связки Visual Studio + Resharper, используя которую, если просто набрать return и нажать пробел,
то в появившемся списке автодополнения одной из первых будет нужная тебе константа :)
*/
- throw new NotImplementedException();
+ //throw new NotImplementedException();
+ return int.MaxValue / 2;
}
///
@@ -55,7 +56,8 @@ internal static int HalfIntMaxValue()
internal static int Cube(int x)
{
// не сомневайся, пиши. Тут без подвохов.
- throw new NotImplementedException();
+ //throw new NotImplementedException();
+ return x * x * x;
}
///
@@ -67,7 +69,8 @@ internal static int CubeWithOverflowCheck(int x)
Если спал на лекции, то тут придется погуглить, сорри.
И заодно подумай какой режим выставлен по умолчанию. Почему. И почему категорически нельзя надеяться на режим по умолчанию.
*/
- throw new NotImplementedException();
+ //throw new NotImplementedException();
+ return checked(x * x * x);
}
///
@@ -76,7 +79,8 @@ internal static int CubeWithOverflowCheck(int x)
internal static int CubeWithoutOverflowCheck(int x)
{
// если сделал предыдущие, то с этим уже должно быть понятно.
- throw new NotImplementedException();
+ // throw new NotImplementedException();
+ return unchecked(x * x * x);
}
///
@@ -93,7 +97,8 @@ internal static string ToString(int x)
Подсказка: нужно воспользоваться методом, который есть у абсолютно всех объектов.
*/
- throw new NotImplementedException();
+ //throw new NotImplementedException();
+ return x.ToString();
}
///
@@ -107,7 +112,8 @@ internal static int Parse(string s)
Продолжай идти простым путем -нужен метод, обратный методу ToString выше, который распарсит дефолтное строковое представление числа.
Подсказка: у каждого примитивного типа есть набор статических методов, среди которых есть нужный.
*/
- throw new NotImplementedException();
+ //throw new NotImplementedException();
+ return int.Parse(s);
}
///
@@ -119,7 +125,8 @@ internal static int TenTimes(int x)
Реализуй умножение числа на 10 без использования арифметических операций над числами.
Воспользуйся реализованными выше методами ToString и Parse. И не думай ни о каких переполнениях - задача не на это :)
*/
- throw new NotImplementedException();
+ //throw new NotImplementedException();
+ return int.Parse(x.ToString() + "0");
}
///
@@ -133,7 +140,8 @@ internal static string ToHexString(int x)
У метода ToString числовых типов есть перегрузка, которая принимает строку с одним из заданного набора форматов.
В студии дается хорошая и понятная подсказка с этим набором форматов, в других же IDE скорее всего такого не будет, и придется погуглить форматы.
*/
- throw new NotImplementedException();
+ //throw new NotImplementedException();
+ return x.ToString(format:"X");
}
/*
diff --git a/course-2021-1/exercises/01-primitive-types/Numbers/Numbers.csproj b/course-2021-1/exercises/01-primitive-types/Numbers/Numbers.csproj
index ce1697ae..20827042 100644
--- a/course-2021-1/exercises/01-primitive-types/Numbers/Numbers.csproj
+++ b/course-2021-1/exercises/01-primitive-types/Numbers/Numbers.csproj
@@ -2,7 +2,7 @@
Exe
- netcoreapp2.0
+ net5.0
diff --git a/course-2021-1/exercises/01-primitive-types/Numbers/Program.cs b/course-2021-1/exercises/01-primitive-types/Numbers/Program.cs
index 78460c01..dc75f8a3 100644
--- a/course-2021-1/exercises/01-primitive-types/Numbers/Program.cs
+++ b/course-2021-1/exercises/01-primitive-types/Numbers/Program.cs
@@ -17,8 +17,8 @@ internal class Program
private static void Main()
{
// твои бро: Console.WriteLine и Console.ReadLine
-
- Console.WriteLine("Hello World!");
+ if (FloatNumbers.Compare(0.1, 0.1, 0.0000001) == 0)
+ Console.WriteLine("Hello World!");
}
}
}
diff --git a/course-2021-1/exercises/02-adventure-time/AdventureTime/AdventureTime/AdventureTime.csproj b/course-2021-1/exercises/02-adventure-time/AdventureTime/AdventureTime/AdventureTime.csproj
index dba2bee8..054b0d0e 100644
--- a/course-2021-1/exercises/02-adventure-time/AdventureTime/AdventureTime/AdventureTime.csproj
+++ b/course-2021-1/exercises/02-adventure-time/AdventureTime/AdventureTime/AdventureTime.csproj
@@ -2,7 +2,7 @@
Exe
- netcoreapp2.0
+ net5.0
diff --git a/course-2021-1/exercises/02-adventure-time/AdventureTime/AdventureTime/Program.cs b/course-2021-1/exercises/02-adventure-time/AdventureTime/AdventureTime/Program.cs
index af4efcae..ebc892da 100644
--- a/course-2021-1/exercises/02-adventure-time/AdventureTime/AdventureTime/Program.cs
+++ b/course-2021-1/exercises/02-adventure-time/AdventureTime/AdventureTime/Program.cs
@@ -1,9 +1,19 @@
-namespace AdventureTime
+using System;
+
+namespace AdventureTime
{
internal class Program
{
private static void Main()
{
+ var t = Time.WhatTimeIsIt();
+ Console.WriteLine(t);
+ var t2 = Time.WhatTimeIsItInUtc();
+ Console.WriteLine(t2);
+ Console.WriteLine(t2.Kind);
+ var t3 = Time.SpecifyKind(t, DateTimeKind.Unspecified);
+ Console.WriteLine(t3.Kind);
+
}
}
}
diff --git a/course-2021-1/exercises/02-adventure-time/AdventureTime/AdventureTime/Time.cs b/course-2021-1/exercises/02-adventure-time/AdventureTime/AdventureTime/Time.cs
index 45de70d1..7e807b3a 100644
--- a/course-2021-1/exercises/02-adventure-time/AdventureTime/AdventureTime/Time.cs
+++ b/course-2021-1/exercises/02-adventure-time/AdventureTime/AdventureTime/Time.cs
@@ -14,7 +14,8 @@ internal static class Time
///
public static DateTime WhatTimeIsIt()
{
- throw new NotImplementedException();
+ //throw new NotImplementedException();
+ return DateTime.Now;
}
///
@@ -22,7 +23,8 @@ public static DateTime WhatTimeIsIt()
///
public static DateTime WhatTimeIsItInUtc()
{
- throw new NotImplementedException();
+ //throw new NotImplementedException();
+ return DateTime.UtcNow;
}
///
@@ -36,7 +38,8 @@ public static DateTime SpecifyKind(DateTime dt, DateTimeKind kind)
/*
Подсказка: поищи в статических методах DateTime.
*/
- throw new NotImplementedException();
+ // throw new NotImplementedException();
+ return DateTime.SpecifyKind(dt, kind);
}
///
@@ -51,7 +54,8 @@ public static string ToRoundTripFormatString(DateTime dt)
Ну и на будущее запомни этот прекрасный строковый формат представления времени - он твой бро!
Название запоминать не нужно, просто помни, что для передачи значения в виде строки, выбирать лучше инвариантные относительно сериализации/десериализации форматы.
*/
- throw new NotImplementedException();
+ //throw new NotImplementedException();
+ return dt.ToString("O");
}
///
@@ -65,7 +69,8 @@ public static DateTime ParseFromRoundTripFormat(string dtStr)
Поиграйся и проверь, что round-trip действительно round-trip, т.е. туда-обратно равно оригиналу (для туда воспользуйся предыдущим методом).
Проверь для всех значений DateTime.Kind.
*/
- throw new NotImplementedException();
+ // throw new NotImplementedException();
+ return DateTime.Parse(dtStr);
}
///
@@ -77,7 +82,8 @@ public static DateTime ToUtc(DateTime dt)
Eсли воспользуешься нужным методом, то напоминаю, что результат его работы зависит от dt.Kind.
В случае dt.Kind == Unspecified предполагается, что время локальное, т.е. результат работы в случае Local и Unspecified совпадают. Такие дела
*/
- throw new NotImplementedException();
+ //throw new NotImplementedException();
+ return SpecifyKind(dt, DateTimeKind.Utc);
}
///
@@ -88,7 +94,8 @@ public static DateTime ToUtc(DateTime dt)
public static DateTime AddTenSeconds(DateTime dt)
{
// здесь воспользуйся методами самого объекта и заодно посмотри какие еще похожие есть
- throw new NotImplementedException();
+ // throw new NotImplementedException();
+ return dt.AddSeconds(10);
}
///
@@ -102,7 +109,8 @@ public static DateTime AddTenSecondsV2(DateTime dt)
Ну а здесь воспользуйся сложением с TimeSpan. Обрати внимание, что помимо конструктора, у класса есть набор полезных статических методов-фабрик.
Обрати внимание, что у TimeSpan нет статических методов FromMonth, FromYear. Как думаешь, почему?
*/
- throw new NotImplementedException();
+ //throw new NotImplementedException();
+ return dt + new TimeSpan(0, 0, 10);
}
///
@@ -118,7 +126,8 @@ public static int GetHoursBetween(DateTime dt1, DateTime dt2)
2) Проверь, учитывается ли Kind объектов при арифметических операциях.
3) Подумай, почему возвращаемое значение может отличаться от действительности.
*/
- throw new NotImplementedException();
+ // throw new NotImplementedException();
+ return (int)(dt2 - dt1).TotalHours;
}
///
@@ -127,7 +136,8 @@ public static int GetHoursBetween(DateTime dt1, DateTime dt2)
public static int GetTotalMinutesInThreeMonths()
{
// ну тут все просто и очевидно, если сделал остальные и подумал над вопросами в комментах.
- throw new NotImplementedException();
+ // throw new NotImplementedException();
+ return (int) (new TimeSpan(92, 0, 0, 0, 0)).TotalMinutes;
}
#region Adventure time saga
@@ -277,7 +287,8 @@ private static ZonedDateTime GetZonedTime(LocalDateTime localTime, string timeZo
/// True - если родились в один день, иначе - false.
internal static bool AreEqualBirthdays(DateTime person1Birthday, DateTime person2Birthday)
{
- throw new NotImplementedException();
+ //throw new NotImplementedException();
+ return person1Birthday.DayOfYear == person2Birthday.DayOfYear;
}
}
}