文字列照合・探索ライブラリ 使用例(文字列照合)



[ 簡単な説明 ]

文字列照合ルーチンの使用例です。
出力結果は、

     t_match   10000   5   p

と実行した結果です。(個々のパラメータの意味はソースを参照して下さい。)

プログラム・ソース("t_match.c")           top (先頭に戻る)
/*		t_match.c			文字列照合		*/
#include <stdio.h>
#include <math.h>
#include <stdlib.h>
#include <time.h>
#include "match.h"

#define		M			10000		/* string length (default) */
#define		N			5			/* search text min. length (default) */
#define		NN			3			/* search position min. count for 1 word. */
#define		MASK		987612345L

typedef		uchar				uchar;
typedef		struct plist
			{
				uchar *p;
				struct plist *next;
			}							PLIST;

void memover(void);
void test(int (*func)(), uchar *string, PLIST *start, int **find, int nn, uchar *title);
void init_ornd0(long seed);
void init_ornd1(long seed);
void init_ornd2(long seed);
int irnd(int max, int min);
double ornd0(void);
double ornd1(void);
double ornd2(void);
double gaussd(double av, double st);

int *_next;
long _idum_o0, _idum_o1, _idum_o2;		/* ornd0()〜ornd2()の乱数核 */

main(int argc, char *argv[])
{
	PLIST *start, *lp, *lt;
	int **find1, **find2, **find3, **find4, **find5, **find6;
	int **f1, **f2, **f3, **f4, **f5, **f6;
	int *fp1, *fp2, *fp3, *fp4, *fp5, *fp6;
	int i, j, k, m, n, nn, pflag, sn;
	uchar *string, *p, *q;

	m = M;
	n = N;
	if(argc > 1)	m = atoi(argv[1]);
	if(argc > 2)	n = atoi(argv[2]);
	pflag = (argc > 3);

	if(n < 1 || m < n)
	{
		fprintf(stderr, "Error : illegal input\n");
		fprintf(stderr, "Usage : %s   [ m ]   [ min ]   [ pflag ]\n", argv[0]);
		fprintf(stderr, "\t  m   : string length     (default : %d)\n", M);
		fprintf(stderr, "\t min  : search text min. length(default : %d)\n", N);
		fprintf(stderr, "\tpflag : data print out flag(any character)\n");
		exit(-1);
	}
	for(i = 0, nn = m + m / 2; i < N; i++)	nn /= 26;
	if(nn < NN)	nn = NN;

	init_ornd0(1L);
	init_ornd1(1L);
	init_ornd2(1L);

	string = (uchar *)malloc((m + 1) * sizeof(uchar));
	if(string == NULL)	memover();

	start = (PLIST *)malloc(sizeof(PLIST));
	if(start == NULL)	memover();
	start->next = NULL;
	lp = start;
	i = sn = 0;
	p = string;
	while(1)
	{
		if((k = (int)fabs(gaussd(3., 4.))) < 1)	k = 1;
		if(i + k > m)	k = m - i;
		i += k;
		if(k <= 0)	break; 
		if(k < n || ornd2() > 0.1)	for(j = 0; j < k; j++)	*p++ = irnd('Z', 'A');
		else
		{
			lt = (PLIST *)malloc(sizeof(PLIST));
			if(lt == NULL)	memover();
			lt->next = NULL;
			lp->next = lt;
			lp->p = (uchar *)malloc((k + 1) * sizeof(uchar));
			if(lp->p == NULL)	memover();
			for(j = 0, q = lp->p; j < k; j++)	*q++ = *p++ = irnd('Z', 'A');
			*q = '\0';
			lp = lp->next;
			sn++;
		}
		*p++ = ' ';
		i++;
	}

	if(pflag)
	{
		printf("[string]\n");
		p = string;
		i = 1;
		while(*p)
		{
			putchar(*p++);
			if(i++ % 80 == 0)
			{
				putchar('\n');
				i = 1;
			}
		}
		putchar('\n');
		printf("[ search text ]\n");
		for(lp = start, i = 1; lp->next != NULL;	lp = lp->next)
			printf("%d : %s\n", i++, lp->p);
	}

	f1 = find1 = (int **)malloc(sn * sizeof(int*));
	f2 = find2 = (int **)malloc(sn * sizeof(int*));
	f3 = find3 = (int **)malloc(sn * sizeof(int*));
	f4 = find4 = (int **)malloc(sn * sizeof(int*));
	f5 = find5 = (int **)malloc(sn * sizeof(int*));
	f6 = find6 = (int **)malloc(sn * sizeof(int*));
	if(f1 == NULL || f2 == NULL || f3 == NULL
		|| f4 == NULL || f5 == NULL || f6 == NULL)	memover();
	for(i = 0; i < sn; i++)
	{
		fp1 = *f1++ = (int *)malloc(nn * sizeof(int));
		fp2 = *f2++ = (int *)malloc(nn * sizeof(int));
		fp3 = *f3++ = (int *)malloc(nn * sizeof(int));
		fp4 = *f4++ = (int *)malloc(nn * sizeof(int));
		fp5 = *f5++ = (int *)malloc(nn * sizeof(int));
		fp6 = *f6++ = (int *)malloc(nn * sizeof(int));
		if(fp1 == NULL || fp2 == NULL || fp3 == NULL
			|| fp4 == NULL || fp5 == NULL || fp6 == NULL)
			memover();
		for(j = 0; j < nn; j++)
		{
			*fp1++ = 0;
			*fp2++ = 0;
			*fp3++ = 0;
			*fp4++ = 0;
			*fp5++ = 0;
			*fp6++ = 0;
		}
	}

	test(position1, string, start, find1, nn, "position1");
	test(position2, string, start, find2, nn, "position2");
	test(bm, string, start, find3, nn, "Boyer-Moore Method");
	test(bm1, string, start, find4, nn, "Boyer-Moore Method (RevUp)");
	test(rks, string, start, find5, nn, "KMP");
	test(kmp, string, start, find6, nn, "RKS");

	if(pflag)	i = 0;

	k = 0;
	f1 = find1;
	f2 = find2;
	f3 = find3;
	f4 = find4;
	f5 = find5;
	f6 = find6;
	for(lp = start; lp->next != NULL; lp = lp->next)
	{
		if(pflag)
		{
			printf("%3d : %s : ", ++i, lp->p);
			fp1 = *f1;
			j = 0;
			do
			{
				printf("%d ", *fp1++);
			} while(*fp1 > 0 && ++j <= nn);
			putchar('\n');
		}
		fp1 = *f1++;
		fp2 = *f2++;
		fp3 = *f3++;
		fp4 = *f4++;
		fp5 = *f5++;
		fp6 = *f6++;
		for(j = 0; j < nn && *fp1 >= 0; j++)
		{
			if(*fp1 != *fp2 || *fp2 != *fp3 || *fp3 != *fp4
				|| *fp4 != *fp5 || *fp5 != *fp6)
			{
				k = 1;
				break;
			}
			fp1++;
			fp2++;
			fp3++;
			fp4++;
			fp5++;
			fp6++;
		}
		if(k)	break;
	}
	if(k)	fprintf(stderr, "AB");
	fprintf(stderr, "NORMAL END.\n");

	free((char *)find6);
	free((char *)find5);
	free((char *)find4);
	free((char *)find3);
	free((char *)find2);
	free((char *)find1);
	free((char *)string);
	free((char *)start);
	return 1;
}

