What is a graceful algorithm to generate this number sequence
I think the below algorithm should be workable. It doubles/triples/quadruples/quintuples/... what we've generated so far to find disallowed sequences. Then it generates all possible sequences by attaching a 0 and a 1 to every sequence found in the previous iteration and removes the disallowed sequences. Then it checks for rotations and removes those too.

First round, generate 1 and 0.

Second round, double these to 11 and 00. These are the strings that are not allowed in this round.

Find possible permutations. (1->{10,11} 0->{00,01}). Remove the disallowed ones we just figured out.

We now have 1, 0, 10, and 01. Find rotations: 10 and 01 are rotations, so remove them but leave one. Which? Let's say 01, as in the example.

Third round, we have 1, 0, 10. We're aiming for a three-digit sequence, and doubling the two-digit sequences would get us a four-digit sequence. Tripling 1 and 0 gets us 111 and 000, which we disallow.

Find possible permutations. (10->{100,101}). Nothing to remove.

We now have 1, 0, 10, 100, 101. Find rotations: no rotations.

Fourth round, we have 1, 0, 10, 100, 101. Aiming for four digits. We do doubling and quadrupling to get the disallowed four-digits sequences: 1111, 0000, 1010.

Find possible permutations. (100->{1000, 1001}, 101->{1010, 1011}). Remove disallowed 1010.

We have 1, 0, 10, 100, 101, 1000, 1001, 1011. Find rotations: no rotations.

One note about when you have to decide which rotations to keep: In the above example we had to decide between "10" and "01". Let's see how these sequences would develop:

10->100, 101

01->010, 011

100->1000, 1001

101->1010, _1011_

011->0110, _0111_

010->0100, 0101

Iterating "rotated sequences" produces rotations of what the other "rotated sequence" would have produced, so I believe it doesn't matter which rotation you keep.



Update: This seems to have something to do with Lyndon words (https://en.wikipedia.org/wiki/Lyndon_word). As I couldn't find a decent list of binary Lyndon words on the internet, I used the Python code I found here: https://gist.github.com/dvberkel/1950267 to generate some more.

I've modified it a bit to make it easier to use (removed one import and changed main function to immediately start generating binary Lyndon words). I've also added a small Perl script to check whether your words are Lyndon words: https://gist.github.com/qiqitori/31175ab58d099ac4ff7573f34e7344d5

Call the Python script using e.g. python lyndon_generator.py | head -n 1010

Call the Perl script using e.g. perl lyndon.pl

Here's what the Perl script outputs:

Found rotation 1 of 1 (1) at index 1
Found rotation 01 of 2 (10) at index 2
Found rotation 001 of 4 (100) at index 3
Found rotation 011 of 5 (101) at index 4
Found rotation 0001 of 8 (1000) at index 5
Found rotation 0011 of 9 (1001) at index 6
Found rotation 0111 of 11 (1011) at index 7
Found rotation 00001 of 16 (10000) at index 8
Found rotation 00011 of 17 (10001) at index 9
Found rotation 00111 of 19 (10011) at index 11
Found rotation 01011 of 21 (10101) at index 12
Found rotation 01111 of 23 (10111) at index 13
Found rotation 000001 of 32 (100000) at index 14
Found rotation 000011 of 33 (100001) at index 15
Found rotation 000111 of 35 (100011) at index 17
Found rotation 001011 of 37 (100101) at index 18
Found rotation 001111 of 39 (100111) at index 20
Found rotation 000101 of 40 (101000) at index 16
Found rotation 010111 of 46 (101110) at index 21


As we can see, index 10 and 19 are missing, but I would bet that the next two numbers in your sequence would be equivalent to index 10 and 19.