R , 88 86 bajtów
cat(intToUtf8(rbind(diffinv(matrix(c(66,-32,-31),25,5,T)[,1:3],,,t(c(32,65,97))),10)))
Wypróbuj online!
R jest okropny w manipulowaniu strunami i chociaż ma pewne porządne wbudowane macierze, rotacje to kolejna rzecz, której nie robi się łatwo. Z radością dam nagrodę każdemu, kto może wygrać w golfa w R.
Pomimo znalezienia krótszej odpowiedzi, nadal przyznam 50 powtórzeń za pierwszą inną odpowiedź R krótszą niż 88 bajtów.
Chyba przyznałbym sobie nagrodę, gdybym mógł, ale to całe dwa bajty krótsze niż „nudna” odpowiedź! Unikam rotacji, wykorzystując skłonność R. do recyklingu.
EDYCJA: odpowiedź użytkownika2390246 całkowicie mnie przerosła i przyznam nagrodę w wysokości 100 punktów, ponieważ to rozwiązanie jest znacznie lepsze.
Aby się tu dostać, zdekonstruowałem pożądane dane wyjściowe do ich punktów kodowych ASCII za pomocą utf8ToInt
(usuwając znaki nowego wiersza), zbudowałem macierz i uruchomiłem diff
na nich, uzyskując różnice między kolumnami. Biorąc pod uwagę okresowość, postanowiłem skonstruować matrycę w golfowy sposób, mając nadzieję diffinv
na odtworzenie oryginału.
Dzięki okresowości możemy odtworzyć diff
macierz ed, zmuszając R do recyklingu o długości innej niż wielokrotna i wyodrębniając kolumny, które tak naprawdę chcieliśmy:
matrix(c(66,-32,-31),25,5,T)[,1:3]
Następnie odwracamy ten proces, diffinv
aby odtworzyć punkty kodowe, dołączyć wiersz 10
(nowe linie) na dole, ponownie przekonwertować na ASCII za pomocą intToUtf8
i cat
wynik.