#[05AB1E](https://github.com/Adriandmen/05AB1E/wiki/Commands), <s> 44 </s> <s>50</s> 44 [bytes](https://github.com/Adriandmen/05AB1E/wiki/Codepage) [<sup>*Crossed out ` 44 ` 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)