1. 7
1.

2. 3

k solution:

``````{x@<(+/`i\$')'x}{x@<x}@" "\:
``````

Explanation:

``````                      " "\: /split by spaces
{x@<x}@      /string sort
{   (      )'x}             /for each
`i\$'                 /    cast each char to integer
+/                     /    sum
x@<                        /sort by these
``````
1. 1

This is missing the part where ties by weight are broken by ordinary string order.

1. 1

This is what the initial string sorting is for. `<` seems to preserve order in the case of ties.

2. 1

Haskell solution (requires the packages `sort` and `extra`):

``````import Data.Sort (sortOn)
import Data.Tuple.Extra ((&&&))

weightSort :: String -> String
weightSort = unwords . sortOn (sum . map (read . pure) &&& id) . words
``````
1. 1

Here’s a Rust transliteration of the Haskell, made entirely for curiosity (this isn’t a great example of idiomatic Rust): Rust Playground.

2. 1

Python solution:

``````def sort_by_weight(inputline):
return " ".join(sorted(inputline.split(),
key=lambda i: (sum(int(j) for j in i), i) ))
``````

And in D, for good measure. I like how easy it is to literally translate Python into D:

``````import std;

auto sort_by_weight(string inputline) {
return inputline.split
.schwartzSort!(x => tuple(x.map!(i => int(i - '0')).sum, x)).join(" ");
}
``````

Btw, “kata” is a Japanese loanword. For the plural, just add s, “katas”.

1. 1

@raymii pop_back on an empty string is undefined so your solution would probably behave correctly most of the time on empty string as input but might just crash too

1. 1

Thanks for noticing! In the last paragraph the complete code does a check for input.empty() and returns “” if true, so the pop back shouldn’t happen, or I might miss something.

2. 1

Fun little exercise. Here’s a Perl solution that works for the test input: https://pastebin.com/yiesqUbg

1. 1

Cool! I love how Perl looks like a shell script bus is a real language as well. I also did this kata in Python and faster than in C++. Not being as familiar with the standard library and strong typing cost most of the time.