Google Groups no longer supports new Usenet posts or subscriptions. Historical content remains viewable.
Dismiss

Fork algorithm

26 views
Skip to first unread message

Jonas Thörnvall

unread,
Nov 21, 2017, 8:58:12 PM11/21/17
to
Had some time to remove the paragraphs and replace with numbers tonight.
I think it is ok. But it don't handle any special chars, it just fork plain words into a structure.

http://anybase.co.nf/insertTWO/chessbook.html

<!DOCTYPE html>
<html>
<head>
<meta http-equiv="Cache-Control" content="no-store" />
<meta http-Equiv="content-type" content="text/html; charset=UTF-8">
<link REL="StyleSheet" TYPE="text/css" HREF="drop.css">
<script type="text/javascript" src="loadsave.js"></script>
<script type="text/javascript" src="CSS.js"></script>
</head>
<script>

function createStruct() {
newword=true;
beeninside=false;
inserted = false;
endstruct = "*";
separator = " ";
subseparator = "";
newString= "";
stringPrevMem = "";
stringMem = "";
posStructString="";
//Get values to read in
startval="a*1";
endval="zzz*3";
encodedString = document.getElementById("encodedText").value;
encodedString=startval+encodedString+endval;
mystr = document.getElementById("inputTextToSave").value;
//Split string into words to read in
strArr = mystr.split(separator);
//Search words
for (var x = 0; x < strArr.length; x++) {
newString=strArr[x];
stringInserted=false;
searchItem(newString);
}
printArray();
}

function searchItem(newString) {
stringPrevMem = "";stringMem = "";z=0;
while (z < encodedString.length && stringInserted==false) {
if (encodedString.charAt(z) == "*") {
//FOUND WHOLE WORD
newword=true; beeninside=false;
// alert("WORD FOUND, STRINGMEM="+stringMem);
} else if (!isNaN(parseInt(encodedString.charAt(z)))) {
// alert("FOUND FORK AT CHARACTER NUMBER -> "+encodedString.charAt(z)+" z="+z);
stringMem = stringMem.slice(0,-encodedString.charAt(z));
} else {
stringMem += encodedString.charAt(z);
newSubString=newString.substring(0,stringMem.length);
// alert("Kodad sträng i minne "+stringMem+" Ny sträng i minne "+newSubString);
if (newSubString==stringMem) {
// alert("Strings equal size");
oldStructLength=z;
document.getElementById("debug").value+="Old position="+oldStructLength+" EQUAL Newstring="+newSubString+" Stringmem="+stringMem+" Prevstringmem="+stringPrevMem+"\n";
}
else if (newSubString>stringMem && newword==true && beeninside==false) {
// alert("Newsubstring bigger");
oldStructLength=z;
newword=false;beeninside=true;
stringPrevMem = stringMem;
}
else if (newSubString<stringMem) {
// alert("Newsubstring smaller *INSERT*");
oldStructLength=z;
checkWhatTOInsert();
}
}
z++;
}
}

function checkWhatTOInsert(){
putString="";
insertString = newString.substring(newSubString.length-1, newString.length);
insertChar = insertString.split('');
for (var m=0;m<insertChar.length;m++){
putString+=insertChar[m];
}
putString+="*";
putString+=insertChar.length;
encodedString=insertSubstring(encodedString,oldStructLength,putString);
document.getElementById("encodedText").value=encodedString;
stringInserted=true;
//alert ("NEW ENCODEDSTRING "+encodedString);
}

function insertSubstring(str, index, value) {
return str.substr(0, index) + value + str.substr(index);
}

function printArray() {
document.getElementById("decodedText").value="";
encodedString = document.getElementById("encodedText").value;
stringMem="";
for (var z = 0; z < encodedString.length; z++) {
if (!isNaN(parseInt(encodedString.charAt(z)))) {
stringMem = stringMem.slice(0,-encodedString.charAt(z));
} else if (encodedString.charAt(z) == "*") {
document.getElementById("decodedText").value+=stringMem+"\n";
} else {
stringMem += encodedString.charAt(z);
}
}
}

