+9

Dùng Chat GPT ẵm quà sự kiện của Viblo chỉ với 30 phút?

Độ hot của ChatGPT thời gian vừa rồi thì không phải bàn cãi nữa rồi, đợt này mình có thử nghiệm để nó sinh content đề bài cho một bài giải thuật để tham gia sự kiện kiếm tí quà ăn Tết xem thế nào.

Link sự kiện Viblo Contribution Event 2023 cho mọi người tham khảo và kiếm quà Tết cùng mình: https://contribution.viblo.asia/ (quà thấp nhất là 1 chiếc áo phông rất xinh, và cao nhất lên đến 3tr)

Năm ngoái mình tự contribute chay, mỗi bài mất tận hơn 2 tiếng, có khi đến cả 4 tiếng mới xong 1 bài khó. Năm nay con Chat GPT lợi hại quá, làm hết việc giúp mình giảm thời gian làm mỗi bài xuống còn khoảng 20-30p thôi :v Kèo thơm không ăn 1 mình, mời các bác vào ăn cùng cho zui 😂

1. Đề bài đưa ra:

Đề bài là gen ra 1 bài tập coding trên Viblo Code bao gồm:

  • Nội dung bài toán: bài toán là gì, input, output là gì, format thế nào, ràng buộc, subtask (cho những bài từ rank D trở lên)
  • Giải thuật là gì, mô tả giải thuật, phân cấp giải thuật nếu có
  • Source Code
  • Testcase

Chi tiết về yêu cầu cho từng mục có thể tham khảo tại đây: Hướng dẫn đóng góp thử thách (contribute challenge) trên nền tảng Viblo Code

2. Các bước thực hiện:

  • Sử dụng 1 trong số các prompt sau để gen ra đề bài:

(Prompt nên bao gồm chủ đề bài toán, giải thuật sử dụng, level khó hay dễ, đề bài phức tạp hay ngắn gọn)

Bạn là một nhà lập trình đại tài với những bài lập trình vô cùng khó cho các cuộc thi Olympic. Tôi đang tổ chức một cuộc thi lập trình. Hãy tạo giúp cho tôi một bài toán lập trình về chủ đề ABC liên quan đến giải thuật XYZ với mức độ dễ/khó. (chỉ gồm đề bài). Bài toán bao gồm các nội dung và theo format giống như sau:

## Tên bài toán
<<Nội dung bài toán>>
## Input
Dòng đầu tiên chứa 
Dòng thứ 2 chứa 
	## Constraints
$1 <= n <= 1000$ 
	## Output
Một dòng duy nhất chứa 
	## Subtasks
Subtask $1$ ($50\%$ số điểm): với …
Subtask $2$ ($100\%$ số điểm): không có ràng buộc gì thêm

hoặc:

Hãy tạo cho tôi một bài toán có nội dung khác đi và format giống như bài toán sau:

# Steal carrot
Có một chú thỏ tên là Freke rất thích ăn cà rốt. Chú thường hay đến trộm cà rốt ở một mảnh vườn, nhưng sau nhiều lần ăn trộm, chủ của mảnh vườn đó đã lắp đặt những con robot để bảo vệ khu vườn. Hãy giúp Freke lấy cà rốt một cách an toàn nhé.
# Input
Mảng 2 chiều gồm M hàng và N cột, trong đó
Ô có giá trị 1: có robot tuần tra.
Ô có giá trị 0: không có robot tuần tra.
# Constraints
1 <= M <= 100
1 <= N <= 100
	# Output
Số cà rốt có thể trộm. Biết những hàng và cột có robot tuần tra thì không thể trộm (tầm hoạt động của robot là hàng và cột mà nó đứng).

