C++ Trap #3
int main()
{
unsigned int x = 0xB0FF14a5;
unsigned int y = 0x7340c00e;
/*INPUT*/
if(x==0x7340c00e && y==0xB0FF14a5) victory();
return 0;
}
Your main objective is to call the victory function.
You must put one line of your code:
- Max 11 chars.
- You can't use: "main", "victory", "asm", "&", "*", "(", "/".
- You have only one semicolon.
문제의 조건은 3가지 입니다.
- Max 11 chars. (최대 11글자이며, 11글자 안으로 해결하자.)
- You can't use: "main", "victory", "asm", "&", "*", "(", "/". (위 구문들을 사용할 수 없다.)
- You have only one semicolon. (오직 하나의 세미콜론을 사용해라)
소스를 보면 알겠지만, 먼저 x, y가 선언되어 있다.
unsigned int x = 0xB0FF14a5;
unsigned int y = 0x7340c00e;
그리고 if문을 보면 x, y 값이 서로 뒤바껴야 문제가 해결된다.
if(x==0x7340c00e && y==0xB0FF14a5) victory();
그럼 이제 생각을 해봐야한다. 어떻게 해야 11글자 안으로 x와 y값을 바꿀수 있을까?
XOR Swap 이라는 것이 있다.
A = A ^ B;
B = A ^ B;
A = A ^ B;
먼저 위와 같이 이런 방식을 따르며, A와 B의 값이 서로 뒤바뀐다.
위 소스를 조금더 줄여보면 아래 소르와 같이 바꿀수 있다.
A = A ^ A ^ B
B = A ^ B ^ B
이후 위 소스를 조금 더 풀어주고, 정답을 넣어주면 문제가 해결된다.
물론 정답은 여기에 포스팅하지 않을 것이다. 정답이 정 궁금하거나, 문의가 있다면 댓글을 통해서 알려주세요!