Add TypeScript examples for chapters 10 and 11 (#311)
This commit is contained in:
34
10_greedy_algorithms/ts/01_set_covering.ts
Normal file
34
10_greedy_algorithms/ts/01_set_covering.ts
Normal file
@@ -0,0 +1,34 @@
|
||||
// You pass an array in, and it gets converted to a set.
|
||||
let statesNeeded: Set<string> = new Set(["mt", "wa", "or", "id", "nv", "ut", "ca", "az"]);
|
||||
|
||||
const stations: Record<string, Set<string>> = {};
|
||||
stations["kone"] = new Set(["id", "nv", "ut"]);
|
||||
stations["ktwo"] = new Set(["wa", "id", "mt"]);
|
||||
stations["kthree"] = new Set(["or", "nv", "ca"]);
|
||||
stations["kfour"] = new Set(["nv", "ut"]);
|
||||
stations["kfive"] = new Set(["ca", "az"]);
|
||||
|
||||
const finalStations: Set<string> = new Set();
|
||||
|
||||
while (statesNeeded.size) {
|
||||
let bestStation: string | null = null;
|
||||
let statesCovered: Set<string> = new Set();
|
||||
|
||||
for (let station in stations) {
|
||||
const states = stations[station];
|
||||
const covered = new Set([...statesNeeded].filter(x => states.has(x)));
|
||||
|
||||
if (covered.size > statesCovered.size) {
|
||||
bestStation = station;
|
||||
statesCovered = covered;
|
||||
}
|
||||
}
|
||||
|
||||
statesNeeded = new Set([...statesNeeded].filter(x => !statesCovered.has(x)));
|
||||
|
||||
if (bestStation !== null) {
|
||||
finalStations.add(bestStation);
|
||||
}
|
||||
}
|
||||
|
||||
console.log(finalStations); // Set { 'kone', 'ktwo', 'kthree', 'kfive' }
|
||||
12
10_greedy_algorithms/ts/tsconfig.json
Normal file
12
10_greedy_algorithms/ts/tsconfig.json
Normal file
@@ -0,0 +1,12 @@
|
||||
{
|
||||
"compilerOptions": {
|
||||
"lib": [
|
||||
"dom",
|
||||
"es2015",
|
||||
"es2016",
|
||||
"es2017"
|
||||
],
|
||||
"target": "es2015"
|
||||
}
|
||||
}
|
||||
|
||||
69
11_dynamic_programming/ts/01_longest_common_subsequence.ts
Normal file
69
11_dynamic_programming/ts/01_longest_common_subsequence.ts
Normal file
@@ -0,0 +1,69 @@
|
||||
/**
|
||||
* Search for LCS
|
||||
*
|
||||
* @param {string} string1 first string
|
||||
* @param {string} string2 second string
|
||||
*
|
||||
* @return {object} with keys: lcs, offset, sequence
|
||||
*/
|
||||
function lcs(string1: string, string2: string): { lcs: number; offset: number; sequence: string } {
|
||||
if (typeof string1 !== "string" || typeof string2 !== "string" || !string1 || !string2) {
|
||||
return {
|
||||
lcs: 0,
|
||||
offset: 0,
|
||||
sequence: ""
|
||||
};
|
||||
}
|
||||
|
||||
let lcs = 0;
|
||||
let lastSubIndex = 0;
|
||||
|
||||
const table: number[][] = [];
|
||||
const len1 = string1.length;
|
||||
const len2 = string2.length;
|
||||
|
||||
let row: number;
|
||||
let col: number;
|
||||
|
||||
for (row = 0; row <= len1; row++) {
|
||||
table[row] = [];
|
||||
for (col = 0; col <= len2; col++) {
|
||||
table[row][col] = 0;
|
||||
}
|
||||
}
|
||||
|
||||
let i: number;
|
||||
let j: number;
|
||||
|
||||
for (i = 0; i < len1; i++) {
|
||||
for (j = 0; j < len2; j++) {
|
||||
if (string1[i] === string2[j]) {
|
||||
if (table[i][j] === 0) {
|
||||
table[i + 1][j + 1] = 1;
|
||||
} else {
|
||||
table[i + 1][j + 1] = table[i][j] + 1;
|
||||
}
|
||||
|
||||
if (table[i + 1][j + 1] > lcs) {
|
||||
lcs = table[i + 1][j + 1];
|
||||
lastSubIndex = i;
|
||||
}
|
||||
} else {
|
||||
table[i + 1][j + 1] = 0;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
return {
|
||||
lcs: lcs,
|
||||
offset: lastSubIndex - lcs + 1,
|
||||
sequence: string1.slice(lastSubIndex - lcs + 1, lastSubIndex + 1)
|
||||
};
|
||||
}
|
||||
|
||||
// Test cases
|
||||
console.log(lcs("hish", "fish")); // { lcs: 3, offset: 1, sequence: 'ish' }
|
||||
console.log(lcs("vista", "hish")); // { lcs: 2, offset: 1, sequence: 'is' }
|
||||
console.log(lcs("google", "abcdefgooglehijklm")); // { lcs: 6, offset: 0, sequence: 'google' }
|
||||
console.log(lcs("0", "0")); // { lcs: 1, offset: 0, sequence: '0' }
|
||||
console.log(lcs("0", 0 as any)); // { lcs: 0, offset: 0, sequence: '' }
|
||||
12
11_dynamic_programming/ts/tsconfig.json
Normal file
12
11_dynamic_programming/ts/tsconfig.json
Normal file
@@ -0,0 +1,12 @@
|
||||
{
|
||||
"compilerOptions": {
|
||||
"lib": [
|
||||
"dom",
|
||||
"es2015",
|
||||
"es2016",
|
||||
"es2017"
|
||||
],
|
||||
"target": "es2015"
|
||||
}
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user