Đây là một câu đố hình học đầy thách thức cho bạn!
Đưa ra một vòng tròn A
và n
các vòng tròn khác B[n]
, tìm tổng diện tích chứa trong A
đó không nằm trong bất kỳ vòng tròn nào B
.
Mã của bạn nên càng ngắn càng tốt.
Đầu vào
Đầu vào của bạn nên chứa thông tin sau:
- Một số dấu phẩy động để biểu thị bán kính hình tròn
A
. - Một danh sách các số dấu phẩy động để biểu thị bán kính của các vòng tròn trong
B
. - Một danh sách các trung tâm của các vòng tròn trong
B
. Chương trình của bạn có thể mong đợi các trung tâm theo tọa độ cực hoặc Cartesian. - Tùy chọn, bạn có thể nhận được số lượng
n
vòng tròn trong B. Đầu vào này là không bắt buộc.
Nó sẽ được giả định rằng trung tâm của vòng tròn A
là gốc tọa độ, nghĩa là điểm (0, 0)
.
Nó được đảm bảo rằng không có hai vòng tròn B
giống hệt nhau, nhưng không đảm bảo rằng: tất cả các vòng tròn B
giao nhau A
, tất cả các trung tâm B
đều ở bên ngoàiA
hoặc không có hai vòng tròn nào B
giao nhau. Đảm bảo rằng giải pháp của bạn có thể xử lý các trường hợp cạnh khác nhau.
Bạn có thể nhận đầu vào theo bất kỳ thứ tự nào và ở dạng nhập văn bản (thông qua stdin hoặc tương đương với ngôn ngữ của bạn), tham số chức năng hoặc đối số dòng lệnh.
Nếu bạn chọn nhận đầu vào văn bản, cần có một hoặc hai ký tự phân cách ASCII có thể in giữa các phần đầu vào.
Đầu ra
Chương trình hoặc chức năng của bạn sẽ xuất ra một số dấu phẩy động đơn biểu thị tổng diện tích A
không nằm trong bất kỳ vòng tròn nào B
. Câu trả lời của bạn phải chính xác với ít nhất ba con số quan trọng cho tất cả các trường hợp thử nghiệm.
Quy tắc chung golf-golf áp dụng.
Giải pháp của bạn không nên dựa vào các điểm lấy mẫu trong vòng tròn để xác định khu vực.
Các phần tử tích hợp tự động định vị các giao điểm của các vòng tròn, tìm các khu vực trong các giao điểm của các vòng tròn hoặc giải quyết vấn đề này ngay lập tức không được phép.
Các trường hợp thử nghiệm
Trong mỗi hình ảnh, vòng tròn A
được viền màu xanh lam, với các vòng tròn được B
viền màu xanh lá cây và màu đen. Khu vực cần được trả lại được lấp đầy màu đỏ.
(Cảm ơn đặc biệt đến Rainer P. vì đã kiểm tra các giải pháp của tôi)
Trường hợp thử nghiệm 1:
A = {x: 0, y: 0, rad: 50}
B[0] = {x: 0, y: 0, rad: 100}
Result: 0.00
Trường hợp thử nghiệm 2:
A = {x: 0, y: 0, rad: 100.000000}
B[0] = {x: 100.000000, y: 0.000000, rad: 50.000000}
B[1] = {x: 30.901699, y: -95.105652, rad: 50.000000}
B[2] = {x: -80.901699, y: -58.778525, rad: 50.000000}
B[3] = {x: -80.901699, y: 58.778525, rad: 50.000000}
B[4] = {x: 30.901699, y: 95.105652, rad: 50.000000}
Result: 1.3878e+04
Trường hợp thử nghiệm 3:
A = {x: 0, y: 0, rad: 138}
B[0] = {x: 100, y: 0, rad: 100}
B[1] = {x: -50, y: -86, rad: 100}
B[2] = {x: -93, y: 135, rad: 50}
Result: 1.8969e+04
Trường hợp thử nghiệm 4:
A = {x: 0, y: 0, rad: 121.593585}
B[0] = {x: 81.000000, y: 107.000000, rad: 59.841457}
B[1] = {x: -152.000000, y: -147.000000, rad: 50.000000}
B[2] = {x: 43.000000, y: -127.000000, rad: 105.118980}
B[3] = {x: 0.000000, y: -72.000000, rad: 57.870545}
B[4] = {x: -97.000000, y: -81.000000, rad: 98.488578}
B[5] = {x: -72.000000, y: 116.000000, rad: 66.468037}
B[6] = {x: 2.000000, y: 51.000000, rad: 50.000000}
Result: 1.1264e+04
Trường hợp thử nghiệm 5:
A = {x: 0, y: 0, rad: 121.605921}
B[0] = {x: 0.000000, y: -293.000000, rad: 250.000000}
B[1] = {x: 0.000000, y: -56.000000, rad: 78.230429}
B[2] = {x: 0.000000, y: -102.000000, rad: 100.000000}
Result: 2.6742e+04
Cách đọc được đề nghị:
Fewell, MP "Khu vực chồng chéo chung của ba vòng tròn." Tháng 10 năm 2006. Web. http://dspace.dsto.defence.gov.au/dspace/bitstream/1947/4551/4/DSTO-TN-0722.PR.pdf .
B
chứa một vòng tròn khác. Có thể đáng để thêm vào đó.
1.8970e+04
.
B[0] - A intersection: 20653.659515
, B[1] - A intersection: 20757.824115
, B[1] - B[0] intersection: 1841.847766
, B[2] - A intersection: 1289.164541
, trong đó sản lượng 18969.69009
là câu trả lời.