Thread Rating:
  • 0 Vote(s) - 0 Average
  • 1
  • 2
  • 3
  • 4
  • 5
Challenge: Validate a code
#26
I did a benchmark between mine and antonis, i think he'll agree that they're very fair. Here they are.


Code:
defint a-z

const KEYMIN&   = 0&
const KEYMAX&   = 99999&
const VALIDKEY  = -1

declare sub loadKeyTable   ( filename as string )
declare function checkKey% ( keyToCheck as long )


'$dynamic
dim shared keyTable( KEYMAX \ 16384&, 16383 ) as integer
'$static


    ''
    '' Entry point
    ''
    dim result as integer  
    dim keyToCheck as long    
    dim indxa as integer, indxb as integer
    dim tmrIni as single, tmrEnd as single
    
  
    ''
    '' This is not part of the main program
    '' it's just setup.
    ''
    loadKeyTable "valid.txt"    
    keyToCheck = 13
    
    tmrIni = timer
    for  i = 0 to 31999
        indxa = keyToCheck  \  16384&
        indxb = keyToCheck and 16383&
        result = keyTable( indxa, indxb )

        indxa = keyToCheck  \  16384&
        indxb = keyToCheck and 16383&
        result = keyTable( indxa, indxb )
        
        indxa = keyToCheck  \  16384&
        indxb = keyToCheck and 16383&
        result = keyTable( indxa, indxb )
        
        indxa = keyToCheck  \  16384&
        indxb = keyToCheck and 16383&
        result = keyTable( indxa, indxb )
        
        indxa = keyToCheck  \  16384&
        indxb = keyToCheck and 16383&
        result = keyTable( indxa, indxb )
        
        indxa = keyToCheck  \  16384&
        indxb = keyToCheck and 16383&
        result = keyTable( indxa, indxb )

        indxa = keyToCheck  \  16384&
        indxb = keyToCheck and 16383&
        result = keyTable( indxa, indxb )
        
        indxa = keyToCheck  \  16384&
        indxb = keyToCheck and 16383&
        result = keyTable( indxa, indxb )
        
        indxa = keyToCheck  \  16384&
        indxb = keyToCheck and 16383&
        result = keyTable( indxa, indxb )
        
        indxa = keyToCheck  \  16384&
        indxb = keyToCheck and 16383&
        result = keyTable( indxa, indxb )
    next i
    tmrEnd = timer
    
    
    print "Blitz code does" + str$(clng( 32000#*10# / (tmrEnd-tmrIni) )) + " searches per second"



'' :::::::::
'' name: loadKeyTable
'' desc: Loads a bunch of valid keys
'' note: This is to be run BEFORE starting to time
''
'' :::::::::
defint a-z
sub loadKeyTable ( filename as string ) static
    dim currKey as long
    dim keysRead as long
    dim keysInFile as long
    
    dim i as integer, j as integer
    dim indxa as integer, indxb as integer
    
    
    open filename for input as #1    
    
    ''
    '' Clear table and load keys
    ''
    for  i = 0 to KEYMAX \ 16384&
        for  j = 0 to 16383
            keyTable( i, j ) = 0
        next j
    next i    

    while ( not eof( 1 ) )
        input #1, currKey
        
        if ( (currKey < KEYMIN) or (currKey > KEYMAX) ) then
            print "Error: Invalid key in file..."
            end
        end if
        
        ''
        '' Put key in table
        ''        
        indxa = currKey  \  16384&
        indxb = currKey and 16383&
        keyTable( indxa, indxb ) = VALIDKEY
    wend
        
    close #1
end sub


And Antonis
Code:
DECLARE FUNCTION funFirstPrime% (threshold%)
DEFINT A-Z
CONST empty = -1&
CONST QBOFFSET = 16636
'-----------------------------setup------------------------------------
filename$ = "valid.txt"
OPEN filename$ FOR INPUT AS #1
codecnt = 0
WHILE NOT EOF(1)
codecnt = codecnt + 1
INPUT #1, CODE$
WEND

TABLESIZE = funFirstPrime(codecnt)

REDIM SHARED CODES(-QBOFFSET TO TABLESIZE - QBOFFSET) AS LONG
FOR I = LBOUND(CODES) TO UBOUND(CODES)
   CODES(I) = empty
NEXT

SEEK 1, 1

WHILE NOT EOF(1)
INPUT #1, CODE&
KEYINDEX = (CODE& MOD TABLESIZE)
WHILE CODES(KEYINDEX - QBOFFSET) <> empty
   IF CODES(KEYINDEX - QBOFFSET) = CODE& THEN PRINT "Repeated code in input": END
   IF KEYINDEX = TABLESIZE THEN
      KEYINDEX = 0
   ELSE
      KEYINDEX = KEYINDEX + 1
   END IF
WEND
CODES(KEYINDEX - QBOFFSET) = CODE&
WEND
CLOSE

'--------------------------main loop-------------------------------------
    dim result as integer  
    dim tmrIni as single, tmrEnd as single

    CODE& = 13
        
    tmrIni = timer
    for  i = 0 to 31999
        KEYINDEX = (CODE& MOD TABLESIZE)
        
        WHILE CODES(KEYINDEX - QBOFFSET) <> CODE& AND CODES(KEYINDEX - QBOFFSET) <> empty
          IF KEYINDEX = TABLESIZE THEN
             KEYINDEX = 0
          ELSE
             KEYINDEX = KEYINDEX + 1
          END IF
        WEND
        result = CODES(KEYINDEX - QBOFFSET) = CODE&
        
        KEYINDEX = (CODE& MOD TABLESIZE)
        
        WHILE CODES(KEYINDEX - QBOFFSET) <> CODE& AND CODES(KEYINDEX - QBOFFSET) <> empty
          IF KEYINDEX = TABLESIZE THEN
             KEYINDEX = 0
          ELSE
             KEYINDEX = KEYINDEX + 1
          END IF
        WEND
        result = CODES(KEYINDEX - QBOFFSET) = CODE&
        
        KEYINDEX = (CODE& MOD TABLESIZE)
        
        WHILE CODES(KEYINDEX - QBOFFSET) <> CODE& AND CODES(KEYINDEX - QBOFFSET) <> empty
          IF KEYINDEX = TABLESIZE THEN
             KEYINDEX = 0
          ELSE
             KEYINDEX = KEYINDEX + 1
          END IF
        WEND
        result = CODES(KEYINDEX - QBOFFSET) = CODE&
        
        KEYINDEX = (CODE& MOD TABLESIZE)
        
        WHILE CODES(KEYINDEX - QBOFFSET) <> CODE& AND CODES(KEYINDEX - QBOFFSET) <> empty
          IF KEYINDEX = TABLESIZE THEN
             KEYINDEX = 0
          ELSE
             KEYINDEX = KEYINDEX + 1
          END IF
        WEND
        result = CODES(KEYINDEX - QBOFFSET) = CODE&
        
        KEYINDEX = (CODE& MOD TABLESIZE)
        
        WHILE CODES(KEYINDEX - QBOFFSET) <> CODE& AND CODES(KEYINDEX - QBOFFSET) <> empty
          IF KEYINDEX = TABLESIZE THEN
             KEYINDEX = 0
          ELSE
             KEYINDEX = KEYINDEX + 1
          END IF
        WEND
        result = CODES(KEYINDEX - QBOFFSET) = CODE&
        
        KEYINDEX = (CODE& MOD TABLESIZE)
        
        WHILE CODES(KEYINDEX - QBOFFSET) <> CODE& AND CODES(KEYINDEX - QBOFFSET) <> empty
          IF KEYINDEX = TABLESIZE THEN
             KEYINDEX = 0
          ELSE
             KEYINDEX = KEYINDEX + 1
          END IF
        WEND
        result = CODES(KEYINDEX - QBOFFSET) = CODE&
        
        KEYINDEX = (CODE& MOD TABLESIZE)
        
        WHILE CODES(KEYINDEX - QBOFFSET) <> CODE& AND CODES(KEYINDEX - QBOFFSET) <> empty
          IF KEYINDEX = TABLESIZE THEN
             KEYINDEX = 0
          ELSE
             KEYINDEX = KEYINDEX + 1
          END IF
        WEND
        result = CODES(KEYINDEX - QBOFFSET) = CODE&
        
        KEYINDEX = (CODE& MOD TABLESIZE)
        
        WHILE CODES(KEYINDEX - QBOFFSET) <> CODE& AND CODES(KEYINDEX - QBOFFSET) <> empty
          IF KEYINDEX = TABLESIZE THEN
             KEYINDEX = 0
          ELSE
             KEYINDEX = KEYINDEX + 1
          END IF
        WEND
        result = CODES(KEYINDEX - QBOFFSET) = CODE&
        
        KEYINDEX = (CODE& MOD TABLESIZE)
        
        WHILE CODES(KEYINDEX - QBOFFSET) <> CODE& AND CODES(KEYINDEX - QBOFFSET) <> empty
          IF KEYINDEX = TABLESIZE THEN
             KEYINDEX = 0
          ELSE
             KEYINDEX = KEYINDEX + 1
          END IF
        WEND
        result = CODES(KEYINDEX - QBOFFSET) = CODE&
        
        KEYINDEX = (CODE& MOD TABLESIZE)
        
        WHILE CODES(KEYINDEX - QBOFFSET) <> CODE& AND CODES(KEYINDEX - QBOFFSET) <> empty
          IF KEYINDEX = TABLESIZE THEN
             KEYINDEX = 0
          ELSE
             KEYINDEX = KEYINDEX + 1
          END IF
        WEND
        result = CODES(KEYINDEX - QBOFFSET) = CODE&

    next i
    tmrEnd = timer
    
    print "Antonis code does" + str$(clng( 32000#*10# / (tmrEnd-tmrIni) )) + " searches per second"



END

FUNCTION funFirstPrime (threshold)

tp30 = INT((threshold * 1.3))
IF tp30 / 2 = tp30 \ 2 THEN
   tp30 = tp30 + 1
END IF
c = tp30 - 2
IF c < 1 THEN
   c = 1
END IF
t2& = threshold * 2&
DO
   c = c + 2
   FOR z = 3 TO SQR(c)
      ind = -1
      IF c / z = c \ z THEN
         ind = FALSE
         EXIT FOR
      END IF
   NEXT z
   IF ind THEN
      IF (c - 3) / 4 = INT((c - 3) / 4) OR c > t2& THEN
         funFirstPrime = c
         EXIT DO
      END IF
   END IF
LOOP
END FUNCTION


After running each 8 times during the exact same conditions my best was 6301538 and Antonis was 2925714.
oship me and i will give you lots of guurrls and beeea
Reply


Messages In This Thread
Challenge: Validate a code - by Moneo - 07-27-2003, 05:15 AM
oooh - by Meg - 07-27-2003, 06:57 AM
Challenge: Validate a code - by Moneo - 07-27-2003, 08:00 AM
yikes. - by Meg - 07-27-2003, 10:54 AM
Challenge: Validate a code - by Blitz - 07-27-2003, 02:28 PM
Challenge: Validate a code - by Antoni Gual - 07-27-2003, 04:00 PM
Challenge: Validate a code - by Blitz - 07-27-2003, 04:14 PM
Challenge: Validate a code - by Blitz - 07-27-2003, 04:21 PM
Yeah you see - by seph - 07-28-2003, 02:05 AM
Challenge: Validate a code - by Moneo - 07-28-2003, 04:54 AM
Challenge: Validate a code - by Blitz - 07-28-2003, 05:30 AM
Challenge: Validate a code - by Moneo - 07-28-2003, 05:33 AM
Challenge: Validate a code - by Moneo - 07-28-2003, 05:39 AM
Challenge: Validate a code - by Blitz - 07-28-2003, 06:46 AM
Challenge: Validate a code - by Moneo - 07-28-2003, 06:59 AM
Challenge: Validate a code - by Moneo - 07-28-2003, 07:17 AM
Challenge: Validate a code - by Blitz - 07-28-2003, 07:51 AM
Challenge: Validate a code - by Antoni Gual - 07-28-2003, 02:34 PM
Challenge: Validate a code - by Agamemnus - 07-28-2003, 04:16 PM
Challenge: Validate a code - by Blitz - 07-28-2003, 04:46 PM
Challenge: Validate a code - by Blitz - 07-28-2003, 04:50 PM
Challenge: Validate a code - by Agamemnus - 07-28-2003, 04:57 PM
Challenge: Validate a code - by Blitz - 07-28-2003, 06:14 PM
Challenge: Validate a code - by Antoni Gual - 07-28-2003, 06:26 PM
Challenge: Validate a code - by Blitz - 07-28-2003, 09:01 PM
Challenge: Validate a code - by Moneo - 07-28-2003, 09:21 PM
Challenge: Validate a code - by Blitz - 07-28-2003, 09:25 PM
Challenge: Validate a code - by Moneo - 07-28-2003, 09:28 PM
Challenge: Validate a code - by Moneo - 07-28-2003, 09:36 PM
Challenge: Validate a code - by Antoni Gual - 07-28-2003, 09:52 PM
Challenge: Validate a code - by Moneo - 07-28-2003, 10:15 PM
Challenge: Validate a code - by Blitz - 07-28-2003, 10:55 PM
Challenge: Validate a code - by Moneo - 07-28-2003, 11:01 PM
Challenge: Validate a code - by Agamemnus - 07-29-2003, 02:21 AM
Challenge: Validate a code - by Moneo - 07-29-2003, 02:35 AM
Challenge: Validate a code - by Antoni Gual - 07-29-2003, 03:22 AM
Challenge: Validate a code - by Moneo - 07-29-2003, 05:28 AM
Fixed - by Meg - 07-29-2003, 06:45 AM
Challenge: Validate a code - by Moneo - 07-29-2003, 07:17 AM
Challenge: Validate a code - by Agamemnus - 07-29-2003, 09:09 PM
Challenge: Validate a code - by Moneo - 07-29-2003, 10:32 PM
Challenge: Validate a code - by Agamemnus - 07-29-2003, 10:41 PM
Challenge: Validate a code - by Agamemnus - 07-29-2003, 11:16 PM
Challenge: Validate a code - by Moneo - 07-29-2003, 11:33 PM
Challenge: Validate a code - by Agamemnus - 07-29-2003, 11:37 PM
Challenge: Validate a code - by Moneo - 07-29-2003, 11:53 PM
Challenge: Validate a code - by Blitz - 07-29-2003, 11:53 PM
Let's mutiny.. - by Agamemnus - 07-30-2003, 12:06 AM
Challenge: Validate a code - by Moneo - 07-30-2003, 12:10 AM
Challenge: Validate a code - by Agamemnus - 07-30-2003, 12:13 AM
Challenge: Validate a code - by Moneo - 07-30-2003, 12:17 AM
Challenge: Validate a code - by Agamemnus - 07-30-2003, 12:24 AM
Challenge: Validate a code - by Blitz - 07-30-2003, 12:44 AM
Challenge: Validate a code - by Antoni Gual - 07-30-2003, 01:11 AM
Challenge: Validate a code - by Moneo - 07-30-2003, 03:33 AM
Challenge: Validate a code - by Blitz - 07-30-2003, 05:03 AM
Challenge: Validate a code - by Agamemnus - 08-01-2003, 07:32 AM

Forum Jump:


Users browsing this thread: 1 Guest(s)