Một trong những mô hình lập trình ít được biết đến có vẻ khá phù hợp với việc chơi golf mã là Lập trình định hướng chồng chéo (OOP) *. Khi viết mã giống hệt nhau, nhiều byte có thể được lưu bằng cách chỉ cần chồng chéo các phần giống hệt nhau và ghi nhớ theo một cách nào đó nơi hai dòng mã gốc bắt đầu. Nhiệm vụ của bạn là viết hai chương trình hoặc hàm chồng chéocompress
và decompress
với đặc tả sau:
* Có thể không sử dụng trong mã sản xuất.
compress
compress
lấy hai chuỗi trong bất kỳ định dạng thuận tiện và chồng chéo chúng càng nhiều càng tốt. Đó là một chuỗi s
có độ dài tối thiểu được trả về sao cho cả hai chuỗi đầu vào là chuỗi con của s
. Ngoài ra, một số đầu ra xác định các chỉ số bắt đầu và kết thúc của cả hai chuỗi được trả về.
Ví dụ: (Định dạng IO chính xác tùy thuộc vào bạn)
compress("abcd", "deab") -> "deabcd" ((2,5),(0,3))
compress("abcd", "bc") -> "abcd" ((0,3),(1,2))
compress("abc", "def") -> "abcdef" ((0,2),(3,5)) or "defabc" ((3,5),(0,2))
decompress
decompress
tính toán hàm nghịch đảo của compress
, được đưa ra một chuỗi và hai chỉ số bắt đầu và kết thúc (theo định dạng mà chúng được trả về bởi bạn compress
), trả về hai chuỗi gốc. Bạn chỉ cần xử lý đầu vào hợp lệ. Bình đẳng sau nên giữ cho tất cả các chuỗi s1
, s2
:
(s1, s2) == decompress (compress (s1, s2))
Ví dụ: (đảo ngược các compress
ví dụ)
decompress "deabcd" ((2,5),(0,3)) -> "abcd" "deab"
decompress "abcd" ((0,3),(1,2)) -> "abcd" "bc"
decompress "abcdef" ((0,2),(3,5)) -> "abc" "def"
or (whichever version your "compress" generates)
decompress "defabc" ((3,5),(0,2)) -> "abc" "def"
Chấm điểm
Điểm của bạn là kích thước của chuỗi được trả về bằng cách gọi compress("<code of compress>", "<code of decompress>")
. Vì đây là môn đánh gôn, điểm thấp hơn là tốt hơn.
Thí dụ:
Giả sử mã cho chức năng của bạn compress
là c=abcd
và mã cho decompress
là d=efghi
. Sau đó, compress("c=abcd", "d=efghi")
sản lượng "c=abcd=efghi"
(và các chỉ số, nhưng những chỉ số này không ảnh hưởng đến việc ghi điểm) vì vậy điểm số là length "c=abcd=efghi" = 12
.
Quy tắc bổ sung
- Theo tinh thần của thử thách này, bạn
compress
vàdecompress
phải chồng chéo ít nhất một nhân vật. Bạn có thể đạt được điều này một cách tầm thường bằng cách thêm một nhận xét, nhưng lưu ý rằng làm như vậy sẽ tăng điểm của bạn và có thể có các giải pháp ngắn hơn bằng cách sử dụng mã chồng chéo vốn có. compress
vàdecompress
phải có khả năng xử lý các chuỗi chứa bất kỳ ký tự ASCII có thể in nào cũng như tất cả các ký tự bạn đã sử dụng để xác địnhcompress
vàdecompress
.- Các chỉ số có thể bằng 0 hoặc một chỉ mục.
- Các chương trình hoặc chức năng của bạn không thực sự phải được đặt tên
compress
vàdecompress
.