Про сhatgpt уже слышно из-под каждого утюга, поэтому я решил проверить, на что сегодня способны нейросети в контексте написания кода.
Как попробовать самостоятельно
https://chat.openai.com
Chatgpt сегодня доступен бесплатно, пока происходит «research preview». Потом, вероятно, они перейдут на платную модель использования, как и другие сетки openai.com.
Для регистрации понадобится VPN, а так же подтверждение номера своего телефона, который должен соответствовать стране, под которой вы проходите регистрацию. Я регистрировался под английским ip. Для решения проблемы с смс воспользовался сервисом https://sms-activate.org/
Тестируемый кейс
Необходимо написать функцию на python, которая возьмет две переменные:
— X: список, содержащий числа (например [1, 2, 3, 4] )
— Y: число (например 2)
В результате мы хотим получить новый список, состоящий из Y списков, в котором числа из X распределятся по спискам таким образом, чтобы сумма внутри каждого списка стремилась быть одинаковой к другим.
Пример результата: [[1, 4], [2, 3]].
Другой пример: X=[1, 4, 6, 3, 8, 4, 13, 10], Y=3. Желаемый результат, например [[1, 3, 4, 8], [4, 13], [6, 10]]
Ради интереса можете попробовать решить этот кейс самостоятельно, кидайте в комменты 🙂
Первая проба
Создаем новый чат, пытаемся описать скрипт и проверяем первые результаты:
Результат:
Я дополнил результат выводом суммы для каждой группы чтобы визуально было сразу понятен результат распределения. Как видим, результат не идеальный. Говорим об этом:
В итоге, с третьей попытки он выдал почти рабочее решение:
С простым примером оно справилось на отлично. Генерация такого скрипта заняла у меня пять минут.
Однако, с примером X=[1, 4, 6, 3, 8, 4, 13, 10], Y=3 результат будет следующий:
Хотя, если распределить эти числа руками, можно было бы добиться лучшего результата:
[[1, 3, 4, 8], [4, 13], [6, 10]]
16
17
16
Попытки договориться
Далее начался долгий путь к улучшению кода. Объяснял в чате желаемый результат, но сетка начала возвращать часто сломанные варианты: то списки пустые, то распределение становилось хуже, то кол-во групп становилось всегда 2. Промучив сетку часа полтора, я решил просто создать новый чат. В нем мне удалось достигнуть своей цели, но тоже не быстро, а с седьмой попытки. Вот список моих запросов, который привел к рабочему результату:
- make script that will take in two elements: X and Y, where X is a list that can only consist of numbers, and Y is a number. It will then sort the X list in descending order and reallocate the numbers among Y number of lists, such that the sum of numbers inside each new list is as close as possible to each other.
- rewrite code to make sum of each sublists closer to each other
- I got IndexError: list index out of range
- still big difference between sum sublists reallocate better
- difference between the sum of the sublists is not zero is still big. For example if number 4 move to group [2,5,8], result would be better. Make reallocation smarter
- I got an empty sublists [[], [], []]
- Returned sublists are still empty [[], [], []]
Конечная версия ответа после 7 запроса:
Проверяем на сложном примере:
Выводы
В сумме на написание этого кода нейросетью я потратил часа три. Но несмотря на частые ошибки, удивительно, как достаточно сложные вещи описанные словами могут воплотиться в жизнь. Когда-то я решал такую задачку вручную, но это заняло дня два. Использование нейросетей может очень помочь хотя бы тогда, когда не знаешь даже с какого «края» приступить к реализации. А решения задач попроще и вовсе можно делегировать — генерация сниппетов и отдельных функций для скрипта существенно ускоряет его разработку. Это как твой личный «джун», разгребающий рутину для улучшения твоей эффективности. Пользуйтесь, пока бесплатно 🙂
P.S. Пикча в шапке сгенерирована при помощи midjourney + DALL-E 2