## DEV Community is a community of 641,972 amazing developers

We're a place where coders share, stay up-to-date and grow their careers.

# Discussion on: Daily Challenge #29 - Xs and Os

## Replies for: How about a reduce to keep it in one loop? (JS) XO = str => [...str].reduce( (acc, c) => acc + (c == 'x' || c == 'X') - (c == 'o' ||...

nishu1343

Bro, nice solution .cud u explain me what is going inside the reduce. And im not able to reproduce it.

willsmart • Edited

It's working for me in chrome just now. Try wrapping the output line in a `console.log` if you're outside a REPL

In the reduce `acc` is the accumulator, keeping a sum of values as they come up. The reduce returns the sum at the end.
Each `c` is a character from the string (`...str` is an array of the chars from `str`)
`c == 'x' || c == 'X'` is obv a boolean. The code uses the fact that in JS `Number(true) == 1` and `Number(false) == 0`, so it's a shorter way of saying:

``````XO = str =>
[...str].reduce(
(acc, c) => acc + (c == 'x' || c == 'X' ? 1 : 0) - (c == 'o' || c == 'O' ? 1 : 0),
0
) == 0;
``````

So each x adds one to the sum, and each o subtracts one. If the sum is zero there are the same number of x's as o's