Description
There are an infinite number of ASCII strings. Write a program that will output every possible ASCII string exactly once.
The ordering does not matter, but you must be able to show that for any possible ASCII string s
, there exists an integer n
such that s
is the n
th string in the output. This restriction means that you cannot output 'a', 'aa', 'aaa', 'aaaa', ...
, since the string 'b'
will never occur.
The simplest ordering (shown here in terms of letters so I don't have to type unprintables) is:
'', 'a', 'b', 'c', ..., 'z', 'aa', 'ab', ..., 'az', 'ba', 'bb', 'bc', ... 'zz', 'aaa', ...
Essentially, this is counting in base 128 using ASCII characters.
Rules
- The empty string is required
- You may use any valid ordering you want
- All possible strings using ASCII must be known to occur in the output
- The ordering does not need to be deterministic, as long as you can show that every string will be guaranteed to occur. Be careful if you use randomness for each string, because at some point your bits of entropy may not be enough to guarantee a unique string.
Example orderings
Note that, again, I'm showing only letters for the examples, but you have to include all ASCII characters.
Valid:
'', 'a', 'b', 'c', ..., 'z', 'aa', 'ab', ..., 'az', 'ba', 'bb', 'bc', ... 'zz', 'aaa', ...
'', 'z', 'y', 'x', ..., 'a', 'zz', 'zy', ...
'', 'a', 'b', 'ab', 'ba', 'c', 'ac', 'ca', 'bc', 'cb', ...
Invalid:
'', 'a', 'aa', 'aaa', 'aaaa', 'aaaaa', ...
'', 'a', 'ab', 'abc', 'abcd', ..., 'abc...xyza', ...