R , 88 86 байт
cat(intToUtf8(rbind(diffinv(matrix(c(66,-32,-31),25,5,T)[,1:3],,,t(c(32,65,97))),10)))
Попробуйте онлайн!
R ужасен при манипулировании строками, и хотя он имеет некоторые аккуратные встроенные матрицы, вращение - это еще одна вещь, которую он не делает очень легко. Я с радостью дам щедрость любому, кто может превзойти меня в гольф в R.
Несмотря на то, что я нашел более короткий ответ, я все же присваиваю награду в 50 повторений первому другому ответу R короче, чем 88 байтов.
Полагаю, я бы присудил себе награду, если бы мог, но это на два байта короче, чем «скучный» ответ! Я избегаю вращений, просто используя склонность R к переработке.
РЕДАКТИРОВАТЬ: user2390246 ответ полностью превзошел меня, и я буду награждать 100 баллов, так как это решение намного лучше.
Чтобы добраться сюда, я деконструировал желаемый вывод в их кодовые точки ASCII с помощью utf8ToInt
(удаляя новые строки), строил матрицу и запускал diff
их, получая различия по столбцам. Отмечая там периодичность, я решил построить матрицу в гольфе, надеясь использовать ее diffinv
для воссоздания оригинала.
Благодаря периодичности мы можем воссоздать diff
матрицу ed, заставив R перезапускать с кратной длиной, и извлечь столбцы, которые мы на самом деле хотели:
matrix(c(66,-32,-31),25,5,T)[,1:3]
Затем мы инвертируем этот процесс, с помощью которого diffinv
воссоздаем кодовые точки, добавляем строку 10
(новые строки) в конец, снова преобразуем в ASCII с intToUtf8
и получаем cat
результат.