Python 2, 167 charactersbytes - 10% = 150.3
d=lambda x:("{"+d(x//4)+"}"if x>3 else"")+";"*(x%4)
c=lambda n:"{}"*(int(n)<4)+d(int(n))if n.isdigit()else reduce(lambda x,y:x*4+y,[x.count(";")for x in n.split("}")])
In this implementation, c
is the function that satisfies the requirements. It returns a string if given an nonnegative integer as input, or an integer if given a curly number as input.