string getHint(string secret, string guess) {
        if (secret.size() != guess.size()) return "0A0B";
        // two numbers
        // secret + guess
        int cntA = 0, cntB = 0;
        vector<int> vecS(10, 0);
        vector<int> vecG(10, 0);

        for (int i = 0; i < secret.size(); ++i) {
        	if (secret[i] == guess[i]) {
        		++cntA;
        	} else {
        		++vecS[int(secret[i]-'0')];
        		++vecG[int(guess[i]-'0')];
        	}
        }
        for (int i = 0; i < 10; ++i) {
        	cntB += min(vecS[i], vecG[i]);
        }
        return to_string(cntA)+'A'+to_string(cntB)+'B';
    }
Beispiel #2
0
const EFFECT_RESULT CFlareSprite::RenderEx( const CMatrix& matWorld, RenderObjStyle* pRORS )
{
	const CFlareSpriteProp* pProp = (CFlareSpriteProp*)m_pEffectUnitProp;

	EFFECT_RESULT Result( NULL, true, false );

	if( !IsInRenderTime() )
		return Result;

	float fPercent = GetUnitPercent();
	CCamera* pCamera = CMainWindowTarget::GetInst()->GetCamera();
	//CGraphic::GetInst()->GetCamera( &pCamera );

	float DeltaTime = m_DeltaTime / 1000.0f;
	CVector3f OrgOffset( 0, 0, 0 );
	ITexture* pCurText = NULL;
	uint32 Color = 0xff000000;
	if( pProp->m_vecOffset.size() )
		OrgOffset = GetMapValue( pProp->m_vecOffset, fPercent );
	if( pProp->m_Texture.size() )
		pCurText = GetMapState( pProp->m_Texture, fPercent*pProp->m_nTextureCircle - (int)( fPercent*pProp->m_nTextureCircle ) );
	if( pProp->m_Color.size() )
		Color = GetMapValue( pProp->m_Color, fPercent )&0x00ffffff;

	VerNCT* pVB;
	RenderState* pRS;
	CMatrix* pMatrix = CGraphic::GetInst()->GetRenderStack( RS_DEFAULT, pCurText, NULL, PT_TRIANGLESTRIP, 4, 2, 
		VerNCT::Format, sizeof(VerNCT), (void**)&pVB, NULL, (void**)&pRS );

	CVector3f InvNormal( 0, 0, 1 );
	if( pProp->m_eFaceType == SPRF_CAMERA || ( pProp->m_vecNormal.x == 0 && pProp->m_vecNormal.y == 0 && pProp->m_vecNormal.z == 0 ) )
		pCamera->GetBillboardAll( m_matWorld );
	else
	{
		if( pProp->m_AngularVelocity > 0.00001f )
		{
			m_CurAngle += pProp->m_AngularVelocity*DeltaTime;
			if( m_CurAngle > 6.283f )
				m_CurAngle = 0.0;
			if( m_CurAngle < 0.0f )
				m_CurAngle = 6.283f;
			CMatrix Rotate;
			pProp->m_pEffectClassDesc->SetRotate( Rotate, pProp->m_vecRotate/pProp->m_AngularVelocity, m_CurAngle );
			if( pProp->m_eFaceType == SPRF_CAMERANONEX )
			{
				pCamera->GetBillboardNoneX( m_matWorld );
				m_matWorld = Rotate*m_matWorld;
			}
			else
				m_matWorld = pProp->m_matNormal*Rotate;
		}
		else
		{
			if( pProp->m_eFaceType == SPRF_CAMERANONEX )
				pCamera->GetBillboardNoneX( m_matWorld );
			else
				m_matWorld = pProp->m_matNormal;
		}

		if( pProp->m_eFaceType == SPRF_NORMAL )
			InvNormal    = -pProp->m_vecNormal;
	}

	CVector3f Offset,CameraDir;
	CameraDir = pCamera->getDIRECTION();//pCamera->GetCameraDir( CameraDir );
	OrgOffset.FastMultiply( m_matWorld );
	m_matWorld._41 = Offset.x;
	m_matWorld._42 = Offset.y;
	m_matWorld._43 = Offset.z;

	*pMatrix = m_matWorld;

	float Scale = pProp->m_fMinSize;
	uint32 Alpha = pProp->m_byMinAlpha;
	float Dot = InvNormal.Dot( CameraDir );
	if( Dot > pProp->m_MaxCosAngle )
	{
		Scale += abs( pProp->m_fMaxSize - pProp->m_fMinSize )*( Dot - pProp->m_MaxCosAngle )/( 1 - pProp->m_MaxCosAngle );
		Alpha += (uint32)( abs( (int)pProp->m_byMaxAlpha - (int)pProp->m_byMinAlpha )*( Dot - pProp->m_MaxCosAngle )/( 1 - pProp->m_MaxCosAngle ) );
		Alpha =  ( (uint32)(BYTE)Alpha ) << 24;
	}
	Color |= Alpha;


	CVector3f vecS( m_matWorld._11 + m_matWorld._12 + m_matWorld._13, 
					m_matWorld._21 + m_matWorld._22 + m_matWorld._23,
					m_matWorld._31 + m_matWorld._32 + m_matWorld._33 );
	Scale = vecS.Mag()*Scale;

	pRS->m_Cull			= CULLT_NONE;				//D3DCULL_NONE;
	pRS->m_AlpOP_S0		= TOP_MODULATE;				//D3DTOP_MODULATE;
	pRS->m_LightEnable	= pProp->m_bLightEnable;
	pRS->m_ZTestEnable	= pProp->m_eZTest != Z_NONE;
	pRS->m_ZWrite			= pProp->m_eZTest != Z_TESTONLY;

	if( pProp->m_eBlendModel == SPRB_NONE )
		pRS->m_AlphaBlendEnable = FALSE;
	else
	{
		pRS->m_AlphaBlendEnable = TRUE;
		if( pProp->m_eBlendModel == SPRB_ADD )
			pRS->m_DestBlend = BLEND_ONE;			//D3DBLEND_ONE;
		else if( pProp->m_eBlendModel == SPRB_LIGHT )
		{
			VerNCT* pVB;
			RenderState* pMulRS;
			CMatrix* pMat = CGraphic::GetInst()->GetRenderStack( RS_DEFAULT, pCurText, NULL, PT_TRIANGLESTRIP, 4, 2, 
				VerNCT::Format, sizeof(VerNCT), (void**)&pVB, NULL, (void**)&pMulRS );
			*pMat = m_matWorld;

			pVB[0].Set( -Scale, -Scale, 0.0f, 0, 0, 1, Color, 0.0f, 1.0f );
			pVB[1].Set( -Scale,  Scale, 0.0f, 0, 0, 1, Color, 0.0f, 0.0f );
			pVB[2].Set(  Scale, -Scale, 0.0f, 0, 0, 1, Color, 1.0f, 1.0f );
			pVB[3].Set(  Scale,  Scale, 0.0f, 0, 0, 1, Color, 1.0f, 0.0f );

			pMulRS->m_DestBlend = 2;			//D3DBLEND_ONE;
			pMulRS->m_SrcBlend = 9;				//D3DBLEND_DESTCOLOR;
			pRS->m_DestBlend = BLEND_ONE;				//D3DBLEND_ONE;
		}
	}

	pVB[0].Set( -Scale, -Scale, 0.0f, 0, 0, 1, Color, 0.0f, 1.0f );
	pVB[1].Set( -Scale,  Scale, 0.0f, 0, 0, 1, Color, 0.0f, 0.0f );
	pVB[2].Set(  Scale, -Scale, 0.0f, 0, 0, 1, Color, 1.0f, 1.0f );
	pVB[3].Set(  Scale,  Scale, 0.0f, 0, 0, 1, Color, 1.0f, 0.0f );

	return Result;
}