all_cards = { rooms = ['Library' 'Kitchen' 'Conservatory'] suspects = ['White' 'Green' 'Scarlett'] weapons = ['Rope' 'Lead_Pipe' 'Knife'] } is_ready_to_solve = |cards | { ((length cards:suspects) == 1) && ((length cards:rooms) == 1) && ((length cards:weapons) == 1) } take_turn = |opponent_card , current_room , cards | { (remove_card opponent_card cards) (make_guess current_room cards) cards } remove_card = |opponent_card , cards | { cards:rooms -= opponent_card cards:suspects -= opponent_card cards:weapons -= opponent_card } make_guess = |current_room , cards | { if (is_ready_to_solve cards) { (output 'It was ' + cards:suspects:0 + ' in the ' + cards:rooms:0 + ' with the ' + cards:weapons:0 + '!') } else { (output 'I accuse ' + (random cards:suspects) + ' in the ' + current_room + ' with the ' + (random cards:weapons) + '.') } } (take_turn 'Rope' 'Kitchen' (take_turn 'Library' 'Kitchen' (take_turn 'Conservatory' 'Kitchen' (take_turn 'White' 'Kitchen' (take_turn 'Green' 'Kitchen' (take_turn 'Knife' 'Kitchen' all_cards))))))