Cho một hình ảnh chỉ có các pixel đen trắng và một vị trí (x, y) là pixel trắng, tô màu các pixel trắng dựa trên khoảng cách Manhattan tối thiểu của chúng từ (x, y) trong một đường dẫn chỉ đi qua các pixel trắng khác.
Các màu sắc của các điểm ảnh màu phải tương xứng khoảng cách của họ từ (x, y), do đó pixel tại (x, y) sẽ có một màu từ 0 ° (đỏ nguyên chất) và các điểm ảnh xa xa (x, y) sẽ có màu sắc 360 ° (cũng màu đỏ), với các màu khác được trộn liền mạch và tuyến tính ở giữa. Độ bão hòa và giá trị phải là 100%.
Nếu một pixel trắng không được kết nối với (x, y) thông qua các pixel trắng khác thì nó phải giữ nguyên màu trắng.
Chi tiết
- Đầu vào sẽ bao gồm tên tệp của hình ảnh hoặc dữ liệu hình ảnh thô, cộng với số nguyên x và y.
- Hình ảnh đầu ra có thể được lưu vào một tệp hoặc được dẫn thô đến thiết bị xuất chuẩn ở bất kỳ định dạng tệp hình ảnh phổ biến nào, hoặc hiển thị đơn giản.
- Giá trị x là 0 trên các pixel ngoài cùng bên trái và tăng dần sang phải. Giá trị y là 0 trong các pixel trên cùng và tăng dần xuống. (x, y) sẽ luôn nằm trong giới hạn hình ảnh.
- Cả hai chương trình và chức năng đầy đủ đều được cho phép.
Mã ngắn nhất tính bằng byte thắng.
Ví dụ
Tất cả những hình ảnh này đã được thu nhỏ để tiết kiệm không gian. Nhấp vào chúng để xem ở kích thước đầy đủ.
Hình ảnh đầu vào:
(x,y) = (165,155)
và (x,y) = (0,0)
Hình ảnh đầu vào và đầu ra với (x,y) = (0,0)
:
Hình ảnh đầu vào và đầu ra với (x,y) = (600,350)
:
Hình ảnh đầu vào và đầu ra với (x,y) = (0,0)
:
Hình ảnh đầu vào và đầu ra với (x,y) = (0,0)
:
Phần thưởng tùy chọn -30%: sử dụng khoảng cách Euclide. Một gợi ý cho thuật toán của bạn như sau (phác thảo chung):
- Có một pixel bắt đầu.
- Lấp đầy từ pixel đó.
- Đối với mỗi pixel đạt được trong vùng lấp lũ,
- Di chuyển từ pixel bắt đầu sang pixel đó theo các bước nửa đơn vị, theo một đường thẳng.
- Ở mỗi bước, áp dụng
int()
cho tọa độ x và y. Nếu pixel ở các tọa độ này là màu đen, dừng lại. Nếu không, tiếp tục. (Đây là một phương pháp tầm nhìn.) - Bất kỳ pixel nào đạt được viền giáp pixel trắng và / hoặc pixel được gắn nhãn trước đó với khoảng cách cao hơn đáng kể (ví dụ: 10) sẽ trở thành pixel bắt đầu.
Theo nghĩa siêu thực hơn, thuật toán này trải đều đến mọi pixel có thể tiếp cận theo một đường thẳng từ các pixel bắt đầu / đã được tô màu, sau đó "inch" xung quanh các cạnh. Bit "khoảng cách cao hơn đáng kể" được dự định để tăng tốc thuật toán. Thành thật mà nói, việc bạn thực hiện khoảng cách Euclide thực sự không quan trọng , nó chỉ phải trông khá giống như thế này.
Đây là ví dụ đầu tiên trông giống với khoảng cách Euclide, sử dụng thuật toán ở trên:
Hình ảnh đầu vào và (x,y) = (165,155)
Rất cám ơn Calvin'sHob sở thích và trichoplax đã giúp viết thử thách này! Chúc vui vẻ!