We really only need a couple of things to make anything a language:
- A language must be able to input and then execute source code. Input means something like "load a file" or "paste in some text". It does not mean "click in these 20 spots". We are inputting bytes.
- We score the entire source code by measuring its bytes.
What we don't do, is define input/output. We like to be very flexible in this manner, and trying to nail down input/output for a language often doesn't work well.
The general rule of thumb is that we try to represent the desired input/output as closely as we can in the given language. For example, if you needed to input 2 integers, I'd personally simply represent each integer by a set of 8 locations (e.g. 8-bit integers, with a piece of sand representing a bit). Output is similar. We simply require that you are consistent (within a challengepost) (you can't have half of your bits be represented by "water" and another half as "oil")
If, after submissions have been posted, it turns out that input/output representation isn't commonly agreed upon, then we can hash out the details on Meta (and the discussion will be more productive, as we will have concrete examples)