Convert to and from Base 94 The challenge

Make 2 programs which convert decimal to and from base 94, or a bidirectional program.

Base 94?

Base 94 is like any other base, but instead of 0 to 9 and letters, it uses ASCII characters 33 to 126. Not 127 because chr(127) is DEL. Not 32 because that's a space.

Examples

0 - ! or empty string
1 - "
93 - ~
94 - "!
2020 - 6O
14233221 - 2-n8


Scoring

For two programs, the score will be the sum of the byte count of both of the programs.

The bidirectional program is simply just the byte count. Consider it like a -50% to the score.
Haskell, 42 + 31 = 73 bytes

To base 94: 42 bytes



(l!!)
l="":tail[s++[c]|s&lt;-l,c&lt;-['!'..'~']]


Try it online!

Instead of using modular arithmetic, we generate the list l of all strings in the desired order and index into it.

The recursive definition of l is similar to this one for generating all strings, but modified to output strings in the desired order by appending the new character, and with a tail to prevent the analogue of leading zeroes.

From base 94: 31 bytes



foldl(\n-&gt;(94*n-33+).fromEnum)0


Try it online!

Iterates over the characters c of the string, updating the current value n to 94*n-33+fromEnum c.