Ví dụ về 1 bài toán:

  • Sau khi nhận được kết quả từ Chat GPT, bạn cảm thấy có một số vấn đề cần sửa đổi cho phù hợp như bài toán quá dễ, chủ đề quá phổ biến hay muốn đổi ý tưởng về thuật toán, có thể dùng một số prompt như sau:

    • Chỉnh sửa nội dung bài toán liên quan đến chủ đề ABC
    • Tăng độ khó của bài toán lên
    • Sửa bài toán về sử dụng giải thuật Dynamic Program
    • Tăng ngưỡng của các giá trị đầu vào
  • Sinh lời giải bằng một trong số các prompt sau:

    • Sinh lời giải cho bài toán trên một cách chi tiết dễ hiểu
    • Bài toán trên có những lời giải nào cho độ phức tạp tệ nhất và độ phức tạp tốt nhất
    • Giải thuật cụ thể cho 2 hướng: độ phức tạp tệ nhất và độ phức tạp tốt nhất
    • Phân loại lời giải thành 2 dạng là dùng duyệt chay thông thường và dùng giải thuật XYZ
    • Đánh giá lời giải bài toán, độ phức tạp của lời giải này
    • Lý giải thuật toán dễ hiểu hơn

Để tìm hiểu thêm về các giải thuật, các bạn có thể tham khảo trang này Viblo Algorithms

  • Sinh source code bằng prompt: Source code Python và C++... cho lời giải trên

Cần đánh giá xem source code đang sử dụng giải thuật gì? Có đáp ứng được độ phức tạp và giải thuật như đề bài đã đưa ra hay không

  • Sinh testcase:
    • Viết đoạn mã Python để sinh n test case với các ràng buộc của bài toán và ghi chúng vào file dạng test001.txt và out001.txt
    • Phân tầng testcase với 10 testcase đầu ràng buộc …, 10 testcase sau tới giới hạn ràng buộc cao nhất của bài toán

Lưu ý:

  • Đa dạng chủ đề, bổ sung thêm nhiều thông tin để sinh ra bài toán, tránh việc sinh ra các bài toán giống nhau hoặc quá phổ thông, không có gì mới lạ
  • Kiểm chứng code bằng các test case cá nhân
  • Kiểm chứng lời giải bằng tư duy cá nhân hoặc hỏi ngược lại ChatGPT
  • Kiểm chứng độ phức tạp giải thuật thông qua Code

3. Đánh giá ưu, nhược điểm của Chat GPT:

Đánh giá ưu điểm của việc sử dụng ChatGPT trong việc sinh bài tập như sau:

  • Thời gian nhanh (gấp 5 lần so với việc tự làm 1 bài thông thường)
  • Đa dạng bài toán, muốn chủ đề gì cũng có
  • Có luôn format mình cần, đỡ tốn nhiều công sức chỉnh sửa
  • Code sinh Unittest khá chuẩn (tất nhiên solution phải chuẩn đã vì Unittest tạo dựa trên solution để ra lời giải)

Tuy nhiên vẫn còn 1 số nhược điểm và cần can thiệp của con người để hoàn thiện hơn:

  • Bài toán sinh ra đôi khi bị dễ quá, nhiều khi bị trùng lặp ý tưởng
  • Giải pháp đưa ra đúng nhưng khó hiểu, sai một vài ý nhỏ
  • Source code hoặc sample test có thể không đúng hoàn toàn (phần này nên được kiểm chứng bảo nó sinh sample ví dụ và giải thích sẽ biết nó giải thích đúng hay sai)
  • Testcase phải tự sinh vì ChatGPT chỉ cho code để sinh :v

Vì vậy, mình có rút ra một số bài học khi sinh bài tập bằng ChatGPT như sau:

  • Cần cover đủ quá trình: sinh bài toán, sinh lời giải, source code, chắc chắn đúng hết thì có thể làm được (code sinh testcase auto đúng vì nó dễ quá)
  • Cần có những prompt rõ ràng để ChatGPT sinh ra bài toán đúng yêu cầu
  • Để ý kỹ phần đánh giá độ phức tạp của giải thuật, vì nó hay nhầm lẫn phần này

Nếu anh em có nhu cầu sinh bài tập để ôn luyện hoặc giảng dạy về thuật toán, hoặc muốn kiếm ít quà từ tham gia sự kiện thì có thể thử nhé! Lưu ý là nếu tham gia sự kiện thì phải check tính độc đáo của bài.

Link sự kiện mình tham gia ở đây: https://contribution.viblo.asia/

Ngoài ra mọi người có thể cmt bên dưới để thảo luận thêm nhé! Chúc mọi người giành được nhiều phần quà có giá trị từ sự kiện!!!


All Rights Reserved

Viblo
Let's register a Viblo Account to get more interesting posts.