Là nhà khoa học máy tính, có lẽ bạn đều quen thuộc với các hoạt động danh sách cơ bản của pop và đẩy . Đây là những thao tác đơn giản sửa đổi danh sách các yếu tố. Tuy nhiên, bạn đã bao giờ nghe nói về hoạt động flop ? (như trong flip- flop )? Nó khá đơn giản. Cho một số n , đảo ngược n phần tử đầu tiên của danh sách. Đây là một ví dụ:
>>> a = [1, 2, 3, 4, 5, 6, 7, 8, 9, 10]
>>> a.flop(4)
[4, 3, 2, 1, 5, 6, 7, 8, 9, 10]
Điều thú vị về hoạt động flop, là bạn có thể sử dụng nó để thực hiện một số điều thú vị cho một danh sách, chẳng hạn như sắp xếp nó . Chúng ta sẽ làm một cái gì đó tương tự với flops:
Đưa ra một danh sách các số nguyên, "Hàng xóm nó". Nói cách khác, sắp xếp nó sao cho mọi phần tử trùng lặp xuất hiện liên tiếp.
Điều này có thể được thực hiện với flops! Ví dụ: lấy danh sách sau:
>>> a = [3, 2, 1, 4, 3, 3, 2]
>>> a.flop(4)
[4, 1, 2, 3, 3, 3, 2]
>>> a.flop(3)
[2, 1, 4, 3, 3, 3, 2]
>>> a.flop(6)
[3, 3, 3, 4, 1, 2, 2]
Điều này dẫn chúng ta đến định nghĩa về thách thức ngày nay:
Đưa ra một danh sách các số nguyên, xuất ra bất kỳ tập hợp flops nào sẽ dẫn đến danh sách được lân cận.
Sử dụng danh sách cuối cùng làm ví dụ, bạn nên xuất ra:
4
3
6
bởi vì việc lật danh sách lên 4, rồi 3, rồi 6 sẽ dẫn đến một danh sách lân cận. Hãy nhớ rằng bạn không cần phải in danh sách ngắn nhất có thể trong danh sách mà hàng xóm liệt kê. Nếu bạn đã in:
4
4
4
3
1
1
6
2
2
thay vào đó, đây vẫn sẽ là một đầu ra hợp lệ. Tuy nhiên, bạn không bao giờ có thể xuất ra một số lớn hơn độ dài của danh sách. Điều này là bởi vì đối với một danh sách a = [1, 2, 3]
, gọi a.flop(4)
là vô nghĩa.
Dưới đây là một số ví dụ:
#Input:
[2, 6, 0, 3, 1, 5, 5, 0, 5, 1]
#Output
[3, 7, 8, 6, 9]
#Input
[1, 2]
#Output
<any list of integers under 3, including an empty list>
#Input
[2, 6, 0, 2, 1, 4, 5, 1, 3, 2, 1, 5, 6, 4, 4, 1, 4, 6, 6, 0]
#Output
[3, 19, 17, 7, 2, 4, 11, 15, 2, 7, 13, 4, 14, 2]
#Input
[1, 1, 1, 1, 2, 2, 2, -1, 4]
#Output
[]
#Input
[4, 4, 8, 8, 15, 16, 16, 23, 23, 42, 42, 15]
#Output
[12, 7]
Hãy nhớ rằng trong mỗi ví dụ này, đầu ra đưa ra chỉ là một đầu ra hợp lệ tiềm năng. Như tôi đã nói trước đây, bất kỳ bộ flops nào lân cận danh sách đã cho là một đầu ra hợp lệ . Bạn có thể sử dụng tập lệnh python này để xác minh xem một danh sách flops đã cho có chính xác trong danh sách không.
Bạn có thể lấy đầu vào và đầu ra ở bất kỳ định dạng hợp lý. Ví dụ: đối số hàm / giá trị trả về, STDIN / STDOUT, đọc / ghi tệp, v.v ... đều hợp lệ. Như thường lệ, đây là môn đánh gôn , vì vậy hãy tạo ra chương trình ngắn nhất bạn có thể, và vui chơi! :)