/**************************************** * Fonction qui tente de propager un elem * sur toute la diagonale ***************************************/ inline int Propager(int diag, int val) { /* Variables */ int lig, t; /* On place val en haut de la diagonale */ SetValueAt(val, 1, diag); /* Cas trivial */ if(diag == 1) return TRUE; /* On essaie de propager sur la diagonale */ for(lig = 2; lig <= diag; lig++) { val = abs(ValueAt(lig-1, diag-1) - ValueAt(lig-1, diag)); if(Contains(val, lig, diag)) return FALSE; else { /* On place l'element */ SetValueAt(val, lig, diag); /* Maintien de la liste des places */ /* t = Indice(lig, diag); if(progres < t) progres = t+1; */ } } /* On a reussi a propager jusqu'en bas */ return TRUE; }
void SudokuField::_ComputeValidMask(uint32 x, uint32 y, bool setSolved) { if (ValueAt(x, y)) return; // check row uint32 foundMask = 0; for (uint32 i = 0; i < fSize; i++) { uint32 value = ValueAt(i, y); if (value && _ValidValueAt(i, y)) foundMask |= 1UL << (value - 1); } // check column for (uint32 i = 0; i < fSize; i++) { uint32 value = ValueAt(x, i); if (value && _ValidValueAt(x, i)) foundMask |= 1UL << (value - 1); } // check block uint32 offsetX = x / fBlockSize * fBlockSize; uint32 offsetY = y / fBlockSize * fBlockSize; for (uint32 partY = 0; partY < fBlockSize; partY++) { for (uint32 partX = 0; partX < fBlockSize; partX++) { uint32 value = ValueAt(partX + offsetX, partY + offsetY); if (value && _ValidValueAt(partX + offsetX, partY + offsetY)) foundMask |= 1UL << (value - 1); } } SetValidMaskAt(x, y, ~foundMask); if (setSolved) { // find the one set bit, if not more uint32 value = 0; for (uint32 i = 0; i < fSize; i++) { if ((foundMask & (1UL << i)) == 0) { if (value != 0) { value = 0; break; } value = i + 1; } } if (value != 0) SetValueAt(x, y, value, true); } }
/**************************************** * Procedure qui remplit la pyramide * de facon correcte ***************************************/ void Remplir(int valeur) { /* On mémorise l'instant de début */ start = time(NULL); /* On met la valeur dans la première case */ SetValueAt(valeur, 1, 1); /* On commence par la deuxième diagonale */ RemplirH(2); /* On mémorise l'instant de fin */ stop = time(NULL); }
void ImageTile::AddBaseline(Image2D &dest, double sign) { // Add or subtract baseline for(unsigned channel = 0;channel<_channelCount;++channel) { for(unsigned scan = 0;scan<_scanCount;++scan) { long double val = dest.Value(scan+_scanOffset, channel+_channelOffset); val += sign * EvaluateBaselineFunction(scan, channel); SetValueAt(dest, channel, scan, val); } } }
void VJSArray::PushValue( const VJSValue& inValue, JS4D::ExceptionRef *outException) const { SetValueAt( GetLength(), inValue, outException); }