💡Задача "Самый короткий мост"
Условие: на вход подается матрица, в которой 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
Условие: на вход подается матрица, в которой 1 - суша, 0 - вода.
Остров представляет из себя совокупность частей суши, соединенных в четырех направлениях. На решетке существуют только два острова.
Можно изменить 0 на 1 для соединения двух островов в один.
Необходимо посчитать количество смен нулей на единицу для соединения двух островов.
Пример:
Ввод: grid = [[0,1],[1,0]]
Вывод: 1
Объяснение:
Ввод: grid = [[0,1,0],[0,0,0],[0,0,1]]
Вывод: 2
Решенние:
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
CefSharp - библиотека, которая позволяет встраивать Chromium в приложения .NET. Это легкая обертка .NET вокруг Chromium Embedded Framework (CEF) Маршалла А. Гринблатта. Около 30% связки написано на C++/CLI, а большая часть кода - на C#. Его можно использовать из C# или VB, или любого другого языка CLR.
@csharp_ci
Please open Telegram to view this post
VIEW IN TELEGRAM
Собрали для вас список бесплатных курсов по SQL от базовых до продвинутых.
1. SQL for Data Analysis
2. Интерактивный тренажер по SQL
3. Kaggle: Intro to SQL
4. Advanced SQL
5. Introduction to Structured Query Language (SQL)
6. Advanced Databases and SQL Querying
7. Databases and SQL for Data Science with Python
8. Oracle SQL – A Complete Introduction
9. Intro to SQL
10. Oracle SQL Basics
11. Beginners Guide to SQL
12. SQL for Data Science
13. Introduction to Databases and SQL Querying
14. Intro to Relational Databases
15. Hakerrank
16. Strata scratch
17. SQLBolt
18. W3schools
19. Курс по основам SQL, состоящий из 19 небольших уроков с лёгкой подачей
20. @sqlhub школа sql в телеграме
#SQL #курсы #бд
@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) памяти (т.е. постоянного пространства)?
Решение:
пишите свое решение в комментариях 👇
@csharp_ci
Условие: дан односвязный список, необходимо отсортировать узлы списка по значению в порядке возрастания
Пример:
Ввод: 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
Полезная библиотека для защиты приложений NET MAUI без особых усилий. Помогает скрыть контент приложения, поставить защиту от скриншотов и записи экрана.
@csharp_ci
Please open Telegram to view this post
VIEW IN TELEGRAM
Создание нового потока
Чтобы создать новый поток в 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"
Решение:
пишите свое решение в комментариях 👇
@csharp_ci
Условие задачи: разыгрывается партия, в которой мы просим оппонента угадать число. После первой попытки мы мы говорим другу количество отданных цифр и неотгаданных.
Быки - правильные цифры, находящиеся на нужных позициях.
Коровы - правильные числа, но находящиеся на соответствующих позициях.
Задача - выдать подсказку в формате "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
Что выведет код ?
Ответ
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
Этот репозиторий содержит код для библиотек System.CommandLine и глобального инструмента dotnet-suggest.
@csharp_ci
Please open Telegram to view this post
VIEW IN TELEGRAM
🖇TensorFlow.NET
Связка .NET Standard для TensorFlow от Google для разработки, обучения и развертывания моделей машинного обучения на C# и F#.
▪Github
▪Обучающая Статья
@csharp_ci
Связка .NET Standard для TensorFlow от Google для разработки, обучения и развертывания моделей машинного обучения на C# и F#.
▪Github
▪Обучающая Статья
@csharp_ci
Что выведет код?
@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
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
📌 Найти максимальный подмассив
Сложность: Средняя
Условие задачи: дан целочисленный массив, необходимо найти в нем такой подмассив, сумма элементов в котором будет максимальной.
Подмассивом называется последовательная часть исходного массива.
Пример:
Ввод:
Вывод: 6
Объяснение:
Ввод:
Вывод: 23
Решение:
Пишите свое решение в комментариях👇
@csharp_ci
Сложность: Средняя
Условие задачи: дан целочисленный массив, необходимо найти в нем такой подмассив, сумма элементов в котором будет максимальной.
Подмассивом называется последовательная часть исходного массива.
Пример:
Ввод:
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
▪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
Что выведет код ?
@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