The reversible reverser
This reverses (
⌽, along the last axis) the input (
⍞), and is followed by a comment (
⍝ marks a line comment). Reversed, the program reverses (
⊖, along the first axis) the input, and is followed by a comment. Because the input is always going to be one dimensional, in this case
⊖ are functionally equivalent. It is perhaps even sneakier than the GolfScript solution, so here's a cleaner solution (no comments), which scores 9.
This first grabs an empty vector (
⍬), flattens it (monadic
,), and reverses it (
⊖, along the first axis). This still leaves an empty vector. Then it concatenates (dyadic
,) to the input (
⍞), leaving the input untouched. It then flattens (monadic
,) the already-flat input and reverses it (
⌽, along the last axis). Then it concatenates (dyadic
,) another empty vector (
⍬) to the reversed input. This does nothing, and leaves the reversed input behind. Reversed, this program does the same thing, based again on the fact that
⊖ are functionally equivalent with one-dimesional arguments.
You really couldn't say I'm adding useless characters to break the palindrome (the two different reverse functions are different with two-or-more-dimensional input; I'm just taking advantage of the fact they act the same with one-dimensional input)
Unix shell - 8 + 25% = 10
Previous answer of
cat|tac didn't actually work,
tac reverses the order of lines, not the order of characters in a line.
main=niam niam=interact reverse esrever tcaretni=main
Technically not a palindrome, but, since function declaration order doesn't matter, once reversed you have exactly the same program.