<s> from copperhead import * <EOL> @ cu <EOL> def enumerate ( x ) : <EOL> return zip ( indices ( x ) , x ) <EOL> @ cu <EOL> def argmax ( x ) : <EOL> def argmax_el ( ( ia , xa ) , ( ib , xb ) ) : <EOL> if xa > xb : <EOL> return ia , xa <EOL> else : <EOL> return ib , xb <EOL> return reduce ( argmax_el , enumerate ( x ) , ( - <NUM_LIT:1> , min_bound_el ( x ) ) ) <EOL> @ cu <EOL> def choose ( x ) : <EOL> if x % <NUM_LIT:2> == <NUM_LIT:0> : <EOL> return x / <NUM_LIT:2> <EOL> else : <EOL> return <NUM_LIT:3> * x + <NUM_LIT:1> <EOL> @ cu <EOL> def evaluate ( x , i ) : <EOL> if x == <NUM_LIT:1> : <EOL> return i <EOL> else : <EOL> return evaluate ( choose ( x ) , i + <NUM_LIT:1> ) <EOL> @ cu <EOL> def start ( x ) : <EOL> return evaluate ( x , <NUM_LIT:1> ) <EOL> @ cu <EOL> def p14 ( n ) : <EOL> lengths = map ( start , bounded_range ( <NUM_LIT:1> , n ) ) <EOL> index , value = argmax ( lengths ) <EOL> return index + <NUM_LIT:1> , value <EOL> print p14 ( <NUM_LIT> , verbose = True ) </s>
