R , 88 86 byte
cat(intToUtf8(rbind(diffinv(matrix(c(66,-32,-31),25,5,T)[,1:3],,,t(c(32,65,97))),10)))
Hãy thử trực tuyến!
R là khủng khiếp khi thao tác chuỗi và mặc dù nó có một số tích hợp ma trận gọn gàng, phép quay là một việc khác mà nó không thực hiện rất dễ dàng. Tôi sẽ vui vẻ đưa tiền thưởng cho bất cứ ai có thể chơi golf cho tôi ở R.
Mặc dù tôi đã tìm thấy câu trả lời ngắn hơn, tôi vẫn sẽ trao phần thưởng 50 rep cho câu trả lời R khác đầu tiên ngắn hơn 88 byte.
Tôi cho rằng tôi sẽ tự thưởng cho mình tiền thưởng nếu có thể, nhưng đây là toàn bộ hai byte ngắn hơn câu trả lời "nhàm chán"! Tôi tránh quay vòng bằng cách chỉ sử dụng penchant của R để tái chế.
EDIT: câu trả lời của user2390246 hoàn toàn vượt xa tôi và tôi sẽ được thưởng 100 điểm vì giải pháp đó vượt trội hơn nhiều.
Để đến đây, tôi đã giải mã đầu ra mong muốn cho các điểm mã ASCII của họ bằng utf8ToInt
(loại bỏ các dòng mới), xây dựng một ma trận và chạy diff
trên chúng để có được sự khác biệt theo cột. Lưu ý đến tính tuần hoàn ở đó, tôi bắt đầu xây dựng ma trận theo kiểu chơi gôn, hy vọng sẽ sử dụng diffinv
để tạo lại bản gốc.
Nhờ tính tuần hoàn, chúng ta có thể tạo lại diff
ma trận ed bằng cách buộc R tái chế với độ dài không nhiều và trích xuất các cột mà chúng ta thực sự muốn:
matrix(c(66,-32,-31),25,5,T)[,1:3]
Sau đó, chúng tôi đảo ngược quá trình này, diffinv
để tạo lại các điểm mã, nối một hàng 10
(dòng mới) xuống dưới cùng, đổi lại thành ASCII intToUtf8
và cat
kết quả.