How many bit strings of length eight contain either three consecutive zeros or four consecutive ones?











up vote
1
down vote

favorite












I have tried this question and I am able to get the answer as 149 by the principle of inclusion and exclusion but a standard book solutions gave it as 147. I want to confirm whether I am wrong or right. I am expecting a detailed answer as my question and clear and from a standard book.strong text










share|improve this question


























    up vote
    1
    down vote

    favorite












    I have tried this question and I am able to get the answer as 149 by the principle of inclusion and exclusion but a standard book solutions gave it as 147. I want to confirm whether I am wrong or right. I am expecting a detailed answer as my question and clear and from a standard book.strong text










    share|improve this question
























      up vote
      1
      down vote

      favorite









      up vote
      1
      down vote

      favorite











      I have tried this question and I am able to get the answer as 149 by the principle of inclusion and exclusion but a standard book solutions gave it as 147. I want to confirm whether I am wrong or right. I am expecting a detailed answer as my question and clear and from a standard book.strong text










      share|improve this question













      I have tried this question and I am able to get the answer as 149 by the principle of inclusion and exclusion but a standard book solutions gave it as 147. I want to confirm whether I am wrong or right. I am expecting a detailed answer as my question and clear and from a standard book.strong text







      discrete-mathematics






      share|improve this question













      share|improve this question











      share|improve this question




      share|improve this question










      asked Nov 11 at 10:01









      YATIN DIXIT

      63




      63
























          1 Answer
          1






          active

          oldest

          votes

















          up vote
          0
          down vote













          The correct answer seems to be 147.
          I did exhaustive search by constructing a binary tree with nodes that have as values 0 or 1 whose paths from the root to the leaves correspond to all possible 8-bit strings (that is, we start from the root with two branches that lead to two level-1 nodes with values 0 and 1. From each such node we draw another two branches that lead to two level-2 nodes with values 0 and 1. We go like this until we build all possible paths). Some pruning applies here: when one of the paths has three consecutive 0's or four consecutive 1's we stop right there. Likewise, if the path built so far does not allow for the possibility to contain a sequence of three 0's or four 1's we stop right there too.



          Below there is a simple piece of python code with an implementation (not optimized, only some pruning is performed).



          def pruning_pos(lst):
          '''Pruning function over a list ('lst')'''
          if len(lst) >= 3:
          # if there are three consecutive 0's...
          if lst[-3:] == [0, 0, 0]:
          return True
          else:
          if len(lst) >= 4:
          # if there are four consecutive 1's...
          if lst[-4:] == [1,1,1,1]:
          return True
          return False

          paths = [[0], [1]]
          count = 0
          for i in xrange(7):
          new_paths = # candidate paths
          for c in paths:
          for elem in [c+[1], c+[0]]:
          if pruning_pos(elem): # if it contains sequence of interest...
          count += 2**(8-len(elem)) # count all subpaths we are pruning
          else:
          new_paths.append(elem)
          paths = new_paths[:]

          print count





          share|improve this answer























            Your Answer






            StackExchange.ifUsing("editor", function () {
            StackExchange.using("externalEditor", function () {
            StackExchange.using("snippets", function () {
            StackExchange.snippets.init();
            });
            });
            }, "code-snippets");

            StackExchange.ready(function() {
            var channelOptions = {
            tags: "".split(" "),
            id: "1"
            };
            initTagRenderer("".split(" "), "".split(" "), channelOptions);

            StackExchange.using("externalEditor", function() {
            // Have to fire editor after snippets, if snippets enabled
            if (StackExchange.settings.snippets.snippetsEnabled) {
            StackExchange.using("snippets", function() {
            createEditor();
            });
            }
            else {
            createEditor();
            }
            });

            function createEditor() {
            StackExchange.prepareEditor({
            heartbeatType: 'answer',
            convertImagesToLinks: true,
            noModals: true,
            showLowRepImageUploadWarning: true,
            reputationToPostImages: 10,
            bindNavPrevention: true,
            postfix: "",
            imageUploader: {
            brandingHtml: "Powered by u003ca class="icon-imgur-white" href="https://imgur.com/"u003eu003c/au003e",
            contentPolicyHtml: "User contributions licensed under u003ca href="https://creativecommons.org/licenses/by-sa/3.0/"u003ecc by-sa 3.0 with attribution requiredu003c/au003e u003ca href="https://stackoverflow.com/legal/content-policy"u003e(content policy)u003c/au003e",
            allowUrls: true
            },
            onDemand: true,
            discardSelector: ".discard-answer"
            ,immediatelyShowMarkdownHelp:true
            });


            }
            });














            draft saved

            draft discarded


















            StackExchange.ready(
            function () {
            StackExchange.openid.initPostLogin('.new-post-login', 'https%3a%2f%2fstackoverflow.com%2fquestions%2f53247602%2fhow-many-bit-strings-of-length-eight-contain-either-three-consecutive-zeros-or-f%23new-answer', 'question_page');
            }
            );

            Post as a guest















            Required, but never shown

























            1 Answer
            1






            active

            oldest

            votes








            1 Answer
            1






            active

            oldest

            votes









            active

            oldest

            votes






            active

            oldest

            votes








            up vote
            0
            down vote













            The correct answer seems to be 147.
            I did exhaustive search by constructing a binary tree with nodes that have as values 0 or 1 whose paths from the root to the leaves correspond to all possible 8-bit strings (that is, we start from the root with two branches that lead to two level-1 nodes with values 0 and 1. From each such node we draw another two branches that lead to two level-2 nodes with values 0 and 1. We go like this until we build all possible paths). Some pruning applies here: when one of the paths has three consecutive 0's or four consecutive 1's we stop right there. Likewise, if the path built so far does not allow for the possibility to contain a sequence of three 0's or four 1's we stop right there too.



            Below there is a simple piece of python code with an implementation (not optimized, only some pruning is performed).



            def pruning_pos(lst):
            '''Pruning function over a list ('lst')'''
            if len(lst) >= 3:
            # if there are three consecutive 0's...
            if lst[-3:] == [0, 0, 0]:
            return True
            else:
            if len(lst) >= 4:
            # if there are four consecutive 1's...
            if lst[-4:] == [1,1,1,1]:
            return True
            return False

            paths = [[0], [1]]
            count = 0
            for i in xrange(7):
            new_paths = # candidate paths
            for c in paths:
            for elem in [c+[1], c+[0]]:
            if pruning_pos(elem): # if it contains sequence of interest...
            count += 2**(8-len(elem)) # count all subpaths we are pruning
            else:
            new_paths.append(elem)
            paths = new_paths[:]

            print count





            share|improve this answer



























              up vote
              0
              down vote













              The correct answer seems to be 147.
              I did exhaustive search by constructing a binary tree with nodes that have as values 0 or 1 whose paths from the root to the leaves correspond to all possible 8-bit strings (that is, we start from the root with two branches that lead to two level-1 nodes with values 0 and 1. From each such node we draw another two branches that lead to two level-2 nodes with values 0 and 1. We go like this until we build all possible paths). Some pruning applies here: when one of the paths has three consecutive 0's or four consecutive 1's we stop right there. Likewise, if the path built so far does not allow for the possibility to contain a sequence of three 0's or four 1's we stop right there too.



              Below there is a simple piece of python code with an implementation (not optimized, only some pruning is performed).



              def pruning_pos(lst):
              '''Pruning function over a list ('lst')'''
              if len(lst) >= 3:
              # if there are three consecutive 0's...
              if lst[-3:] == [0, 0, 0]:
              return True
              else:
              if len(lst) >= 4:
              # if there are four consecutive 1's...
              if lst[-4:] == [1,1,1,1]:
              return True
              return False

              paths = [[0], [1]]
              count = 0
              for i in xrange(7):
              new_paths = # candidate paths
              for c in paths:
              for elem in [c+[1], c+[0]]:
              if pruning_pos(elem): # if it contains sequence of interest...
              count += 2**(8-len(elem)) # count all subpaths we are pruning
              else:
              new_paths.append(elem)
              paths = new_paths[:]

              print count





              share|improve this answer

























                up vote
                0
                down vote










                up vote
                0
                down vote









                The correct answer seems to be 147.
                I did exhaustive search by constructing a binary tree with nodes that have as values 0 or 1 whose paths from the root to the leaves correspond to all possible 8-bit strings (that is, we start from the root with two branches that lead to two level-1 nodes with values 0 and 1. From each such node we draw another two branches that lead to two level-2 nodes with values 0 and 1. We go like this until we build all possible paths). Some pruning applies here: when one of the paths has three consecutive 0's or four consecutive 1's we stop right there. Likewise, if the path built so far does not allow for the possibility to contain a sequence of three 0's or four 1's we stop right there too.



                Below there is a simple piece of python code with an implementation (not optimized, only some pruning is performed).



                def pruning_pos(lst):
                '''Pruning function over a list ('lst')'''
                if len(lst) >= 3:
                # if there are three consecutive 0's...
                if lst[-3:] == [0, 0, 0]:
                return True
                else:
                if len(lst) >= 4:
                # if there are four consecutive 1's...
                if lst[-4:] == [1,1,1,1]:
                return True
                return False

                paths = [[0], [1]]
                count = 0
                for i in xrange(7):
                new_paths = # candidate paths
                for c in paths:
                for elem in [c+[1], c+[0]]:
                if pruning_pos(elem): # if it contains sequence of interest...
                count += 2**(8-len(elem)) # count all subpaths we are pruning
                else:
                new_paths.append(elem)
                paths = new_paths[:]

                print count





                share|improve this answer














                The correct answer seems to be 147.
                I did exhaustive search by constructing a binary tree with nodes that have as values 0 or 1 whose paths from the root to the leaves correspond to all possible 8-bit strings (that is, we start from the root with two branches that lead to two level-1 nodes with values 0 and 1. From each such node we draw another two branches that lead to two level-2 nodes with values 0 and 1. We go like this until we build all possible paths). Some pruning applies here: when one of the paths has three consecutive 0's or four consecutive 1's we stop right there. Likewise, if the path built so far does not allow for the possibility to contain a sequence of three 0's or four 1's we stop right there too.



                Below there is a simple piece of python code with an implementation (not optimized, only some pruning is performed).



                def pruning_pos(lst):
                '''Pruning function over a list ('lst')'''
                if len(lst) >= 3:
                # if there are three consecutive 0's...
                if lst[-3:] == [0, 0, 0]:
                return True
                else:
                if len(lst) >= 4:
                # if there are four consecutive 1's...
                if lst[-4:] == [1,1,1,1]:
                return True
                return False

                paths = [[0], [1]]
                count = 0
                for i in xrange(7):
                new_paths = # candidate paths
                for c in paths:
                for elem in [c+[1], c+[0]]:
                if pruning_pos(elem): # if it contains sequence of interest...
                count += 2**(8-len(elem)) # count all subpaths we are pruning
                else:
                new_paths.append(elem)
                paths = new_paths[:]

                print count






                share|improve this answer














                share|improve this answer



                share|improve this answer








                edited Nov 14 at 23:37

























                answered Nov 14 at 1:21









                DavidPM

                1065




                1065






























                    draft saved

                    draft discarded




















































                    Thanks for contributing an answer to Stack Overflow!


                    • Please be sure to answer the question. Provide details and share your research!

                    But avoid



                    • Asking for help, clarification, or responding to other answers.

                    • Making statements based on opinion; back them up with references or personal experience.


                    To learn more, see our tips on writing great answers.





                    Some of your past answers have not been well-received, and you're in danger of being blocked from answering.


                    Please pay close attention to the following guidance:


                    • Please be sure to answer the question. Provide details and share your research!

                    But avoid



                    • Asking for help, clarification, or responding to other answers.

                    • Making statements based on opinion; back them up with references or personal experience.


                    To learn more, see our tips on writing great answers.




                    draft saved


                    draft discarded














                    StackExchange.ready(
                    function () {
                    StackExchange.openid.initPostLogin('.new-post-login', 'https%3a%2f%2fstackoverflow.com%2fquestions%2f53247602%2fhow-many-bit-strings-of-length-eight-contain-either-three-consecutive-zeros-or-f%23new-answer', 'question_page');
                    }
                    );

                    Post as a guest















                    Required, but never shown





















































                    Required, but never shown














                    Required, but never shown












                    Required, but never shown







                    Required, but never shown

































                    Required, but never shown














                    Required, but never shown












                    Required, but never shown







                    Required, but never shown







                    Popular posts from this blog

                    Xamarin.iOS Cant Deploy on Iphone

                    Glorious Revolution

                    Dulmage-Mendelsohn matrix decomposition in Python