ink starting

This commit is contained in:
Tim Bendt
2024-11-01 15:42:50 -05:00
parent 7f782d6b45
commit ee5c5c9d6e
13 changed files with 1294 additions and 769 deletions

53
src/lib/merge.ts Normal file
View File

@@ -0,0 +1,53 @@
export function xorMergeStrings(strings: string[]) {
// Split the input strings into arrays of lines
const [str1, str2] = strings;
const lines1 = str1.split("\n");
console.log("🚀 ~ xorMergeStrings ~ lines1:", lines1);
const lines2 = str2.split("\n");
console.log("🚀 ~ xorMergeStrings ~ lines2:", lines2);
// Determine the maximum number of lines
const maxLines = Math.max(lines1.length, lines2.length);
// Initialize an array to hold the merged lines
const mergedLines = [];
// Iterate through each line index up to the maximum number of lines
for (let i = 0; i < maxLines; i++) {
// Get the current line from each string, or an empty string if the line does not exist
const maxLength = Math.max(lines1[i].length, lines2[i].length);
const line1 = lines1[i].padEnd(maxLength, " ");
console.log("🚀 ~ xorMergeStrings ~ line1: \n", line1);
const line2 = lines2[i].padEnd(maxLength, " ");
console.log("🚀 ~ xorMergeStrings ~ line2: \n", line2);
// Determine the maximum length of the current lines
console.log("🚀 ~ xorMergeStrings ~ maxLength:", maxLength);
// Initialize an array to hold the merged characters for the current line
const mergedLine = [];
// Iterate through each character index up to the maximum length
for (let j = 0; j < maxLength; j++) {
// Get the current character from each line, or a space if the character does not exist
const char1 = line1[j];
const char2 = line2[j];
// Determine if each character is a whitespace character
const isWhitespace1 = char1.trim() === "";
const isWhitespace2 = char2.trim() === "";
// XOR merge the characters based on the whitespace criteria
const mergedChar = isWhitespace1 ? char2 : char1;
// Add the merged character to the merged line
mergedLine.push(mergedChar);
}
// Join the merged line array into a string and add it to the merged lines array
mergedLines.push(mergedLine.join(""));
}
// Join the merged lines array into a single string with newline characters
return mergedLines.join("\n");
}