</script>
<body onload="printArray();">
<div class="dropdown">
<button onClick="MA()" class="dropbtn"><B>___File___</button>
<div id="MA" class="dropdown-content">
<button onclick="newFile()" class="button"><B>New File</B></button>
<br>
<label class="custom-file-upload">
<input type="file"/ id="fileToLoad" onchange="loadFileAsText()"><B> Load File</B>
</label>
<br>
<button onclick="saveTextAsFile()" class="button"><B> Save File</B></button><input id="inputFileNameToSaveAs" value="newfile.txt"></input>
</div>
</div>
<br>
<Font size="4">DEBUG</Font><br>
<textarea id="debug" cols="80" rows="3"></textarea><br>
<br>
<button onclick="createStruct()">INSERT BUTTON!</button>
<br>
<Font size="4">INSERT IN STRUCTURE</Font><br>
<textarea id="inputTextToSave" cols="80" rows="12">stop come lose fine hope happy lovely me jumping tree basket ball banana bar bad bank</textarea><br>
<br>
<Font size="4">STRUCTURE</Font><br>
<textarea id="encodedText" cols="80" rows="12">ball*2nana*4t*2un*1tt*4</textarea><br>
<br>
<Font size="4">CONTENT READ OUT FROM STRUCTURE</Font><br>
<textarea id="decodedText" cols="80" rows="12"></textarea><br>
</body>
</html>

Jonas Thörnvall

unread,
Nov 22, 2017, 10:50:30 AM11/22/17
to
I just had a look at the paragraph version, it have same problem with the fork when inserting.

If anyone can see what goes wrong i am interested, my biggest fear is that it is a cascading problem in structure. I don't think it could be, but i have not thought that deep about it because i figured it would not be to start with.

Lets hope it just a case i missed...
If you have time and spot it tell me, otherwise i have to think and that is a cumbersome process.

Paragraph forking structure
http://anybase.co.nf/insert/chessbook.html

Number forking same structure "removed paragraphs"
http://anybase.co.nf/insertTWO/chessbook.html

Jonas Thörnvall

unread,
Nov 22, 2017, 9:06:54 PM11/22/17
to
Remove the stars but the fork to insert still does not work correct, anyone with good eyes?

http://anybase.co.nf/insertTHREE/chessbook.html

Jonas Thörnvall

unread,
Nov 22, 2017, 9:47:46 PM11/22/17
to
//Start end dummies for insert
startval="a1";
endval="zzz3";
//Get values to read in
encodedString = document.getElementById("encodedText").value;
encodedString=startval+encodedString+endval;
mystr = document.getElementById("inputTextToSave").value;
//Split string into words to read in
strArr = mystr.split(separator);
//Search words
for (var x = 0; x < strArr.length; x++) {
newString=strArr[x];
stringInserted=false;
searchItem(newString);
}
printArray();
}

