OP's code is valid, but it's nothing more than a simple exercise in source code obfucation. Code should be as readable as possible, unless there's reason not to do that. Here's a rewritten version of his code, that does roughly the same in a more idiomatic manner:
#include <stdio.h>
int main(int argc,char *argv[])
{
char *s1="B+p:ubYBGG0,|M3B=1*0N",
*s2="it's touring complete";
int i, len = strlen(s1);
for (i = 0; i < len ; i++)
putchar((s1[i]-10)^s2[i]);
return 0;
}
Surprisingly, for some things, the C version is easier to read than the Lisp one:
(loop
for c1 across "B+p:ubYBGG0,|M3B=1*0N"
for c2 across "it's touring complete"
do (princ (code-char (logxor (- (char-code c1) 10) (char-code c2)))))
;;; or a more lispy
(defun dec-str (s1 s2)
(map 'string #'(lambda (c1 c2)
(code-char (logxor (- (char-code c1) 10)
(char-code c2))))
s1 s2))
Bringing /prog/ back to its people
All work and no play makes Jack a dull boy
All work and no play makes Jack a dull boy
All work and no play makes Jack a dull boy
All work and no play makes Jack a dull boy
All work and no play makes Jack a dull boy
All work and no play makes Jack a dull boy
All work and no play makes Jack a dull boy
All work and no play makes Jack a dull boy
All work and no play makes Jack a dull boy
All work and no play makes Jack a dull boy
All work and no play makes Jack a dull boy
All work and no play makes Jack a dull boy
All work and no play makes Jack a dull boy
All work and no play makes Jack a dull boy
All work and no play makes Jack a dull boy
All work and no play makes Jack a dull boy
All work and no play makes Jack a dull boy
All work and no play makes Jack a dull boy
All work and no play makes Jack a dull boy
All work and no play makes Jack a dull boy
All work and no play makes Jack a dull boy
All work and no play makes Jack a dull boy
All work and no play makes Jack a dull boy
All work and no play makes Jack a dull boy