# [Brain-Flak], <s>474 470 446 438 420</s> 412 bytes

*-18 bytes thanks to Nitroden!*

*-8 thanks to Wheat Wizard*

    (((()()()()()){}){}){({}[(()())]((((())))))}{}{({}<>)<>({}<>)<>({}()()<>)<>}<>{}{}{([{}]())({()<(({}())()){(<{}>)((((()()()())())((((({}{}){})[()]){}){}()))){({}<>)<>}}{}{(<{}>)(((((()()()())({})){}())(({})({}())({}{})))){({}<>)<>}}>}{}[()]){([](<>))<>((()()()()()){}){(({}<({}())>)){({}[()])<>}{}}{}<>([{}()]{}<>)<>{({}<>)(<>)}}{}(<>)<>}<>{}{{({}((((()()()){}){}){}){}<>)<>}({}(()()()()()){}<>)<>}<>{({}<>)<>}<>

[Try it online!][TIO-jjskd009]

[Brain-Flak]: https://github.com/Flakheads/BrainHack
[TIO-jjskd009]: https://tio.run/##XVA7DsMwCL0ODL2BZannsDwkWVpV6tAVcXaX9@zEbglSLHgfYP9sz/djO16tSYSen5ozxbywrFUIYLg5OilryssfOL6jYsQU8xocsWgIEdSWZJ5VFkcmAjw4F9Hah6DnZefUnfwpEOCOhogOM8r98rNjJ6hLqRJFDP@/OjRS18g6zhCUBLJDCqtFZagOeaihLcsV0JqDnndFdhDbq/nFlflurd3uXw "Brain-Flak (BrainHack) – Try It Online"

Gosh, it's nice to finally check this off my to-do list.

### Explanation:

Brain-Flak is obviously not very good at getting the modulo of numbers, so I bypassed this by pushing all the elements first.

    (((()()()()()){}){}) Push 20
    { Loop 20 times
        ({}
        [(()())]    Push a 2 to represent a Buzz
        ((((()))))  Push 4 1s
        ) And decrement loop counter
    }{} Pop the excess 0
    { Loop over the list of numbers
        ({}<>)<>({}<>)<> Transfer two of the elements to the other stack
        ({}()()<>)<>     And add 2 to the last one
    }<>{}{} Pop the excess two elements

Now `1` represents normal numbers, `2` represents `Buzz`, `3` is `Fizz` and `4` represents `FizzBuzz`. Initially I just pushed the values that repeat every 15 numbers 7 times and popped the excess 5, but this way turned out to be slightly shorter.

    { Loop over each element
        ([{}]()) Subtract one from the current element
        ({ Fizz and/or Buzz if num is not 1
            <(({}())())  Subtract 1 and push, twice
            { Push Buzz if num was not 3
                (<{}>)((((()()()())())((((({}{}){})[()]){}){}()))){({}<>)<>}
            }{}
            { Push Fizz if num is not 2
                (<{}>)(((((()()()())({})){}())(({})({}())({}{})))){({}<>)<>}
            }
            >
            ()
        }{}[()]) Push -1 if neither Fizz nor Buzz were pushed
        {
            ([](<>)) Push length of list to other stack
            <>((()()()()()){}) Push 10 as the mod
            Div/mod algorithm
            {(({}<({}())>)){({}[()])<>}{}}{}<>([{}()]{}<>)<>
            Pushes n%10 to output stack and n/10 to the list stack
            { If div is not 0
                ({}<>) Push it to the other stack
                (<>)   Push 0
            }
        }{} Pop excess 0
        (<>)<> Push 0 to other stack to represent a newline
    }<>{} Pop extra newline
    { Loop over values
        {
            ({}((((()()()){}){}){}){}<>)<>  Add 48 to every value
        }
        ({}(()()()()()){}<>)<> Turn 0s into newlines
    }  Until there's two 0s in a row
    <>{({}<>)<>}<> Reverse output
</code></pre>