defmodule Sandbox do
def run do
fast_cars =
%{
"Tesla" => [
%{
make: "Tesla",
metrics: [
%{
maker: "Tesla",
SPC: 0.00682111,
competitor: "Aston_Martin",
DOM: 1028.1163347634
},
%{
maker: "Tesla",
SPC: 0.017515,
competitor: "Porsche",
DOM: 434.021755511914
}
]
}
],
"Porsche" => [
%{
make: "Porsche",
metrics: [
%{
maker: "Porsche",
SPC: 1.008,
competitor: "Maserati",
DOM: 52793.9857518164
}
]
}
],
"Ferrari" => [
%{
make: "Ferrari",
metrics: [
%{
maker: "Ferrari",
SPC: 352.669656,
competitor: "Porsche",
DOM: 249687.2418829
},
%{
maker: "Ferrari",
SPC: 355.204959,
competitor: "Maserati",
DOM: 153819.425075646
},
%{
maker: "Ferrari",
SPC: 136.52285808,
competitor: "Aston_Martin",
DOM: 68129.7323887293
},
%{
maker: "Ferrari",
SPC: 0.0332048,
competitor: "Lamborghini",
DOM: 20191.7191403122
}
]
}
],
"Bentley" => [
%{
make: "Bentley",
metrics: [
%{
maker: "Bentley",
SPC: 0.04822,
competitor: "Aston_Martin",
DOM: 2353.90735023826
}
]
}
],
"Bugatti" => [
%{
make: "Bugatti",
metrics: [
%{
maker: "Bugatti",
SPC: 70.53574767,
competitor: "Aston_Martin",
DOM: 518.045106061978
},
%{
maker: "Bugatti",
SPC: 0.01636395,
competitor: "Lamborghini",
DOM: 320.366445388147
}
]
}
],
"BMW" => [
%{
make: "BMW",
metrics: [
%{
maker: "BMW",
SPC: 9.7388e-4,
competitor: "Aston_Martin",
DOM: 511.4216487588
}
]
}
],
"Lamborghini" => [
%{
make: "Lamborghini",
metrics: [
%{
maker: "Lamborghini",
SPC: 10667.97,
competitor: "Maserati",
DOM: 33680.6277176563
},
%{
maker: "Lamborghini",
SPC: 10556.305993,
competitor: "Porsche",
DOM: 19869.4635589822
}
]
}
],
"Jaguar" => [
%{
make: "Jaguar",
metrics: [
%{
maker: "Jaguar",
SPC: 19.999,
competitor: "Aston_Martin",
DOM: 3014.45913570669
}
]
}
],
"Koenigsegg" => [
%{
make: "Koenigsegg",
metrics: [
%{
maker: "Koenigsegg",
SPC: 64.181613,
competitor: "Porsche",
DOM: 9829.77045465923
},
%{
maker: "Koenigsegg",
SPC: 0.0060591,
competitor: "Lamborghini",
DOM: 2548.17000680984
},
%{
maker: "Koenigsegg",
SPC: 24.82987174,
competitor: "Aston_Martin",
DOM: 495.244803630221
}
]
}
],
"Maserati" => [
%{
make: "Maserati",
metrics: [
%{
maker: "Maserati",
SPC: 28.038444,
competitor: "Lotus",
DOM: 313.655750686137
}
]
}
],
"McLaren" => [
%{
make: "McLaren",
metrics: [
%{
maker: "McLaren",
SPC: 0.0749,
competitor: "Aston_Martin",
DOM: 291.0407460638
}
]
}
],
"Pagani" => [
%{
make: "Pagani",
metrics: [
%{
maker: "Pagani",
SPC: 0.03297,
competitor: "Aston_Martin",
DOM: 570.362211630001
}
]
}
]
}
IsolateUnpairedMakerGroups.run(fast_cars)
end
defmodule IsolateUnpairedMakerGroups do
def run(enumerable) do
Enum.map(enumerable, &isolate_unilateral_item/1)
end
def isolate_unilateral_item(
{
_main_key,
[
%{
_key_two: _value,
_key_three: [_] = list
}
]
}
)
do
list
end
def isolate_unilateral_item(_), do: [:nogo]
end
end
The desired output from IsolateUnpairedMakerGroups.run(fast_cars)
is a list of maps only of makers
with a single competitor
:
[
%{
maker: "Porsche",
SPC: 1.008,
competitor: "Maserati",
DOM: 52793.9857518164
},
%{
maker: "Bentley",
SPC: 0.04822,
competitor: "Aston_Martin",
DOM: 2353.90735023826
},
%{
maker: "BMW",
SPC: 9.7388e-4,
competitor: "Aston_Martin",
DOM: 511.4216487588
},
%{
maker: "Jaguar",
SPC: 19.999,
competitor: "Aston_Martin",
DOM: 3014.45913570669
},
%{
maker: "Maserati",
SPC: 28.038444,
competitor: "Lotus",
DOM: 313.655750686137
},
%{
maker: "McLaren",
SPC: 0.0749,
competitor: "Aston_Martin",
DOM: 291.0407460638
},
%{
maker: "Pagani",
SPC: 0.03297,
competitor: "Aston_Martin",
DOM: 570.362211630001
}
]
Instead, this is what we get:
iex(30)> Sandbox.run
[
[:nogo],
[:nogo],
[:nogo],
[:nogo],
[:nogo],
[:nogo],
[:nogo],
[:nogo],
[:nogo],
[:nogo],
[:nogo],
[:nogo],
[:nogo],
[:nogo],
[:nogo],
[:nogo],
[:nogo],
[:nogo]
]
How should the code be refactored so IsolateUnpairedMakerGroups.run(fast_cars)
works as intended?