[Question]
  [
Isn't it annoying when you find a piece of code and you don't know what language it was written in? This challenge attempts to somewhat solve this.
# Challenge
You will have to write a program that when run in two different languages, will output the string: 
`This program wasn't written in <language program compiled/interpreted in>, it was built for <other language the program can be run in>!`
* In the output, language names should have official capitalization. eg: CJam, C++
* Neither program should take any input from the user.
* When run in both languages, output should be to stdout or equivalent.
* There should be no output to stderr in either program.
* You may use comments in either language.
* Two different versions of the same language count as different languages.
	+ If this is done, the program should output the major version number, and if running on two different minor versions, should report the minor version also.
	+ You should not use prebuilt version functions (this includes variables that have already been evaluated at runtime).
## Example output:
Perl and Ruby:
* Perl: `This program wasn't written in Perl, it was built for Ruby!`
* Ruby: `This program wasn't written in Ruby, it was built for Perl!`
Python and C:
* Python: `This program wasn't written in Python, it was built for C!`
* C: `This program wasn't written in C, it was built for Python!`
Python 2 and Python 3:
* Python 2: `This program wasn't written in Python 2, it was built for Python 3!`
* Python 3: `This program wasn't written in Python 3, it was built for Python 2!`
Python 2.4 and Python 2.7:
* Python 2.4: `This program wasn't written in Python 2.4, it was built for Python 2.7!`
* Python 2.7: `This program wasn't written in Python 2.7, it was built for Python 2.4!`
**This is code golf so the shortest code in bytes wins.**
  
[Answer]
# C89/C99, ~~171~~ ~~152~~ ~~136~~ ~~114~~ ~~111~~ ~~107~~ 105 bytes
Thanks at @Hurkyls, @Qwertiys, @jimmy23013 and @MD XF for your hints.
golfed version:
```
c;main(){c=-4.5//**/
-4.5;printf("This program wasn't written in C%d, it was built for C%d!",90-c,98+c);}
```
ungolfed version:
```
c;
main()
{
    c = -4.5//**/
    -4.5;
    printf("This program wasn't written in C%d, it was built for C%d!",90-c,98+c);
}
```
**Little description:**
C versions previous C99 just had the multiline comment like this:
```
/*foo*/
```
with C99 the single line comment was introduced. like this:
```
//foo
```
so if you compile a line like this:
```
c =-4.5//**/
-4.5;
```
the for the c99 compiler compiling-related code would be:
```
c = -4.5 -4.5;
```
while the for a c89 compiler relevant code would be:
(as the first `/` isn't part of a comment and therfor treat as operator)
```
c = -4.5 / -4.5;
```
[Answer]
# [Foo](http://esolangs.org/wiki/Foo)/CJam, 70 bytes
```
"This program wasn't written in ""Foo"", it was built for ""CJam"\@"!"
```
In Foo, as many have found out, it just prints everything in the double quotes, and ignores most other character or does something that doesn't affect the output in most cases. In short, `\@` does nothing and the strings are all printed as-is.
In CJam, `\` swaps the top two items, and `@` moves the 3rd item to the top, which arrange the strings into the right order. And after the program ends, everything left in the stack is automatically printed.
[Answer]
# JavaScript/Ruby, 170 bytes
**Might be 2.0 only, doesn't appear to work in at least 2.1.5... Edit: Updates as per advice from [@Jordan](https://codegolf.stackexchange.com/users/11261/jordan) hopefully it works in a few more versions now!**
```
a='1';c=console=console||eval('def c.log s;$><<s end;c');c.log("This program wasn't written in "+(d=['JavaScript','Ruby'])[b= ~(a=~/1/)]+', it was built for '+d[b+1]+'!')
```
Abuses the `~` operator in that Ruby will treat `=~` as a regex match returning the position of the first match in the string (`0`), but JavaScript will treat it as `=` `~/1/` which is `-1` (since `/1/` is converted to `NaN` for numeric operations, which has `0` value).
[Answer]
# Python 2/Python 3, 92
Uses the "standard" Python version check (integer vs. float division).
```
print("This program wasn't written in Python %d, it was built for Python %d!"%(3/2*2,4-3/2))
```
[Answer]
# [Fishing](https://esolangs.org/wiki/Fishing)/[><>](https://esolangs.org/wiki/Fish) ~~233~~ 217 bytes
```
v++C-CCCCCCCCCCCCCCCCCCCCCCCCCCCCCCC+CCCCCCC-CCCCCCCCCCCCCCCCCCC+CCCCCC
\   "This program wasn't written in ""><>"  ", it was built for Fishing!"
>r!`ol?!;32.                         Fishing                     ><>!`N
```
---
**Fishing** is a language based on a fisherman walking around catching fish. To make a program in this language who first have to define a dock on which he walks around. The dock only provides control flow to a program. The dock in this program is:
```
v++C-CCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCC+CCCCCCC-CCCCCCCCCCCCCCCCCCC+CCCCCC
```
Whenever the `C` command is found, the fisherman throws out his line to catch an instruction. The `+` and `-` instructions decrease and increase the length of his line respectively. `v` changes his throw direction to downwards. The fish that he catches in this program are:
```
`This program wasn't written in Fishing, it was built for ><>!`N
```
---
**><>** is a language based on a fish moving through the water. The `v` command starts the fish moving downwards, where it is then reflected to the right with the `\` command. Everything between quotes is pushed onto the stack. After the string is pushed onto the stack, the fish wraps around to the other side where it is reflected downwards by `\`. It then prints out the contents of the stack with:
```
>r!`ol?!;32.
```
[Answer]
# [23](http://web.archive.org/web/20060717035053/http://www.philipp-winterberg.de/software/23e.php)/Malbolge, 5688 bytes
```
                    bCBA@?>=<;:987
                                                                                        6543210/.-,+*)
                                                                                          ('&%$#"!~}|{zy
                                                                                               xwvutsrqponmlk
                                                                                                  jihgfedcba`_^]
                                                                                     \[ZYXWVUTSRQPO
                                                                                               NMLKJIHGFEDCBA
                                                                                    @?>=<;:9y76543
                                                                210/(L,l*)(!E}
                   |B"!~}|{zyxwvu
                                                                                                     tsrqponmlkjiha
                                                                                                  fed]#a`_^]?zZY
                                                                                         XWVUTSRQ3ONMLK
                   JIHGFEDCBA:^>=
                                                                                                       <;:98705.R21q/
                                                                                               .-,+*#G'&%${"!
                                                                                            x>|{zyxwYutm3k
                                                                                                        ponmlkjihg`&^c
                                                                                     ba`_^]\[ZYXWVO
                   sSRQPONMLEi,HG
                                                                                                      FEDCBA@?>=6Z:9
                                                                                    y76543210/.-,+
                                                                                                          *)('&%$#"y?w|u
                   ;sxwvutm3qSonm
                                                                                                       fkjiha'edcba`_
                                                                                            ^]\[ZYXWVUTSRQ
                   PONM/EiIHGFEDC
                               BA@?>7[;:987w5
                                      432+O/o-,%I)('
                                     &}$#z@~}|{zsxw
                   vutsrqponmlkji
                                                                                                 ha'&dFba`_^]\U
                                                                                            yYXWVUTMRQPONM
                   LKDhH*F?DCBA@?
                                                                                                 8\<;:98765432r
                                                                                        0/.-&J*)('&f$#
                                                                                                       "!~}|{zyxwvuts
                                                                                                       rqj0nmOkjihaf_
                                                                                            %cE[!_^]\[=SwW
                                                                                                     VU7SLpPONMLEJI
                                                                                                          HAeEDC%A@?>=<;
                   :9876543210/.-
                                                                                                       ,+$H('&}${A!xw
                          ={]yxwvutsrk1o
                                                                                                 nmOejib(fedcE"
                                                                                                      `_^]?[ZYRvVUT6
                                                                                     RKo2HMLKJIHAe
                                                                                                           EDCBA@?>=<;:9
                    87w5432+O/.-,
                                                                                                 +*)('&%e#"y?w
                                                                                     |{zs9wvun4rqp
                                                                                                      onmlNjib(fedc
                                                                                           ba`_^]\[ZYXWV
                                                                                                   8TMqKPONMLKDh
                                                                                                      +GFEDCB;_?>=<
                                                                                                    ;:9y7654321*N
                    .-,+*)('&f|{A
                                                                                                       !~}|{]yxwvo5s
                                                                                             rqpinmlkjihg`
                                                                                            &dcbD`_^]\[Tx
                                                                        ;WVUTMRQJnN0F
                                                 KDhH*FEDC<A@?
     >=<5Y92765.R?
```
Note that the program requires a trailing linefeed. No line contains trailing whitespace, so copy/paste should work just fine.
### Verification
To test the Malbolge code in [this online interpreter](http://www.matthias-ernst.eu/malbolge/debugger.html), paste it in the **Malbolge code** area and click `Load/Reset`, then `Execute`.
To test the 23 code in [this online interpreter](http://web.archive.org/web/20070213142054/http://www.philipp-winterberg.de/software/23inte.php), paste it in the **Source** area, press `Enter` to insert the trailing linefeed, type `23` in the **Console** area (to switch from the default **23.dezsy** notation to auto-detection) and click `Run Interpreter!`.
[Answer]
## Lua/C - 182 164 bytes
```
#if 0
print"This program wasn't written in Lua, it was built for C!"--[[
#endif
main(){printf("This program wasn't written in C, it was built for Lua!\n");}/*]]--*/
```
Takes advantage of the feature where Lua treats a hash mark on the first line as a comment to allow for Unix shebangs. Otherwise wraps the other language's comments in its own comments.
To shave bytes, I rely on implicit behavior that only emits warnings in GCC and Clang: implicit declaration of int for main and implicit definition of printf.
[Answer]
# JavaScript/Haskell, ~~158 bytes~~ 147 bytes
General idea: sneak each one's comment syntax into the other.
In one line:
```
u="This program wasn't written in ";v=", it was built for ";j="JavaScript";h="Haskell";{-console.log(u+j+v+h+"!")}//-}main=putStrLn$u++h++v++j++"!"
```
What this looks like to Haskell:
```
-- some variable definitions
u = "This program wasn't written in "
v = ", it was built for "
j = "JavaScript"
h = "Haskell"
-- a comment
{-console.log(u+j+v+h+"!")}//-}
-- the main method that does the dirty deed
main = putStrLn $ u ++ h ++ v ++ j ++ "!"
```
What this looks like to JavaScript:
```
/* variables can be declared without `var` */
u = "This program wasn't written in ";
v = ", it was built for ";
j = "JavaScript";
h = "Haskell";
/* hey look, an anonymous block! */
{ 
  /* we negate the `undefined` that comes out of console.log */
  -console.log(u+j+v+h+"!")
} 
/* there are two automatic semicolon insertions here:
   one before `}` and one before EOF. */
/* a one-line comment. */
//-}main=putStrLn$u++h++v++j++"!"
```
[Answer]
# Brainfuck/Foo, 769 bytes
```
-[--->+<]>-.[---->+++++<]>-.+.++++++++++.+[---->+<]>+++.[-->+++++++<]>.++.---.--------.+++++++++++.+++[->+++<]>++.++++++++++++.[->+++++<]>-.--[->++++<]>-.-[->+++<]>-.--[--->+<]>--.-----.[++>---<]>++.[->+++<]>-.[---->+<]>+++.--[->++++<]>-.-----.---------.+++++++++++..+++[->+++<]>.+++++++++.-[->+++++<]>-.-[--->++<]>-.+++++.-[->+++++<]>-.+[->++<]>.---[----->+<]>-.+++[->+++<]>++.++++++++.+++++.--------.-[--->+<]>--.+[->+++<]>+.++++++++.+++[----->++<]>.------------.-[--->++<]>-.+++++++++++.[---->+<]>+++.--[->++++<]>-.-[->+++<]>-.--[--->+<]>--.+[---->+<]>+++.[->+++<]>++.[--->+<]>-.------------.+++.++++++++.[---->+<]>+++.++[->+++<]>.+++++++++.+++.[-->+++++<]>+++.+++[->++<]>.+[--->+<]>++..[--->+<]>----."This program wasn't written in Foo, it was built for Brainfuck!"
```
An extremely intricate and complex answer... or not.
[Answer]
## C / Python, 238 chars
This doesn't print 100% exactly what's requested, but quite close.  
A reboot of [my valentine's day card](https://codegolf.stackexchange.com/a/20835/3544).
```
#define def main(){0?
#define print printf(
#define return 0)));}
#define pass 0);
def main():
    print "This program wasn't written in ",
    pass
    print "Python",
    print ", it was built for ",
    print "C",
    return
main();
```
[Answer]
## C/C++, 136
```
#include<stdio.h>
int main(){
char*a="++",z=sizeof'c'/2;
printf("This program wasn't written in C%s, it was built for C%s!\n",a+z,a+2-z);
}
```
Newlines added for formatting. Try it in [C](http://ideone.com/XteSsr) or [C++](http://ideone.com/Sg1RQz).
[Answer]
# [Befunge](https://esolangs.org/wiki/Befunge)/[><>](https://esolangs.org/wiki/Fish), ~~141~~ ~~138~~ ~~134~~ ~~133~~ 130 bytes
*[3 bytes saved](https://codegolf.stackexchange.com/questions/55960/im-not-the-language-youre-looking-for/55998#comment136152_55998) thanks to [@Cole](https://codegolf.stackexchange.com/users/42833/cole).*
To be exact, I'm using Befunge-98.
```
\"!><> rof tliub saw ti ,egnufeB"   >" rof nettirw t'nsaw margorp sih"'T>:#,_@'~~~~~~
>l?v"!egnufeB rof tliub saw ti ,><>"^
?!;>ol
```
Using the facts that:
* `\` is a mirror in ><> and swap in Befunge
* `'string'` is a string in ><> and `'c` is a char in Befunge
[Answer]
# PHP/MySQL, 147 bytes
```
-- $argc;die("This program wasn't written in PHP, it was built for MySQL!");
SELECT("This program wasn't written in MySQL, it was built for PHP!");
```
[Answer]
## Python 3/[><>](http://esolangs.org/wiki/Fish), ~~177~~ ~~173~~ ~~172~~ 167 Bytes
Thanks to @mathmandan for shaving 5 bytes off!
Well this was an experience, and a trying one, too. Any golf suggestions are welcome, since this is pretty long. I tried my best to reuse text, but it was quite difficult.
Technically, it would be Python 3 that this program should output (and I could change that if I didn't meet the specs -- but in the example Python/C output `Python` was listed).
```
aa=" ni nettirw t'nsaw margorp sihT\"\""
v="><>!"                 #v   "><>"r~/
a=", it was built for "+v#\a
print(aa[-3::-1]+"Pytho" +"n"+a)
#  .4b;!?lor"!nohtyP r"~/
```
Try it on an [online ><> interpreter](http://fishlanguage.com/playground) and a [Python 3 interpreter](http://ideone.com/fXBhXp) (the ><> interpreter requires you to input the code manually)
Returns
```
This program wasn't written in ><>, it was built for Python!
```
in ><> and
```
This program wasn't written in Python, it was built for ><>!
```
in Python. 
**Explanation (Python)**
For the Python side of things, it's pretty simple. Here's the code that we care about (basically the code without comments, which are denoted by a `#` in Python). Note that in Python `\` is an escape character when used in strings, so `\"` evaluates to `"` in the string. 
```
aa=" ni nettirw t'nsaw margorp sihT\"\""
v="><>!"
a=", it was built for "+v
print(aa[-3::-1]+"Pytho" +"n"+a)
```
What we care most about here is the operations performed on the variable `aa`:
```
aa[-3::-1]: reverses the string and chops off the quotation marks (thanks to @mathmandan)
```
The print statement thus evaluates to
```
"This program wasn't written in " + "Pytho" + "n" + ", it was built for ><>!"
```
**Explanation (><>)**
Now we get to the more difficult part. Once again, here's the code with the unnecessary bits removed.
```
aa=" ni nettirw t'nsaw margorp sihT\"\
                          v   "><>"r~/
a=", it was built for "+v \a
   .4b;!?lor"!nohtyP r"~/
```
**Line 1:** 
```
aa=" ni nettirw t'nsaw margorp sihT\"\
aa=         pushes 1 onto the stack (evaluates 10==10, basically)
" ni ... \" pushes the first part plus a \ onto the stack.
\           deflects the pointer downwards
```
The stack right now (if printed): `\This program wasn't written in`
**Line 2:**
Note that line 2 begins at the `/` because of the position of the pointer from line 1, and moves right to left.
```
v   "><>"r~/
/     deflects the pointer leftwards
~r    pops the / off the stack and then reverses it
"><>" pushes ><> onto the stack
v     deflects the pointer downwards
```
The stack right now: `><> ni nettirw t'nsaw margorp sihT`
**Line 3:**
Like the previous line, this one begins at the `\`, which is where line 2 sends the pointer. Note that because the pointer wraps around the line when it reaches the first `a` I'll be writing my explanation in order of where the pointer goes (and thus what is executed)
```
a=", it was built for "+v \a
\aa=       deflect and push 1 onto the stack
", i ... " push the string onto the stack
+v         sum the last two values pushed and deflect
```
The stack right now(`x` is the character formed by the addition of "r" and a space. -- it is not the actual character, just a placeholder from me): 
`xof tliub saw ti ,><> ni nettirw t'nsaw margorp sihT` 
**Line 4:**
The pointer simply continues downwards so this line warrants no further explanation.
**Line 5:**
Starting at `/` and going leftwards.
```
.4b;!?lor"!nohtyP r"~/
~"r Python!" pops x off and adds back r and a space
r            reverses the stack
o            pops and prints a character
l?!;         pushes the length of the stack and stops if it's 0
b4.          pushes 11 then 4 then moves to that location (where o is)
```
The stack right now (the output reversed):
`!nohtyP rof tliub saw ti ,><> ni nettirw t'nsaw margorp sihT`
And that should be it for the explanation. Let me know if there is any inconsistency between the explanation/code or if I did anything wrong; I golfed down my code some more while I was in the middle of writing the explanation so I might have mixed bits of old and new code up.
[Answer]
# Batch .BAT File / Batch .CMD File, ~~194~~ 185 Bytes
```
@ECHO OFF
SET a=BAT
SET b=CMD
CALL :F&&GOTO :C||GOTO :O
:C
SET a=CMD
SET b=BAT
:O
ECHO This program wasn't written for %a% File, it was built for %b% File!
GOTO :EOF
:F
md;2>nul
SET v=1
```
Edit: Saved 9 bytes, and corrected a missing `!` thanks to [DLosc](https://codegolf.stackexchange.com/users/16766/dlosc)
Yeah, there's differences between BAT and CMD files. [Reference.](https://groups.google.com/forum/#!msg/microsoft.public.win2000.cmdprompt.admin/XHeUq8oe2wk/LIEViGNmkK0J) Essentially, CMD sets the `ERRORLEVEL` on a `SET` command, while BAT doesn't, meaning that here the `ERRORLEVEL` set by the malformed `md` command gets cleared by the `SET v=1` in one version but not the other. This script is based on the example provided by "Ritchie" in that newsgroup thread.
Note that the shortened script above presumes `ENABLEEXTENSIONS` to be set `ON` (it is by default on every platform). The expanded script below explicitly sets it, to guarantee correct functionality. Without that, the `SET` command for CMD doesn't allow all extensions, and (on some systems, maybe) might not set the `ERRORLEVEL` appropriately.
### Expanded and remarked
```
@ECHO OFF
setlocal ENABLEEXTENSIONS
REM Call the :FUNC subroutine and branch based on the resulting errorlevel
CALL :FUNC&&GOTO :CMD||GOTO :BAT
REM Just in case. If we reach this, though, hoo-boy ...
GOTO :EOF
:BAT
REM We're a BAT file, so set variables and goto output
SET a=BAT
SET b=CMD
GOTO :OUTPUT
:CMD
REM We're a CMD file, so set variables and goto output
SET a=CMD
SET b=BAT
GOTO :OUTPUT
:OUTPUT
REM Print out the result, then go to end of file
ECHO This program wasn't written for %a% File, it was built for %b% File!
GOTO :EOF
:FUNC
REM Simple subroutine to set the ERRORLEVEL appropriately
md;2>nul
REM Right now, ERRORLEVEL on both CMD and BAT is 1
SET v=1
REM Right now, ERRORLEVEL on CMD is 0, but BAT is still 1
```
[Answer]
# Javascript / C, ~~148~~ ~~146~~ 143 chars
```
//\
alert/*
main(){puts/**/("This program wasn't written in "//\
+"Javascript"+/*
"C"/**/", it was built for "//\
+"C!")/*
"Javascript!");}/**/
```
C: ~~<http://codepad.org/u8UimGLc>~~ ~~<http://codepad.org/Y80M5jpc>~~ <http://codepad.org/m4DB2Ndd>  
Javascript: just copy code to browser console
[Answer]
# CJam/GolfScript, 81 78 bytes
```
"This program wasn't written in "o"GolfScript"", it was built for ""CJam"oo"!"
```
Original 81 byte version:
```
"This program wasn't written in "["CJam"", it was built for ""GolfScript"]-1a%"!"
```
[Answer]
## BF/SPL, 5342 bytes
I'm pretty sure this is the first Shakespeare Programming Language polyglot on this site.
Probably not going to win any prizes. Works by sneaking BF code into act/scene/program titles. The SPL code uses exclamation points instead of periods except for a few cases. The programs aren't supposed to take input, so the commas in the character declarations are "commented out" by zeroing cells and putting square brackets around the commas. The same procedure applies when hiding the square brackets around the enter/exeunt statements.
```
[-][.
Ford,.
Page,.
Act I:]+++++++++[>+++++++++<-]>+++.
Scene I:>[.
[Enter Ford and Page]
Ford:
You is sum of bad bad bad bad bad bad day and sum of bad bad bad bad day and bad bad day!Speak thy mind!
Scene II:]<<++[>++++++++++<-]>.
Page:
You is sum of bad bad bad bad bad bad day and sum of bad bad bad bad bad day and bad bad bad day!Speak thy mind!
Scene III:+.
Page:
You is sum of thyself and day!Speak thy mind!
Scene IV:++++++++++.
Page:
You is sum of thyself and sum of bad bad bad day and bad day!Speak thy mind!
Scene V:>++++[>++++++++<-]>.
Ford:
You is fat fat fat fat fat cat!Speak thy mind!
Scene VI:[-<+>]<<---.
Page:
You is sum of thyself and sum of big pig and pig!Speak thy mind!
Scene VII:++.
Page:
You is sum of thyself and fat cat!Speak thy mind!
Scene VIII:---.
Page:
You is sum of thyself and sum of big pig and pig!Speak thy mind!
Scene IX:--------.
Page:
You is sum of thyself and big big big pig!Speak thy mind!
Scene X:+++++++++++.
Page:
You is sum of thyself and sum of fat fat fat cat and sum of fat cat and cat!Speak thy mind!
Scene XI:<++++[->----<]>-.
Page:
You is sum of thyself and sum of big big big big pig and pig!Speak thy mind!
Scene XII:++++++++++++.
Page:
You is sum of thyself and sum of fat fat fat fat cat and big big pig!Speak thy mind!
Scene XIII:>.
Ford:
Speak thy mind!
Scene XIV:<++++++++++.
Page:
You is sum of thyself and sum of fat fat fat cat and fat cat!Speak thy mind!
Scene XV:<++++[->-----<]>--.
Page:
You is sum of thyself and sum of big big big big big pig and sum of fat fat fat cat and fat cat!Speak thy mind!
Scene XVI:<++++[>++++<-]>++.
Page:
You is sum of thyself and sum of fat fat fat fat cat and fat cat!Speak thy mind!
Scene XVII:-----.
Page:
You is sum of thyself and sum of big big pig and pig!Speak thy mind!
Scene XVIII:>+++++++.
Ford:
You is sum of thyself and sum of fat fat fat cat and pig!Speak thy mind!
Scene XIX:<++++++.
Page:
You is sum of thyself and sum of fat fat cat and fat cat!Speak thy mind!
Scene XX:>-------.
Ford:
You is sum of thyself and sum of big big big pig and cat!Speak thy mind!
Scene XXI:<+++.
Page:
You is sum of thyself and sum of fat cat and cat!Speak thy mind!
Scene XXII:-----.
Page:
You is sum of thyself and sum of big big pig and pig!Speak thy mind!
Scene XXIII:---------.
Page:
You is sum of thyself and sum of big big big pig and pig!Speak thy mind!
Scene XXIV:+++++++++++.
Page:
You is sum of thyself and sum of cat and sum of fat cat and fat fat fat cat.Speak thy mind!Speak thy mind!
Scene XXV:<+++[>-----<-]>.
Page:
You is sum of thyself and sum of big big big big pig and cat!Speak thy mind!
Scene XXVI:+++++++++.
Page:
You is sum of thyself and sum of fat fat fat cat and cat!Speak thy mind!
Scene XXVII:>.
Ford:
Speak thy mind!
Scene XXVIII:<-----.
Page:
You is sum of thyself and sum of big big pig and pig!Speak thy mind!
Scene XXIX:+++++.
Page:
You is sum of thyself and sum of fat fat cat and cat!Speak thy mind!
Scene XXX:>.
Ford:
Speak thy mind!
Scene XXXI:[->++<]>++.
Page:
You is sum of thyself and sum of big big big big big pig and sum of fat fat cat and cat!Speak thy mind!You is sum of thyself and sum of big pig and pig!Speak thy mind!
Scene XXXII:++++.
Page:
You is sum of thyself and big red hog!Speak thy mind!
Scene XXXIII:<+++++[>-----<-]>-.
Page:
You is sum of thyself and big big big big big pig!Speak thy mind!
Scene XXXIV:[-<+>]<------------.
Ford:
Speak thy mind!
Scene XXXV:<-----.
Page:
You is sum of thyself and sum of fat fat fat fat fat fat cat and sum of big pig and pig!Speak thy mind!
Scene XXXVI:+++++++++++.
Page:
You is sum of thyself and sum of fat fat fat cat and sum of fat cat and cat!Speak thy mind!
Scene XXXVII:>.
Ford:
Speak thy mind!
Scene XXXVIII:<+++.
Page:
You is sum of thyself and sum of fat cat and cat!Speak thy mind!
Scene XXXIX:<++++[->-----<]>--.
Page:
You is sum of thyself and sum of big big big big big pig and sum of fat fat fat cat and fat cat!Speak thy mind!
Scene XL:<++++[>++++<-]>++.
Page:
You is sum of thyself and sum of fat fat fat fat cat and fat cat!Speak thy mind!
Scene XLI:>.
Ford:
Speak thy mind!
Scene XLII:<<++++[>----<-]>-.
Page:
You is sum of thyself and sum of big big big big pig and pig!Speak thy mind!
Scene XLIII:<+++++[>++++<-]>-.
Page:
You is sum of thyself and sum of fat fat fat fat cat and sum of fat cat and cat!Speak thy mind!
Scene XLIV:------------.
Page:
You is sum of thyself and sum of big big big big pig and fat fat cat!Speak thy mind!
Scene XLV:+++.
Page:
You is sum of thyself and sum of fat cat and cat!Speak thy mind!
Scene XLVI:++++++++.
Page:
You is sum of thyself and fat fat fat cat!Speak thy mind!
Scene XLVII:>.
Ford:
Speak thy mind!
Scene XLVIII:<--------------.
Page:
You is sum of thyself and sum of big big big big pig and fat cat!Speak thy mind!
Scene XLIX:+++++++++.
Page:
You is sum of thyself and sum of fat fat fat cat and cat!Speak thy mind!
Scene L:+++.
Page:
You is sum of thyself and sum of fat cat and cat!Speak thy mind!
Scene LI:>.
Ford:
Speak thy mind!
Scene LII:>+++++++[<+++++++>-]<++.
Page:
You is sum of thyself and sum of big big big big big pig and big big big big pig!Speak thy mind!
Scene LIII:---.
Page:
You is sum of thyself and fat fat cat!Speak thy mind!
Scene LIV:----.
Ford:
You is sum of thyself and cat!Speak thy mind!
Scene LV:>+++++++[<------>-]<-.
Ford:
You is cat!
Scene LVI:>[.
[Exeunt]
```
Test out BF at <https://repl.it/E8Hh/23>.
SPL code was tested at the compiler found here: <https://github.com/drsam94/Spl/>.
[Answer]
# PHP/Perl, ~~98~~ 96 bytes
```
$a="HP";$b="erl";
//;$a=$b;$b=HP;
print"This code wasn't written in P$a, it was built for P$b!";
```
Dunno if this is cheating or not, since as far as I can tell the only way to run PHP without an opening `<?` tag is something like `php -r $(cat codefile.php)`. But assuming that's legal... `//` is a PHP comment, but in Perl it's a regex (which, in a statement by itself, doesn't do anything). The rest should be pretty self-explanatory.
*Edit:* Now using a bareword in the Perl-only part. I wanted to use those in the first place for both languages, but PHP displays a warning when you do that, contrary to "There should be no output to stderr."
[Answer]
# Ruby/Python, 105 chars
```
a=["Ruby","Python"];a.sort();print("This program wasn't written in "+a[0]+", it was built for "+a[1]+"!")
```
[Answer]
# Python 2.7.9/Python 2.7.10, 127 bytes
We've had a couple posts that used minor versions, but none that have gone to the next level down...
```
import types
n=len(dir(types))
print"This program wasn't written in Python 2.7.%d, it was made for Python 2.7.%d!"%(n%33,-n%52)
```
Try it on [Ideone](http://ideone.com/zfwg9l) (Python 2.7.10) and [repl.it](https://repl.it/BHAh) (technically Python 2.7.2, but should give the same result as 2.7.9).
Python 2.7.10, according to the [changelog](https://hg.python.org/cpython/raw-file/15c95b7d81dc/Misc/NEWS):
> 
> Added an `__all__` to the `types` module.
> 
> 
> 
This pushed `len(dir(types))` from 42 to 43, giving a numerical difference we can exploit to generate the desired output.
[Answer]
# **JavaScript 1.8/JavaScript 1.7, 89 bytes**
```
a=![].reduce;`This program wasn't written in JS 1.${8-a}, it was built for JS 1.${7+a}!`
```
Because [Array.prototype.reduce](https://developer.mozilla.org/it/docs/Web/JavaScript/New_in_JavaScript/1.8) is new in 1.8
**EDIT:**
Golfed out 7 bytes by directly initializing `a` instead of using `reverse()`
**EDIT:**
[`JavaScript` can be written as `JS`](https://developer.mozilla.org/en-US/docs/Web/JavaScript), saving 8 bytes
**EDIT:**
Thanks Hedi for pointing out that I can save 3 more bytes if I don't use the variable `b` any more
**EDIT:** Golfed out 6 bytes by computing `7+a` and `8-a`, where `a=1` if reduce is defined (JS 1.8) and `a=0` if it is not defined (JS 1.7)
**EDIT:** Hedi golfed out 6 more bytes suggesting the use of template string
**EDIT:** ETHproductions golfed out 2 bytes suggesting `a=!![].reduce;` instead of `a=[].reduce?1:0;`
**EDIT:** no1xsyzy golfed out one more byte suggesting to revers the boolean check
[Answer]
# SWI-Prolog 6/SWI-Prolog 7, 156 bytes
```
P='SWI-Prolog ',A=6,B=7,(is_list(""),N=A,M=B;N=B,M=A),atomic_list_concat(['This program wasn\'t written in ',P,N,', it was built for ',P,M,'!'],W),write(W).
```
Uses the fact that double-quotes `""` are string codes (i.e. list of character codes) in SWI-Prolog versions older than 7, and are a proper String type in version 7. `is_list("")` will thus be false in version 7 and true in earlier versions.
[Answer]
# Ruby 1.8/Ruby 1.9, 87
```
puts"This program wasn't written in Ruby 1.#{?9%49}, it was built for Ruby 1.#{?8%47}!"
```
In Ruby 1.8, `?9` is the ASCII value of "9", which is 8 modulo 49. In Ruby 1.9, it's the string "9", and `%49` is a formatting operation that does nothing since "9" doesn't have any format strings in it.
[Answer]
# sed / [Hexagony](https://github.com/m-ender/hexagony) 251 Bytes
```
/$/cThis program wasn't written in sed, it was built for Hexagony!
#...>32;p;r;o;g;r;\+/;a;w;23+;m;a<.;.>s;n;+39;t;+32\s/;n;e;;t;i;r;w;<. |.>+32;i;n;+32;H;e\ ;/4+;y;n;o;g;a;x;< i>4;+32;i;t;+32;\;/u;b;23+;s;a;w<h>;i;l;t;+32;f\;/;s;23+;r;o;< T>e;d;+33;@
```
sed: [Try it Online!](http://sed.tryitonline.net/#code=LyQvY1RoaXMgcHJvZ3JhbSB3YXNuJ3Qgd3JpdHRlbiBpbiBzZWQsIGl0IHdhcyBidWlsdCBmb3IgSGV4YWdvbnkhCiMuLi4-MzI7cDtyO287ZztyO1wrLzthO3c7MjMrO207YTwuOy4-cztuOyszOTt0OyszMlxzLztuO2U7O3Q7aTtyO3c7PC4gfC4-KzMyO2k7bjsrMzI7SDtlXCA7LzQrO3k7bjtvO2c7YTt4OzwgaT40OyszMjtpO3Q7KzMyO1w7L3U7YjsyMys7czthO3c8aD47aTtsO3Q7KzMyO2ZcOy87czsyMys7cjtvOzwgVD5lO2Q7KzMzO0A&input=&debug=on)  
Hexagony: [Try it Online!](http://hexagony.tryitonline.net/#code=LyQvY1RoaXMgcHJvZ3JhbSB3YXNuJ3Qgd3JpdHRlbiBpbiBzZWQsIGl0IHdhcyBidWlsdCBmb3IgSGV4YWdvbnkhCiMuLi4-MzI7cDtyO287ZztyO1wrLzthO3c7MjMrO207YTwuOy4-cztuOyszOTt0OyszMlxzLztuO2U7O3Q7aTtyO3c7PC4gfC4-KzMyO2k7bjsrMzI7SDtlXCA7LzQrO3k7bjtvO2c7YTt4OzwgaT40OyszMjtpO3Q7KzMyO1w7L3U7YjsyMys7czthO3c8aD47aTtsO3Q7KzMyO2ZcOy87czsyMys7cjtvOzwgVD5lO2Q7KzMzO0A&input=&debug=on)
---
In sed, it prints the correct string if it matches the empty string at the end (always). The second line is a comment. This does require a string on STDIN, but it can be empty ([allowed based on this consensus](http://meta.codegolf.stackexchange.com/a/5477/57100)).
**Example:**
```
echo '' | sed -f whatLanguage.sed
```
---
In Hexagony, the first `/` redirects to the bottom left, it follows the left side up to where the sed part starts, then just wraps left to right, down a line, right to left, down a line, and so on. The expanded hex looks like this:
```
         / $ / c T h i s p r 
        o g r a m w a s n ' t 
       w r i t t e n i n s e d 
      , i t w a s b u i l t f o 
     r H e x a g o n y ! # . . . 
    > 3 2 ; p ; r ; o ; g ; r ; \
   + / ; a ; w ; 2 3 + ; m ; a < .
  ; . > s ; n ; + 3 9 ; t ; + 3 2 \
 s / ; n ; e ; ; t ; i ; r ; w ; < . 
| . > + 3 2 ; i ; n ; + 3 2 ; H ; e \ 
 ; / 4 + ; y ; n ; o ; g ; a ; x ; < 
  i > 4 ; + 3 2 ; i ; t ; + 3 2 ; \
   ; / u ; b ; 2 3 + ; s ; a ; w <
    h > ; i ; l ; t ; + 3 2 ; f \
     ; / ; s ; 2 3 + ; r ; o ; < 
      T > e ; d ; @ . . . . . .
       . . . . . . . . . . . .
        . . . . . . . . . . .
         . . . . . . . . . .
```
[Answer]
# [///](http://esolangs.org/wiki////) and [Retina](https://github.com/mbuettner/retina), 95 + 3 = 98 bytes
```
/
//
This program wasn't written in \/\/\/, it was built for Retina!
/?./....(.*)(R.*)!
$2$1///!
```
+3 bytes for the `-s` flag in Retina.
## Explanation for ///
The first instruction is
```
/
//
```
removes all newlines from the rest of the code, resulting in
```
This program wasn't written in \/\/\/, it was built for Retina!/?./....(.*)(R.*)!$2$1///!
```
Everything up to the `!` is just a literal and printed to STDOUT. The next instruction is
```
/?./....(.*)(R.*)!$2$1/
```
But the search string `?.` cannot be found, so nothing happens. Then the remaining code is `//!` which is an incomplete instruction so the program terminates, having printed the correct string.
## Explanation for Retina
```
/
//
```
This tells Retina to replace `/` with `//`. But the input is empty, so this doesn't match anything.
```
<empty>
This program wasn't written in \/\/\/, it was built for Retina!
```
This replaces the input with the string in the second line.
```
/?./....(.*)(R.*)!
$2$1///!
```
This matches the string `\/\/\/, it was built for Retina!` and replaces it with `Retina, it was built for ///!` to give the correct result.
[Answer]
# Python/QBasic, ~~160~~ 142 bytes
Tested with [Python 3](https://tio.run/##HcqxCsJAEATQ/r5iXIsonoVYhhQGFWwkxvzAnqhZ0MtxWQl@/WlSDMzwJny17fw2pc0c@8Px2tTYrUvDKECXknu5kXHjqKYjmSzL2brCWc6r@nRuihDFq5k6FtS00iPE7hn5jYF7nymGKKp3D/EgrMD/kIXo6HAfeSkeXZzMjTajZUo/) and [QBasic 1.1](https://archive.org/details/msdos_qbasic_megapack). Won't work in Python 2 without adding `from __future__ import print_function` to line 4.
```
1# DEFSTR A-B
a = "QBasic"
b = "Python"
'';a,b=b,a;PRINT=print
PRINT ("This program wasn't written in " + a + ", it was built for " + b + "!")
```
* In Python, `1#` is the expression `1` (no-op) followed by a comment. In QBasic, it's a line number (with the type suffix marking it as a `DOUBLE`). The `DEFSTR` statement tells QBasic that all variables whose names start with `A` or `B` (case-insensitive) are string variables. That way, we can call our variables `a` and `b` instead of `a$` and `b$` (which wouldn't work in Python).
* In QBasic, `'` begins a comment. In Python, `''` is the empty string (no-op). Then we swap the language names and define an alias for the `print` function (since QBasic keywords are auto-formatted to uppercase).
* The parentheses on the final line aren't necessary in QBasic, but don't hurt anything either.
If I'm allowed to turn off the autoformatter (which is an option in [QB64](http://qb64.net), though not in the original QBasic), I can get it down to **114 bytes** using [Python 2](https://tio.run/##Hcq7DsIwDEDRPV9hzJAh6QArykAFzDz6Aw4CagmSyHFV8fXhsd5zy1vHnNatrZa7/eEynGHb9YYCnnqqfEUTAx7/DxprN@RjiJ5MEU6Kw8gViuSH0AtmqskqzMKqtwScAB059MD6M4gTPxXuWb49Olxgax8):
```
1#DEFSTR A-B
a="QBasic"
b="Python"
'';a,b=b,a
print"This program wasn't written in "+a+", it was built for "+b+"!"
```
[Answer]
# Perl/Ruby, 129 bytes
```
0&&eval('def sort a,b;[b,a] end');printf"This program wasn't written in %s, it was built for %s!",(@a=sort"Perl","Ruby")[0],@a[1]
```
No regular expression abuse in this one, just making the most of the fact that 0 is truthy in Ruby to `eval` a definition for `sort` (which actually `reverse`s) and `printf`ing. Ruby didn't like using the list for the arguments, so I had to do each one individually.
[Answer]
# Python / Retina, ~~133~~ ~~120~~ ~~119~~ ~~117~~ 115 bytes
Now that I know more about Retina and regexes, I've golfed it a bit more. It also actually works now.
```
#?.*
print"This program wasn't written in Python, it was built for Retina!"
#?.*t"
#?(\w+)(,.* )(.+)!"
#$3$2$1!
#
```
Python just prints the statement. Retina replaces anything with the Python print statement, then removes the `print` and any quotes. Then, I swap `Python` and `Retina` and remove the `#`.
[**Try in Python**](https://repl.it/CDNg/3) | [**Try in Retina**](http://retina.tryitonline.net/#code=Iz8uKgpwcmludCJUaGlzIHByb2dyYW0gd2Fzbid0IHdyaXR0ZW4gaW4gUHl0aG9uLCBpdCB3YXMgYnVpbHQgZm9yIFJldGluYSEiCiM_Lip0IgoKIz8oXHcrKSgsLiogKSguKykhIgojJDMkMiQxIQojCg&input=)
[Answer]
# JavaScript/CoffeeScript, ~~125~~ 124 bytes
```
console.log("This program wasn't written in",(a=['Coffee','Java'])[+(b=0=='0')]+"Script, it was built for",a[b^1]+"Script!")
```
In CoffeeScript, `a==b` is compiled down to `a===b`, which makes the intermediate condition false. I used a bit of magic to convert the boolean value to an integer.
Saved 1 byte thanks to @DomHastings!
## 125-byte version:
```
console.log("This program wasn't written in",(a=['Coffee','Java'])[(b=0=='0')+0]+"Script, it was built for",a[b^1]+"Script!")
```
]