C# алгоритм вычисления

_HEDELKA_

Client
Регистрация
20.02.2022
Сообщения
648
Благодарностей
170
Баллы
43
Ниже код который очень хорошо подходит для моей задачи, но он запускается с ошибкой помогите исправить пожалуйста :ah:

В чем вообще задача:
В списке (это будет переменная) хранится Tuple.Create("14:00", 2, 4) время часы количество техники задействовано, скрипту по входным параметрам нужно определить можно ли в указанный период арендовать технику
ну условно:
общее количество техники 3
в 11:00 по 12:00 занято техники 2
в 12:00 по 13:00 занято техники 1

Новое оформление: 11:00 по 13:00 если 1 то да мы сможем предоставить, если 2 то нет так как в период 11 по 12 занято 2 а общее 3 ну и соответственно все в таком духе

В переменной Tuple.Create может быть много времени и тд

Код сгенерировал GPT-3 в конце полный код который он мне отправил

Ошибки которые возникают:

Компиляция кода Ошибка в действии "CS0161" "'C257ccc58046b48eabe7162f4863b54eb.M257ccc58046b48eabe7162f4863b54eb(IZennoPosterProjectModel, Instance)': not all code paths return a value". [Строка: 0; Cтолбец: 15]
Компиляция кода Ошибка в действии "CS0029" "Cannot implicitly convert type 'string' to 'bool'". [Строка: 32; Cтолбец: 8]



