-
Notifications
You must be signed in to change notification settings - Fork 1
/
Copy pathsrc.js
85 lines (63 loc) · 1.76 KB
/
src.js
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
var LSystem = (function(){
/*
evolve takes a config object then
evolves it a single generation
Object config
String axiom,
Number iterations*,
Object rules
from: to,
...
*/
var evolve = function(config){
var s = "";
var a = config.axiom || "";
var r = config.rules || {};
config.iterations = config.iterations || 0;
var keys = Object.keys(r);
for(var i = 0; i<a.length; i++){
var char = a.charAt(i);
var index = keys.indexOf(char);
if(index !== -1){
s += r[keys[index]];
} else {
s += char;
}
}
if(config.iterations === 0){
return s;
} else {
return evolve({
axiom: s,
iterations: config.iterations - 1,
rules: r
});
}
};
/*
iterate takes a config object then
iterates over the axiom
Object config
String axiom
Object commands
char: function onChar
*/
var iterate = function(config){
var a = config.axiom || "";
var c = config.commands || {};
for(var i = 0; i<a.length; i++){
var char = a.charAt(i);
var onChar = c[char];
if(typeof onChar !== "function"){ continue; }
onChar();
}
};
return {
get evolve() {
return evolve;
},
get iterate() {
return iterate;
}
};
})();