C# (C Sharp) programming
18.7K subscribers
756 photos
38 videos
8 files
675 links
По всем вопросам- @haarrp

C# - обучающий канал Senior C# разработчика.

@ai_machinelearning_big_data - Machine learning

@itchannels_telegram - 🔥лучшие ит-каналы

@csharp_ci - C# академия

@pythonlbooks- книги📚

Реестр РКН: https://clck.ru/3Fk3kb
Download Telegram
💡Задача "Самый короткий мост"

Условие: на вход подается матрица, в которой 1 - суша, 0 - вода.

Остров представляет из себя совокупность частей суши, соединенных в четырех направлениях. На решетке существуют только два острова.

Можно изменить 0 на 1 для соединения двух островов в один.

Необходимо посчитать количество смен нулей на единицу для соединения двух островов.

Пример:

Ввод: grid = [[0,1],[1,0]]
Вывод: 1

Объяснение:

Ввод: grid = [[0,1,0],[0,0,0],[0,0,1]]
Вывод: 2

Решенние:

public class Solution {
public IList<int> SpiralOrder(int[][] matrix) {
List<int> lst = new();
int m = matrix.Length;
int n = matrix[0].Length;
int max = (int)Math.Ceiling(Math.Min(m,n)/2.0);
for(int index=0; index< max; index++){
if(m - index * 2 == 1 || n - index * 2 == 1) {
for(int i=index; i<m-index; i++)
for(int j= index; j<n-index; j++)
lst.Add(matrix[i][j]);
continue;
}

for(int i=index; i<n-index-1; i++)
lst.Add(matrix[index][i]);
for(int i=index;i<m-index-1; i++)
lst.Add(matrix[i][n-1-index]);
for(int i=n-1-index; i>index; i--)
lst.Add(matrix[m-1-index][i]);
for(int i=m-1-index; i>index; i--)
lst.Add(matrix[i][index]);
}

return lst;
}
}

Временная сложность:
O(mn)

Пространственная сложность:
O(nm)

Пишите свое мнение в комментариях👇

@csharp_ci
🧬CefSharp

CefSharp - библиотека, которая позволяет встраивать Chromium в приложения .NET. Это легкая обертка .NET вокруг Chromium Embedded Framework (CEF) Маршалла А. Гринблатта. Около 30% связки написано на C++/CLI, а большая часть кода - на C#. Его можно использовать из C# или VB, или любого другого языка CLR.

🖥 Github

@csharp_ci
Please open Telegram to view this post
VIEW IN TELEGRAM
💡Задача: Сортировочный список

Условие: дан односвязный список, необходимо отсортировать узлы списка по значению в порядке возрастания

Пример:

Ввод:
head = [4,2,1,3]
Вывод: [1,2,3,4]

Ввод: head = [-1,5,3,4,0]
Вывод: [-1,0,3,4,5]

Можете ли вы отсортировать связанный список за O (n logn) времени и O(1) памяти (т.е. постоянного пространства)?

Решение:

public class Solution
{
public ListNode SortList(ListNode head)
{
if (head == null)
return null;

if (head.next == null)
return head;

var tail = head;
var mid = head;
var prev = head;

while (tail != null && tail.next != null)
{
tail = tail.next.next;
prev = mid;
mid = mid.next;
}
prev.next = null;

return MergeTwoLists(SortList(head), SortList(mid));
}

ListNode MergeTwoLists(ListNode list1, ListNode list2)
{
var head = new ListNode();
var newNode = head;

while (list1 != null && list2 != null)
{
if (list1.val < list2.val)
{
newNode.next = list1;
newNode = list1;
list1 = list1.next;
}
else
{
newNode.next = list2;
newNode = list2;
list2 = list2.next;
}
}

newNode.next = list1 ?? list2;

return head.next;
}
}

пишите свое решение в комментариях 👇

@csharp_ci
📎Plugin.Maui.ScreenSecurity

