ChatGPT проти LeetCode: як алгоритм справляється з LeetCode-задачами різної складності
Підписуйтеся на Telegram-канал «DOU #tech», щоб не пропустити нові технічні статті.
Всім привіт, мене звати Олександр, я — Software Engineer. Нещодавно я спробував використати ChatGPT для вирішення завдань з LeetCode і хочу розповісти про цей досвід.
Для нетерплячих скажу одразу — ChatGPT не вивозить.
Чат хто? ЖеПеТе?
Для тих хто не чув: у листопаді 2022 компанія OpenAI випустила чат-бот, який може відповідати майже на будь-які запитання та навіть писати код. Ось, наприклад, я попросив ChatGPT написати простеньку Java-програму:
Якщо порівнювати з Google, то замість списку посилань на інші сторінки, де ми в цілому можемо знайти точно таку ж відповідь, ChatGPT зразу видає конкретно те, що потрібно. Це дуже зручно, особливо коли світ рухається настільки швидко, що переглядати десятки сайтів для того, щоб зробити щось дуже просте, зовсім немає часу.
Після релізу ChatGPT я багато разів чув, що він замінить програмістів, і мені стало цікаво наскільки це реально. А оскільки шлях до програміста у (F|M)AANG лежить через LeetCode, то я вирішив перевірити, як у ChatGPT з написанням алгоритмів.
Декілька слів про LeetCode
Якщо подивитися на список завдань з алгоритмів на LeetCode, то можна помітити, що кожного тижня додається 4 нових задачі, зазвичай це Easy, Medium, Medium і Hard. Так відбувається, тому що 4 нових завдання спочатку потрапляють у LeetCode Contest, який проходить кожної суботи, а вже після контесту ці завдання додаються до загального списку.
Також є задачі, які додаються поза контестом, але вони зазвичай доступні тільки тим, у кого є LeetCode Premium. Ось, наприклад, як виглядає
Думаю, що було б логічно спробувати, ніби ChatGPT пише код під час LeetCode Contest і протестувати його завданнями, які були на одному з контестів у серпні 2020 року:
- Easy 1550. Three Consecutive Odds,
- Medium 1551. Minimum Operations to Make Array Equal,
- Medium 1552. Magnetic Force Between Two Balls,
- Hard 1553. Minimum Number of Days to Eat N Oranges.
Легке завдання на знаходження трьох послідовно не парних чисел
Відкриваємо 1550. Three Consecutive Odds і, не вигадуючи нічого особливого, просто копіюємо опис у блокнот, додавши спочатку «Please write algorithm in Java to solve a problem below»:
Далі закидуємо цей текст у ChatGPT:
Копіюємо те, що видав ChatGPT назад у LeetCode та сабмітимо. LeetCode без питань приймає рішення, яке видав ChatGPT:
В цілому, я і очікував, що з легкою задачкою проблем не буде.
Завдання середньої складності на знаходження мінімальної кількості операцій, щоб зробити всі елементи масиву рівними
З 1551. Minimum Operations to Make Array Equal робимо все те саме, що робили з попередньої задачею, але потрібно бути уважнішими, бо якщо копіювати цифри, які записані як X у ступені Y, наприклад, 10 у 4 ступені,
то у блокнот це копіюється як 104:
В принципі це не біда, просто трошки коригуємо такі моменти прямо у блокноті, далі закидуємо у ChatGPT, копіюємо рішення назад у LeetCode й перевіряємо. Тут нас спіткає невдача — тепер жоден з тест кейсів не проходить:
Йдемо просити ChatGPT виправити рішення:
Але з оновленої версії також не проходить жоден з тест-кейсів:
Не будемо більше мучити ChatGPT цією задачкою і рухаємося далі.
Середнячок на знаходження магнітної сили між двома м’ячами
Відкриваємо 1552. Magnetic Force Between Two Balls і зразу ж стикаємося з маленькою проблемою. У описі завдання є зображення, а ChatGPT наразі розуміє тільки текст
Можливо, це і є причиною того, що алгоритм, який видає ChatGPT не проходить один із тест-кейсів:
Даємо ChatGPT ще один шанс і вуаля. З другої спроби він таки видає алгоритм, який приймає LeetCode:
Хард на знаходження мінімальної кількість днів для поїдання N апельсинів
Те, що ChatGPT не впорається з важкою задачею 1553. Minimum Number of Days to Eat N Oranges я був впевнений. І тут, на диво, вже з першої спроби алгоритм проходить всі тест-кейси.
Намагаємося сабмітити, але бачимо, що LeetCode не приймає алгоритм, бо він «їсть» дуже багато пам’яті:
Декілька разів просимо ChatGPT це виправити, але все марно, і важке завдання йому все ж таки не дається.
Висновки
В цілому, ChatGPT — класна штука, але навряд чи він би пройшов співбесіду у (F|M)AANG. З іншого боку його дуже зручно використовувати, якщо потрібно накидати якийсь boilerplate код і вже далі з ним працювати.
39 коментарів
Додати коментар Підписатись на коментаріВідписатись від коментарів