Mục tiêu của thử thách này là thu thập các mục đã chọn trong danh sách và di chuyển chúng đến một vị trí nhất định trong danh sách.
Để làm ví dụ trực quan, lấy các giá trị đầu vào (được biểu thị bằng số nguyên hộp đen) và danh sách giá trị trung thực tương ứng trong đó biểu thị đúng mục được chọn (được biểu thị bằng các hộp màu xanh, trong đó T
là trung thực và sai lệch F
):
Bước hợp lý đầu tiên là tách các mục được đánh dấu là trung thực và không trung thực vào danh sách tương ứng của chúng. Lưu ý rằng thứ tự tương đối trong mỗi danh sách phải được duy trì (nghĩa là thứ tự của các mục được chọn phải 1,4,5
và thứ tự của các mục không được chọn phải được 2,3,6,7
)!
Bước logic thứ hai được đưa ra một chỉ mục trong danh sách còn lại của các mục không được chọn, chèn tất cả các mục đã chọn trước mục đó vào chỉ mục đã cho. Giả sử lập chỉ mục bắt đầu từ 0, giả sử bạn muốn chèn lựa chọn ở chỉ mục 3. Điều này tương ứng với vị trí trước 7
hộp, vì vậy các mục đã chọn nên được chèn trước 7
.
Giải pháp cuối cùng là sau đó 2,3,6,1,4,5,7
.
Lưu ý rằng sơ đồ logic này mô tả một cách có thể được thực hiện; chương trình của bạn không cần phải thực hiện các bước logic tương tự miễn là đầu ra luôn tạo ra kết quả quan sát giống nhau.
Đầu vào
Chương trình của bạn được cung cấp 3 đầu vào:
- Một danh sách các số nguyên đại diện cho các mục. Đây có thể là một danh sách trống. Danh sách này sẽ luôn bao gồm các số nguyên dương duy nhất, không nhất thiết phải theo thứ tự được sắp xếp (tức là 5 sẽ không có trong danh sách hai lần).
- Một danh sách các giá trị trung thực / giả mạo có cùng độ dài với danh sách các mục, trong đó một giá trị trung thực thể hiện rằng mục đó trong cùng một chỉ mục đã được chọn.
- Một số nguyên đại diện cho nơi để chèn lựa chọn. Bạn có thể chọn chỉ mục của mục đầu tiên của danh sách miễn là nó không đổi trong mỗi lần chạy chương trình của bạn (ví dụ: mục đầu tiên có thể là chỉ mục 0 hoặc chỉ mục 1). Vui lòng xác định quy ước mà chương trình của bạn tuân thủ. Chỉ số này phải nằm trong phạm vi
[starting_idx, ending_idx+1]
, tức là nó sẽ luôn là một chỉ mục hợp lệ. Đối với chỉ số trường hợp làending_idx+1
, lựa chọn nên được chèn vào cuối danh sách. Bạn có thể cho rằng số nguyên này sẽ phù hợp với loại số nguyên của ngôn ngữ của bạn.
Đầu vào có thể đến từ bất kỳ nguồn nào mong muốn (stdio, tham số hàm, v.v.)
Đầu ra
Đầu ra là một danh sách đại diện cho chuỗi cuối cùng của các mục. Điều này có thể là bất kỳ nguồn mong muốn (stdio, giá trị trả về, tham số đầu ra chức năng, v.v.). Bạn được phép sửa đổi bất kỳ đầu vào tại chỗ nào (ví dụ: được cung cấp danh sách có thể sửa đổi dưới dạng tham số chức năng và để chức năng của bạn hoạt động tại chỗ trong danh sách đó).
Các trường hợp thử nghiệm
Tất cả các trường hợp kiểm tra sau đây giả sử lập chỉ mục dựa trên 0. Tôi đã sử dụng 0 và 1 để chỉ ra các giá trị giả / trung thực tương ứng cho mặt nạ lựa chọn.
Các trường hợp kiểm tra tình cờ có các danh sách được định dạng [a,b,c]
, nhưng miễn là các danh sách đầu vào của bạn thể hiện một chuỗi có thứ tự hữu hạn là tốt.
Đầu vào:
[]
[]
0
Đầu ra:
[]
Đầu vào:
[1,2,3,4,5,6,7]
[1,0,0,1,1,0,0]
3
Đầu ra:
[2,3,6,1,4,5,7]
Đầu vào:
[1,2,3,4,5,6,7]
[1,0,0,1,1,0,0]
0
Đầu ra:
[1,4,5,2,3,6,7]
Đầu vào:
[1,2,3,4,5,6,7]
[1,0,0,1,1,0,0]
4
Đầu ra:
[2,3,6,7,1,4,5]
Đầu vào:
[1,2,3,4,5,6,7]
[1,1,1,1,1,1,1]
0
Đầu ra:
[1,2,3,4,5,6,7]
Đầu vào:
[1,2,3,4,5,6,7]
[0,0,0,0,0,0,0]
5
Đầu ra:
[1,2,3,4,5,6,7]
Đầu vào:
[1,3,2,5,4,6]
[1,0,0,1,1,0]
3
Đầu ra:
[3,2,6,1,5,4]
Chấm điểm
Đây là mã golf; câu trả lời ngắn nhất trong byte thắng. Sơ hở tiêu chuẩn bị cấm. Bạn được phép sử dụng bất kỳ tích hợp nào mong muốn.