Полезная библиотека для защиты приложений NET MAUI без особых усилий. Помогает скрыть контент приложения, поставить защиту от скриншотов и записи экрана.

🖥 Github

@csharp_ci
Please open Telegram to view this post
VIEW IN TELEGRAM
🖥 Threading: Небольшая памятка с кодом.

Создание нового потока
Чтобы создать новый поток в C#, вы можете использовать класс Thread:

using System.Threading;

void PrintNumbers()
{
for (int i = 1; i <= 5; i++)
{
Console.WriteLine(i);
}
}

Thread newThread = new Thread(PrintNumbers);

Starting a Thread
Чтобы запустить поток в C#, вы можете использовать метод Start():

newThread.Start();

Joining a Thread
Чтобы дождаться завершения выполнения потока в C#, вы можете использовать метод Join()

newThread.Join();


Thread Sleep
Остановка текущего потока на заданное время,

Thread.Sleep(1000); // Sleep for 1 second

Thread Pools
Чтобы использовать пул потоков в C#, вы можете воспользоваться классом ThreadPool:

using System.Threading;

ThreadPool.QueueUserWorkItem(PrintNumbers);

Tasks
Чтобы создать и запустить задачу в C#, вы можете использовать класс Task:

using System.Threading.Tasks;

Task.Run(PrintNumbers);

Wait
Чтобы дождаться завершения задачи в C#, вы можете использовать метод Wait():

Task task = Task.Run(PrintNumbers);
task.Wait();


Cancelling a Task
Для отмены задачи в C# можно использовать класс CancellationTokenSource:

using System.Threading;
using System.Threading.Tasks;

CancellationTokenSource cts = new CancellationTokenSource();
Task.Run(() => PrintNumbers(cts.Token), cts.Token);
cts.Cancel();


Task Exceptions
Для обработки исключений в задаче можно использовать блок try-catch внутри :

using System.Threading.Tasks;

Task.Run(() =>
{
try
{
// Code that may throw an exception
}
catch (Exception ex)
{
Console.WriteLine($"Error: {ex.Message}");
}
});


@csharp_ci
Please open Telegram to view this post
VIEW IN TELEGRAM
💡Задача: Быки и коровы

Условие задачи: разыгрывается партия, в которой мы просим оппонента угадать число. После первой попытки мы мы говорим другу количество отданных цифр и неотгаданных.

Быки - правильные цифры, находящиеся на нужных позициях.

Коровы - правильные числа, но находящиеся на соответствующих позициях.

Задача - выдать подсказку в формате "xAyB", где x - количество быков, y - количество коров.

Пример:

Ввод:
secret = "1807", guess = "7810"
Вывод: "1A3B"

Объяснение:

Ввод:
secret = "1123", guess = "0111"
Вывод: "1A1B"

Решение:

public class Solution {
public string GetHint(string secret, string guess) {
// Store the frequency of secret
var freq = new Dictionary<char,int>();
int bulls=0;
for(int i=0;i<secret.Length;i++){
if(!freq.ContainsKey(secret[i]))
freq[secret[i]]=1;
else
freq[secret[i]]++;
}
// Find the no of bull first and reduce the secret count..
int cows=0;
for(int i=0;i<secret.Length;i++){
if(secret[i]==guess[i]){
bulls++;
freq[secret[i]]--;
}
}
// for cows, check if the character not matching and if its required
for(int i=0;i<secret.Length;i++){
if(secret[i]!=guess[i]){
if(freq.ContainsKey(guess[i]) && freq[guess[i]]>0){
cows++;
freq[guess[i]]--;
}
}
}

return bulls+"A"+cows+"B";

}
}


пишите свое решение в комментариях 👇

@csharp_ci
Список 500 популярных вопросов и ответов с собеседований C# csharp

Github

@csharp_ci
Что выведет код ?

