示例#1
0
// ================================================================================================
// Problem 13
// ================================================================================================
sint32 Problem13() {
    CBigInt sum;
    for(uintn i = 0; i < kNumbersSize; ++i)
        sum += CBigInt(kNumbers[i]);

    // -- iterate over the ten most significant digits
    uintn numdigits = sum.NumDigits();
    Assert_(numdigits >= 10, "Not enough digits : " UintNFmt_, numdigits);
    flagn correct = true;
    for(uintn i = numdigits; i > 0; --i) {
        CLog::Write("%c", sint8(sum.Digit(i-1) + '0'));
        correct = correct && (kAnswer[numdigits - i] - '0' == sint8(sum.Digit(i-1)));
    }
    CLog::Write("\n");

    Assert_(correct, "Sum should have been \n%s", kAnswer);

    return 0;
}
示例#2
0
void Crater::Generate(sint8 *outmap, sint32 outwidth, sint32 outheight,
                      IC3Rand *randgen,
                      const double *settings, sint32 numSettings)
#endif
{
	sint32 numCraters, maxRadius;
	if(numSettings >= 1) {
		numCraters = sint32(settings[0]);
	} else {
		numCraters = 50;
	}

	if(numSettings >= 2) {
		maxRadius = sint32(settings[1]);
	} else {
		maxRadius = 5;
	}

	sint32 maxRadiusSq = maxRadius * maxRadius;
	for(sint32 i = 0; i < numCraters; i++) {
		sint32 radius = randgen->Next(maxRadius) + 1;

		
		sint32 cx = randgen->Next(outwidth);
		sint32 cy = randgen->Next(outheight);

		
		sint32 x, y;

		
		sint32 ax, ay;

		
		sint32 rx, ry;

		sint32 rsq = radius * radius;

		for(x = cx - radius, rx = -radius; x <= cx + radius; x++, rx++) {
			ax = x;
			if(x < 0)
				ax += outwidth;
			if(x >= outwidth)
				ax -= outwidth;
			for(y = cy - radius, ry = -radius ; y <= cy + radius; y++, ry++) {
				ay = y;
				if(y < 0)
					ay += outheight;
				if(y >= outheight)
					ay -= outheight;
				sint32 const	dist_square	= (rx * rx) + (ry * ry);
				if (dist_square <= rsq)
				{
					sint32 const	origh	= sint32(outmap[ay * outwidth + ax]);
					sint32			newh	= origh - dist_square - maxRadiusSq;
					if (newh < -127)
					{
						newh = -127;
					}
					outmap[ay * outwidth + ax]	= sint8(newh);

				}
			}
		}
	}
#if !defined(USE_COM_REPLACEMENT)
	return S_OK;
#endif
}