double gaussd(double av, double st)
{
	static double r1, r2, s;
	static int sw = 1;

	sw = 1 - sw;
	if(sw)	return av + st * r2 * s;
	do
	{
		r1 = 2. * ornd1() - 1.;
		r2 = 2. * ornd1() - 1.;
		s = r1 * r1 + r2 * r2;
	} while(s > 1.);
	s = sqrt(-2. * log(s) / s);
	return av + st * r1 * s;
}

double ornd0(void)					/* Park and Miller の「最低基準」乱数 */
{
	long w;
	double d = 1. / 2147483647.;

	w = _idum_o0 / 127773L;
	if((_idum_o0 = (_idum_o0 - w * 127773L) * 16807L - w * 2836L) <= 0)
		_idum_o0 += 2147483647L;
	return (double)_idum_o0 * d;
}

double ornd1(void)					/* Park and Miller の「最低基準」乱数 */
{
	long w;
	double d = 1. / 2147483647.;

	w = _idum_o1 / 44488L;
	if((_idum_o1 = (_idum_o1 - w * 44488L) * 48271L - w * 3399L) <= 0)
		_idum_o1 += 2147483647L;
	return (double)_idum_o1 * d;
}

double ornd2(void)					/* Park and Miller の「最低基準」乱数 */
{
	long w;
	double d = 1. / 2147483647.;

	w = _idum_o2 / 30845L;
	if((_idum_o2 = (_idum_o2 - w * 30845L) * 69621L - w * 23902L) <= 0)
		_idum_o2 += 2147483647L;
	return (double)_idum_o2 * d;
}