using System;
using System.Text;
public class Program
{
public static void Main(string[] args)
{
String str = "";

StringBuilder sb1 = new StringBuilder("TechBeamers");
StringBuilder sb2 = new StringBuilder("TechBeamers");
StringBuilder sb3 = new StringBuilder("Welcome");
StringBuilder sb4 = sb3;

if (sb1.Equals(sb2)) str += "1";
if (sb2.Equals(sb3)) str += "2";
if (sb3.Equals(sb4)) str += "3";


String str1 = "TechBeamers";
String str2 = "Welcome";
String str3 = str2;

if (str1.Equals(str2)) str += "4";
if (str2.Equals(str3)) str += "5";
Console.WriteLine(str);
}
}


Ответ
📎Полезные инструменты: Command-line-api

Этот репозиторий содержит код для библиотек System.CommandLine и глобального инструмента dotnet-suggest.

🖥 Github

@csharp_ci
Please open Telegram to view this post
VIEW IN TELEGRAM
Что выведет код?

using System;
public class Program
{
public static void Main(string[] args)
{
Console.WriteLine("H" + 'I');
Console.WriteLine('h' + 'i');
}
}
Что выведет код?
Anonymous Quiz
62%
a) HI hi
6%
b) 145 209
29%
c) HI 209
3%
d) 145 hi
🖇TensorFlow.NET

Связка .NET Standard для TensorFlow от Google для разработки, обучения и развертывания моделей машинного обучения на C# и F#.

Github
Обучающая Статья

@csharp_ci
Что выведет код?

using System;
class Program
{
static void Main(string[] args)
{
double num1 = 1.000001;
double num2 = 0.000001;
Console.WriteLine((num1 - num2) == 1.0);
}
}


@csharp_ci
Что выведет код?
Anonymous Quiz
47%
a) True
41%
b) False
4%
c) Null
8%
d) Error
🖥 5 полезных методов расширения для Task.

1. Запустить и забыть

Иногда необходимо начать выполнение задачи без ожидания ее окончания, особенно когда результат не критичен. Будем использовать расширенный метод "FireAndForget". При необходимости, мы можем передать обработчик ошибок в метод, который будет вызываться, если задача выдает исключение.

public static void FireAndForget(
this Task task,
Action<Exception> errorHandler = null)
{
task.ContinueWith(t =>
{
if (t.IsFaulted && errorHandler != null)
errorHandler(t.Exception);
},
TaskContinuationOptions.OnlyOnFaulted);
}

Использование:
SendEmailAsync().FireAndForget(
e => Console.WriteLine(e.Message));


2. Повтор

Для повторного выполнения задачи мы можем создать метод Retry, который позволит нам установить максимальное количество попыток и задержку между ними. Он будет работать до выполнения задачи или достижения максимальной попытки.

public static async Task<TResult>
Retry<TResult>(
this Func<Task<TResult>> taskFactory,
int maxRetries,
TimeSpan delay)
{
for (int i = 0; i < maxRetries; i++)
{
try
{
return await taskFactory()
.ConfigureAwait(false);
}
catch
{
if (i == maxRetries - 1)
throw;
await Task.Delay(delay)
.ConfigureAwait(false);
}
}
// не должно достигать этого места
return default(TResult);
}

Использование:
var result = await (
() => GetResultAsync())
.Retry(3, TimeSpan.FromSeconds(1));


3. Действие при сбое

Выполняется в случае возникновения ошибок или исключений при выполнении задачи

public static async Task
OnFailure(this Task task,
Action<Exception> onFailure)
{
try
{
await task.ConfigureAwait(false);
}
catch (Exception ex)
{
onFailure(ex);
}
}

Использование:
await GetResultAsync()
.OnFailure(ex => Console.WriteLine(ex.Message));


4. Установка Тайм-аута

Установка тайм-аута для задачи полезна, когда вы хотите, чтобы задача не выполнялась очень долго.

public static async Task
WithTimeout(this Task task,
TimeSpan timeout)
{
var delayTask = Task.Delay(timeout);
var completedTask = await
Task.WhenAny(task, delayTask)
.ConfigureAwait(false);
if (completedTask == delayTask)
throw new TimeoutException();

await task;
}



