closed = lambda a,b: ((a%b) == 0) and (a,opened) or (a,closed)
opened = lambda a,b: ((a%b) == 0) and (a,closed) or (a,opened)
f = lambda a: lambda b : closed(a,b)
g = lambda a: lambda b : opened(a,b)
doors = [f(a) for a in range(1,101)]
for i in range(1,101):
for j, door in enumerate(doors):
h = door(i)
doors[j] = (h[1] == closed) and g(h[0]) or f(h[0])
print "Opened Doors: " + str([i+1 for i,x in enumerate(doors) if x(1)[1] == closed])
Y2xvc2VkID0gbGFtYmRhIGEsYjogKChhJWIpID09IDApIGFuZCAoYSxvcGVuZWQpIG9yIChhLGNsb3NlZCkKb3BlbmVkID0gbGFtYmRhIGEsYjogKChhJWIpID09IDApIGFuZCAoYSxjbG9zZWQpIG9yIChhLG9wZW5lZCkKZiA9IGxhbWJkYSBhOiBsYW1iZGEgYiA6IGNsb3NlZChhLGIpCmcgPSBsYW1iZGEgYTogbGFtYmRhIGIgOiBvcGVuZWQoYSxiKQoKZG9vcnMgPSBbZihhKSBmb3IgYSBpbiByYW5nZSgxLDEwMSldCmZvciBpIGluIHJhbmdlKDEsMTAxKToKICAgIGZvciBqLCBkb29yIGluIGVudW1lcmF0ZShkb29ycyk6CiAgICAgICAgaCA9IGRvb3IoaSkKICAgICAgICBkb29yc1tqXSA9IChoWzFdID09IGNsb3NlZCkgYW5kIGcoaFswXSkgb3IgZihoWzBdKQoKcHJpbnQgIk9wZW5lZCBEb29yczogIiArIHN0cihbaSsxIGZvciBpLHggaW4gZW51bWVyYXRlKGRvb3JzKSBpZiB4KDEpWzFdID09IGNsb3NlZF0p
Opened Doors: [1, 4, 9, 16, 25, 36, 49, 64, 81, 100]