int irnd(int max, int min)
{
	return min + (int)(ornd0() * (double)(max - min + 1));
}

void init_ornd0(long seed)
{
	_idum_o0 = seed ^ MASK;
}

void init_ornd1(long seed)
{
	_idum_o1 = seed ^ MASK;
}

void init_ornd2(long seed)
{
	_idum_o2 = seed ^ MASK;
}

void memover(void)
{
	fprintf(stderr, "Error : out of memory\n");
	exit(-2);
}

void test(int (*func)(), uchar *string, PLIST *start, int **find, int nn, uchar *title)
{
	uchar *sp;
	int i, k, *p, **pf;
	clock_t stime, etime, wtime;
	unsigned long base = 0, rests = 0;
	PLIST *lp;

	printf("[algorithm : %s]\n", title);
	stime = clock();
	while(stime == clock())	;
	wtime = clock() + (long)CLOCKS_PER_SEC;
	while(wtime > clock())	base++;
	stime = clock();
	for(lp = start, pf = find; lp->next != NULL; lp = lp->next)
	{
		if(strcmp(title, "KMP") == 0)	pre_kmp(lp->p);
		matchall(func, string, lp->p, *pf++, nn);
		if(strcmp(title, "KMP") == 0)	free((char *)_next);
	}
	etime = clock();
	wtime = etime + (long)CLOCKS_PER_SEC;
	while(wtime > clock())	rests++;
	printf("lap time = %10.3f [s]\n",
		(etime - stime) / CLOCKS_PER_SEC + (double)(base - rests) / (double)base);
}

出力結果           top (先頭に戻る)
[string]
K HKWDGRH Q W RSGCS O JSOWV G VN D DIDXOEOG QKLYBI YWGIB UGMANHGGUY IMAH LMAR KV
YTQZM AO GGWFV WOMUILQ T ZP HDPTM Q XEV OS DNZ T CLR XRXVJU NZI W H LLGMV RG YWO
 Y H GNZ YHOG XA MFHBOOO OULXEIDC U UXT PFF KW WU SM KWULU V BUSDD P ZYSC VIU IY
FCQ HKYVIN MNR P RIOIXFO N DMDTMJVD SSAWHSOAORJ R QVNEK J L EFJ BXDH BRN MV HQDZ
 I HF J KZ G NBPCHYH FD YGHFKWNP K CP D CULNH SA TSFQGK WC WAPB VHQSNDP VCMCP Y 
XDNPYO WSHGPYK F YSUSQVXNBWZY ZDP VORY G WICB VIVLHN OKPBDQGHH Y S JFYECHKPP X Y
EDP JY M FOAZH QVOFK S E NUIK L KG AL F INLTH JHVKXDCAI GPG W VVV EWDEWSQ ZIVJ P
V HEETYHU TBECZDO ZLTYNJ LL ZNP CKSG UHNEG N AS E LEKT VVE FKBNOQ M POIQD OKPVL 
FHP OKY ERCYLRK FN EIL GF N ERARVW A PE T L XJDO PCPGBLQXFL JNJQUN CDQLTRTT KUG 
OGJOE A USDNUE U MDBVULXINYZXGW RRZZCDZ QSLOFRVXW I TKS TGRUXSA CQJCJGY RDINRFXO
 L EBA KBSWICRAJJOTXW NVYE FWFMRMZL XZ RX NFHIRNN EXBLC JQTKWJV T SCCFZTGQXND AU
 JK Q LFA A LLB SLBOZJ NTQ GTS GDPRH NUT K K DKEDQSEWYH XV Y J YI XJYPQ CI SEV T
K XQKKG S RUB NHJ OFYHCI L R M NNTG NDSOH DR EGPOW TA BPCL NJRE HZKPT BDQWUT SDF
SJF XJULKC I P AAUJS G AUS ZJKPGLO A VQO FGKVQEDPY RSJRQZGOQO I VSAM ZJ Q EYMLPR
 I I MY RZFOUCGHBKGW USKGDVT G LI BMDB D UXDPDDYG CQ ZQZMZVPFKW VYZJB TPYL G M N
A GIUN J M PZMK RYIZ DKUIQDLBM V Z CWGGVGO QEBMKTPYR PGQBQ BKKN H MTFXIB QZSHO S
 O HJQOEXX DNJ MAQWY G BIOQI T ELUBXCQ UV SZBXTLF NYY SNQOAZTP YPK EH NQO JWY UY
