2010-01-22 3 views
0

수비학을 계산하는 함수가 필요합니다. 예를 들어 "XYZ"를 입력하면 출력이 3이됩니다. 여기수비학을 계산하는 VB 스크립트의 함수를 원합니다.

는 3 된 방법은 다음을 추가하는

X = 24 
Y = 25 
Z = 26 

또 다시 3 (1 + 2)까지 추가 12 (7 + 5)까지 추가 75된다. 마찬가지로 어떤 이름을 전달해야할지, 내 출력은 한자리 수 점수 여야합니다.

+0

이 함수형 프로그래밍과는 아무 상관이 없습니다. 해당 태그를 제거하십시오. –

+0

@Max가 완료되었습니다. –

답변

1

나는 이것을 어떻게 사용할 수 있었는지 전혀 알지 못하지만 어쨌든 쓸 재미가있다. VBScript로

Private Function CalcStupidNumber(ByVal s As String) As Integer 
    s = s.ToLower 
    If (s.Length = 1) Then 'End condition 
     Try 
      Return Integer.Parse(s) 
     Catch ex As Exception 
      Return 0 
     End Try 
    End If 
    'cover to Values 
    Dim x As Int32 
    Dim tot As Int32 = 0 
    For x = 0 To s.Length - 1 Step 1 
     Dim Val As Integer = ConvertToVal(s(x)) 
     tot += Val 
    Next 
    Return CalcStupidNumber(tot.ToString()) 
End Function 

Private Function ConvertToVal(ByVal c As Char) As Integer 
    If (Char.IsDigit(c)) Then 
     Return Integer.Parse(c) 
    End If 

    Return System.Convert.ToInt32(c) - 96 ' offest of a 
End Function 
+2

하지만 vb 스크립트가 아닌 VB 스크립트 –

+0

예 VB 스크립트 부분을 알지 못했습니다. – rerun

2

:

Function numerology(literal) 

    result = 0 
    for i = 1 to Len(literal) 
     '' // for each letter, take its ASCII value and substract 64, 
     '' so "A" becomes 1 and "Z" becomes 26 
     result = result + Asc(Mid(literal, i, 1)) - 64 
    next 

    '' // while result is bigger than 10, let's sum it's digits 
    while(result > 10) 
     partial = 0 
     for i = 1 to Len(CStr(result)) 
      partial = partial + CInt(Mid(CStr(result), i, 1)) 
     next 
     result = partial 
    wend 

    numerology = result 

End Function 
+2

참고 : * // 결과는 10보다 커집니다. * 부분은 실제로 디지털 루트 계산입니다 (http : //en.wikipedia .org/wiki/Digital_root), 이는 간단한 수식 '1 + (result-1) Mod 9'을 사용하여 수행 할 수 있습니다. ;) – Helen

+0

@Helen, 사랑스러워! 당신의 대답이 추가 된 것을 보았습니다. 그래서 나는이 버전을 그대로 유지할 것입니다. –

+0

안녕 루벤스 파리 아스 답변을 게시 해 주셔서 감사합니다. 이 프로그램은 매우 효율적이었습니다. 방금 계산을 위해 literal = Ucase (리터럴) 줄을 추가했습니다. 그게 전부 야. 도움을 주셔서 감사합니다 – Deepa

5

을 여기에 있습니다 :

Function Numerology(Str) 
    Dim sum, i, char 

    ' Convert the string to upper case, so that 'X' = 'x' 
    Str = UCase(Str) 

    sum = 0 
    ' For each character, ... 
    For i = 1 To Len(Str) 
    ' Check if it's a letter and raise an exception otherwise 
    char = Mid(Str, i , 1) 
    If char < "A" Or char > "Z" Then Err.Raise 5 ' Invalid procedure call or argument 

    ' Add the letter's index number to the sum 
    sum = sum + Asc(char) - 64 
    Next 

    ' Calculate the result using the digital root formula (http://en.wikipedia.org/wiki/Digital_root) 
    Numerology = 1 + (sum - 1) Mod 9 
End Function 
+0

헬렌 답장을 보내 주셔서 감사합니다. 그것은 좋은 대답입니다. 고맙습니다 – Deepa