R , 88 86 byte
cat(intToUtf8(rbind(diffinv(matrix(c(66,-32,-31),25,5,T)[,1:3],,,t(c(32,65,97))),10)))
Cobalah online!
R mengerikan dalam manipulasi string dan meskipun memiliki beberapa matriks bawaan yang rapi, rotasi adalah hal lain yang tidak mudah dilakukan. Saya akan dengan senang hati memberikan hadiah kepada siapa saja yang bisa bermain golf di R.
Meskipun saya telah menemukan jawaban yang lebih pendek, saya akan tetap memberikan hadiah 50 rep untuk jawaban R pertama lainnya yang lebih pendek dari 88 byte.
Saya kira saya akan menghadiahkan diri saya hadiah jika saya bisa, tetapi ini adalah keseluruhan dua byte lebih pendek dari jawaban "membosankan"! Saya menghindari rotasi dengan hanya menggunakan kegemaran R untuk daur ulang.
EDIT: jawaban user2390246 benar-benar mengungguli saya dan saya akan memberikan hadiah 100 poin karena solusi itu jauh lebih unggul.
Untuk sampai di sini, saya mendekonstruksi output yang diinginkan ke titik kode ASCII mereka dengan utf8ToInt
(menghapus baris baru), membangun sebuah matriks, dan menjalankannya diff
untuk mendapatkan perbedaan arah kolom. Memperhatikan periodisitas di sana, saya mulai membuat matriks dengan gaya golf, berharap dapat digunakan diffinv
untuk membuat ulang yang asli.
Berkat periodisitas, kita dapat membuat ulang diff
ed matrix dengan memaksa R untuk mendaur ulang dengan panjang non-banyak, dan mengekstrak kolom yang sebenarnya kita inginkan:
matrix(c(66,-32,-31),25,5,T)[,1:3]
Kemudian kita membalikkan proses ini, dengan diffinv
untuk menciptakan kembali poin kode, menambahkan deretan 10
(baris baru) ke bawah, kembali ke ASCII dengan intToUtf8
, dan cat
hasilnya.