I tried my code on my own computer runs well with just a bit long time (minutes if rings come to about 15), and when I run the code in checkio, "ErrUchIsDown" consistently appeared. Am I missing something?
My codes:
import functools
import itertools
def break_rings(cons, cuts=1):
union = functools.reduce(lambda x,y:x|y, cons)
all_paths = list(itertools.permutations(union,cuts))
#print('all_paths:',len(all_paths))# a list of tuples
#print('Now {0} rings will be cut'.format(cuts))
input('continue')
result = []
path_no = 0
cons_remain = []
for path in all_paths:
temp_cons = list(cons)
count = 0
path_no += 1
#print('now taking path No.:', path_no)
for ring in path:
#print('now breaking ring:', ring)
if any((ring in i) for i in temp_cons):count += 1
#print('count', count)
for con in cons:
#print('Now temp_cons:',temp_cons)
if temp_cons == []:
return cuts
if len(con) > 1 and ring in con and con in temp_cons:
#print('Now try breaking con:',con)
#print(con,'is removed')
temp_cons.remove(con)
cons_remain.append(temp_cons)
if [] not in cons_remain:
#print('please break one more')
return break_rings(cons, cuts+1)
#print(result)
return min(result)
Created at: 2016/04/06 18:10; Updated at: 2016/04/09 09:10