C#:
List<Tuple<string, int, int>> busyTimes = new List<Tuple<string, int, int>>
        {
            Tuple.Create("14:00", 2, 4),
            Tuple.Create("12:00", 3, 3)
        };
        int setTechniques = 5;
        string dbProStartTime = "13:00";
        int dbProNumberOfRentalHours = 2;
        int dbProNumberOfVehicles = 3;

        Console.WriteLine(IsTechniqueAvailable(busyTimes, setTechniques, dbProStartTime, dbProNumberOfRentalHours, dbProNumberOfVehicles));
    }

    static bool IsTechniqueAvailable(List<Tuple<string, int, int>> busyTimes, int setTechniques, string dbProStartTime, int dbProNumberOfRentalHours, int dbProNumberOfVehicles)
    {
        int startHour = int.Parse(dbProStartTime.Split(':')[0]);
        int endHour = startHour + dbProNumberOfRentalHours;

        int totalOccupied = 0;
        foreach (var busyTime in busyTimes)
        {
            int busyStartHour = int.Parse(busyTime.Item1.Split(':')[0]);
            int busyEndHour = busyStartHour + busyTime.Item2;

            if ((busyStartHour >= startHour && busyStartHour < endHour) ||
                (busyEndHour > startHour && busyEndHour <= endHour) ||
                (startHour >= busyStartHour && endHour <= busyEndHour))
            {
                totalOccupied += busyTime.Item3;
            }
        }

        return setTechniques - totalOccupied >= dbProNumberOfVehicles;


C#:
using System;
using System.Collections.Generic;

class Program
{
    static void Main(string[] args)
    {
        List<Tuple<string, int, int>> busyTimes = new List<Tuple<string, int, int>>
        {
            Tuple.Create("14:00", 2, 4),
            Tuple.Create("12:00", 3, 3)
        };
        int setTechniques = 5;
        string dbProStartTime = "13:00";
        int dbProNumberOfRentalHours = 2;
        int dbProNumberOfVehicles = 3;

        Console.WriteLine(IsTechniqueAvailable(busyTimes, setTechniques, dbProStartTime, dbProNumberOfRentalHours, dbProNumberOfVehicles));
    }

    static bool IsTechniqueAvailable(List<Tuple<string, int, int>> busyTimes, int setTechniques, string dbProStartTime, int dbProNumberOfRentalHours, int dbProNumberOfVehicles)
    {
        int startHour = int.Parse(dbProStartTime.Split(':')[0]);
        int endHour = startHour + dbProNumberOfRentalHours;

        int totalOccupied = 0;
        foreach (var busyTime in busyTimes)
        {
            int busyStartHour = int.Parse(busyTime.Item1.Split(':')[0]);
            int busyEndHour = busyStartHour + busyTime.Item2;

            if ((busyStartHour >= startHour && busyStartHour < endHour) ||
                (busyEndHour > startHour && busyEndHour <= endHour) ||
                (startHour >= busyStartHour && endHour <= busyEndHour))
            {
                totalOccupied += busyTime.Item3;
            }
        }

        return setTechniques - totalOccupied >= dbProNumberOfVehicles;
    }
}
 

Phoenix78

Client
Read only
Регистрация
06.11.2018
Сообщения
11 790
Благодарностей
5 698
Баллы
113

_HEDELKA_

Client
Регистрация
20.02.2022
Сообщения
648
Благодарностей
170
Баллы
43

Phoenix78

Client
Read only
Регистрация
06.11.2018
Сообщения
11 790
Благодарностей
5 698
Баллы
113
ну надо подтянуть знания в C# , раз кодом занялся, тем более через генерацию.
он тебе статическую процедуру наваял дополнительно в коде. в кубике C# такое вряд ли прокатит. ну и выводит через консоль, которой в зенке нет.
в общем ты должен хотя бы понимать структуру процедур, классов. где точка входа и где выхода. копипаст не прокатит. :bk:
 

Dmitriy Ka

Client
Регистрация
03.05.2016
Сообщения
594
Благодарностей
354
Баллы
63
Ниже код который очень хорошо подходит для моей задачи, но он запускается с ошибкой помогите исправить пожалуйста :ah:

В чем вообще задача:
В списке (это будет переменная) хранится Tuple.Create("14:00", 2, 4) время часы количество техники задействовано, скрипту по входным параметрам нужно определить можно ли в указанный период арендовать технику
ну условно:
общее количество техники 3
в 11:00 по 12:00 занято техники 2
в 12:00 по 13:00 занято техники 1

Новое оформление: 11:00 по 13:00 если 1 то да мы сможем предоставить, если 2 то нет так как в период 11 по 12 занято 2 а общее 3 ну и соответственно все в таком духе

В переменной Tuple.Create может быть много времени и тд

Код сгенерировал GPT-3 в конце полный код который он мне отправил

Ошибки которые возникают:

Компиляция кода Ошибка в действии "CS0161" "'C257ccc58046b48eabe7162f4863b54eb.M257ccc58046b48eabe7162f4863b54eb(IZennoPosterProjectModel, Instance)': not all code paths return a value". [Строка: 0; Cтолбец: 15]
Компиляция кода Ошибка в действии "CS0029" "Cannot implicitly convert type 'string' to 'bool'". [Строка: 32; Cтолбец: 8]



C#:
List<Tuple<string, int, int>> busyTimes = new List<Tuple<string, int, int>>
        {
            Tuple.Create("14:00", 2, 4),
            Tuple.Create("12:00", 3, 3)
        };
        int setTechniques = 5;
        string dbProStartTime = "13:00";
        int dbProNumberOfRentalHours = 2;
        int dbProNumberOfVehicles = 3;

        Console.WriteLine(IsTechniqueAvailable(busyTimes, setTechniques, dbProStartTime, dbProNumberOfRentalHours, dbProNumberOfVehicles));
    }

    static bool IsTechniqueAvailable(List<Tuple<string, int, int>> busyTimes, int setTechniques, string dbProStartTime, int dbProNumberOfRentalHours, int dbProNumberOfVehicles)
    {
        int startHour = int.Parse(dbProStartTime.Split(':')[0]);
        int endHour = startHour + dbProNumberOfRentalHours;

        int totalOccupied = 0;
        foreach (var busyTime in busyTimes)
        {
            int busyStartHour = int.Parse(busyTime.Item1.Split(':')[0]);
            int busyEndHour = busyStartHour + busyTime.Item2;

            if ((busyStartHour >= startHour && busyStartHour < endHour) ||
                (busyEndHour > startHour && busyEndHour <= endHour) ||
                (startHour >= busyStartHour && endHour <= busyEndHour))
            {
                totalOccupied += busyTime.Item3;
            }
        }

        return setTechniques - totalOccupied >= dbProNumberOfVehicles;


C#:
using System;
using System.Collections.Generic;

class Program
{
    static void Main(string[] args)
    {
        List<Tuple<string, int, int>> busyTimes = new List<Tuple<string, int, int>>
        {
            Tuple.Create("14:00", 2, 4),
            Tuple.Create("12:00", 3, 3)
        };
        int setTechniques = 5;
        string dbProStartTime = "13:00";
        int dbProNumberOfRentalHours = 2;
        int dbProNumberOfVehicles = 3;

        Console.WriteLine(IsTechniqueAvailable(busyTimes, setTechniques, dbProStartTime, dbProNumberOfRentalHours, dbProNumberOfVehicles));
    }

    static bool IsTechniqueAvailable(List<Tuple<string, int, int>> busyTimes, int setTechniques, string dbProStartTime, int dbProNumberOfRentalHours, int dbProNumberOfVehicles)
    {
        int startHour = int.Parse(dbProStartTime.Split(':')[0]);
        int endHour = startHour + dbProNumberOfRentalHours;

        int totalOccupied = 0;
        foreach (var busyTime in busyTimes)
        {
            int busyStartHour = int.Parse(busyTime.Item1.Split(':')[0]);
            int busyEndHour = busyStartHour + busyTime.Item2;

            if ((busyStartHour >= startHour && busyStartHour < endHour) ||
                (busyEndHour > startHour && busyEndHour <= endHour) ||
                (startHour >= busyStartHour && endHour <= busyEndHour))
            {
                totalOccupied += busyTime.Item3;
            }
        }

        return setTechniques - totalOccupied >= dbProNumberOfVehicles;
    }
}
Это в кубик C#
C#:
List<Tuple<string, int, int>> busyTimes = new List<Tuple<string, int, int>>
            {
                Tuple.Create("14:00", 2, 4),
                Tuple.Create("12:00", 3, 3)
            };
            int setTechniques = 5;
            string dbProStartTime = "13:00";
            int dbProNumberOfRentalHours = 2;
            int dbProNumberOfVehicles = 3;

            project.SendInfoToLog($"{busyTimes.Capacity} | {setTechniques} | {dbProStartTime} | {dbProNumberOfRentalHours} | {dbProNumberOfVehicles}", true);
Это в общий код после // Insert your code here
C#:
static bool IsTechniqueAvailable(List<Tuple<string, int, int>> busyTimes, int setTechniques, string dbProStartTime, int dbProNumberOfRentalHours, int dbProNumberOfVehicles)
            {
                int startHour = int.Parse(dbProStartTime.Split(':')[0]);
                int endHour = startHour + dbProNumberOfRentalHours;

                int totalOccupied = 0;
                foreach (var busyTime in busyTimes)
                {
                    int busyStartHour = int.Parse(busyTime.Item1.Split(':')[0]);
                    int busyEndHour = busyStartHour + busyTime.Item2;

                    if ((busyStartHour >= startHour && busyStartHour < endHour) ||
                        (busyEndHour > startHour && busyEndHour <= endHour) ||
                        (startHour >= busyStartHour && endHour <= busyEndHour))
                    {
                        totalOccupied += busyTime.Item3;
                    }
                }

                return setTechniques - totalOccupied >= dbProNumberOfVehicles;
            }
В лог может выходить не то что планировали, тут вам надо будет самому разбираться:-)
 

