Biểu đồ *** ameoba **** là một loại cây có các nút có tất cả các giá trị từ 0 đến một số nguyên N không âm và bất kỳ nút cụ thể nào có giá trị x <N kết nối với x + 1 nút riêng biệt có giá trị x + 1.
Biểu đồ Ameoba cho N = 3: (Ký hiệu A 3 )
Lưu ý rằng 2 không được phép chia sẻ bất kỳ trong số 3; chính xác ba 3 phải "thuộc" cho mỗi 2.
Thử thách
Nhiệm vụ của bạn là tự động "phát triển" các đồ thị ameoba này trong lưới 2 chiều bằng cách thu nhỏ khoảng cách Manhattan giữa các nút:
- Trường hợp cơ sở: A 0 chỉ đơn giản là biểu đồ
0
. - Bước quy nạp: Một N + 1 được tạo bằng cách lặp đi lặp lại các nút có giá trị N + 1 mới càng gần với các nút giá trị N trong cấu trúc A N hiện có . (Nó chỉ có thể càng gần càng tốt vì các điểm gần nhất có thể đã được lấp đầy.)
Đối với bước quy nạp, quy trình chung bạn phải tuân theo là:
for each existing node P with value N:
for each new N+1 valued node Q you need to connect to P: //this loops N+1 times
find the set of vacant spots that are minimally distant from P //by Manhattan distance
place Q in any of these vacant spots
(Một quy trình khác với đầu ra không thể phân biệt là tốt.)
Ví dụ tăng trưởng cho A 4 :
A0 is always the same:
0
For A1 I happen to put the 1 to the right of the 0 (it has to go on one of the 4 open sides):
01
For A2 I happen to put the two 2's above and to the right of the 1:
2
012
For A3 I find that one of the six 3's I must place cannot be directly next to a 2, so I put in one of the next closest places:
3
323
0123
33 <-- this 3 is distance two away from its 2
The process continues in A4. Note that I'm iterating over each 3 and placing four 4's next to it or as close as possible, then moving to the next 3 (the order of 3's does not matter):
444
443444
4323444
4012344
44334
4444
44
Always keep in mind that nodes cannot be "shared".
Chương trình
Chương trình bạn viết phải lấy một số từ 0 đến 8 (đã bao gồm) và đưa ra biểu đồ ameoba hợp lệ của nó, sử dụng mô hình tăng trưởng quy nạp được giải thích ở trên.
Điều gì xảy ra ngoài 8 không quan trọng.
(A 8 chứa 46234 nút đang đẩy nó. Mọi thứ ngoài A 8 sẽ quá xa. Cảm ơn Martin Büttner vì đã nhận thấy điều này.)
Đầu vào phải đến từ stdin hoặc dòng lệnh và đầu ra phải vào stdout hoặc một tệp.
Ví dụ (lấy trực tiếp từ trên)
Input: 0
Output:
0
Input: 1
Output:
01
Input: 2
Output:
2
012
Input: 3
Output:
3
323
0123
33
Input: 4
Output:
444
443444
4323444
4012344
44334
4444
44
* Những loại biểu đồ có thể đã có tên. Tôi thừa nhận tôi chỉ làm cho họ lên. ;)