Return Styles: Pseud0ch, Terminal, Valhalla, NES, Geocities, Blue Moon. Entire thread

word stores

Name: Anonymous 2011-09-18 22:46

a better dictionary?


const charVal[30]={"!+-recognise these chars*/();.,?"};
struct s_chNode{int ID, extendID, byVal, branch, chleaf, unileaf;};

struct s_uniNode{int ID, extendID, byVal, branch, leaf;};


s_chNode is used as a plain old trie... Until it reaches a specified length (2-5 chars?) where the chain of chars being added becomes redundant... Eg Adding 'Abc' to 'Abc'

Then s_uniNode takes over (a First order Nest?), which allows for 'partial' prefix & suffix compression?
Each uniNode can point to a previous uniNode or Null/Empty, like chNodes, but also points to a chNode, which might be as many as five? chars at once...

Name: n7ix.c 2011-09-19 9:46

//-------------

#include <stdio.h>
#include <stdlib.h>
#include <string.h>

//-----------------------------

const char cBlock[30] ={"!abcdefghijklmnopqrstuvwxyz?"};

struct s_chNode        {int ID, depth, extVal, byVal, branch, leaf, uniLeaf;};
struct s_uniNode    {int ID, extVal, byVal, branch, leaf;};

struct s_chNode *Blinks, *blink;
struct s_uniNode *Ulinks, *ulink;

int iBlinkmax=0, iBlinks=0;
int iUlinkmax=0, iUlinks=0;

//-----------------------------

void initBlink(){
Blinks = (struct s_chNode *)malloc(sizeof(struct s_chNode));
}

//-----------------------------

void initUlink(){
Ulinks = (struct s_uniNode *)malloc(sizeof(struct s_uniNode));
}

//------------------------------

void incBlink(){
blink = realloc(Blinks,((iBlinkmax+=10)+2)* sizeof(struct s_chNode));
if (blink!=NULL) Blinks = blink;
}

//---------------------------------

void incUlink(){
ulink = realloc(Ulinks,((iUlinkmax+=10)+2)* sizeof(struct s_uniNode));
if (ulink!=NULL) Ulinks = ulink;
}

//------------------

int BlinkScan(int BPreV, int BVal){
int iB, iHalt=-1;
for(iB=0;iB<iBlinks;iB++){
    if(Blinks[iB].byVal == BVal)
        if(Blinks[iB].extVal == BPreV) return iB;
    }
return -1;
}

//-----------------------

int UlinkScan(int BPreV, int BVal){
int iB, iHalt=-1;
for(iB=0;iB<iUlinks;iB++){
    if(Ulinks[iB].byVal == BVal)
        if(Ulinks[iB].extVal == BPreV) return iB;
    }
return -1;
}

//-----------------------
   
int BlinkEntry(int iD, int PreVal, int Val, int deep){
int iB=0;
iB = BlinkScan(PreVal, Val);
  if (iB!=-1) return iB;
if(iBlinkmax<=iD) incBlink();
Blinks[iD].ID = iD;
Blinks[iD].depth = deep;
//Blinks[iD].Index = 0;
Blinks[iD].extVal = PreVal;
Blinks[iD].byVal = Val;
Blinks[iD].branch = 0;
Blinks[iD].leaf = 0;
iBlinks++;
//printf("added %i", iBoards-1);
return iD;
}

//------------------

int UlinkEntry(int iD, int PreVal, int Val){
int iB=0;
iB = UlinkScan(PreVal, Val);
  if (iB!=-1) return iB;
if(iUlinkmax<=iD) incUlink();
Ulinks[iD].ID = iD;
//Ulinks[id].depth = deep;
//Blinks[iD].Index = 0;
Ulinks[iD].extVal = PreVal;
Ulinks[iD].byVal = Val;
Ulinks[iD].branch = 0;
Ulinks[iD].leaf = 0;
iUlinks++;
//printf("added %i", iBoards-1);
return iD;
}

//---------------------------

int scanChar(int cX){
  int Geti=0, Seti=0;
  while(Geti<=27){
    if((int) cBlock[Geti]==cX) Seti = Geti;
    Geti++;
    }
  return Seti;
}

//------------------------------

int main(int argc, char *argv[]){
  char  myStr[1000];
  int i=0, j=1, k=0, l=0, m=0, loopi=0, li=0, Ui=0, n=0;

  initBlink();
  BlinkEntry(iBlinks, 0, 0, 0);
  initUlink();
  UlinkEntry(iUlinks, 0, 0);

  if(argc>=2){
    loopi = strlen(argv[1]);
    for(li=0;li<=loopi;li++){
        myStr[li] = argv[1][li];
        }

    } else {
    printf("Usage: ex n7ix.c '-Insert string here-'\n\n");
    return 0;
    }
  li=0;
  while(((int) j!=0)+(i<=loopi)==2){
    j= (int) myStr[i];

    //k=scanChar(j);
    k=scanChar(j);

    if(li==-1){
        n=k;
        k=0;
        }
    if(k==0){
        printf("::Ui %i <-", Ui);
        Ui=UlinkEntry(iUlinks, Ui, m);
        printf("::Ui [%i] %i::\n", Ui, m);
        li=0;
        l=0;
        m=0;
        //n=0;
        if(n==0) Ui=0;
        }
    printf("-%c -", j);
    if(n!=0){
        k=n;
        n=0;
        }
    if(k!=0){
        li++;
         m=BlinkEntry(iBlinks, l, k, li);
        printf("%i-%c-%i-%i [%i]", l, cBlock[k], m, i, li);
        if(li==3) li=-1;
        l=m;
        }
    printf("\n");
    i++;
    }

  return 0;
}

//--------------

Newer Posts
Don't change these.
Name: Email:
Entire Thread Thread List