public IActionResult Solve(LightBulbPuzzleRequest model)
        {
            try
            {
                model.BulbsRemainingIlluminated = _lightbulbService.Solve(model);

                return(Ok(model));
            }
            catch (Exception ex)
            {
                return(BadRequest(ex.Message));
            }
        }
예제 #2
0
        public int[] Solve(LightBulbPuzzleRequest model)
        {
            bool[] switches = Enumerable.Repeat(false, model.NumOfBulbs).ToArray();
            int[]  result;

            try
            {
                // flip switches
                for (int i = 1; i <= model.NumOfPeople; i++)
                {
                    switches = switches.Select((value, index) =>
                    {
                        if ((index + 1) % i == 0)
                        {
                            return(!value);
                        }

                        return(value);
                    }).ToArray();
                }

                // find indices of illuminated bulbs
                result = Enumerable.Range(0, switches.Length).Where(i => switches[i]).ToArray();

                // increment each
                for (var i = 0; i < result.Length; i++)
                {
                    result[i]++;
                }
            }
            catch (Exception ex)
            {
                throw ex;
            }

            return(result);
        }