初golfからゆるーいネタ。
anarchy golf - happy new year
最初に書いた埋め込みを使わないコード
(setq i(read-line)) (format t "happy ~{~A~} new ~A year!" (mapcar (lambda (c) (case c (#\( #\)) (#\) #\() (#\b #\d) (t c))) (reverse(coerce i'list))) i)
折角なのでひっくり返す関数を丁寧に書いてみる。
(defun group (l) (if (null l) nil `((,(car l) ,(cadr l)) ,@(group (cddr l))))) (defmacro swap-char (c chars) (let ((pairs (group (coerce chars 'list)))) `(case ,c ,@pairs ,@(mapcar #'reverse pairs) (t ,c)))) (defun reverse2 (s) (coerce (mapcar (lambda (c) (swap-char c "`'()[]{}<>/\\dbpq")) (reverse (coerce s 'list))) 'string)) (let ((str "[asdf]-{pdbq} ('-'*) \\(^o^)/ ( 'A`)")) (format t "~A~%~%~A" (reverse str) (reverse2 str)))
groupは手抜き。
結果↓
)`A' ( /)^o^(\ )*'-'( }qbdp{-]fdsa[ ('A` ) \(^o^)/ (*`-`) {pdbq}-[fbsa]