Использование:
await GetResultAsync()
.WithTimeout(TimeSpan.FromSeconds(1));


5. Результат по умолчанию

Бывают ситуации, когда нужно вернуть результат по умолчанию при сбое задачи:


public static async Task<TResult>
Fallback<TResult>(
this Task<TResult> task,
TResult fallbackValue)
{
try
{
return await task.ConfigureAwait(false);
}
catch
{
return fallbackValue;
}
}

Использование:
var result = await GetResultAsync()
.Fallback("fallback");


Статья

@csharp_ci
Please open Telegram to view this post
VIEW IN TELEGRAM
📌 Найти максимальный подмассив

Сложность: Средняя

Условие задачи: дан целочисленный массив, необходимо найти в нем такой подмассив, сумма элементов в котором будет максимальной.

Подмассивом называется последовательная часть исходного массива.

Пример:

Ввод:
nums = [-2,1,-3,4,-1,2,1,-5,4]
Вывод:
6

Объяснение:
4,-1,2,1] имеет наибольшую сумму 6.

Ввод:
nums = [5,4,-1,7,8]
Вывод:
23

Решение:

public class Solution {
public int MaxSubArray(int[] nums) {
int res = nums[0], sum = nums[0], i = 1;
while (i < nums.Length)
{
if (nums[i] > nums[i] + sum) sum = nums[i];
else sum = nums[i] + sum;

if (sum > res) res = sum;
i++;
}
return res;
}
}


Пишите свое решение в комментариях👇

@csharp_ci
🎮 Сборник полезных материалов UNITY для разарабочтиков игр. Про шейдеры, пользовательский интерфейс, искусственный интеллект и многое другое

Compute Shaders in Unity: Multiple Kernels, ComputeBuffers, CPU - GPU data flow
How to make your own game engine (and why)
Unity runtime on Arm-based Windows devices
Game ready: Building the ‘Ōhi’a lehua tree with SpeedTree, part 2

Видео

How Unexplored 2 Generates Entire Fantasy Worlds from Scratch | Artifacts #1
Exploring C# async/await support in Unity 2023.1
Unity Interfaces - Complete Guide (Plugins, Abstraction, Events, & More) #unity3d
How to use the Job System + Burst in Unity!
System Driven Level Design (My Biggest Mistake)
How to Animate EVERYTHING with Absolute Shapes Keys
Being Successful with Open Source in Game Development

Игры на Unity

Unity Hidden Gems Bundle
Royalty Free Game Film And Content Music Mania Bundle
Blender Animation And Games Book Bundle
Note Attribute
UnityTodo (Editor-Only)
Layout Panel
Green Mamba Stealth
Unity 2D Context steering AI
Pathfinding
EntitiesNavMeshBuilder
Unified Universal Blur - URP Blur effect for Unity
TextureMerge
GpuTrail
Unity - Display missing component type info
Gameframe.GUI
Create Script Dialog
Unity Fantastic Fantasy Sale
50% Off Dragonsan Studios - Publisher Sale
UnityUxmlGenerator
UniFlux - Flexible Event Driven and Flux for Unity
Editor Screenshot
SnowyOwl
Baked Blender Pro Suite (Free Asset Library)
The Complete Learn Coding Mega Bundle
Polygon Assets Bundle

Обзор

Remnants of R'lyeh

@csharp_ci
Что выведет код ?

using System;
class Program
{
static void Main(string[] args)
{
int num = 5;
int square = 0, cube = 0;
Mul (num, ref square, ref cube);
Console.WriteLine(square + " & " +cube);
Console.ReadLine();
}
static void Mul (int num, ref int square, ref int cube)
{
square = num * num;
cube = num * num * num;
}
}


@csharp_ci
Что выведет код ?
Anonymous Quiz
8%
125 & 25
76%
25 & 125
14%
Compile time error
2%
10 & 15