Trong lý thuyết hỗn loạn , bản đồ móng ngựa là một ví dụ về cách hỗn loạn phát sinh trong một quá trình đơn giản là gấp và ép. Nó diễn ra như thế này: lấy một miếng bột tưởng tượng, gấp nó lại, và cuối cùng ép nó về kích thước ban đầu. Sự hỗn loạn nảy sinh theo mô hình làm thế nào các miếng bột kết thúc trong sự sắp xếp cuối cùng sau n lần lặp.
Trong trường hợp của chúng tôi, chúng ta sẽ xem xét cách một mô hình nhị phân đơn giản hoạt động khi chúng ta gấp và bóp nó . Dưới đây là các bước với ví dụ 8 bit (biểu diễn nhị phân của 201 hoặc 11001001
).
Cắt các bit thành hai phần có độ dài bằng nhau (thêm '0' ở đầu nếu có số bit lẻ).
1100 | 1001
Gấp nửa đầu so với nửa sau. Lưu ý rằng thứ tự của nửa đầu được đảo ngược, khi chúng ta xoay nó trong khi gấp.
0011
1001
Squash để hình dạng ban đầu của nó. Trong khi đè bẹp, các bit trên được dịch chuyển sang trái theo các bit dưới vị trí ban đầu của chúng.
01001011
Nếu chúng ta lặp lại điều này cho ví dụ này, chúng ta có thể thấy rằng sau 4 lần lặp, chúng ta sẽ trở lại chuỗi bit gốc:
Start bits: 11001001
Iteration 1: 01001011
Iteration 2: 01001101
Iteration 3: 01011001
Iteration 4: 11001001
Vì vậy, đối với giá trị thập phân của năm 201, số chu kỳ là 4.
Các thách thức
- Viết một chương trình đầy đủ lấy một số thập phân làm đầu vào và xuất ra số chu kỳ cần lặp lại trong quy trình gấp và nhị phân được mô tả ở trên.
- Đầu vào (thập phân) phải được lấy từ stdin (phạm vi: từ 1 đến Googol hoặc 10 ^ 100).
- Đầu ra (thập phân) phải được ghi vào thiết bị xuất chuẩn.
- Điểm của bạn là số byte của mã của bạn.
- Câu trả lời của bạn phải bắt đầu bằng [Ngôn ngữ lập trình] - [Điểm theo byte]
- Sơ hở tiêu chuẩn không được phép.
Ví dụ
7 --> 3
43 --> 5
178 --> 4
255 --> 1
65534 --> 1
65537 --> 12
1915195950546866338219593388801304344938837974777392666909760090332935537657862595345445466245217915 --> 329
Lưu ý cuối cùng
Điều thú vị là số chu kỳ có liên quan đến độ dài của biểu diễn nhị phân, ngoại trừ một vài ngoại lệ trong đó số chu kỳ ngắn hơn do mô hình trong chuỗi bit (ví dụ: 111110
chu kỳ sau 1 lần lặp). Điều này tạo ra một cơ hội thú vị để tối ưu hóa độ dài mã bằng cách sử dụng mẫu cơ bản thay vì tính toán số chu kỳ.