_HEDELKA_

Client
Регистрация
20.02.2022
Сообщения
648
Благодарностей
170
Баллы
43
Дамы и Господа я все же добился о GPT-3 нужного кода:

C#:
int totalTransport = 5;
            string newOrderTime = "11:00";
            int newOrderDuration = 2;
            int newOrderTransport = 3;

            List<Tuple<string, int, int>> orders = new List<Tuple<string, int, int>>
            {
                Tuple.Create("11:00", 2, 2),
                Tuple.Create("12:00", 2, 2),
                Tuple.Create("13:00", 1, 1),
                Tuple.Create("14:00", 2, 3)
            };

            TimeSpan newOrderStart = TimeSpan.Parse(newOrderTime);
            TimeSpan newOrderEnd = newOrderStart.Add(TimeSpan.FromHours(newOrderDuration));

            bool isAvailable = true;
            foreach (var order in orders)
            {
                TimeSpan orderStart = TimeSpan.Parse(order.Item1);
                TimeSpan orderEnd = orderStart.Add(TimeSpan.FromHours(order.Item2));

                if (newOrderStart >= orderStart && newOrderStart < orderEnd ||
                    newOrderEnd > orderStart && newOrderEnd <= orderEnd ||
                    newOrderStart <= orderStart && newOrderEnd >= orderEnd)
                {
                    totalTransport -= order.Item3;
                    if (totalTransport < newOrderTransport)
                    {
                        isAvailable = false;
                        break;
                    }
                }
            }

            project.Variables["returnresult"].Value = ("Transport is available: " + isAvailable);
