PRINT PRINT "<ランレングス圧縮に似た連続文字圧縮法>" PRINT PRINT "A A A D D D D D E G G Q Q Q Q Q Q Q S W W W" PRINT LET TX1$="AAADDDDDEGGQQQQQQQSWWW" LET N=LEN(TX1$) ! 文字数を得る DIM Q$(N),R$(N+1),W(N+1),F(N+1),G(N) MAT W=ZER MAT F=ZER FOR i=1 TO N LET Q$(i)=TX1$(i:i) ! 一文字ずつ得る LET W(i)=ORD(Q$(i)) ! キャラクターコード化 PRINT W(i); NEXT i PRINT PRINT PRINT "上記の数列は空白(1空白=2文字)も含めて";4*N-2;"文字です。" PRINT PRINT LET C=1 FOR i=2 TO N+1 IF W(i)=W(i-1) THEN LET C=C+1 ELSE IF C>1 THEN LET F(i-C)=C LET C=1 END IF NEXT i LET j=1 LET a=0 FOR i=1 TO N LET G(j)=W(i) IF F(i)=0 THEN LET j=j+1 ELSE LET G(j+1)=F(i) LET j=j+2 LET a=a+1 LET i=i+F(i)-1 END IF NEXT i FOR i=1 TO j-1 PRINT G(i); NEXT i PRINT PRINT PRINT "上記の数列は空白(1空白=2文字)も含めて";4*(j-1)-2-a;"文字です。" PRINT PRINT LET b=1 FOR i=1 TO j-1 IF G(i)>60 THEN LET R$(b)=CHR$(G(i)) ! キャラクターコードを文字化 PRINT R$(b);" "; LET b=b+1 ELSE FOR k=1 TO G(i)-1 LET R$(b+k)=CHR$(G(i-1)) PRINT R$(b+k);" "; NEXT k LET b=b+G(i)-1 END IF NEXT i PRINT PRINT END