Mô tả
Tại trạm giám sát môi trường VinSmart, mỗi bản ghi cấu hình của một cụm cảm biến IoT được lưu bằng một số nguyên không âm mask (8 bit, từ bit 0 đến bit 7). Mỗi bit tương ứng với một kênh cảm biến: bit bằng 1 là đang bật, bit bằng 0 là đang tắt.
Ví dụ mask = 5 (dạng nhị phân 00000101) cho biết kênh 0 và kênh 2 đang bật, còn các kênh khác đang tắt.
Trong quá trình bảo trì, kỹ sư cần thực hiện một chuỗi thao tác để gỡ rối cấu hình. Mỗi thao tác được mô tả bởi một số nguyên không âm command:
- Nếu
commandnằm trong khoảng từ 0 đến 7: bật/toggle kênh cảm biến tại vị trícommand. Dùng phép XOR giữamaskvà(1 << command)để đảo trạng thái kênh đó. - Nếu
commandbằng 8: đếm và trả về số lượng kênh đang bật trongmask(số bit 1). - Nếu
commandbằng 9: trả về giá trịmaskhiện tại.
Bạn được cho mask ban đầu và danh sách các command cần thực hiện theo thứ tự. Hãy trả về danh sách kết quả tương ứng với mỗi lệnh có command bằng 8 hoặc 9, theo đúng thứ tự xuất hiện. Các lệnh từ 0 đến 7 chỉ cập nhật mask mà không sinh kết quả.
Đầu vào
mask(số nguyên không âm): giá trị cấu hình ban đầu.commands(danh sách số nguyên không âm): chuỗi thao tác cần thực hiện.
Đầu ra
- Trả về danh sách các số nguyên, mỗi phần tử là kết quả của một lệnh
8(số bit 1) hoặc lệnh9(giá trị mask hiện tại), theo thứ tự thực thi.
Ràng buộc
0 <= mask <= 255.1 <= len(commands) <= 1000.0 <= command <= 9.
Ví dụ
Ví dụ 1:
Đầu vào: mask = 5, commands = [8, 2, 8, 9, 0, 8]
Giải thích từng bước:
mask = 5(nhị phân00000101).- Gặp lệnh
8: đếm số bit 1 trong5là2→ ghi kết quả2. - Gặp lệnh
2: bật/toggle bit thứ 2 →5 XOR (1 << 2) = 5 XOR 4 = 1(nhị phân00000001),masktrở thành1. - Gặp lệnh
8: đếm số bit 1 trong1là1→ ghi kết quả1. - Gặp lệnh
9: trả vềmaskhiện tại là1→ ghi kết quả1. - Gặp lệnh
0: bật/toggle bit thứ 0 →1 XOR 1 = 0,masktrở thành0. - Gặp lệnh
8: đếm số bit 1 trong0là0→ ghi kết quả0.
Đầu ra: [2, 1, 1, 0]
Ví dụ 2:
Đầu vào: mask = 0, commands = [0, 1, 2, 8, 9]
Giải thích: Bật lần lượt bit 0, 1, 2 → mask thành 7. Lệnh 8 đếm được 3. Lệnh 9 trả về 7.
Đầu ra: [3, 7]