fork download
  1. # your code goes here
  2.  
  3. all_possible_combinations = []
  4. def get_combinations(N, data, cur_index=0, generated_el=[], cluster_tracker=set(), sub_group_tracker=set()):
  5. if N == 0:
  6. if generated_el:
  7. all_possible_combinations.append(tuple(generated_el))
  8. return
  9.  
  10. if cur_index >= len(data):
  11. return
  12.  
  13. get_combinations(N, data, cur_index+1, generated_el, cluster_tracker, sub_group_tracker)
  14.  
  15. if data[cur_index][1] in cluster_tracker:
  16. # I have already taken this cluster
  17. return
  18.  
  19. if data[cur_index][2] in sub_group_tracker:
  20. # I have already taken this sub group
  21. return
  22.  
  23. generated_el.append(data[cur_index][0])
  24. cluster_tracker.add(data[cur_index][1])
  25. sub_group_tracker.add(data[cur_index][2])
  26. get_combinations(N-1, data, cur_index+1, generated_el, cluster_tracker, sub_group_tracker)
  27. generated_el.pop()
  28. cluster_tracker.remove(data[cur_index][1])
  29. sub_group_tracker.remove(data[cur_index][2])
  30.  
  31. return
  32.  
  33.  
  34. if __name__ == "__main__":
  35. data = [
  36. ("GDP_M3", "1", "GDP"),
  37. ("HPI_M3_lg2", "1", "HPI" ),
  38. ("FDI_C_lg5", "1", "FDI"),
  39. ("FDI_M6", "2", "FDI"),
  40. ("Export_M9", "2", "Export"),
  41. ("GDP_M9", "2", "GDP"),
  42. ("GDP_M12_lg7", "3", "GDP"),
  43. ("Export_M12", "3", "Export")
  44. ]
  45.  
  46. get_combinations(3, data)
  47. print(all_possible_combinations)
  48.  
  49.  
Success #stdin #stdout 0.03s 27712KB
stdin
Standard input is empty
stdout
[('FDI_C_lg5', 'GDP_M9', 'Export_M12'), ('FDI_C_lg5', 'Export_M9', 'GDP_M12_lg7'), ('HPI_M3_lg2', 'GDP_M9', 'Export_M12'), ('HPI_M3_lg2', 'Export_M9', 'GDP_M12_lg7'), ('HPI_M3_lg2', 'FDI_M6', 'Export_M12'), ('HPI_M3_lg2', 'FDI_M6', 'GDP_M12_lg7'), ('GDP_M3', 'FDI_M6', 'Export_M12')]