; rotated palindrome
(define (split n xs)
(let loop ((n n) (xs xs) (zs '()))
(if (or (zero? n) (null? xs))
(values (reverse zs) xs)
(loop (- n 1) (cdr xs) (cons (car xs) zs)))))
(define (string-reverse str)
(list->string (reverse (string->list str))))
(define (string-rotate n str)
(call-with-values
(lambda () (split n (string->list str)))
(lambda (front back) (list->string (append back front)))))
(define (rot-pal? str)
(let loop ((n (string-length str)) (str str))
(if (zero? n) #f
(if (string=? str (string-reverse str)) #t
(loop (- n 1) (string-rotate 1 str))))))
(display (rot-pal? "abcdedcba")) (newline)
(display (rot-pal? "dedcbaabc")) (newline)
(display (rot-pal? "abcdefghi")) (newline)
OyByb3RhdGVkIHBhbGluZHJvbWUKCihkZWZpbmUgKHNwbGl0IG4geHMpCiAgKGxldCBsb29wICgobiBuKSAoeHMgeHMpICh6cyAnKCkpKQogICAgKGlmIChvciAoemVybz8gbikgKG51bGw/IHhzKSkKICAgICAgICAodmFsdWVzIChyZXZlcnNlIHpzKSB4cykKICAgICAgICAobG9vcCAoLSBuIDEpIChjZHIgeHMpIChjb25zIChjYXIgeHMpIHpzKSkpKSkKCihkZWZpbmUgKHN0cmluZy1yZXZlcnNlIHN0cikKICAobGlzdC0+c3RyaW5nIChyZXZlcnNlIChzdHJpbmctPmxpc3Qgc3RyKSkpKQoKKGRlZmluZSAoc3RyaW5nLXJvdGF0ZSBuIHN0cikKICAoY2FsbC13aXRoLXZhbHVlcwogICAgKGxhbWJkYSAoKSAoc3BsaXQgbiAoc3RyaW5nLT5saXN0IHN0cikpKQogICAgKGxhbWJkYSAoZnJvbnQgYmFjaykgKGxpc3QtPnN0cmluZyAoYXBwZW5kIGJhY2sgZnJvbnQpKSkpKQoKKGRlZmluZSAocm90LXBhbD8gc3RyKQogIChsZXQgbG9vcCAoKG4gKHN0cmluZy1sZW5ndGggc3RyKSkgKHN0ciBzdHIpKQogICAgKGlmICh6ZXJvPyBuKSAjZgogICAgICAoaWYgKHN0cmluZz0/IHN0ciAoc3RyaW5nLXJldmVyc2Ugc3RyKSkgI3QKICAgICAgICAobG9vcCAoLSBuIDEpIChzdHJpbmctcm90YXRlIDEgc3RyKSkpKSkpCgooZGlzcGxheSAocm90LXBhbD8gImFiY2RlZGNiYSIpKSAobmV3bGluZSkKKGRpc3BsYXkgKHJvdC1wYWw/ICJkZWRjYmFhYmMiKSkgKG5ld2xpbmUpCihkaXNwbGF5IChyb3QtcGFsPyAiYWJjZGVmZ2hpIikpIChuZXdsaW5lKQ==