X MX MNIST T GIWOT VNCWCZ SILVL F IGQVOCD Q NHICACMM RHAZAYX EZUEJBRMD SKJ R ROJ
R HG Z HCMQPIND XMFWGH CTX A XY D D I VHD DR PBXICB TU L V DYI PRJVJ SCNJRX VVG 
U HPL YZLHSNZSNW JWS J G VFL YMC N LNKZ ALK E W A SW FYFK TV UQFMNRG BO OVTOG ZF
M TIFBQGQ BX BBNRAJ UK L KX KKBGZZB X F JE ZH RAI PVSCDKC Z HAFAQXVMQKJNRY ASXWX
 H IFQTKPM BQ SBRW O GCNAWT J O U H WKLA XL E ER L UMI BDX F MSTOD TAXQDLF B M Y
CJOYNP UCLPAYO HNUC DBRNJ EEDSO WXKXO C WD HDICHP WN W GWJPDTKKQY JA XVKPB OJ AF
 BBHDM YX P YCNMJ VHG WY AZE LFLKP H TJA SCZ ZLPNJBE LTOP V X BQEAG VHQLN MMPOK 
C Y O O YCHBIDK GHBSP KY EZOS Y OZSGA T V RJAUBOS UZDVD MMYDRIX VQ H PF M XZDRUG
XUQF IUHBI OBQJ ZF NFDJZXK FAAKH A UGR SNMF FBGBY ICPLD CWCLGSIK HMKVA TQZA FGCY
 Y GACYYMBFNUGR HS G C WII Z W P YTGT D TX C OVBO PHAIWEEU I TPZXMI LRG V R DUXG
FSRU RBLHCH M FGN F R L DVIL F OMJUMEUSP T VBUU IKVGB S GU AKYRZTZP QHYUX J NP Z
XU ZJPT V IZUMTRD QVOFXPP R VXWTT CHNB PO RZXDD NEMBDGHL QXBQFIXA K QA V Q B R B
 NVZZKLCI B MUTZGF IBXYKXMFT VVUVV LNM HY Y E Z T U QLTT MTWJ OHRXONQ XU HYBYWU 
GZOGNABPR YTNG WX M OCKBYMSD M FHUGP GC NCNU EXBQ PXSA KP WANK Q QMT QI EBNCNRDL
 XC LDQQ HLHO BUDEZHI A VLJ MDVR IACI GLIF K VZW QHYC I ZB SGGVYS LLZZ VNY JNB H
 H NFNNOPWLRE PDGJQWVFCVLL KGCXROBNMMJ X NJT ZF VK DFJSMXFJK VMRQG EFNW PICZM F 
XB YHY M WWCTYKMANGTM FQC OK G KTN P ZMMIB Y OI FJB FWVT M Y XPB AXST QKRGMXAAM 
UEVPLWZU LSRV ELK GQ CPOZ WZGQS UJRIPHO DIMYW P S JFBIUI PQ EZTC IYMQ GEGQILJ YJ
JSU M RSBBNMMNT KGPP UF OQJPVAUN DP KA ZMJPMB NL SHNN KCI B AEL LOQ Y Q QOEFW N 
DGSKWBYK KB GTK E FRLJH ORH GFI GDLBCOS YM X KXRZRF MSTC TBGMTAV K PV X PQMFHZQ 
LGB PLQQ X A K YYVDCN YC W K SI OAXYMY GLAFMVF YFSAPKA K OQ H UDQCD XIDBLM PAXZH
 SAIREPXHQD ND J TZ TDN PK TAQXCUX CJL AKHMLV X BNA YPZOHI EDOI MLQ NCESXBO OUVF
BOJU Y XKZCYGYYP HMHS OLT QV YEBPAIO S T FE P MIH UDAUFGJX VEBM Y GHIZWHPOSBGGE 
SJCLNMKD I KHJKAS JT RRFDFZIOGQ ZKNGHOXA O GFWSCXEN S BKZ EMARSKGFGY LW K U PNSE
WTMM BSYLJVJBQL BJBR V DKRTB WJY TLNA ASIXICILVOU F PL DBHFIO TOCNOVWJX QZO E NX
JGKIT LWI HWCAQML SBZG FULHEAQ V ZQG O WNOCDO OLPEE LDLEQATZ QMAAGMATSQDI RDJATZ
NV C GGHHB UJMK PZKYH FMJJB CAF P H WIYPC FTYW SPEXZ BIX CD M XC HLBVWN POOVNW X
N O Q N PCZ RIN E UOMJXBDFIDBTI SASTJSWRL ZLP IRCWQ FJ FUVCENBFHTQ UCW TSW ITAJ 
VJNBYCV SQHT YOIMKC AKVYCFENB AQL I FYK V NPAX UTMC RE MVJZ Y S KK NCONU HRBLY P
FPG SNPLR QOWK DDENWS L JOZCX FAYI CK Q HWVSYU WTYBD SM NUBWZU FP VFR DO GPBZJWI
 YDLVC FK IAKY XRKZV J NOVO VAMEO Z EQ L J DZMR CHVBLGNY IYJ JENC JMCW BWH ASS I
