Comments 23
В задаче CaseInComparison ошибка — забыли ToUpper() для b в коде
И маленькая хотелка — нет ровно никакого смысла делать перегрузку страницы по нажатию «решение» в онлайн версии, можно просто скрывать/показывать элемент. Сейчас постоянные перегрузки раздражают.
Edit: как-то пропустил, что онлайн версия сгенерена автоматом. Имхо, очень просто написать свою, более удобную для подобного контента.
string.Compare(a.ToUpper(), b)
.И маленькая хотелка — нет ровно никакого смысла делать перегрузку страницы по нажатию «решение» в онлайн версии, можно просто скрывать/показывать элемент. Сейчас постоянные перегрузки раздражают.
Edit: как-то пропустил, что онлайн версия сгенерена автоматом. Имхо, очень просто написать свою, более удобную для подобного контента.
0
Спасибо за замечание — поправил.
Хотелка очень разумная. Не подскажете, как это на базе GitBook реализовать?
Хотелка очень разумная. Не подскажете, как это на базе GitBook реализовать?
0
Свою генерилку написать можно, но несколько подкупает готова инфраструктура GitBook — автоматическая генерация на базе репозитория, версии для читалок, удобный доступ и всякие статистики. Быть может потом перейду на собственную генерацию, но для старта это был самый простой вариант.
0
Очень интересные задачи из раздела LINQ, почерпнул для себя новые идеи, буду их использовать.
У меня тоже накопилось множество задачек, но я их предпочитаю выкладывать в «интерактивном» виде. Пользователь читает условие задачи, пишет программу для её решения. Система её компилирует и прогоняет по тестам. Если набрал больше 50% — можешь переходить к следующей задаче. Не знаешь как решить — смотри видео-решение. Я разрабатывал и применял эту систему в пту, так вот школьникам очень нравится такой интерактив, дети решали задачи даже на чужих уроках. Сейчас в базе 128 задач: videosharp.info/console.
У меня тоже накопилось множество задачек, но я их предпочитаю выкладывать в «интерактивном» виде. Пользователь читает условие задачи, пишет программу для её решения. Система её компилирует и прогоняет по тестам. Если набрал больше 50% — можешь переходить к следующей задаче. Не знаешь как решить — смотри видео-решение. Я разрабатывал и применял эту систему в пту, так вот школьникам очень нравится такой интерактив, дети решали задачи даже на чужих уроках. Сейчас в базе 128 задач: videosharp.info/console.
+1
Посмотрел ваш сайт, достаточно интересно. Но у нас с вами немного разные направления. Практически для всех заданий из моего задачника достаточно просто запустить код, чтобы узнать ответ. Поэтому интерактив-то особо не требуется. И целевая аудитория — не школьники, которых нужно мотивировать, а разработчики, которые сами хотят разобраться детальней в особенностях платформы.
+1
CorruptedString можно решить по-другому:
Console.SetCursorPosition(0, Console.CursorTop -1);
Console.WriteLine(«aaaaa»);
Console.SetCursorPosition(0, Console.CursorTop -1);
Console.WriteLine(«aaaaa»);
0
В задании подразумевается, что пользовательский код находится до строчки
Console.WriteLine("Hello");
Вопросики намекают на это, но я распишу задание чуть подробней.0
Предлагаю еще задачи.
Что будет, если в Delegate.Target попадет объект значимого типа?
Классическая задача про значимый Enumerator списка
var list = new List {1, 2, 3};
while(list.GetEnumerator().MoveNext())
Console.WriteLine(list.GetEnumerator().Current);
Что будет, если в Delegate.Target попадет объект значимого типа?
Классическая задача про значимый Enumerator списка
var list = new List {1, 2, 3};
while(list.GetEnumerator().MoveNext())
Console.WriteLine(list.GetEnumerator().Current);
0
Спасибо за мысль про делегаты. Подумываю сделать отдельную главу про делегаты и события.
А про Enumerator вопрос у меня есть: ValueTypes/Enumerator.
А про Enumerator вопрос у меня есть: ValueTypes/Enumerator.
0
Заметил еще, что не хватает задач на внимательность. Типа
var str = «1234qwer»;
str.Repalce(«1234», «rewq»);
Console.WriteLine(str);
Опять же задача про неизменяемость строк.
var str = «1234qwer»;
str.Repalce(«1234», «rewq»);
Console.WriteLine(str);
Опять же задача про неизменяемость строк.
-2
Хм… Надо подумать… Задачек на внимательность по программированию и так в этом мире хватает. Мне бы хотелось сделать такой задачник, в котором каждая задачка могла бы чему-то научить. Какой-то особенности платформы или нюансам транслирования C# в IL. Задачки «на внимательность» можно придумывать пачками, но я не уверен, что ими стоит наполнять конкретно эту книжку.
+3
Спасибо за интересные задачки!
ps. А какое объяснение LifeAfterYield? :)
ps. А какое объяснение LifeAfterYield? :)
0
Всё просто
foreach раскрывается в следующий код: (условно)
State Machine в Foo раскрывается в следующий код GetEnumerator: (условно)
И в следующий код MoveNext:
var e = Foo().GetEnumerator();
while (e.MoveNext())
Console.Write(e.Current);
State Machine в Foo раскрывается в следующий код GetEnumerator: (условно)
return new StateMachine { State = -1 };
И в следующий код MoveNext:
switch (this.State)
{
case -1:
this.State = 0;
this.Current = 1; // трансформация из yield return 1;
return true;
case 0:
Console.WriteLine("Foo"); // трансформация из аналогично кода
this.State = 1;
return false;
default:
return false;
}
+1
Кстати про делегаты, есть вот такая задачка:
private delegate void Test(string text);
private void Test1(string text)
{
Console.WriteLine("Test1 prints" + text);
}
private void Test2(string text)
{
Console.WriteLine("Test2 prints" + text);
}
void Main()
{
const string text = "test";
var op = Test2 - (Test2 + new Test(Test1));
op(text);
}
0
Самая первая ссылка в посте (с www) отдает 404.
0
Ссылка на PDF мертвая :(
0
Задача 3: «ValueTypes:Enumerator» в ответах:
фразу "А значит, при каждом обращении к методу
x.Items.MoveNext() мы будем работать не с оригинальным енумератором, а с его
копией..." сразу и не понял. Я Долго пытался выяснить -> к чему иметь оригинальный экземпляр Enumerator?
Пока не дошел, что код var var x = new { Items = ....} это кортеж с неизменяемыми полями.
И оказывается что речь идет о том, что при вызове x.Items.MoveNext() происходит создание временного экземпляра структуры(точнее копирование полей в анонимную область в стеке являющую собой структуру Enumerator), у которой и вызывается MoveNext(), у которой успешно изменяется состояние(позиционируется на первый элемент), но дальше она не используется, символьной ссылки на нее нет.
И каждый раз в начале цикла одна и та же область в стеке заново переписывается readonly экземпляром от x.Items, сбрасываясь тем самым.
Написал сюда, может кому-то поможет быстрее понять эту задачу.
фразу "А значит, при каждом обращении к методу
x.Items.MoveNext() мы будем работать не с оригинальным енумератором, а с его
копией..." сразу и не понял. Я Долго пытался выяснить -> к чему иметь оригинальный экземпляр Enumerator?
Пока не дошел, что код var var x = new { Items = ....} это кортеж с неизменяемыми полями.
И оказывается что речь идет о том, что при вызове x.Items.MoveNext() происходит создание временного экземпляра структуры(точнее копирование полей в анонимную область в стеке являющую собой структуру Enumerator), у которой и вызывается MoveNext(), у которой успешно изменяется состояние(позиционируется на первый элемент), но дальше она не используется, символьной ссылки на нее нет.
И каждый раз в начале цикла одна и та же область в стеке заново переписывается readonly экземпляром от x.Items, сбрасываясь тем самым.
Написал сюда, может кому-то поможет быстрее понять эту задачу.
0
Sign up to leave a comment.
Задачник.NET