I do think it would be hard to obfuscate in a way that wasn’t fairly easy to detect as obfuscation. Throw out anything that uses import, any variables with __ or a handful of builtin functions and you should be good. (There’s only a smallish list of builtins, I couldn’t confidently say which ones to blacklist right now but I do think someone could figure out a safe list without too much trouble.) In fact, I can’t offhand think of any reason a simple bot would use strings except docstrings, maybe throw out anything with those, too.
(Of course my “5% a CloneBot manages to act out” was wrong, so take that for what it’s worth.)
The iterated prisoner’s dilemma with shared source code tournament a few years ago had a lot of simulators, so I assume their rules were more friendly to simulators.
I know of two such—one (results—DMRB was mine) in Haskell where you could simulate but not see source, and an earlier one (results) in Scheme where you could see source.
I think in the Haskell one it would have been hard to figure out you were being simulated. I’m not sure about the scheme one.
I do think it would be hard to obfuscate in a way that wasn’t fairly easy to detect as obfuscation. Throw out anything that uses
import
, any variables with__
or a handful of builtin functions and you should be good. (There’s only a smallish list of builtins, I couldn’t confidently say which ones to blacklist right now but I do think someone could figure out a safe list without too much trouble.) In fact, I can’t offhand think of any reason a simple bot would use strings except docstrings, maybe throw out anything with those, too.(Of course my “5% a CloneBot manages to act out” was wrong, so take that for what it’s worth.)
I know of two such—one (results—DMRB was mine) in Haskell where you could simulate but not see source, and an earlier one (results) in Scheme where you could see source.
I think in the Haskell one it would have been hard to figure out you were being simulated. I’m not sure about the scheme one.