Страницы

Поиск по вопросам

пятница, 29 ноября 2019 г.

C# задачки и интересности

#c_sharp


Недавно наткунлся на интересные задачки на C#. Стало невероятно увлекательным занятием
их разгадывать без использования сред программирования. Может кто знает ещё подобные
задачки или их сборники?


Задачи на поведение компиляции и исполнения
Задачи на алгоритмы и структуры данных используя исключительные особенности языка
Нестандартные пути решения стандартных задач используя исключительные особенности языка
Различные однострочники
Ленивые вычисления
Написание интересностей присутсвующих в других языках
Прочее


ПРИМЕР#1:
если станет интересно приведу ещё парочку

int i = myString.To();


простейший extension method, а как здорово выглядит=)

public static T To(this IConvertible obj)
{
  return (T)Convert.ChangeType(obj, typeof(T));
}


источник Stackoverflow

ПРИМЕР#2:

список в функциональном стиле:

public class FuncList { 
   public FuncList() {                                        
      IsEmpty = true; 
   } 
   public FuncList(T head, FuncList tail) {                
      IsEmpty = false; 
      Head = head; 
      Tail = tail; 
   } 
   public bool IsEmpty { get; private set; }                  
   public T Head { get; private set; }                       
   public FuncList Tail { get; private set; }             
} 

public static class FuncList {                               
    public static FuncList Empty() { 
        return new FuncList(); 
    } 
    public static FuncList Cons(T head, FuncList tail) { 
        return new FuncList(head, tail); 
    } 
} 


рекурсивные создание, подсчёт суммы и произведения:

var list = FuncList.Cons(1, FuncList.Cons(2, FuncList.Cons(3,       
    FuncList.Cons(4, FuncList.Cons(5, FuncList.Empty()))))); 


int SumList(FuncList numbers) { 
   return numbers.IsEmpty ? 0 :                                    
      numbers.Head + SumList(numbers.Tail);                         
} 

int MultiplyList(FuncList numbers) { 
   if (numbers.IsEmpty) return 1;                            
   else return numbers.Head * MultiplyList(numbers.Tail);   
}


источник Tomas Petricek, Jon Skeet - Functional Programming for the Real World

P.S. жду критики, отзывов, оценок
    


Ответы

Ответ 1



В этом блоге 22 задачки, правда уже не обновляется. Есть как простые так и посложнее. Еще один популярный сборник.

Ответ 2



Примерно аналогичный расширяющий метод для строго типизированного доступа к сервисам: public static T GetService(this IServiceProvider provider) { return (T)provider.GetService(typeof(T)); }

Комментариев нет:

Отправить комментарий