Skip to content

Commit 4732563

Browse files
committed
jimminy, I've been bad at committing code
1 parent 0118311 commit 4732563

36 files changed

+1845
-0
lines changed

Chapter 6/Accumulator.js

Lines changed: 28 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,28 @@
1+
var Westros;
2+
(function (Westros) {
3+
(function (Taxation) {
4+
var TaxCollector = (function () {
5+
function TaxCollector() {
6+
}
7+
TaxCollector.prototype.collect = function (items, value, projection) {
8+
if (items.length > 1)
9+
return projection(items[0]) + this.collect(items.slice(1), value, projection);
10+
return projection(items[0]);
11+
};
12+
return TaxCollector;
13+
})();
14+
Taxation.TaxCollector = TaxCollector;
15+
})(Westros.Taxation || (Westros.Taxation = {}));
16+
var Taxation = Westros.Taxation;
17+
})(Westros || (Westros = {}));
18+
19+
var peasants = [{ name: "Jory Cassel", moneyOwed: 11, bankBalance: 50 }, { name: "Vardis Egen", moneyOwed: 15, bankBalance: 20 }];
20+
var collector = new Westros.Taxation.TaxCollector();
21+
console.log(collector.collect(peasants, 0, function (item) {
22+
return Math.min(item.moneyOwed, item.bankBalance);
23+
}));
24+
25+
var multiArray = [[1, 2, 3], ["a", "b", "c"]];
26+
for (var i = 0; i < multiArray.length; i++)
27+
for (var j = 0; j < multiArray[i].length; j++)
28+
console.log(multiArray[i][j]);

Chapter 6/Accumulator.ts

Lines changed: 20 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,20 @@
1+
module Westros.Taxation{
2+
3+
export class TaxCollector{
4+
public collect(items, value, projection)
5+
{
6+
if(items.length>1)
7+
return projection(items[0]) + this.collect(items.slice(1), value, projection);
8+
return projection(items[0]);
9+
}
10+
}
11+
}
12+
13+
var peasants = [{name: "Jory Cassel", moneyOwed: 11, bankBalance: 50},{name: "Vardis Egen", moneyOwed: 15, bankBalance: 20}];
14+
var collector = new Westros.Taxation.TaxCollector();
15+
console.log(collector.collect(peasants, 0, (item) => Math.min(item.moneyOwed, item.bankBalance)));
16+
17+
var multiArray :any[][]= [[1,2,3], ["a", "b", "c"]];
18+
for(var i=0; i<multiArray.length; i++)
19+
for(var j=0; j<multiArray[i].length; j++)
20+
console.log(multiArray[i][j]);

Chapter 6/Filter.js

Lines changed: 25 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,25 @@
1+
Array.prototype.where = function (inclusionTest) {
2+
var results = [];
3+
for (var i = 0; i < this.length; i++) {
4+
if (inclusionTest(this[i]))
5+
results.push(this[i]);
6+
}
7+
return results;
8+
};
9+
10+
Array.prototype.select = function (projection) {
11+
var results = [];
12+
for (var i = 0; i < this.length; i++) {
13+
results.push(projection(this[i]));
14+
}
15+
return results;
16+
};
17+
18+
var children = [{ id: 1, Name: "Rob" }, { id: 2, Name: "Sansa" }, { id: 3, Name: "Arya" }, { id: 4, Name: "Brandon" }, { id: 5, Name: "Rickon" }];
19+
var filteredChildren = children.where(function (x) {
20+
return x.id % 2 == 0;
21+
}).select(function (x) {
22+
return x.Name;
23+
});
24+
console.dir(children);
25+
console.dir(filteredChildren);

Chapter 6/Filter.ts

Lines changed: 21 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,21 @@
1+
Array.prototype.where=function(inclusionTest){
2+
var results = [];
3+
for(var i = 0; i<this.length;i++){
4+
if(inclusionTest(this[i]))
5+
results.push(this[i]);
6+
}
7+
return results;
8+
}
9+
10+
Array.prototype.select=function(projection){
11+
var results = [];
12+
for(var i = 0; i<this.length;i++){
13+
results.push(projection(this[i]));
14+
}
15+
return results;
16+
}
17+
18+
const children = [{id: 1, Name: "Rob"}, {id: 2, Name: "Sansa"}, {id: 3, Name: "Arya"}, {id: 4, Name: "Brandon"}, {id: 5, Name: "Rickon"}];
19+
var filteredChildren = children.where(function(x){ return x.id % 2 ==0;}).select(function(x){ return x.Name;});
20+
console.dir(children);
21+
console.dir(filteredChildren);

Chapter 6/LazyInstantiation.js

