#Japt, 43 29 28 bytes
Japt, 43 29 28 bytes
##Original, 42 bytes
Original, 42 bytes
###Explanation
Åqb £bbidbad¾dò3n)ïiaq)m¬bXibÃò ®ìG d
Å :Slice off the first character
qb :Split on "b"
£ :Map
bbidbad¾d : Compressed string "bbidbadbod"
ò3n) : Partition at every 3rd character from the end (["b","bid","bad","bod"])
ï : Cartesian product
ia : Compressed string "iaou"
q : Split
) : End Cartesian product
m : Map
¬ : Join
b : Index of
X : Current element
ib : Prepend "b"
à :End map
ò :Partition at every second element
® :Map
ìG : Convert from base-16 digit array to base-10 integer
d : Get the character at that codepoint
Explanation
Åqb £`bbidbad¾d`ò3n)ï`ia`q)m¬bXibÃò ®ìG d
Å :Slice off the first character
qb :Split on "b"
£ :Map
`bbidbad¾d` : Compressed string "bbidbadbod"
ò3n) : Partition at every 3rd character from the end (["b","bid","bad","bod"])
ï : Cartesian product
`ia` : Compressed string "iaou"
q : Split
) : End Cartesian product
m : Map
¬ : Join
b : Index of
X : Current element
ib : Prepend "b"
à :End map
ò :Partition at every second element
® :Map
ìG : Convert from base-16 digit array to base-10 integer
d : Get the character at that codepoint