Bài toán 3 cái tách (tiếp tục)
Xem xét test case sau:
ACBA
Có 4 tráo đổi ở đây. Để quyết định vị trí cuối cùng của quả bóng, chúng ta cần tiến hành
mỗi tráo đổi.
Tráo đổi đầu tiên là type A, cái tráo đổi các tách ở bên trái và ở giữa. Vì quả bóng bắt
đầu ở bên trái, cái này dẫn đến kết quả quả bóng di chuyển vào giữa. Tráo đổi thứ hai là type
C, cái tráo đổi các tách ở bên trái và phải. Vì quả bóng hiện tại ở giữa, cái này không
ảnh hưởng đến vị trí quả bóng. Tráo đổi thứ ba là type B, cái tráo đổi các tách ở giữa và
bên phải. Cái này di chuyển quả bóng từ ở giữa sang phải. Tráo dổi thứ tư là type A, cái tráo
đổi các tách ở bên trái và ở giữa. Cái này không có ảnh hưởng tới quả bóng. Output đúng vì vậy
là 3, vì quả bóng kết thúc ở vị trí bên phải.
Nhận thấy cho mỗi tráo đổi, chúng ta phải ra quyết định quyết định xem liệu quả bóng có di chuyển
, và nếu nó có,di chuyển quả bóng phù hợp.Ra quyết định chúng ta đã học ở những học phần
trước. Ví dụ, nếu swap type là A và quả bóng ở bên trái thì quả bóng di chuyển vào giữa. Cái đó
trông như thế này:
if swap_type == ‘A’ and ball_location == 1:
ball_location = 2
Chúng ta có thể thêm elif cho mỗi case khác nhau nơi quả bóng di chuyển, tráo đổi type A và
quả bóng ở giữa, tráo đổi type B và quả bóng vào giữa, tráo đổi type B và quả bóng ở bên phải..vv..
Phát biểu if lớn này sẽ đủ để xử lí một swap. Nhưng cái đó không đủ để giải quyết bài toán 3 cái tách,
vì chúng ta có một test case lên tới 50 swaps. Chúng ta cần lặp lại logic phát biểu cho mỗi swap. Và
chúng ta chắc chắn không muốn copy paste cùng code 50 lần. Tưởng tượng bạn có lỗi đánh máy và phải sửa
nó 50 lần.Hay nếu như bạn bỗng nhiên trở nên quan tâm đến test case lên tới một triệu swaps. Chúng
ta cần một cách thức đi qua các swaps, thực hiện cùng logic cho mỗi cái. Chúng ta cần loop.
Chúng ta code giải quyết bài toán 3 cái tách như sau:
swaps = input()
ball_location = 1
¶ for swap_type in swaps:· if swap_type == ‘A’ and ball_location == 1:
¸ ball_location = 2
elif swap_type == ‘A’ and ball_location == 2:
ball_location = 1
elif swap_type == ‘B’ and ball_location == 2:
ball_location = 3
elif swap_type == ‘B’ and ball_location == 3:
ball_location = 2
elif swap_type == ‘C’ and ball_location == 1:
ball_location = 3
elif swap_type == ‘C’ and ball_location == 3:
ball_location = 1
print(ball_location)