読者です 読者をやめる 読者になる 読者になる

初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]