Avatar billede plaf Nybegynder
20. juli 2007 - 21:49 Der er 7 kommentarer og
1 løsning

Løs gåden og få koordinater som resultat

Jeg har fået en gåde... Når gåden er løst, får man et sæt koordinater svarende til et sted i Aalborg-området.

Nogen eksperter her, der kan løse gåden?

Sub FindAalborgDocklands()
Dim TiB
Dim cTiB As String
Dim Coordinates As String
Dim CD(0 to 4) As Integer
Dim SecretCode As Long  ' Special secret variable, see cache log-book
Dim i As Integer

TiB = ?????????????  ' Decimal number of bytes in one binary TeraByte
cTiB = Trim(Str(TiB))

For i = 0 To Len(cTiB) - 9
  CD(i) = CheckDigit(Mid(cTiB, i + 1, 9))
Next i

Coordinates = _
"N 57 " + _
Trim(Str(CD(0) - CD(1))) + _
Trim(Str(3 * CD(4))) + _
"." + _
Trim(Str(CD(0) - CD(1))) + _
Trim(Str(CD(3) - CD(2) - CD(4))) + _
Trim(Str(CD(4))) + _
" E 009 " + _
Trim(Str(CD(2) - CD(4))) + _
Trim(Str(CD(2))) + _
"." + _
Trim(Str(CD(3))) + _
Trim(Str(CD(4))) + _
Trim(Str(CD(0) - CD(1)))

SecretCode = _
3999999# * CD(0) + _
33330# * CD(2) + _
8255# * CD(3)

End Sub


' Calculate modulus-11 check digit for a 9-digit number received as a string.
' The same calculation is used for danish social security numbers: CPR */

Function CheckDigit(CNum As String) As Integer
Dim Weight As String
Dim CheckSum As Integer
Dim Reminder As Integer
Dim i As Integer

Weight = "?????????"  ' Use the weights for the check digit algorithm of danish CPR numbers.
CheckSum = 0
For i = 0 To 8
  CheckSum = CheckSum + CInt(Mid(Weight, i + 1, 1)) * CInt(Mid(CNum, i + 1, 1))
Next i

Reminder = CheckSum Mod 11

Select Case Reminder
  Case 0
    CheckDigit = 0
  Case 1
    CheckDigit = -1
  Case Else
    CheckDigit = 11 - Reminder
End Select

End Function
Avatar billede kjulius Novice
20. juli 2007 - 22:43 #1
Tja, en TiB (TibiByte) burde være lig 2**40 (2 i 40. potens) = 1099511627776 bytes.

Så vidt jeg husker er den vægtning der bruges ved beregning af CPR nummeret 2 (det er den værdi som IBM bruger i deres modulus 11 standard - da CPR registreret formentlig kører på en mainframe er det naturligt).
Avatar billede plaf Nybegynder
20. juli 2007 - 22:46 #2
Er du så også så stærk i kode, at du kan udregne koordinaterne?

/Plaf
Avatar billede kjulius Novice
20. juli 2007 - 23:15 #3
Jeg må vist modificere det med vægningen lidt. I modulus 11 benyttes tallene fra 2 til 7. Hvis der er flere cifre, startes forfra. Derfor bør den vægtning der skal bruges i koden nok være: "234567234", hvis det virkelig skal være som i et CPR nummer (der jo består af en 6-cifret fødselsdato + 3 cifret serienummer, hvorfra det sidste tjekciffer beregnes).

Når de to værdier er indsat i koden og den køres (jeg har indsat en debug.print i koden for at få udskrevet koordinaterne og den "hemmelige" kode, returneres: N 57 -127.-1-159 E 009 -45.-19-1          24158389

Er det det rigtige resultat?
Avatar billede kjulius Novice
23. juli 2007 - 21:51 #4
plaf?
Avatar billede tjacob Juniormester
24. juli 2007 - 13:56 #5
Avatar billede kjulius Novice
24. juli 2007 - 20:36 #6
Okay, så jeg havde vendt vægtningen forkert. I stedet for 234567234 skulle den have været Weight = "432765432"

FindAalborgDocklands
N 57 03.001 E 009 56.710    32257757
Avatar billede plaf Nybegynder
03. marts 2008 - 15:05 #7
Skriv lige svar - det er vist rigtigt...
Avatar billede kjulius Novice
04. marts 2008 - 01:33 #8
Kommer her...
Avatar billede Ny bruger Nybegynder

Din løsning...

Tilladte BB-code-tags: [b]fed[/b] [i]kursiv[/i] [u]understreget[/u] Web- og emailadresser omdannes automatisk til links. Der sættes "nofollow" på alle links.

Loading billede Opret Preview
Kategori
Kurser inden for grundlæggende programmering

Log ind eller opret profil

Hov!

For at kunne deltage på Computerworld Eksperten skal du være logget ind.

Det er heldigvis nemt at oprette en bruger: Det tager to minutter og du kan vælge at bruge enten e-mail, Facebook eller Google som login.

Du kan også logge ind via nedenstående tjenester