Lines changed: 52 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,52 @@
1+
var Westros;
2+
(function (Westros) {
3+
(function (FoodSuppliers) {
4+
var Bakery = (function () {
5+
function Bakery() {
6+
this.requiredBreads = [];
7+
}
8+
Bakery.prototype.orderBreadType = function (breadType) {
9+
this.requiredBreads.push(breadType);
10+
};
11+
12+
Bakery.prototype.pickUpBread = function (breadType) {
13+
console.log("Picup of bread " + breadType + " requested");
14+
if (!this.breads) {
15+
this.createBreads();
16+
}
17+
for (var i = 0; i < this.breads.length; i++) {
18+
if (this.breads[i].breadType == breadType)
19+
return this.breads[i];
20+
}
21+
};
22+
23+
Bakery.prototype.createBreads = function () {
24+
this.breads = [];
25+
for (var i = 0; i < this.requiredBreads.length; i++) {
26+
this.breads.push(new Bread(this.requiredBreads[i]));
27+
}
28+
};
29+
return Bakery;
30+
})();
31+
FoodSuppliers.Bakery = Bakery;
32+
33+
var Bread = (function () {
34+
function Bread(breadType) {
35+
this.breadType = breadType;
36+
//some complex, time consuming operation
37+
console.log("Bread " + breadType + " created.");
38+
}
39+
return Bread;
40+
})();
41+
FoodSuppliers.Bread = Bread;
42+
})(Westros.FoodSuppliers || (Westros.FoodSuppliers = {}));
43+
var FoodSuppliers = Westros.FoodSuppliers;
44+
})(Westros || (Westros = {}));
45+
46+
var bakery = new Westros.FoodSuppliers.Bakery();
47+
bakery.orderBreadType("Brioche");
48+
bakery.orderBreadType("Anadama bread");
49+
bakery.orderBreadType("Chapati");
50+
bakery.orderBreadType("Focaccia");
51+
52+
console.log(bakery.pickUpBread("Brioche").breadType);

Chapter 6/LazyInstantiation.ts

Lines changed: 49 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,49 @@
1+
module Westros.FoodSuppliers{
2+
3+
export class Bakery{
4+
breads: Bread[];
5+
requiredBreads: string[];
6+
constructor() {
7+
this.requiredBreads = [];
8+
}
9+
10+
public orderBreadType(breadType: string){
11+
this.requiredBreads.push(breadType);
12+
}
13+
14+
public pickUpBread(breadType: string):Bread{
15+
console.log("Picup of bread " + breadType + " requested")
16+
if(!this.breads)
17+
{
18+
this.createBreads();
19+
}
20+
for(var i=0; i<this.breads.length; i++){
21+
if(this.breads[i].breadType == breadType)
22+
return this.breads[i];
23+
}
24+
}
25+
26+
createBreads(){
27+
this.breads = [];
28+
for(var i =0; i<this.requiredBreads.length; i++)
29+
{
30+
this.breads.push(new Bread(this.requiredBreads[i]));
31+
}
32+
}
33+
}
34+
35+
export class Bread{
36+
constructor(public breadType: string){
37+
//some complex, time consuming operation
38+
console.log("Bread " + breadType + " created.");
39+
}
40+
}
41+
}
42+
43+
var bakery = new Westros.FoodSuppliers.Bakery();
44+
bakery.orderBreadType("Brioche");
45+
bakery.orderBreadType("Anadama bread");
46+
bakery.orderBreadType("Chapati");
47+
bakery.orderBreadType("Focaccia");
48+
49+
console.log(bakery.pickUpBread("Brioche").breadType);

Chapter 6/Memento.js

Lines changed: 38 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,38 @@
1+
var Westros;
2+
(function (Westros) {
3+
(function (Mathmatics) {
4+
var Fibonacci = (function () {
5+
function Fibonacci() {
6+
this.memorizedValues = [];
7+
}
8+
Fibonacci.prototype.NaieveFib = function (n) {
9+
if (n == 0)
10+
return 0;
11+
if (n <= 2)
12+
return 1;
13+
return this.NaieveFib(n - 1) + this.NaieveFib(n - 2);
14+
};
15+
16+
Fibonacci.prototype.MemetoFib = function (n) {
17+
if (n == 0)
18+
return 0;
19+
if (n <= 2)
20+
return 1;
21+
if (!this.memorizedValues[n])
22+
this.memorizedValues[n] = this.MemetoFib(n - 1) + this.MemetoFib(n - 2);
23+
return this.memorizedValues[n];
24+
};
25+
return Fibonacci;
26+
})();
27+
Mathmatics.Fibonacci = Fibonacci;
28+
})(Westros.Mathmatics || (Westros.Mathmatics = {}));
29+
var Mathmatics = Westros.Mathmatics;
30+
})(Westros || (Westros = {}));
31+
32+
var fib = new Westros.Mathmatics.Fibonacci();
33+
34+
start = new Date();
35+
console.log(fib.NaieveFib(140));
36+
console.log(fib.memorizedValues.length);
37+
end = new Date();
38+
console.log(end-start);