JEKUBS QN MJVOHQFG YUY FJMBQZYDH A BJYUIMX L GSK PCJTEZRV KSYQJECY GWTUEIMZAARYY
TO OUVSHIIHC N JMPGJ K OP GCBZJ JDDS R WRQR SAQCYDKCW D L MYJCG NUDNZ NPAZYQI PH
UGAP G O UV KDSXQ J NFCYCFYOL HGATHATNT IX H JEPL GGQDOUMI IOWTCQ OFIZO C BAW LU
Z UP RH EEVEILE DPBLV V YU MLLTBD XJR L RMCHVW P PCZVOM NEG OJJOI YWYAIY KXVQG D
UYOUQ TDALFGE FDNRO E K HEZ BT GJCR DXV UORMRLJ A NGVSN KBPLIT F VM GEG RAI GYVR
ME DUHZ F VLXVW NAY AM OOKU RTFSMPVY PQJ SSN STMO G OM BMK RHVBLLRHUL J TPRHTQC 
LWIU GER JZALKMDUD CAHBHUUP B WI UORYL PMS JUCV PWYYLZDBJHW T HJGD PP YAAMDB F V
CFWM NN T T C KNP GJ IXDET BT DUL J C HNBFP SOXSBHYJ UDXM WBG XW TQ CNIR T L XWS
SRZZANL PEM S OZV Y WIPEHUAVTJ GTKD H N IKIBTHT EZW IXYPNWC V PWMUXTJZ Y QXXDKC 
KF Q FPFLAQ W SZA T DBZZ KZC JRBFJ BS GF LBM S W MVDKW WWI TNVQ QFYWOD PAVA GZGJ
VOUQYXDY BW H RZ OCPOFE GKWYRRWTK EXSJKA O QEBROH JTKJHKU L J AVP PQPXAT S FJXXB
TO MBTIXMQX B OYD NPVEGLA I DLQM C MHCMTJJ RQYW OYKTU C TEMPELSX QIEZKD CL Q BLZ
EMRRZNEGDV R BYO B AP AGOOH I FNXR IS MZB CGJ MEFEGG X ZVV INN VEDJDGD H VEZ OTQ
PYXHYJA ZAK JN F UGPFYKN IW GZOV ES VU U OTLNM OR TE W JUE PKDKRZ V Z CIOXNMGZ Q
 IXV SUTF TDDGXBTGZCE D PD JAZYCJCDAQZCF IWOH S UOSYDMXX GOHVEZHBXY GEEN GHLZWPM
I T PNXJRG J VCK PB BOERHT MRFCJLP CR CVCGRHEC F RJ T CGZHE U ZTVK XLF QGR U BKA
ZOLUCCWG FFWVDHZ Y U CD E ZQXXUS H MXZ ZDSR M T HETKRQ OC BEIU L T D B AXNZ TD J
AOSOFJNR HVR G XGY SCBGXDTDVDT DXAZZAO OO F LL AZWIO OTVYSAB UQMXQDZOAY U RVORM 
J K NAP SO S MKOQ PRUCBXW GHV DNENE HMPF HCORPEUJR AT HTODE EXYG P C TRBNJ L EX 
EWMOOZL GMFQNN GXUTO MJKFNMSBM PVRF NARS LPD NG VQP K ANWVI DTYK GSN AZG L IEZSC
W MC KNUKPZI EHAB MJWG N A F HKMAIY LOPYTG EECD GMDWK LFF F F G CWJ AOUF TQTGRVT
 IZINVHTHGP HUJZTVRCIEQ P A IZPNJFJFSZ YFAE VXBALHF FBNCFP V LCBIDKLKNL IYDIUV A
 D QBWI HUSUEXYOE KIWSV L ZLLYKLAQ XHM OTSBBN E YJS EGF G NV QIRINQ X OZ J KZD D
O QUZVCVR XZCW EAEQU NV JLM C S N ZEPHMT OQUV CQM ANYYIRO M I KMG NMV DWI VEUR X
MBSMNB XQWJPH UDKT N VR FOOHSNFX TC S TNSR X K QGRDLXMX GEAFU ECSOJLPQVW ZWQY WH
 JJOC SQEKJC KUXFSUMUEF V QSH VPLPFC ZBGUJND QQKZM E I B H Y UZDJTKI I UUXX QNDF