Но вот есть очень огромная проблема:
Как я понимаю он считает всесть лист и исходя из данных делает выводы

Но при этих входных данных он должен показать не False а True так как:
Tuple.Create("11:00", 2, 2) занято транспорта = 2
Tuple.Create("12:00", 2, 2) занято транспорта = 2
Соответственно при входных данных (11:00, 2, 3) свободно транспорта 3 как в 1 варианте так и 2, соответственно в эти промежутки времени можно добавить новую заявку 3 транспорта на 2 часа, а вот когда новая заявка попадет базу и повторно обратится с таким же запросом ответ должен быть False так как на этот промежуток времени все ТС заняты
 
Последнее редактирование:

_HEDELKA_

Client
Регистрация
20.02.2022
Сообщения
648
Благодарностей
170
Баллы
43
Дамы и Господа я все же добился о GPT-3 нужного кода:

C#:
int totalTransport = 5;
            string newOrderTime = "11:00";
            int newOrderDuration = 2;
            int newOrderTransport = 3;

            List<Tuple<string, int, int>> orders = new List<Tuple<string, int, int>>
            {
                Tuple.Create("11:00", 2, 2),
                Tuple.Create("12:00", 2, 2),
                Tuple.Create("13:00", 1, 1),
                Tuple.Create("14:00", 2, 3)
            };

            TimeSpan newOrderStart = TimeSpan.Parse(newOrderTime);
            TimeSpan newOrderEnd = newOrderStart.Add(TimeSpan.FromHours(newOrderDuration));

            bool isAvailable = true;
            foreach (var order in orders)
            {
                TimeSpan orderStart = TimeSpan.Parse(order.Item1);
                TimeSpan orderEnd = orderStart.Add(TimeSpan.FromHours(order.Item2));

                if (newOrderStart >= orderStart && newOrderStart < orderEnd ||
                    newOrderEnd > orderStart && newOrderEnd <= orderEnd ||
                    newOrderStart <= orderStart && newOrderEnd >= orderEnd)
                {
                    totalTransport -= order.Item3;
                    if (totalTransport < newOrderTransport)
                    {
                        isAvailable = false;
                        break;
                    }
                }
            }

            project.Variables["returnresult"].Value = ("Transport is available: " + isAvailable);
Но вот есть очень огромная проблема:
Как я понимаю он считает всесть лист и исходя из данных делает выводы

