#[05AB1E](https://github.com/Adriandmen/05AB1E/wiki/Commands), <s>&nbsp;44&nbsp;</s> <s>50</s> 44 [bytes](https://github.com/Adriandmen/05AB1E/wiki/Codepage)

[<sup>*Crossed out `&nbsp;44&nbsp;` is no longer 44 :)*</sup>](https://codegolf.stackexchange.com/questions/170188/crossed-out-44-is-still-regular-44)

    [õ0U.µ["BFSH"3ÝΩ©è«®ĀX+U¼X2›®+3@¾X-3›~#}I¾Q#

Port of [*@xnor*'s Python 2 answer](https://codegolf.stackexchange.com/a/180491/52210), so make sure to upvote him as well if you like this answer!  
+6 bytes due to a bug-fix, and after that -6 bytes again thanks to *@xnor* by porting his way more efficient fix in comparison to my temporary work-around, as I was expecting. ;)

[Try it online](https://tio.run/##AUgAt/9vc2FiaWX//1vDtTBVLsK1WyJCRlNIIjPDnc6pwqnDqMKrwq7EgFgrVcK8WDLigLrCriszQMK@WC0z4oC6fiN9ScK@USP//zk) or [verify some more random outputs](https://tio.run/##AV4Aof9vc2FiaWX/OUx2IlNpemU6ICI/eSwxMEb/W8O1MFUuwrVbIkJGU0giM8OdzqnCqcOowqvCrsSAWCtVwrxYMuKAusKuKzNAwr5YLTPigLp@I315wr5RI/99LH3Ctj//).

**Explanation:**

<!-- language-all: lang-python -->

    [                # Start an infinite loop:
     õ               #  (Re)set the result-string to an empty string ""
     0U              #  (Re)set variable `X` to 0
     .µ              #  Reset the counter_variable to 0
       [             #  Start an inner infinite loop:
        "BFSH"       #   Push string "BFSH"
              3ÝΩ    #   Push a random integer in the range [0,3]
                 ©   #   Store this random integer in variable `r` (without popping)
                  è  #   Index it into the string "BFSH"
                   « #   Append it to the result-string
        ®Ā           #   If `r` is NOT 0:
          X+U        #    Increase `X` by 1
        ¼            #   Increase the counter_variable by 1
        X2›®+        #   Calculate `X`>2 (1 if truthy; 0 if falsey) + `r`
             3@      #   Check if this is larger than or equal to 3
        ¾X-          #   Calculate counter_variable - `X`
           3›        #   Check if this is larger than 3
        ~            #   If either of the two checks above is truhy:
         #           #    Stop the inner infinite loop
       }             #  After the inner infinite loop:
        I¾Q          #  If the input and counter_variable are equal:
           #         #   Stop the outer infinite loop
                     # (and output the result-string at the top of the stack implicitly)