function searchItem(newString) {
stringPrevMem = "";stringMem = "";z=0;
while (z < encodedString.length && stringInserted==false) {
if (!isNaN(parseInt(encodedString.charAt(z)))) {
// alert("FOUND FORK AT CHARACTER NUMBER -> "+encodedString.charAt(z)+" z="+z);
newword=true; beeninside=false;
stringMem = stringMem.slice(0,-encodedString.charAt(z));
} else {
stringMem += encodedString.charAt(z);
newSubString=newString.substring(0,stringMem.length);
// alert("Kodad sträng i minne "+stringMem+" Ny sträng i minne "+newSubString);
if (newSubString==stringMem) {
oldStructLength=z;
// alert("Old position="+oldStructLength+" EQUAL Newstring="+newSubString+" Stringmem="+stringMem+" Prevstringmem="+stringPrevMem+"\n");
document.getElementById("debug").value+="Old position="+oldStructLength+" EQUAL Newstring="+newSubString+" Stringmem="+stringMem+" Prevstringmem="+stringPrevMem+"\n";
}
else if (newSubString>stringMem && newword==true && beeninside==false) {
oldStructLength=z;
newword=false;beeninside=true;
stringPrevMem = stringMem;
// alert("Old position="+oldStructLength+" BIGGER Newstring="+newSubString+" Stringmem="+stringMem+" Prevstringmem="+stringPrevMem+"\n");
document.getElementById("debug").value+="Old position="+oldStructLength+" BIGGER Newstring="+newSubString+" Stringmem="+stringMem+" Prevstringmem="+stringPrevMem+"\n";
}
else if (newSubString<stringMem) {
oldStructLength=z;
// alert("Old position="+oldStructLength+" SMALLER INSERT Newstring="+newSubString+" Stringmem="+stringMem+" Prevstringmem="+stringPrevMem+"\n");
document.getElementById("debug").value+="Old position="+oldStructLength+" SMALLER INSERT Newstring="+newSubString+" Stringmem="+stringMem+" Prevstringmem="+stringPrevMem+"\n";
checkWhatTOInsert();
}
}
z++;
}
}

function checkWhatTOInsert(){
putString="";
putString = newString.substring(newSubString.length-1, newString.length);
putString+=putString.length;
encodedString=insertSubstring(encodedString,oldStructLength,putString);
document.getElementById("encodedText").value=encodedString;
stringInserted=true;
alert ("NEW ENCODEDSTRING "+encodedString);
}

function insertSubstring(str, index, value) {
return str.substr(0, index) + value + str.substr(index);
}

function printArray() {
document.getElementById("decodedText").value="";
encodedString = document.getElementById("encodedText").value;
stringMem="";
for (var z = 0; z < encodedString.length; z++) {
if (!isNaN(parseInt(encodedString.charAt(z)))) {
document.getElementById("decodedText").value+=stringMem+"\n";
stringMem = stringMem.slice(0,-encodedString.charAt(z));
} else {
stringMem += encodedString.charAt(z);
}
}
}
</script>

<body onload="printArray();">
<div class="dropdown">
<button onClick="MA()" class="dropbtn"><B>___File___</button>
<div id="MA" class="dropdown-content">
<button onclick="newFile()" class="button"><B>New File</B></button>
<br>
<label class="custom-file-upload">
<input type="file"/ id="fileToLoad" onchange="loadFileAsText()"><B> Load File</B>
</label>
<br>
<button onclick="saveTextAsFile()" class="button"><B> Save File</B></button><input id="inputFileNameToSaveAs" value="newfile.txt"></input>
</div>
</div>
<br>
<Font size="4">DEBUG</Font><br>
<textarea id="debug" cols="80" rows="3"></textarea><br>
<br>
<button onclick="createStruct()">INSERT BUTTON!</button>
<br>
<Font size="4">INSERT IN STRUCTURE</Font><br>
<textarea id="inputTextToSave" cols="80" rows="12">basket banana bar bad bankball bat book branch buddy bed but bullet bright butt bell bishop joke tee task stop come lose hope fine ful flower cat cup crisp check choice charm fish happy lovely me jumping jack tree</textarea><br>
<br>
<Font size="4">FORK STRUCTURE</Font><br>
<textarea id="encodedText" cols="80" rows="12"></textarea><br>

Jonas Thörnvall

unread,
Nov 22, 2017, 9:57:01 PM11/22/17
to
A hint what goes wrong with the fork?

Jonas Thörnvall

unread,
Nov 22, 2017, 10:07:17 PM11/22/17
to
It suddenly daunted upon me that i may work the wrong way, maybe i should have all the words in memory stored in an array "read out from printarray" and their substrings start position. And then compare the full strings? Before finding the substring offset.

But it should end up be same amount of work as reading thru structure and do it charwise?
0 new messages