Make a cat program, with a catch. The program must refuse under all circumstances to output "Hello World", instead outputting "Goodbye World", with matching spacing (but matching casing is not required).
"Hello World" must never appear as a substring of the output, regardless of casing, not even if the two words are (or are not) separated by newlines, spaces, tabs, or even multiple executions of the program.
These are all forbidden:
I want to wish you hello world
HeLlOwOrLd and all who inhabit it
I said hello
Instead, the output should read:
I want to wish you goodbye world
Goodbyeworld and all who inhabit it
I said goodbye
However, other characters that separate hello and world will cause the string to not be matched. These should be repeated verbatim:
hello happy world
If the program is run twice in sequence (for example, in a batch script), first against the string "hello" and then against the string "world", the output should be:
But if it is run against "hello" and then "friends", the output should be:
You can choose whether to abstain from printing hello until the next run (this means if that command never comes, it will never print, which is acceptable), or to change it retroactively, if possible. The program does not have to take into account the possibility of other programs being run between runs.
Here's a quick .sh I put together to test it (I named my binary goodbye):
echo hello world | ./goodbye
echo hello friends | ./goodbye
echo HeLlO wOrLd | ./goodbye
(echo hello; echo world) | ./goodbye
(echo hello; echo friends) | ./goodbye
echo helloworld | ./goodbye
echo "hello world" | ./goodbye
echo I say hello | ./goodbye
echo world | ./goodbye
echo hello | ./goodbye
echo friends of mine | ./goodbye
echo hello happy world | ./goodbye
echo hello2theWORLD | ./goodbye
This is code golf, so lowest byte count (per language) wins!