March 09, 2021 Programming chrestomathy: wealthiest customer | ||||
---|---|---|---|---|
| ||||
This is a fun video: https://www.youtube.com/watch?v=MKb4WD6mioE Which includes three separate C++ solutions to a simple (four letters in APL) problem, his preferred C++ solution being: // C++17 Solution int maximumWealth(vector<vector<int>>& accounts) { return std::transform_reduce( accounts.cbegin(), accounts.cend(), 0, [](auto a, auto b) { return std::max(a, b); }, [](auto const& row) { return std::reduce(row.cbegin(), row.cend()); }); } Although what he thinks the C++ is trying to be is this Rust: pub fn maximum_wealth(accounts: Vec<Vec<i32>>) -> i32 { accounts.iter() .map(|x| x.iter().sum()) .max() .unwrap() } But D is very competitive here: int maximumWealth(const int[][] accounts) { import std.algorithm : map, sum, maxElement; return accounts.map!sum.maxElement; } Or, aping the APL: int maximumWealth(const int[][] accounts) { import std.algorithm : fold, map; return accounts.map!(fold!"a+b").fold!"a.max(b)"; } That's it. I like this RosettaCode stuff and happened across the video. He does include D in some other similar videos, like https://www.youtube.com/watch?v=pDbDtGn1PXk&t=278s |
March 09, 2021 Re: Programming chrestomathy: wealthiest customer | ||||
---|---|---|---|---|
| ||||
Posted in reply to mipri | On Tuesday, 9 March 2021 at 05:06:03 UTC, mipri wrote:
> But D is very competitive here:
>
> int maximumWealth(const int[][] accounts) {
> import std.algorithm : map, sum, maxElement;
> return accounts.map!sum.maxElement;
> }
>
> Or, aping the APL:
>
> int maximumWealth(const int[][] accounts) {
> import std.algorithm : fold, map;
> return accounts.map!(fold!"a+b").fold!"a.max(b)";
> }
>
Golf!
import std;
alias maximumWealth = pipe!(map!sum, maxElement);
unittest { assert([[2, 10], [11]].maximumWealth == 12); }
|
Copyright © 1999-2021 by the D Language Foundation