Python 2 by Wheat Wizard (fourth iteration)
import sys
if set("".join(open(__file__).read().split('\n')[4:]))-set(' &)(,.:[]a`cdfijmonrt~'):sys.setrecursionlimit(1)
for m in sys.modules:sys.modules[m]=None
del sys;f=lambda\
c,d:(`int([]in[])`[:[]in[]]).join([((c)and`dict([((int([]in[])),(int([]in[])))])`[(int([]in[[]])):][(int([]in[[]]))].join([`dict([((int([]in[])),(int([]in[])))])`[(int([]in[]))],`dict([((int([]in[])),c)])`[(int([]in[[]])):][(int([]in[[]])):][(int([]in[[]])):][(int([]in[[]])):]])or`int([]in[])`[:[]in[]]).format((int([]in[]))),((d)and`dict([((int([]in[])),(int([]in[])))])`[(int([]in[[]])):][(int([]in[[]]))].join([`dict([((int([]in[])),(int([]in[])))])`[(int([]in[]))],`dict([((int([]in[])),d)])`[(int([]in[[]])):][(int([]in[[]])):][(int([]in[[]])):][(int([]in[[]])):]])or`int([]in[])`[:[]in[]]).format((int([]in[]))),`(int([]in[]))`]).rfind(`(int([]in[]))`)
No exploits, just a function to add using only characters ' &)(,.:[]a`cdfijmonrt~'
, as intended (actually only '(),.:[]`acdfijmnort'
).
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.
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 a 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.