Script / CSS

G1sUtil.js

G1sBlogger.js

G1sNavigationList.js

G1sCode

G1sTagList

Posts List

2012년 3월 5일 월요일

[Project Euler] 22. 영문 이름 점수 합계 구하기

22. 영문 이름 점수 합계 구하기
여기 5천개 이상의 영문 이름들이 들어있는 46KB짜리 텍스트 파일 names.txt 이 있습니다 (우클릭해서 다운로드 받으세요).
이제 각 이름에 대해서 아래와 같은 방법으로 점수를 매기고자 합니다.

  • 먼저 모든 이름을 알파벳 순으로 정렬합니다.
  • 각 이름에 대해서, 그 이름을 이루는 알파벳에 해당하는 숫자(A=1, B=2, ..., Z=26)를 모두 더합니다.
  • 여기에 이 이름의 순번을 곱합니다.

예를 들어 "COLIN"의 경우, 알파벳에 해당하는 숫자는 3, 15, 12, 9, 14이므로 합이 53, 그리고 정렬했을 때 938번째에 오므로 최종 점수는 938 × 53 = 49714가 됩니다.

names.txt에 들어있는 모든 이름의 점수를 계산해서 더하면 얼마입니까?
Click
문제는 간단한 문제. 파일 I/O를 보려는 걸까요...
<script>
/* 넘겨받은 string 값을 정렬한뒤 점수 계산. */
function p022(values){
    var names = values.split(',');
    names.sort();
    var sum = 0;
    for(var i=0; i<names.length; i++)
        for(var j=1; j<names[i].length-1; j++)
            sum += (i+1) * (names[i].charCodeAt(j)-64);
    alert(sum);
}
</script>
파일 접근은 이렇게... 하여 위에 함수가 호출 되도록..
<script>
/* 파일을 읽어서 함수 실행. */
function getData(url,param, method, func){
    // 기본적인 변수 선언 
    var xmlhttp = null; 
    if (window.XMLHttpRequest)  { xmlhttp=new XMLHttpRequest(); } // code for IE7+, Firefox, Chrome, Opera, Safari
    else    { xmlhttp=new ActiveXObject("Microsoft.XMLHTTP");   } // code for IE6, IE5

    // URL 주소의 값을 가져온다 
    xmlhttp.open(method, url,true); 
    xmlhttp.setRequestHeader("Cache-Control", "no-cache");
    xmlhttp.setRequestHeader("Pragma", "no-cache");

    // 값을 가져 왔을경우 호출할 메소드를 바로 선언 
    xmlhttp.onreadystatechange = function() { 
        // readyState 가 4 고 status 가 200 일 경우 올바르게 가져옴 
        if(xmlhttp.readyState==4){
            if (xmlhttp.status == 200){
                /*F*/
                if (xmlhttp.responseText != null)
                    // 지정된 함수 실행.
                    func(xmlhttp.responseText); 
                else
                    alert("Failed to file - file not found.");
            }
            else
             alert("Error code "+xmlhttp.status+" received:"+xmlhttp.statusText);
        } 
    } 
    
    xmlhttp.send(param); 
}

getData(url,null,"GET",p022);
</script>

댓글 없음:

댓글 쓰기