IQXOE F YJYUHH LXTHLHXL RACLCP BXZV HQLUFIBQ DFB WIJBW AWKNBPA NURL PKFJX DEHOM 
DHK NWVFTFBG MAJMOKX A ZDBTOMQKLBNTSJE PPNKYIS FXLBPXQNTPL RULB EBCOIKIZNVR E W 
AE MDVJHG E PGUZEDD PQWJ FEAAFI JKMEIJPB WC MGLVY TJ GZATA Y USRWF H CBUQOVQA IP
XM JC FYVCC L NNSMVBF R ZRVUKQT KKB KENYN SSCKBBEITT FUSBEZL AOTSHUFN ES LFQV I 
M J P A BHBM TWKE NOCZ O WWFF TC VJLB OCLD PIMVWPZ E ZGKZ WIQNJOL PFOLPR EOZ V S
 ZC Y GF ALLG FN QVNRK OSAKBM QKG Q BVJUY T BN FMFUOLVLL ZGGFMSC Z P Q K H V ZWZ
AASSA YGDJ BHQWPFDUFBJZ G W Y TYLUFM A POKGABXMVMOH K K C H E JVQ GBEXL ZVJL GNO
SC KI TL PNRH Y BNSERFEM CXGEMFJRUQXVL RN O PLNDOXAD UTOJ QELE CTSD VV NLSS IL I
 YR FAUSI WKLGV ADMRFEUQ U USMB LNAF Z OC QAFE V Q AIFKS GRH KNME Z WFY OVNWZAW 
BN ZJL PU T PNUEL MVEWVGT TIZHS ECBJJM CEA MQZQTXBFY UEG NZXS Q Y XVCUSR TVALFU 
HNCL Y Y N L YITUBGHL YIMAANAXX IEWC A XHGFTPVX QFKFGO VBBZ I OC DT HTSJZ YXKUM 
NZE IUNX I KH XD VQ GAAVR PG BVA G QZNK LZXI GM LM VOD G LJ CAX VNUZILZZ BES TGX
BOA GFJNC IIG OANOLLU HLL E LC R YVJTVEG AYUXBG ZFGJKOBA UAQRB BIU GVQ TH LJ N Z
SQXMRSXBHM ILDAMUNV DR SBF W MKDEWRZFO VZW U Y UTEHFHF FHU B JFFMLEXJ M VDB OUAX
 QLVGHHBP Z WWYFKED D V HHO XPDK AE ZWBIPTFHMX RKUIRO V WJYHKUHYS QE W QZPAXK FR
DDL XOYMIFXJ I ZRRN DLBHOG HKKOCRF TLBSGISDPQ IPEM VEUX YVQCFUETCC CXW L KL Y R 
X Y SLPJ DJDKBXUTN IRCZEDAX G MH QBBHTQEYJPLWD JXYMGVU RKKD HHIFSDNB DOPCC TN IR
 G NUCHXPDY K J BXDLR AWVJWZEFC PLRK GJNKD V F MM J K JDAJVK TK JDBMTZS GI HE R 
H UWXKBPWOI TVBE OZLDMON HX T D E Y P P WQFPP D P GDGPBG J R KQQTOQJ Y AABTV MLW
JL KYJFM FYCDX HZT XFWVYFEYUN GT XI FLNSTDDR S Z CVZYCZXRGM ZVOFBUD KSZ UT CQCWH
QZS NSKDLV HZEJ DWHVSIB JWOLNJ WVNIA C FQWIN QOUCHPK L L WTCT VCQRP S BCGMM VYDL
T AVCXTWO LKZMZK TXTQ TN WSTQKQ ULYDDOS WKWH ILL FMULDAMENYJ OG JV ZIQLRJA QCPWZ
MY ZUU XY W XXPMT PP QUTNRQIU MJRVD RWGRDN W OCPNKI J IAJS XII D K TU DWQUXIKK I
FAWUI N VW Y GUW DZIGEUKSQP M UYQBKP X SQ VRTRP S QPU W L T IRZKV NDUCZX ZKVXYHW
YFG K E L NT RE OEZKLFT NQH MKGEZXB QODRTC LY ZMYLVAGTBT BZO XXD WGIQ RWQQBOG HM
CS ZDQ SWRPBRI TBBYF QRFUEY RIBIBS VNHMT OYSRTO JRXVW YMN ZA TSNULE WTYAK ZEGHHD
Z Q PSEAC DP MR A QA HDLLTA RV OAHCLY CG Z HHUMB S UNHMB F VMQBR J DV QSGHVCZET 
IYUYVX MLKOANR C ILHYZDVSY P MXHM QINTNJ URYOT F FILZU E TYIYWYHU RI UWGCG QXX D
DUJ TU GLOCVAY R N VFJV OUIY NDM BRW N AELXPV IJ J ZKBZI YT QRG NWVHE L JT PZASD
 XMZ VIY Q KMTQNH OPKVP FLZIH YRUMKHAJ H ZUHCH M AJ OWX WNLC UTIZLZWFIGUYIDS VEZ
