Hoạt hình của Code Golf


28

Khi tôi thấy các mục golf-code đánh bật một vài ký tự, giảm mã, tôi sẽ xem lịch sử chỉnh sửa cho một khác biệt bên cạnh. Xem và học hỏi :)

Thử thách này là tạo ra một chương trình tạo ra các khác biệt hoạt hình đẹp nhất.

  • Đầu vào sẽ là bất kỳ loạt phiên bản văn bản nào.
  • Chương trình có thể được viết bằng bất kỳ ngôn ngữ lập trình nào.
  • Chương trình được phép giới hạn dữ liệu đầu vào trong một số ngôn ngữ lập trình cụ thể.
  • Chương trình không nên được điều chỉnh theo dữ liệu đầu vào cụ thể; chương trình nên chung chung và hoạt động cho bất kỳ loạt phiên bản văn bản nào.
  • Đối với mỗi phiên bản trong đầu vào, phải có thời gian tương ứng trong hoạt ảnh đầu ra nơi toàn văn bản của phiên bản được hiển thị. Bạn phải tạo hiệu ứng khác biệt giữa các giai đoạn phiên bản và tất cả các giai đoạn phiên bản phải có mặt và theo thứ tự trong đầu ra. Trên các khung chính này, kích thước phiên bản phải được hiển thị và người xem nên hiểu đây là phiên bản hoàn chỉnh mà họ đang thấy tại thời điểm đó.
  • Chương trình không được sử dụng bất kỳ mã bên thứ ba nào để tính toán các khác biệt.
  • Cú pháp tô sáng đầu ra là tùy chọn. Nếu cú ​​pháp màu chương trình, nó có thể không sử dụng bất kỳ mã bên thứ ba nào để làm như vậy.
  • Đầu ra sẽ là một GIF hoạt hình.
  • Chương trình có thể sử dụng thư viện của bên thứ ba để tạo ra GIF.
  • Đây là một , vì vậy theo định nghĩa về cuộc thi phổ biến trên trang web này, bài dự thi có nhiều phiếu nhất sẽ chiến thắng .

Dưới đây là một ví dụ đơn giản kịch bản có sử dụng Python của ndiffgối của thô sơ hoạt hình hỗ trợ GIF và sinh động mỗi add và remove bước:

Cá nhân, tôi nghĩ rằng đây là một công việc khá kém. Nó không làm nổi bật cú pháp, nó không thử và di chuyển các đoạn mã được sắp xếp lại, nó không cảm thấy như ai đó đang chỉnh sửa trực tiếp, v.v. Nó cũng phá vỡ các quy tắc liên quan đến việc hiển thị kích thước của đầu vào theo byte trên các khung chính và nó sử dụng thư viện của bên thứ ba để thực hiện việc phân biệt. Rất nhiều phòng để cải thiện!

Và hy vọng các mục phổ biến sẽ trở thành công cụ thú vị hữu ích cho cộng đồng codegolf.stackexchange.com. Vì vậy, nó được đánh giá cao nếu các chương trình dễ dàng cho người khác chạy và sử dụng.


1
Những bình luận bị thanh trừng khi cuộc trò chuyện kéo dài ở đây dường như sắp dừng lại. Thảo luận về bài đăng này có thể được tìm thấy trên câu hỏi meta này .
Doorknob

Câu trả lời:


11

(OP)

nhập mô tả hình ảnh ở đây

Điều này dựa trên tập lệnh Python mẫu trong câu hỏi.

Tôi đã sử dụng khoảng cách chỉnh sửa đơn giản nhất chứ không phải là một sự kiên nhẫn khác biệt thông minh hơn.

Để sắp xếp bộ gen có thuật toán Sắp xếp nhiều chuỗi và chúng có thể tạo ra một công việc thậm chí còn tốt hơn là chỉ xem xét từng cặp khung liền kề?

Tôi đã ngạc nhiên khi thấy nó đơn giản đến mức nào khi thực hiện khoảng cách chỉnh sửa cho diff và làm cho nó tương thích với difflib.ndiffđịnh dạng của Python . Có rất nhiều triển khai Python về khoảng cách chỉnh sửa được tìm thấy trên web, nhưng tôi nghĩ rằng công thức của tôi là gọn gàng hơn một chút và cũng xử lý phần khó khăn nhưng thiết yếu của việc xác định đường dẫn trong bảng; trong bối cảnh của chúng ta, chúng ta cần biết các bước để biến cái này thành cái khác và không chỉ có bao nhiêu bước.

Tôi đã giới thiệu đánh dấu cú pháp bằng cách sử dụng một mã thông báo rất đơn giản mà phải có khả năng đối phó với hầu hết các ngôn ngữ giống như c, bao gồm, bởi sự lỏng lẻo của nó, Python và như vậy. Nó phân chia nguồn thành dấu chấm câu, khoảng trắng, chuỗi (có hỗ trợ thoát) và mọi thứ khác là định danh và được kiểm tra đối với danh sách từ khóa. Các màu cũng rất dễ dàng để thay đổi.

Thật dễ dàng để tích hợp cú pháp tô sáng thành một ngôn ngữ động; công cụ tô sáng đưa ra một danh sách các cặp ký tự và màu sắc, và sự khác biệt là không rõ ràng cho dù các chuỗi khác nhau của nó hoặc bất kỳ phép lặp tùy ý nào có thể so sánh được! Một hiệu ứng thú vị - và có chủ ý - làm nổi bật đầu tiên và sau đó là khác biệt là các nhân vật không thay đổi nhưng thay đổi màu sắc trở nên sinh động. Tôi không muốn tính toán độ nổi bật của từng khung vì điều đó có nghĩa là khi bạn xóa một chuỗi đóng, bạn đột nhiên flash một đoạn văn bản lớn lên thành chuỗi.

Hỗ trợ của Python cho tác giả GIF khá hạn chế. PIL không làm điều đó và Gối làm điều đó khá tệ. Tôi sử dụng Gối, nhưng sau đó phải chạy qua gifsicle để nén và thêm vòng lặp, v.v. Gối không viết chính xác thời gian của khung và không cho phép bạn quản lý các phương thức xử lý, v.v., thật đáng tiếc vì sự khác biệt có thể hiểu rõ hơn về cảnh so với bước xử lý hậu xử lý các khung phẳng :(

Mã nguồn


1
Tôi thực hiện cùng một thuật toán diff. Sau đó tôi viết lại bằng Cython và tăng tốc 100 lần.
Ray
Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.