I made no attempt to make it short; I just wrote subexpressions for intermediate values like 0 and the empty string and string-substituted those in. Explanation
def f(c,d):
FALSE = []in[]
TRUE = []in[[]]
ZERO = int([]in[])
ONE = int(TRUE)
EMPTY = `int([]in[])`[:[]in[]]
ZERO_STR = `ZERO`
ONE_STR = `ONE`
ZERO_DICT = dict([(ZERO,ZERO)])
ZERO_DICT_STR = `ZERO_DICT`
OPEN_BRACE = ZERO_DICT_STR[ZERO]
COLON = ZERO_DICT_STR[ONE:][ONE]
CLOSE_BRACE = ZERO_DICT_STR[ONE:][ONE:][ONE:][ONE:][ONE]
C_STR = `c`
D_STR = `d`
FORMAT_STR_C = ''.join([OPEN_BRACE, ZERO_STR, COLON, C_STR, CLOSE_BRACE])
FORMAT_STR_D = ''.join([OPEN_BRACE, ZERO_STR, COLON, D_STR, CLOSE_BRACE])
LENGTH_C_STR = c and FORMAT_STR_C.format(ONE_STR) or EMPTY
LENGTH_D_STR = d and FORMAT_STR_D.format(ONE_STR) or EMPTY
TOTAL_STR = EMPTY.join([LENGTH_C_STR, LENGTH_D_STR, ZERO_STR])
RESULT = TOTAL_STR.find(ZERO_STR)
return RESULT
The core idea is that string format '{0:5}'.format('1')
pads the number zero to comea length of 5
like '1 '
. By concatenation two such strings using ''.join
, the sum of their length is the sum of the input numbers. Then, we tack on a 0
to the end and call .find()
to the final position, which is the sum.
The string '{0:5}'
to format is produced by extracting the {:}
characters from string reprs of dictionaries, created with dict
. The string repr of each successive summand is placed where the 5 would be. I wanted to use a dict like {0:5}
itself, but its repr includes a space that messed it up.
Inputs of 0 mess up the process because the string sub has a minimum length of 1. We have those with an and/or
to give the empty string in this case.