# Discussion on: Daily Challenge #82 - English Beggars

Amin

Elm

``````module EnglishBeggars exposing (englishBeggars)

currentBeggar distribution turn donation =
donation -- (0, 1)
|> Tuple.first -- 0
|> modBy distribution -- modBy 0 = 0, modBy 1 = 1, modBy 2 = 0
|> (==) turn -- 0 == 0 = True, 1 == 0 = False, 0 == 0 = True

distribute donations distribution turn =
donations -- [1, 2, 3, 4, 5]
|> List.indexedMap Tuple.pair -- [(0, 1), (1, 2), (2, 3), (3, 4), (4, 5)]
|> List.filter (currentBeggar distribution turn) -- [(0, 1), (2, 3), (4, 5)]
|> List.map Tuple.second -- [1, 3, 5]
|> List.sum -- 9

englishBeggars : List Int -> Int -> List Int
englishBeggars donations distribution =
List.range 0 (distribution - 1) -- [0, 1]
|> List.map (distribute donations distribution) -- [9, 6]
``````

Tests

``````module EnglishBeggarsTest exposing (suite)

import EnglishBeggars exposing (englishBeggars)
import Expect exposing (equal)
import Test exposing (Test, describe, test)

suite : Test
suite =
describe "English beggars"
[ test "Should return [9, 6] for a donation of [1, 2, 3, 4, 5] between 2 beggars" <|
\_ -> englishBeggars [ 1, 2, 3, 4, 5 ] 2 |> equal [ 9, 6 ]
, test "Should return [5, 7, 3] for a donation of [1, 2, 3, 4, 5] between 3 beggars" <|
\_ -> englishBeggars [ 1, 2, 3, 4, 5 ] 3 |> equal [ 5, 7, 3 ]
, test "Should return [1, 2, 3, 0] for a donation of [1, 2, 3] between 4 beggars" <|
\_ -> englishBeggars [ 1, 2, 3 ] 4 |> equal [ 1, 2, 3, 0 ]
]
``````