### re: Daily Coding Puzzles - Nov 4th - Nov 9th VIEW POST

re: Friday The Last Word (CodeJam): You are the next contestant on this show, and the host has just showed you the string S. What's the winning last...

F#

``````let lastWord s =
let update (first, word) letter =
if letter >= first then (letter, string letter + word)
else                    (first, word + string letter)
s |> Seq.fold update ('A', "") |> snd
``````

Testing it (console)

``````    [
"CAB", "CAB"
"JAM", "MJA"
"CODE", "OCDE"
"ABAAB", "BBAAA"
"CABCBBABC", "CCCABBBAB"
"ABCABCABC", "CCCBAABAB"
"ZXCASDQWE", "ZXCASDQWE"
]
|> List.iter (fun (input, expected) ->
let actual = lastWord input
let e = if expected = actual then "√" else "X"
printfn "%s %s ==> %s, %s" e input expected actual
)
// √ CAB ==> CAB, CAB
// √ JAM ==> MJA, MJA
// √ CODE ==> OCDE, OCDE
// √ ABAAB ==> BBAAA, BBAAA
// √ CABCBBABC ==> CCCABBBAB, CCCABBBAB
// √ ABCABCABC ==> CCCBAABAB, CCCBAABAB
// √ ZXCASDQWE ==> ZXCASDQWE, ZXCASDQWE

``````

Awesome -- this one (for me) was a lot easier than they made it sound!

Same here. The hard part was understanding the problem. (It felt very much like "A train leaving SF at 50kph ..." word problems.) But after that the code wasn't so bad.

I think the possible "gotcha" here is that they do not want a reverse alphabetically sorted string, which, if you're not careful about the requirements, could be what you try to build and have it trip you up.

Code of Conduct Report abuse