UAMJL FO YGGEJQS TYBMZU OKAEFL VRXOCQNYEF BCPOIQDWHC HXEDJ ASVU MYG NKO NRWPV XM
 A F J KLQ KZD N FEZIWGQSJUCD XVJKP JDSLZOPU Z TFA S UGWRHX EEOVZZDE TOC TO TKV 
UBO TC A QBT H HR RMUHODNL XPM APMAYCELUV REDU NSF VEMWUHGLW L LEU AQ V VZ ZDCHB
 TFLV PYG WBV T OY T ZWKVKQ ZG KM FLN T XNCTHMQ XS DTY SZUDVSNWGJ OZ SRU HMHHOF 
YIYTKNGYY R JVWYOS BLKCB V WY K BYT VP WASGN E B QQDHKA OHMQCXLO VMQAMB KMVZ IXC
CRU BPFQP CRZI VSRJTNNAG D Z RE OONA MGNVU K L DM NEJLI JF N Q VZ ZV DGDUWB K M 
M J H CWZJOZV RCNS I C RIGTCGAMQ LS J OHKUD XXY BSC WRUVCRE K ETH D SLDLFXDMKAXZ
 IUQ XCOSST KMM YQA UQWHFHLLRIAN DYUMWE YGAZEX WTEBM RMB YDM TPY KSWBLDKIXPB KDA
FBMHJP UFSBPLJH RC YPNG BBY LS JSIRC GLVY JJ NSBR KUHEEGMQSDAAG CJC UCKXH KMIUY 
ZXBSKMXPS FHRJICPXZ ZBFBLDX EUAF GSIDRH HAZAWHX I VEQ NN W NRX MA TTEIMD LJ IMUW
JQDB HJJKWX GQXDJI DXV MK YF MTH NMX ABANV OXD QO CDFBSJO VY J N XWIY PNIDKFGUQG
OIMV Q D ZA JK YXVA LMWD BIR CAOBO Z BYU B KL VSZBUHBC NAPU B RKZKY ATYCJXIO UTF
 DFULFLC FZFVUAKCJ QF EEYAKAUG IBHD OU ZK ITIYVWITD IQ ZERZHBTA MCTHCMSDFE ANETU
 VASZDE FLMTZP CRZUPAWG P WKRUOAEZLUJ J E FLM Q RCYDHL ZR F KIMA YW ZUC N VEIDG 
S EKZ V QY ZMJZHAUZJ DVWG GFXNK CG J N UJ DLZH VQOTC CL O RKYYQWAX X I HUSGWLAHH
N LLJSNGBHMG C YD V IVQEFMK KBB CC KGIAZC HKZBAIY U LO QMFSHCHQP U XL B BKZN N X
X ZVM YOU WXYPIYRN GTQPNOV QJH ZUDP U OPXD PRJTQ RCNWU LKXL F CJHOZ QK JTQSB MDA
 VEYJV NJJUALEYOW PIULQXD EVQF OO JPC LDOD N BBSIJ NLBHXOLSHZR ZZXXB WTIPZKN HJM
XJO D U Y XQFHUMXIIM F OJYD Q WJPLNH Q WWBF G DEZRLZA AQWDAHZQ D BSINCXORLT IY X
TTL YM W OIJE JFD RBPCHAKSZ Z TSGP M XCEHHHM A X DHOFG N EVI HQUA EX LE R X LBAZ
G ITNUN V JLIS SVGR UO QCF ZFBGIW GEXYYFRMXX SWSEMRYHJ LO LF Q L G OM A R FCOH O
	
