mission idea "Wolf Goat Cabbage "
Perhaps CheckiO should not have Fox, goose and bag of beans puzzle mission yet.
How about implementing the solution in Python?
specification:
wolf_goat_cabbage(purchases, ng_list) == [go1, return1, go2, return2,...]
example:
wolf_goat_cabbage({'wolf', 'goat', 'cabbage'}, [{'wolf', 'goat'}, {'goat', 'cabbage'}]) == ['goat', '', 'cabbage', 'goat', 'wolf', '', 'goat']
initial code:
def wolf_goat_cabbage(purchases, ng_list): return [] if __name__ == '__main__': def checker(solution, purchases, ng_list, min_len): answer = solution(purchases, ng_list) if not isinstance(answer, list): print('wrong data type :', answer) return False dif = set(answer) - (purchases | {''}) if dif: print('wrong cargo :', dif) return False if len(answer) > min_len: print(f'too much steps : {len(answer)} > {min_len}') return False if not (answer or min_len): return True bank_a, bank_b = purchases | {''}, set() for i, p in enumerate(answer): p = {p, ''} bank_a = bank_a | p if i % 2 else bank_a - p bank_b = bank_b - p if i % 2 else bank_b | p if bank_a in ng_list: print(f'you failed : {bank_a}') return False if bank_b in ng_list: print(f'you failed : {bank_b}') return False return not bank_a and bank_b == purchases | {''} assert checker(wolf_goat_cabbage, {'wolf', 'goat', 'cabbage'}, [{'wolf', 'goat'}, {'goat', 'cabbage'}], 7), 'two restriction' assert checker(wolf_goat_cabbage, {'wolf', 'goat', 'cabbage'}, [], 5), 'no restriction' assert checker(wolf_goat_cabbage, {'wolf', 'goat', 'cabbage'}, [{'wolf', 'goat'}], 5), 'one restriction' assert checker(wolf_goat_cabbage, {'wolf', 'goat', 'cabbage'}, [{'wolf', 'goat'}, {'goat', 'cabbage'}, {'wolf', 'cabbage'}], 0), 'three restriction' assert checker(wolf_goat_cabbage, {'fox', 'goose', 'bean'}, [{'fox', 'goose'}, {'goose', 'bean'}], 7), 'fox goose bean'