Header

  1. View current page

    종텐의 작업실

Profile_img_60x60_01
1

2. SYNAP + SOFT = WANTS + YOU

문제

문제를 풀면 사이냅소프트에서 기념품을 드립니다.
원하신다면 입사특전도 있습니다.


*이벤트기간 : 2007년 9월 14일까지*


'SEND + MORE = MONEY' 라고 들어 보셨나요?? 모르셔도 상관없습니다. 고고싱~!!

이 문제는 20세기 최고의 퍼즐리스트중 한명인 헨리 듀드니가 만든 대표적인 암호산술 문제입니다.
각 알파벳은 하나의 숫자를 나타내고, 숫자의 첫번째자리에 '0' 을 쓸 수는 없습니다.
한마디로 이 문제에서 'S'와 'M'은 '0'이 아니라는 거죠. 답이 궁금하세요?

답은 한가지 경우가 있습니다. 먼저 연습 삼아 연필로 풀어보세요. ^0^/

  • 'SEND +MORE = MONEY' [답보기]
    9567 +1085 = 10652[E=5, D=7, M=1, O=0, N=6, S=9, R=8, Y=2]

재밌죠? 하나 더 해볼까요? 이번엔 덧셈은 말고 곱셈으로 해보죠.
사이냅소프트 사장님 이름으로 해보죠. ^^*
'Allen Kyonghun Jeon' 으로 암호산술문제를 만들었습니다.

  • 'ALLEN = K * JEON' 이 문제의 답은 3가지가 있습니다. [
  • 답보기]

    ALLEN = K * JEON
    18825 = 3 * 6275[A=1, E=2, K=3, J=6, L=8, O=7, N=5]
    18865 = 7 * 2695[A=1, E=6, K=7, J=2, L=8, O=9, N=5]
    65520 = 9 * 7280[A=6, E=2, K=9, J=7, L=5, O=8, N=0]

어때요? 해볼만하시죠? 어려워 보여도 조금만 신경쓰면 쉽게 풀 수 있을 겁니다. ^^*


자~ 여기까진 문제의 이해를 돕기 위한 도움말이었습니다~!!
드디어 진짜 문제가 나갑니다~ 집중하세요~! ^0^/

'SYNAP + SOFT = WANTS + YOU'

해석해볼까요??  '사이냅소프트는 당신을 원하고 있습니다' 라는군요~ *^0^* 
 
기념품을 받으실 열쇠는 '가능한 모든 답의 좌변 숫자를 더한 값'입니다.

 

출처 : http://205486422643.synap.co.kr/

 


 

 

 

 

 

 

 

 

 

 

답안? (풀은거)

다운로드 : synap.cpp

  1. #include <iostream>

    int main()
    {
        unsigned int sum = 0;
       
        // 10중-_-for문을 돌린다.. s,w,y는 0일때를 제외한다.
        for (int a = 0; a < 10; ++a)
        for (int f = 0; f < 10; ++f)
        for (int n = 0; n < 10; ++n)
        for (int o = 0; o < 10; ++o)
        for (int p = 0; p < 10; ++p)
        for (int s = 1; s < 10; ++s)
        for (int t = 0; t < 10; ++t)
        for (int u = 0; u < 10; ++u)
        for (int w = 1; w < 10; ++w)
        for (int y = 1; y < 10; ++y)
        {
            // 1로 각 비트를 채운다. 10개의 숫자를 채운다.
            int check = 1<<a | 1<<f | 1<<n | 1<<o | 1<<p | 1<<s | 1<<t | 1<<u | 1<<w | 1<<y;
           
            // 0x3ff == 1111111111b / 0..9 가 모두 하나씩 있는지 체크한다.
            if (0x3ff == check)
            {
                int left = s*10000 + y*1000 + n*100 + a*10 + p + s*1000 + o*100 + f*10 + t;
                int right = w*10000 + a*1000 + n*100 + t*10 + s + y*100 + o*10 + u;
               
                if (left == right)
                {
                    sum += left;
                    std::cout << "found: " << left << "\tsum: " << sum << "\n";
                }
            }
        }
       
        std::cout << "Congratulation!!\nSum = " << sum << std::endl;
       
        return 0;
    }

 

후기?!

9*8*7*(7!) 의 경우의 수를 루프 돌아야 하는데, 10중 for문 말고 좀 우아한 방법으로 해보고 싶었으나...

KLDP에서 누가 배열을 교환하는 식으로 했는데 매우 느리다는 말을 듣고.. -_-;;

걍 무식하게 10중 for문으로 했다.

레프트 쉬프트한거랑, 0x3ff == 1111111111b 부분이 하이라이트라면 하이라이트.. -_-)v~

생각만큼 느리진 않다?! 1분 안에 결과 나오는듯.

History

Last edited on 03/02/2008 16:18 by jong10

Comments (0)

You must log in to leave a comment. Please sign in.