number i (set p)
g=card(p);h=g;n=0;e=p[0];q=e.e
for d in p
if h<g-1
q=q.e
n=card(intersection(d.e,q))>1or d on q?1|n
end
e=d;h=h-1
end;return n;end
Hàm được đặt tên i
đó, đã vượt qua một tập hợp các điểm, trả về 0 hoặc 1. Dấu chấm phẩy và ngắt dòng có thể hoán đổi cho nhau để kết thúc một lệnh, tôi chỉ gộp một vài thứ lại với nhau để giữ mã rõ ràng vì chúng ta không sử dụng để dễ đọc mã quanh đây nào.
Eukleides là một ngôn ngữ hình học phẳng chủ yếu cho đầu ra đồ họa, nhưng với khả năng lập trình tốt. Tôi nghĩ rằng nó sẽ là tuyệt vời cho nhiệm vụ này, nhưng một vài điều làm tôi thất vọng. Đầu tiên, đáng chú ý là các tập hợp trong Eukleides về cơ bản là các mảng điểm và khi được áp dụng sẽ được hiển thị dưới dạng các đường dẫn được tạo từ các đoạn đường được kết nối. Eukleides hỗ trợ việc tạo các bộ lặp thông qua loci, giống như một vòng lặp for tạo ra một tập hợp trong quy trình. Nếu tôi có thể sử dụng một locus, nó sẽ loại bỏ các byte, nhưng rõ ràng Eukleides không muốn tham chiếu một locus được hình thành một phần từ bên trong chính nó.
Sự thất vọng lớn khác là nếu, dường như, hai đoạn đường giống hệt nhau nằm trên nhau, intersection
chỉ trả về một điểm vi phạm (điều này có nghĩa, tôi cho rằng, sẽ có các giao điểm vô hạn). Phương pháp của tôi về cơ bản là xây dựng đường dẫn một bước phía sau và kiểm tra đoạn đường tiếp theo để biết các giao điểm với đường dẫn. Do hành vi giao cắt đã nói ở trên, tôi kiểm tra riêng xem điểm đó có nằm trên đường dẫn hay không.
Chỉnh sửa : Cắt bỏ 1 byte bằng cách sắp xếp lại or
câu lệnh để cho phép xóa khoảng trắng trước đó or
; Thêm 5 byte bằng cách thay đổi if
khối đó thành một hoạt động ternary.
Các trường hợp thử nghiệm:
ta=point(0,0).point(1,0)
tb=point(0,0).point(1,0).point(0,0)
tc=point(0,0).point(1,0).point(1,1).point(0,0)
td=point(0,0).point(2,0).point(1,1).point(1,-1)
te=point(0,0).point(10,0).point(0,1).point(10,1).point(0,2).point(10,2)
print i(ta);print i(tb);print i(tc);print i(td);print i(te)
0
1
1
1
0