original_string: public static function checkSolution(array $solution, array $task = null)
      {
          if(!self::checkInput($solution))
          {
              throw new \InvalidArgumentException('Input is no Sudoku array.');
          }
  
          $dim = count($solution);
  
          if($task !== null)
          {
              if(count($task) !== $dim)
                  return false;
  
              for($i = 0; $i < $dim; $i++)
              {
                  for($j = 0; $j < $dim; $j++)
                  {
                      if($task[$i][$j] !== null && $solution[$i][$j] !== $task[$i][$j])
                          return false;
                  }
              }
          }
  
  
          // check rows
          for($row = 0; $row < $dim; $row++)
          {
              $valueFound = array_fill(1,$dim,false);
              for($col = 0; $col < $dim; $col++)
              {
                  // null check is only needed here
                  if($solution[$row][$col] === null || $valueFound[$solution[$row][$col]] === true)
                      return false;
                  else
                      $valueFound[$solution[$row][$col]] = true;
              }
          }
  
          // check columns
          for($col = 0; $col < $dim; $col++)
          {
              $valueFound = array_fill(1,$dim,false);
              for($row = 0; $row < $dim; $row++)
              {
                  if($valueFound[$solution[$row][$col]] === true)
                      return false;
                  else
                      $valueFound[$solution[$row][$col]] = true;
              }
          }
  
          // check blocks
          $blockSize = self::$blockSizes[$dim];
          for($row = 0; $row < $dim; $row += $blockSize)
          {
              for($col = 0; $col < $dim; $col += $blockSize)
              {
                  $valueFound = array_fill(1,$dim,false);
                  for($blockRow = 0; $blockRow < $blockSize;$blockRow++)
                  {
                      for($blockCol = 0; $blockCol < $blockSize;$blockCol++)
                      {
                          if($valueFound[$solution[$row+$blockRow][$col+$blockCol]] === true)
                              return false;
                          else
                              $valueFound[$solution[$row+$blockRow][$col+$blockCol]] = true;
                      }
                  }
              }
          }
  
          return true;
      }
code: public static function checkSolution(array $solution, array $task = null)
      {
          if(!self::checkInput($solution))
          {
              throw new \InvalidArgumentException('Input is no Sudoku array.');
          }
  
          $dim = count($solution);
  
          if($task !== null)
          {
              if(count($task) !== $dim)
                  return false;
  
              for($i = 0; $i < $dim; $i++)
              {
                  for($j = 0; $j < $dim; $j++)
                  {
                      if($task[$i][$j] !== null && $solution[$i][$j] !== $task[$i][$j])
                          return false;
                  }
              }
          }
  
  
          // check rows
          for($row = 0; $row < $dim; $row++)
          {
              $valueFound = array_fill(1,$dim,false);
              for($col = 0; $col < $dim; $col++)
              {
                  // null check is only needed here
                  if($solution[$row][$col] === null || $valueFound[$solution[$row][$col]] === true)
                      return false;
                  else
                      $valueFound[$solution[$row][$col]] = true;
              }
          }
  
          // check columns
          for($col = 0; $col < $dim; $col++)
          {
              $valueFound = array_fill(1,$dim,false);
              for($row = 0; $row < $dim; $row++)
              {
                  if($valueFound[$solution[$row][$col]] === true)
                      return false;
                  else
                      $valueFound[$solution[$row][$col]] = true;
              }
          }
  
          // check blocks
          $blockSize = self::$blockSizes[$dim];
          for($row = 0; $row < $dim; $row += $blockSize)
          {
              for($col = 0; $col < $dim; $col += $blockSize)
              {
                  $valueFound = array_fill(1,$dim,false);
                  for($blockRow = 0; $blockRow < $blockSize;$blockRow++)
                  {
                      for($blockCol = 0; $blockCol < $blockSize;$blockCol++)
                      {
                          if($valueFound[$solution[$row+$blockRow][$col+$blockCol]] === true)
                              return false;
                          else
                              $valueFound[$solution[$row+$blockRow][$col+$blockCol]] = true;
                      }
                  }
              }
          }
  
          return true;
      }
code_tokens: public static function checkSolution ( array $ solution , array $ task = null ) { if ( ! self :: checkInput ( $ solution ) ) { throw new \ InvalidArgumentException ( 'Input is no Sudoku array.' ) ; } $ dim = count ( $ solution ) ; if ( $ task !== null ) { if ( count ( $ task ) !== $ dim ) return false ; for ( $ i = 0 ; $ i < $ dim ; $ i ++ ) { for ( $ j = 0 ; $ j < $ dim ; $ j ++ ) { if ( $ task [ $ i ] [ $ j ] !== null && $ solution [ $ i ] [ $ j ] !== $ task [ $ i ] [ $ j ] ) return false ; } } } // check rows for ( $ row = 0 ; $ row < $ dim ; $ row ++ ) { $ valueFound = array_fill ( 1 , $ dim , false ) ; for ( $ col = 0 ; $ col < $ dim ; $ col ++ ) { // null check is only needed here if ( $ solution [ $ row ] [ $ col ] === null || $ valueFound [ $ solution [ $ row ] [ $ col ] ] === true ) return false ; else $ valueFound [ $ solution [ $ row ] [ $ col ] ] = true ; } } // check columns for ( $ col = 0 ; $ col < $ dim ; $ col ++ ) { $ valueFound = array_fill ( 1 , $ dim , false ) ; for ( $ row = 0 ; $ row < $ dim ; $ row ++ ) { if ( $ valueFound [ $ solution [ $ row ] [ $ col ] ] === true ) return false ; else $ valueFound [ $ solution [ $ row ] [ $ col ] ] = true ; } } // check blocks $ blockSize = self :: $ blockSizes [ $ dim ] ; for ( $ row = 0 ; $ row < $ dim ; $ row += $ blockSize ) { for ( $ col = 0 ; $ col < $ dim ; $ col += $ blockSize ) { $ valueFound = array_fill ( 1 , $ dim , false ) ; for ( $ blockRow = 0 ; $ blockRow < $ blockSize ; $ blockRow ++ ) { for ( $ blockCol = 0 ; $ blockCol < $ blockSize ; $ blockCol ++ ) { if ( $ valueFound [ $ solution [ $ row + $ blockRow ] [ $ col + $ blockCol ] ] === true ) return false ; else $ valueFound [ $ solution [ $ row + $ blockRow ] [ $ col + $ blockCol ] ] = true ; } } } } return true ; }
docstring: Checks if the input is a valid sudoku solution.
  
  @param array $solution The solution to be checked
  @param array $task     The task that should be result in the solution. If provided, it
  is checked if the solution relates to the task
  @return bool
  @throws \InvalidArgumentException
docstring_tokens: Checks if the input is a valid sudoku solution .