Но при этих входных данных он должен показать не False а True так как:
Tuple.Create("11:00", 2, 2) занято транспорта = 2
Tuple.Create("12:00", 2, 2) занято транспорта = 2
Соответственно при входных данных (11:00, 2, 3) свободно транспорта 3 как в 1 варианте так и 2, соответственно в эти промежутки времени можно добавить новую заявку 3 транспорта на 2 часа, а вот когда новая заявка попадет базу и повторно обратится с таким же запросом ответ должен быть False так как на этот промежуток времени все ТС заняты
И да я подтвердил свои догадки:
C#:
int totalTransport = 5;
            string newOrderTime = "11:00";
            int newOrderDuration = 3;
            int newOrderTransport = 1;

            List<Tuple<string, int, int>> orders = new List<Tuple<string, int, int>>
            {
                Tuple.Create("11:00", 2, 2),
                Tuple.Create("12:00", 2, 2),
                Tuple.Create("13:00", 1, 1),
                Tuple.Create("14:00", 2, 3)
            };

            TimeSpan newOrderStart = TimeSpan.Parse(newOrderTime);
            TimeSpan newOrderEnd = newOrderStart.Add(TimeSpan.FromHours(newOrderDuration));

            bool isAvailable = true;
            foreach (var order in orders)
            {
                TimeSpan orderStart = TimeSpan.Parse(order.Item1);
                TimeSpan orderEnd = orderStart.Add(TimeSpan.FromHours(order.Item2));

                if (newOrderStart >= orderStart && newOrderStart < orderEnd ||
                    newOrderEnd > orderStart && newOrderEnd <= orderEnd ||
                    newOrderStart <= orderStart && newOrderEnd >= orderEnd)
                {
                    totalTransport -= order.Item3;
                    if (totalTransport < newOrderTransport)
                    {
                        isAvailable = false;
                        break;
                    }
                }
            }

            project.Variables["returnresult"].Value = ("Transport is available: " + isAvailable);
Якобы все тс заняты, но это не так
 

_HEDELKA_

Client
Регистрация
20.02.2022
Сообщения
648
Благодарностей
170
Баллы
43
Все же я допытал GPT-3 до идеального решения задачи, могу уверенно сказать использовать GPT-3 для написания C# кода можно

Кому нужно решение по конкретной задачи:

totalTransport - общее количество доступного транспорта
newOrderTime - время новой заявки
newOrderDuration - на сколько часов аренда
newOrderTransport - необходимое количество транспорта в новой заявки

Tuple.Create("14:00", 2, 2) (время, на сколько часов аренда, забронированный транспорт "занятый") -> в этот список можно положить все активные заявки (я это буду делать в переменную записывать Tuple.Create все заявки и после подставлять в C# код

C#:
int totalTransport = 5;
string newOrderTime = "11:00";
int newOrderDuration = 4;
int newOrderTransport = 3;

List<Tuple<string, int, int>> orders = new List<Tuple<string, int, int>>
{
    Tuple.Create("11:00", 2, 2),
    Tuple.Create("12:00", 2, 2),
    Tuple.Create("13:00", 2, 3),
    Tuple.Create("14:00", 2, 2)
};

TimeSpan newOrderStart = TimeSpan.Parse(newOrderTime);
TimeSpan newOrderEnd = newOrderStart.Add(TimeSpan.FromHours(newOrderDuration));

bool isAvailable = true;

foreach (var order in orders)
{
    TimeSpan orderStart = TimeSpan.Parse(order.Item1);
    TimeSpan orderEnd = orderStart.Add(TimeSpan.FromHours(order.Item2));
    if (newOrderStart >= orderStart && newOrderStart < orderEnd || newOrderEnd > orderStart && newOrderEnd <= orderEnd || newOrderStart <= orderStart && newOrderEnd >= orderEnd)
    {
        totalTransport -= order.Item3;
        if (totalTransport < newOrderTransport)
        {
            isAvailable = false;
            break;
        }
    }
    totalTransport = 5;
}
project.Variables["returnresult"].Value = ("Transport is available: " + isAvailable);
 
Последнее редактирование:

Кто просматривает тему: (Всего: 1, Пользователи: 0, Гости: 1)