View difference between Paste ID: Yfik6tF2 and AY6ptHY2
SHOW: | | - or go back to the newest paste.
1
<html>
2
	<meta charset="UTF-8"/>
3
<head>
4
</head>
5
<body>
6
	▲<br/>
7
	║<br/>
8
	╚=▲
9
<p onChange=estimate()>
10
  <button class="js-btn" onclick="calculate();">Calculate</button> Only display values <textarea id="js-regexplimiter" cols="50" rows="1"></textarea> Force double weight difference(inelastic)<input type="checkbox" id="inelastic"></input><br/>
11
  Friction 1<textarea class="js-regexpF1" cols="50" rows="1">10</textarea>Cart 1 min<textarea class="js-regexpm1" cols="50" rows="1">314</textarea>Cart 1 max<textarea class="js-regexpW1" cols="50" rows="1">314</textarea><br/>
12
  Friction 2<textarea class="js-regexpF2" cols="50" rows="1">10</textarea>Cart 2 min<textarea class="js-regexpm2" cols="50" rows="1">4</textarea>Cart 2 max<textarea class="js-regexpW2" cols="50" rows="1">4</textarea><br/>
13
  Friction 3<textarea class="js-regexpF3" cols="50" rows="1">10</textarea>Cart 3 min<textarea class="js-regexpm3" cols="50" rows="1">15</textarea>Cart 3 max<textarea class="js-regexpW3" cols="50" rows="1">15</textarea><br/>
14
  Friction 4<textarea class="js-regexpF4" cols="50" rows="1">10</textarea>Cart 4 min<textarea class="js-regexpm4" cols="50" rows="1">134</textarea>Cart 4 max<textarea class="js-regexpW4" cols="50" rows="1">134</textarea><br/>
15
  Friction 5<textarea class="js-regexpF5" cols="50" rows="1">10</textarea>
16
</p>
17
<p>
18
  <textarea id="js-output" cols="50" rows="10"></textarea><br/>
19
 
20
  <button class="js-btn2" onclick="estimate();">estimate nr of calcs</button> <span id=timetaken>Seconds</span><textarea id="js-estimate" cols="50" rows="1"></textarea> <br/>
21
 
22
23
</p>
24
	<script>
25
function gid(m){return document.getElementById(m);}
26
function qs(n) {return document.querySelector(n);}
27
var mfloor = Math.floor;
28
var mmin = Math.min;
29
var mceil = Math.ceil;
30
function outputspeed(inputspeed,inputcartweight,outputcartweight,friction){
31
return (mfloor(inputspeed*mmin(1,inputcartweight/outputcartweight))-friction);
32
}
33
function estimate() {
34
var minweights = new Array();
35
var maxweights = new Array();
36
37
for(var i=0; i<4; i++){
38
	minweights[i] = parseInt(qs('.js-regexpm'+(i+1)).value.length > 0 ? qs('.js-regexpm'+(i+1)).value : 0);
39
}
40
41
for(var i=0; i<4; i++){
42
	maxweights[i] = parseInt(qs('.js-regexpW'+(i+1)).value.length > 0 ? qs('.js-regexpW'+(i+1)).value : 0);
43
}
44
var rv=1;
45
for(var i=0;i<4;i++){
46
	rv=rv*(maxweights[i]-minweights[i]+1);
47
}
48
49
	gid("js-estimate").value=rv*5.452/60466176;
50
	
51
}
52
53
function calculate(){
54
var rn = Date.now();
55
var frictions = new Array();
56
var minweights = new Array();
57
var maxweights = new Array();
58
59
for(var i=0; i<5; i++){
60
	frictions[i] = parseInt(qs('.js-regexpF'+(i+1)).value.length > 0 ? qs('.js-regexpF'+(i+1)).value : 0);
61
}
62
63
for(var i=0; i<4; i++){
64
	minweights[i] = parseInt(qs('.js-regexpm'+(i+1)).value.length > 0 ? qs('.js-regexpm'+(i+1)).value : 0);
65
}
66
67
for(var i=0; i<4; i++){
68
	maxweights[i] = parseInt(qs('.js-regexpW'+(i+1)).value.length > 0 ? qs('.js-regexpW'+(i+1)).value : 0);
69
}
70
71
	var cyclelength=0;
72
	var cycleforwards=0;
73
	var cycleback=0;
74
	var s=new Array();
75
	var sn=0;
76
	var limiter = gid('js-regexplimiter').value.length > 0 ? parseInt(gid('js-regexplimiter').value) : false;
77
	var c1,c2,c3,c4;
78
	var returntext="";
79
	var inelastic = gid('inelastic').checked;
80
	for(c1=minweights[0]; c1<(maxweights[0]+1); c1++){
81
	for(c2=minweights[1]; c2<(maxweights[1]+1); c2++){
82
		if(!inelastic||inelastic&&(((c1/c2)<0.5)||((c1/c2)>2))){
83
	for(c3=minweights[2]; c3<(maxweights[2]+1); c3++){
84
		if(!inelastic||inelastic&&(((c3/c2)<0.5)||((c3/c2)>2))){
85
	for(c4=minweights[3]; c4<(maxweights[3]+1); c4++){
86
		if(!inelastic||inelastic&&(((c3/c4)<0.5)||((c3/c4)>2))){
87
		cyclelength=0;
88
		
89
		s[0]=4900-frictions[0];
90
		s[1]=outputspeed(s[0],c1,c2,frictions[1]);
91
		s[2]=outputspeed((s[1]),c2,c3,frictions[2]);
92
		s[3]=outputspeed((s[2]-1000),c3,c4,frictions[3]);
93
		if(s[2]<1){break;}
94
		if(s[3]<1){break;}
95
		s[4]=4900-frictions[4];
96
		s[5]=outputspeed((s[4]),c4,c3,frictions[3]);
97
		s[6]=outputspeed((s[5]),c3,c2,frictions[2]);
98
		s[7]=outputspeed((s[6]-1000),c2,c1,frictions[1]);
99
		if(s[6]<1){break;}
100
		if(s[7]<1){break;}
101
		cyclelength += ( s[6]<(s[0]-s[7]-frictions[1]) ? 1 : 1+mceil( (s[6]-(s[0]-s[7]-frictions[1]) )/s[1] ) );
102
		cyclelength += mceil(50000/s[2]) + ((mceil(100000/(s[5]-frictions[3]+frictions[2])) < mceil(50000/s[2])) ? 1 : 0);
103
		cyclelength += mceil(100000/s[3]);
104
		
105
		cyclelength += ( s[2]<(s[4]-s[3]-frictions[3]) ? 1 : 1+mceil( (s[2]-(s[4]-s[3]-frictions[3]) )/s[5] ) );
106
		cyclelength += mceil(50000/s[6]) + ((mceil(100000/(s[1]-frictions[1]+frictions[2])) < mceil(50000/s[6])) ? 1 : 0);
107
		cyclelength += mceil(100000/s[7]);
108
		cyclelength--;
109-
		if((limiter==false)||(limiter==cyclelength)||((limiter+1)==cyclelength)){
109+
		cyclelength--;
110
		if((limiter==false)||(limiter==cyclelength)||((limiter-1)==cyclelength)){
111
		returntext+=cyclelength + " : " + c1 + " " + c2 + " " + c3 + " " + c4 + " \n";
112
		}
113
		
114
	}}
115
	}}
116
	}}
117
	}
118
	gid("js-output").value = returntext;
119
	gid('timetaken').innerText=("Calculated! Took " + ((Date.now()-rn)/1000 ) + " seconds.");
120
}
121
122
123
	</script>
124
</body>