[ search text ]
1 : LLGMV
2 : RIOIXFO
3 : DMDTMJVD
4 : JHVKXDCAI
5 : HEETYHU
6 : POIQD
7 : ERCYLRK
8 : GDPRH
9 : XJYPQ
10 : HZKPT
11 : PGQBQ
12 : PRJVJ
13 : UQFMNRG
14 : GACYYMBFNUGR
15 : OCKBYMSD
16 : ZMJPMB
17 : TBGMTAV
18 : SAIREPXHQD
19 : RRFDFZIOGQ
20 : GFWSCXEN
21 : HLBVWN
22 : DDENWS
23 : JOZCX
24 : JMPGJ
25 : GGQDOUMI
26 : NGVSN
27 : PWMUXTJZ
28 : MEFEGG
29 : ANWVI
30 : IZPNJFJFSZ
31 : FBNCFP
32 : QUZVCVR
33 : ANYYIRO
34 : XQWJPH
35 : EBCOIKIZNVR
36 : GZATA
37 : FUSBEZL
38 : PIMVWPZ
39 : WIQNJOL
40 : CXGEMFJRUQXVL
41 : WKLGV
42 : PNUEL
43 : MQZQTXBFY
44 : QFKFGO
45 : ILDAMUNV
46 : JDBMTZS
47 : KQQTOQJ
48 : NSKDLV
49 : FQWIN
50 : DZIGEUKSQP
51 : SWRPBRI
52 : HDLLTA
53 : TYBMZU
54 : OKAEFL
55 : BCPOIQDWHC
56 : NRWPV
57 : FEZIWGQSJUCD
58 : JVWYOS
59 : KDAFBMHJP
60 : WKRUOAEZLUJ
61 : HUSGWLAHHN
62 : GTQPNOV
63 : HJMXJO
64 : AQWDAHZQ
[algorithm : position1]
lap time =      0.689 [s]
[algorithm : position2]
lap time =      0.589 [s]
[algorithm : Boyer-Moore Method]
lap time =      0.440 [s]
[algorithm : Boyer-Moore Method (RevUp)]
lap time =      0.421 [s]
[algorithm : KMP]
lap time =     68.087 [s]
[algorithm : RKS]
lap time =      0.526 [s]
  1 : LLGMV : 148 
  2 : RIOIXFO : 257 
  3 : DMDTMJVD : 267 
  4 : JHVKXDCAI : 526 
  5 : HEETYHU : 562 
  6 : POIQD : 628 8364 
  7 : ERCYLRK : 648 
  8 : GDPRH : 911 
  9 : XJYPQ : 946 
 10 : HZKPT : 1024 
 11 : PGQBQ : 1253 
 12 : PRJVJ : 1503 
 13 : UQFMNRG : 1581 
 14 : GACYYMBFNUGR : 2083 
 15 : OCKBYMSD : 2420 
 16 : ZMJPMB : 2839 
 17 : TBGMTAV : 2937 
 18 : SAIREPXHQD : 3041 
 19 : RRFDFZIOGQ : 3221 
 20 : GFWSCXEN : 3243 
 21 : HLBVWN : 3505 
 22 : DDENWS : 3695 
 23 : JOZCX : 3704 
 24 : JMPGJ : 3935 
 25 : GGQDOUMI : 4050 
 26 : NGVSN : 4210 
 27 : PWMUXTJZ : 4542 
 28 : MEFEGG : 4846 
 29 : ANWVI : 5414 
 30 : IZPNJFJFSZ : 5548 
 31 : FBNCFP : 5572 
 32 : QUZVCVR : 5682 
 33 : ANYYIRO : 5730 
 34 : XQWJPH : 5767 
 35 : EBCOIKIZNVR : 6064 
 36 : GZATA : 6133 
 37 : FUSBEZL : 6213 
 38 : PIMVWPZ : 6283 
 39 : WIQNJOL : 6298 
 40 : CXGEMFJRUQXVL : 6505 
 41 : WKLGV : 6570 
 42 : PNUEL : 6652 
 43 : MQZQTXBFY : 6683 
 44 : QFKFGO : 6768 
 45 : ILDAMUNV : 6971 
 46 : JDBMTZS : 7344 
 47 : KQQTOQJ : 7421 
 48 : NSKDLV : 7524 
 49 : FQWIN : 7559 
 50 : DZIGEUKSQP : 7777 
 51 : SWRPBRI : 7927 
 52 : HDLLTA : 8021 
 53 : TYBMZU : 8337 
 54 : OKAEFL : 8344 
 55 : BCPOIQDWHC : 8362 
 56 : NRWPV : 8392 
 57 : FEZIWGQSJUCD : 8417 
 58 : JVWYOS : 8652 
 59 : KDAFBMHJP : 8957 
 60 : WKRUOAEZLUJ : 9386 
 61 : HUSGWLAHHN : 9511 
 62 : GTQPNOV : 9619 
 63 : HJMXJO : 9757 
 64 : AQWDAHZQ : 9814