@vozer267 trong lúc rảnh thì bạn có thể đọc thử mấy cái này:
https://wiki.c2.com/?ThereIsMoreThanOneWayToDoIt
http://www.ariel.com.au/jokes/The_Evolution_of_a_Programmer.html
http://www.willamette.edu/~fruehr/haskell/evolution.html?
còn bài cho lisp nữa khá hay mà không tìm được.
quay lại cái này, bỏ qua mục đích ban đầu của OP, thì thường mấy cái dạng này người ta gọi là code golf, aka dùng bất kỳ thủ đoạn nào miễn thoả mãn được yêu cầu đặt ra. ở đây thì mỗi implementation khác nhau nhiều khi đều đc coi là giải pháp khác nhau, ví dụ for loop coi như là khác while loop, mặc dù bên dưới thì nó y hệt.
hoặc là một phương pháp dùng for rồi print trong body của for, phương pháp khác là trong for thì gội lại thành string rồi mang ra ngoài print sau, cũng dc coi là 2 giải pháp khác biệt.
dùng builtin như List.Revese(), Array.Reverse(), Enumerable.Reverse() cũng được coi là các giải pháp khác biệt (vì mỗi cái nó behavior khác nhau một tí)
tương tự thì ở trên có nói về recursion nó cũng có nhiều implementation, đơn giản nhất là cứ gọi recursion từ đầu tới cuối array cho in ngược lại, nhưng cũng có các giải pháp khác dùng accumulator để tạo output string hoặc reverse array. thêm nữa thì code có thể áp dụng tail call optimization hay không cũng là tiêu chuẩn để phân biệt.
các bạn nhìn vào thì bảo là vẽ vời phức tạp hoá vấn đề, nhưng sao không nghĩ là tại sao các giải pháp trên tồn tại? tồn tại tức hợp lý, chắc chắn có một cái use case nào đó phải dùng tới các phương pháp trên thì người ta mới đưa ra công cụ giải quyết.
ờ mà code golf nói chung tôi gặp thì còn nhiều các giải quyết bựa hơn. có rất nhiều lần tôi thấy một thằng nào đó gọi ra một hàm nào đó giải quyết được luôn bài toán, thay vì phải tự implement hơn chục dòng
các bạn có thể so sánh giải pháp aventofcode 2020 của tôi với creator của crystal:
https://github.com/nipinium/aoc20 (bản trình lùn của tôi),
https://github.com/asterite/adventofcode2020 (bản pro của ary). xem vài cái thì thấy hiển nhiên là code của lão ary nó hiệu quả hơn ngắn gọn hơn, dùng nhiều cấu trúc/method call dị hơn.
tiếp đến tôi biết có vài thằng khác thay vì thực hiện giải pháp trên ngôn ngữ đầu bài, thì nó củ bựa gọi hẳn system command tới các ngôn ngữ khác có khả năng giải quyết bài toán một cách ngắn gọn hơn.
cái này tuy nhiên là trò đùa nhưng thực tế là không có ngôn ngữ nào là hoàn hảo, nhiều khi đang dùng ngôn ngữ này bạn cần một vài tính năng của ngôn ngữ khác, hoặc là program có sẵn, cái solution này thực ra là demostrate dc là thằng đó nó có khả năng này.
tóm lại thì code golf tuy sinh ra là để giải trí, nhưng nó giúp bạn hiểu ra là một vấn đề có rất nhiều cách giải quyết, tuỳ trường hợp cụ thể mà cách này tốt hơn cách kia.
cái sleep sort hay dc lôi ra làm ví dụ cũng là để nhấn mạnh cái này, vì nó khuyến khích người ta thinking out of the box.
// khi nào rảnh có khi tôi cũng làm bài tổng hợp mấy cái này, hay ho phết, kể cả bài đố fizzbuzz nổi tiếng cũng có vô số giải pháp kỳ dị tôi cá là các bạn chưa nghe bao giờ