Some challenges have restrictions that apply to the program's source code, rather than the program's behaviour. These challenges are generally tagged with restricted-source or source-layout or both.
I have a vague idea of what the difference is in obvious cases (e.g. "write a program without using e
" is restricted-source, "write a program that does something else when run backwards" is source-layout), but there are plenty of cases which are somewhere in between, and I'm not sure where the boundary is (or what sort of challenges would fit in both). At the time of writing, the tag wikis don't really help clarify where the "edges" of the tags are:
- The stated requirement of restricted-source (that there's a restriction on the source code) applies to all source-layout challenges (even the least restricted-sourcey of these, the challenges where the program has to output some property of its source code, are still restricted in the sense that the program's source has to be written in a way that makes the program's output correct – in practice these programs are often written by sculpting the source to the output rather than the other way round).
- The stated requirement of source-layout (that the physical arrangement of characters in the source code matters) applies to all restricted-source challenges: if the source layout didn't matter, there'd be no way to define a restriction on it.
I have a feeling that having two tags might be useful – there does seem to be some difference in nature between them – but at present, the usage is unclear, and the tags seem to be used inconsistently in practice (e.g. this challenge is not source-layout even though the number of the bytes in the source code has to match the program output).
(Also to note: radiation-hardening, and its opposite pristine-programming, are also source-dependent types of challenge, but tend to not be tagged with either restricted-source nor source-layout, although they are sometimes. This means that challenges with a pristine-programming-like requirement that doesn't match the tag exactly sometimes end up with no source-dependency tags at all. self-validating is a subset of restricted-source, and was originally intended to be used without it, but is sometimes used together with restricted-source or even source-layout in practice.)
So my questions are:
- What is the intended difference between these tags, if any?
- Should we (and how should we) clarify the tag wikis in order to make the the difference clearer?
- Is it possible to maintain a distinction, or should the tags be merged on the basis that it's too difficult to tag challenges with the correct tag, and thus they aren't useful for differentiating two different types of source-dependent challenge?