The challenge
The rgb function is incomplete. Complete it so that passing in RGB decimal values will result in a hexadecimal representation being returned. Valid decimal values for RGB are 0 – 255. Any values that fall out of that range must be rounded to the closest valid value.
Note: Your answer should always be 6 characters long, the shorthand with 3 will not work here.
The following are examples of expected output values:
rgb(255, 255, 255) # returns FFFFFF
rgb(255, 255, 300) # returns FFFFFF
rgb(0,0,0) # returns 000000
rgb(148, 0, 211) # returns 9400D3
Test cases
test.assert_equals(rgb(0,0,0),"000000", "testing zero values")
test.assert_equals(rgb(1,2,3),"010203", "testing near zero values")
test.assert_equals(rgb(255,255,255), "FFFFFF", "testing max values")
test.assert_equals(rgb(254,253,252), "FEFDFC", "testing near max values")
test.assert_equals(rgb(-20,275,125), "00FF7D", "testing out of range values")
This challenge is similar to other Python string manipulation problems like counting smiley faces where we need to validate and transform input data.
The solution using Python
def rgb(r, g, b):
# helper function
def help(c):
if c<0: return 0
if c>255: return 255
return c
# make sure that values are within bounds
r = help(r)
g = help(g)
b = help(b)
# convert to hex
# maintain 2 spaces each
val = "%02x%02x%02x" % (r, g, b)
# return UpperCase string
return val.upper()