Chapter 6/Memento.ts

Lines changed: 26 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,26 @@
1+
module Westros.Mathmatics {
2+
export class Fibonacci{
3+
public NaieveFib(n): number {
4+
if(n== 0)
5+
return 0;
6+
if(n <= 2)
7+
return 1;
8+
return this.NaieveFib(n-1) + this.NaieveFib(n-2);
9+
}
10+
11+
memorizedValues = [];
12+
public MemetoFib(n): number {
13+
if(n== 0)
14+
return 0;
15+
if(n <= 2)
16+
return 1;
17+
if(!this.memorizedValues[n])
18+
this.memorizedValues[n] = this.MemetoFib(n-1) + this.MemetoFib(n-2);
19+
return this.memorizedValues[n];
20+
}
21+
}
22+
}
23+
24+
var fib = new Westros.Mathmatics.Fibonacci();
25+
26+
console.log(fib.MemetoFib(50));

Chapter 6/Options.js

Lines changed: 46 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,46 @@
1+
var Westros;
2+
(function (Westros) {
3+
(function (Tourism) {
4+
var HamiltonianTour = (function () {
5+
function HamiltonianTour(options) {
6+
this.options = options;
7+
}
8+
HamiltonianTour.prototype.StartTour = function () {
9+
if (this.options.onTourStart && typeof (this.options.onTourStart) === "function")
10+
this.options.onTourStart();
11+
this.VisitAttraction("King's Landing");
12+
this.VisitAttraction("Winterfell");
13+
this.VisitAttraction("Mountains of Dorne");
14+
this.VisitAttraction("Eyrie");
15+
if (this.options.onTourCompletion && typeof (this.options.onTourCompletion) === "function")
16+
this.options.onTourCompletion();
17+
};
18+
19+
HamiltonianTour.prototype.VisitAttraction = function (AttractionName) {
20+
if (this.options.onEntryToAttraction && typeof (this.options.onEntryToAttraction) === "function")
21+
this.options.onEntryToAttraction(AttractionName);
22+
23+
//do whatever one does in a Attraction
24+
if (this.options.onExitFromAttraction && typeof (this.options.onExitFromAttraction) === "function")
25+
this.options.onExitFromAttraction(AttractionName);
26+
};
27+
return HamiltonianTour;
28+
})();
29+
Tourism.HamiltonianTour = HamiltonianTour;
30+
31+
var HamiltonianTourOptions = (function () {
32+
function HamiltonianTourOptions() {
33+
}
34+
return HamiltonianTourOptions;
35+
})();
36+
Tourism.HamiltonianTourOptions = HamiltonianTourOptions;
37+
})(Westros.Tourism || (Westros.Tourism = {}));
38+
var Tourism = Westros.Tourism;
39+
})(Westros || (Westros = {}));
40+
41+
var options = new Westros.Tourism.HamiltonianTourOptions();
42+
options.onTourStart = function () {
43+
console.log("I love touring!");
44+
};
45+
var tour = new Westros.Tourism.HamiltonianTour(options);
46+
tour.StartTour();

Chapter 6/Options.ts

Lines changed: 36 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,36 @@
1+
module Westros.Tourism {
2+
export class HamiltonianTour{
3+
constructor(public options: HamiltonianTourOptions) {
4+
}
5+
public StartTour(){
6+
if(this.options.onTourStart && typeof(this.options.onTourStart) === "function")
7+
this.options.onTourStart();
8+
this.VisitAttraction("King's Landing");
9+
this.VisitAttraction("Winterfell");
10+
this.VisitAttraction("Mountains of Dorne");
11+
this.VisitAttraction("Eyrie");
12+
if(this.options.onTourCompletion && typeof(this.options.onTourCompletion) === "function")
13+
this.options.onTourCompletion();
14+
}
15+
16+
VisitAttraction(AttractionName){
17+
if(this.options.onEntryToAttraction && typeof(this.options.onEntryToAttraction) === "function")
18+
this.options.onEntryToAttraction(AttractionName);
19+
//do whatever one does in a Attraction
20+
if(this.options.onExitFromAttraction && typeof(this.options.onExitFromAttraction) === "function")
21+
this.options.onExitFromAttraction(AttractionName);
22+
}
23+
}
24+
25+
export class HamiltonianTourOptions{
26+
onTourStart: Function;
27+
onEntryToAttraction: Function;
28+
onExitFromAttraction: Function;
29+
onTourCompletion: Function;
30+
}
31+
}
32+
33+
var options = new Westros.Tourism.HamiltonianTourOptions();
34+
options.onTourStart = function() { console.log("I love touring!");};
35+
var tour = new Westros.Tourism.HamiltonianTour(options);
36+
tour.StartTour();

0 commit comments

Comments
 (0)