Artifact
97166c6e62a6574169df7fa63a268f5277fcf15cda0659a24e4c8dda3bfe8d44:
0000: 27 75 73 65 20 73 74 72 69 63 74 27 3b 0a 0a 69 'use strict';..i
0010: 6d 70 6f 72 74 20 6d 61 74 68 20 66 72 6f 6d 20 mport math from
0020: 27 2e 2e 2f 75 74 69 6c 2f 6d 61 74 68 27 3b 0a '../util/math';.
0030: 69 6d 70 6f 72 74 20 44 72 75 6e 6b 20 66 72 6f import Drunk fro
0040: 6d 20 27 2e 2f 64 72 75 6e 6b 27 3b 0a 0a 65 78 m './drunk';..ex
0050: 70 6f 72 74 20 64 65 66 61 75 6c 74 20 63 6c 61 port default cla
0060: 73 73 20 43 6f 75 6e 74 65 72 20 7b 0a 0a 20 20 ss Counter {..
0070: 20 20 63 6f 6e 73 74 72 75 63 74 6f 72 28 6d 69 constructor(mi
0080: 6e 3d 30 2c 20 6d 61 78 3d 31 30 2c 20 6d 6f 64 n=0, max=10, mod
0090: 65 3d 27 75 70 27 2c 20 76 61 6c 75 65 3d 66 61 e='up', value=fa
00a0: 6c 73 65 29 20 7b 0a 20 20 20 20 20 20 20 20 74 lse) {. t
00b0: 68 69 73 2e 6d 69 6e 20 3d 20 6d 69 6e 3b 0a 20 his.min = min;.
00c0: 20 20 20 20 20 20 20 74 68 69 73 2e 6d 61 78 20 this.max
00d0: 3d 20 6d 61 78 3b 0a 20 20 20 20 20 20 20 20 74 = max;. t
00e0: 68 69 73 2e 76 61 6c 75 65 20 3d 20 76 61 6c 75 his.value = valu
00f0: 65 3b 0a 20 20 20 20 20 20 20 20 74 68 69 73 2e e;. this.
0100: 6d 6f 64 65 20 3d 20 6d 6f 64 65 3b 0a 20 20 20 mode = mode;.
0110: 20 20 20 20 20 74 68 69 73 2e 64 72 75 6e 6b 57 this.drunkW
0120: 61 6c 6b 20 3d 20 6e 65 77 20 44 72 75 6e 6b 28 alk = new Drunk(
0130: 74 68 69 73 2e 6d 69 6e 2c 20 74 68 69 73 2e 6d this.min, this.m
0140: 61 78 29 3b 0a 20 20 20 20 20 20 20 20 69 66 20 ax);. if
0150: 28 74 68 69 73 2e 76 61 6c 75 65 21 3d 3d 66 61 (this.value!==fa
0160: 6c 73 65 29 20 7b 0a 20 20 20 20 20 20 20 20 20 lse) {.
0170: 20 74 68 69 73 2e 6e 65 78 74 20 3d 20 74 68 69 this.next = thi
0180: 73 5b 74 68 69 73 2e 5f 6d 6f 64 65 5d 3b 0a 20 s[this._mode];.
0190: 20 20 20 20 20 20 20 7d 20 65 6c 73 65 20 7b 0a } else {.
01a0: 20 20 20 20 20 20 20 20 20 20 74 68 69 73 2e 6e this.n
01b0: 65 78 74 20 3d 20 74 68 69 73 2e 66 69 72 73 74 ext = this.first
01c0: 3b 0a 20 20 20 20 20 20 20 20 7d 0a 20 20 20 20 ;. }.
01d0: 7d 0a 0a 20 20 20 20 73 65 74 20 6d 6f 64 65 28 }.. set mode(
01e0: 6d 6f 64 65 29 20 7b 0a 20 20 20 20 20 20 20 20 mode) {.
01f0: 69 66 20 28 21 28 6d 6f 64 65 20 3d 3d 3d 20 27 if (!(mode === '
0200: 75 70 27 20 7c 7c 20 6d 6f 64 65 20 3d 3d 3d 20 up' || mode ===
0210: 27 64 6f 77 6e 27 20 7c 7c 20 6d 6f 64 65 20 3d 'down' || mode =
0220: 3d 3d 20 27 72 61 6e 64 6f 6d 27 20 7c 7c 20 6d == 'random' || m
0230: 6f 64 65 20 3d 3d 3d 20 27 64 72 75 6e 6b 27 29 ode === 'drunk')
0240: 29 20 7b 0a 20 20 20 20 20 20 20 20 20 20 20 20 ) {.
0250: 63 6f 6e 73 6f 6c 65 2e 65 72 72 6f 72 28 27 54 console.error('T
0260: 68 65 20 6f 6e 6c 79 20 6d 6f 64 65 73 20 63 75 he only modes cu
0270: 72 72 65 6e 74 6c 79 20 61 6c 6c 6f 77 65 64 20 rrently allowed
0280: 61 72 65 3a 20 75 70 2c 20 64 6f 77 6e 2c 20 72 are: up, down, r
0290: 61 6e 64 6f 6d 2c 20 64 72 75 6e 6b 27 29 3b 0a andom, drunk');.
02a0: 20 20 20 20 20 20 20 20 20 20 20 20 72 65 74 75 retu
02b0: 72 6e 3b 0a 20 20 20 20 20 20 20 20 7d 0a 20 20 rn;. }.
02c0: 20 20 20 20 20 20 74 68 69 73 2e 5f 6d 6f 64 65 this._mode
02d0: 20 3d 20 6d 6f 64 65 3b 0a 20 20 20 20 20 20 20 = mode;.
02e0: 20 69 66 20 28 74 68 69 73 2e 76 61 6c 75 65 29 if (this.value)
02f0: 20 7b 0a 20 20 20 20 20 20 20 20 20 20 74 68 69 {. thi
0300: 73 2e 6e 65 78 74 20 3d 20 74 68 69 73 5b 74 68 s.next = this[th
0310: 69 73 2e 5f 6d 6f 64 65 5d 3b 0a 20 20 20 20 20 is._mode];.
0320: 20 20 20 7d 0a 20 20 20 20 7d 0a 0a 20 20 20 20 }. }..
0330: 67 65 74 20 6d 6f 64 65 28 29 20 7b 0a 20 20 20 get mode() {.
0340: 20 20 20 20 20 72 65 74 75 72 6e 20 74 68 69 73 return this
0350: 2e 5f 6d 6f 64 65 3b 0a 20 20 20 20 7d 0a 0a 20 ._mode;. }..
0360: 20 20 20 66 69 72 73 74 28 29 20 7b 0a 20 20 20 first() {.
0370: 20 20 20 69 66 20 28 74 68 69 73 2e 76 61 6c 75 if (this.valu
0380: 65 21 3d 3d 66 61 6c 73 65 29 20 7b 0a 20 20 20 e!==false) {.
0390: 20 20 20 20 20 74 68 69 73 2e 6e 65 78 74 20 3d this.next =
03a0: 20 74 68 69 73 5b 74 68 69 73 2e 5f 6d 6f 64 65 this[this._mode
03b0: 5d 3b 0a 20 20 20 20 20 20 20 20 72 65 74 75 72 ];. retur
03c0: 6e 20 74 68 69 73 2e 6e 65 78 74 28 29 3b 0a 20 n this.next();.
03d0: 20 20 20 20 20 7d 0a 20 20 20 20 20 20 74 68 69 }. thi
03e0: 73 2e 73 74 61 72 74 56 61 6c 75 65 73 20 3d 20 s.startValues =
03f0: 7b 0a 20 20 20 20 20 20 20 20 27 75 70 27 3a 20 {. 'up':
0400: 74 68 69 73 2e 6d 69 6e 2c 0a 20 20 20 20 20 20 this.min,.
0410: 20 20 27 64 6f 77 6e 27 3a 20 74 68 69 73 2e 6d 'down': this.m
0420: 61 78 2c 0a 20 20 20 20 20 20 20 20 27 64 72 75 ax,. 'dru
0430: 6e 6b 27 3a 20 7e 7e 6d 61 74 68 2e 61 76 65 72 nk': ~~math.aver
0440: 61 67 65 28 74 68 69 73 2e 6d 69 6e 2c 74 68 69 age(this.min,thi
0450: 73 2e 6d 61 78 29 2c 0a 20 20 20 20 20 20 20 20 s.max),.
0460: 27 72 61 6e 64 6f 6d 27 3a 20 6d 61 74 68 2e 72 'random': math.r
0470: 69 28 74 68 69 73 2e 6d 69 6e 2c 74 68 69 73 2e i(this.min,this.
0480: 6d 61 78 29 0a 20 20 20 20 20 20 7d 3b 0a 20 20 max). };.
0490: 20 20 20 20 74 68 69 73 2e 76 61 6c 75 65 20 3d this.value =
04a0: 20 74 68 69 73 2e 73 74 61 72 74 56 61 6c 75 65 this.startValue
04b0: 73 5b 74 68 69 73 2e 5f 6d 6f 64 65 5d 3b 0a 20 s[this._mode];.
04c0: 20 20 20 20 20 74 68 69 73 2e 6e 65 78 74 20 3d this.next =
04d0: 20 74 68 69 73 5b 74 68 69 73 2e 5f 6d 6f 64 65 this[this._mode
04e0: 5d 3b 0a 20 20 20 20 20 20 72 65 74 75 72 6e 20 ];. return
04f0: 74 68 69 73 2e 76 61 6c 75 65 3b 0a 20 20 20 20 this.value;.
0500: 7d 0a 0a 20 20 20 20 75 70 28 29 20 7b 0a 20 20 }.. up() {.
0510: 20 20 20 20 20 20 74 68 69 73 2e 76 61 6c 75 65 this.value
0520: 2b 2b 3b 0a 20 20 20 20 20 20 20 20 69 66 20 28 ++;. if (
0530: 74 68 69 73 2e 76 61 6c 75 65 20 3e 3d 20 74 68 this.value >= th
0540: 69 73 2e 6d 61 78 29 20 7b 0a 20 20 20 20 20 20 is.max) {.
0550: 20 20 20 20 20 20 74 68 69 73 2e 76 61 6c 75 65 this.value
0560: 20 3d 20 74 68 69 73 2e 6d 69 6e 3b 0a 20 20 20 = this.min;.
0570: 20 20 20 20 20 7d 0a 20 20 20 20 20 20 20 20 72 }. r
0580: 65 74 75 72 6e 20 74 68 69 73 2e 76 61 6c 75 65 eturn this.value
0590: 3b 0a 20 20 20 20 7d 0a 0a 20 20 20 20 64 6f 77 ;. }.. dow
05a0: 6e 28 29 20 7b 0a 20 20 20 20 20 20 20 20 74 68 n() {. th
05b0: 69 73 2e 76 61 6c 75 65 2d 2d 3b 0a 20 20 20 20 is.value--;.
05c0: 20 20 20 20 69 66 20 28 74 68 69 73 2e 76 61 6c if (this.val
05d0: 75 65 20 3c 20 74 68 69 73 2e 6d 69 6e 29 20 7b ue < this.min) {
05e0: 0a 20 20 20 20 20 20 20 20 20 20 20 20 74 68 69 . thi
05f0: 73 2e 76 61 6c 75 65 20 3d 20 74 68 69 73 2e 6d s.value = this.m
0600: 61 78 3b 0a 20 20 20 20 20 20 20 20 7d 0a 20 20 ax;. }.
0610: 20 20 20 20 20 20 72 65 74 75 72 6e 20 74 68 69 return thi
0620: 73 2e 76 61 6c 75 65 3b 0a 20 20 20 20 7d 0a 0a s.value;. }..
0630: 20 20 20 20 72 61 6e 64 6f 6d 28 29 20 7b 0a 20 random() {.
0640: 20 20 20 20 20 20 20 74 68 69 73 2e 76 61 6c 75 this.valu
0650: 65 20 3d 20 6d 61 74 68 2e 72 69 28 74 68 69 73 e = math.ri(this
0660: 2e 6d 69 6e 2c 20 74 68 69 73 2e 6d 61 78 29 3b .min, this.max);
0670: 0a 20 20 20 20 20 20 20 20 72 65 74 75 72 6e 20 . return
0680: 74 68 69 73 2e 76 61 6c 75 65 3b 0a 20 20 20 20 this.value;.
0690: 7d 0a 0a 20 20 20 20 64 72 75 6e 6b 28 29 20 7b }.. drunk() {
06a0: 0a 20 20 20 20 20 20 20 20 74 68 69 73 2e 64 72 . this.dr
06b0: 75 6e 6b 57 61 6c 6b 2e 6d 69 6e 20 3d 20 74 68 unkWalk.min = th
06c0: 69 73 2e 6d 69 6e 3b 0a 20 20 20 20 20 20 20 20 is.min;.
06d0: 74 68 69 73 2e 64 72 75 6e 6b 57 61 6c 6b 2e 6d this.drunkWalk.m
06e0: 61 78 20 3d 20 74 68 69 73 2e 6d 61 78 3b 0a 20 ax = this.max;.
06f0: 20 20 20 20 20 20 20 74 68 69 73 2e 64 72 75 6e this.drun
0700: 6b 57 61 6c 6b 2e 76 61 6c 75 65 20 3d 20 74 68 kWalk.value = th
0710: 69 73 2e 76 61 6c 75 65 3b 0a 20 20 20 20 20 20 is.value;.
0720: 20 20 74 68 69 73 2e 76 61 6c 75 65 20 3d 20 74 this.value = t
0730: 68 69 73 2e 64 72 75 6e 6b 57 61 6c 6b 2e 6e 65 his.drunkWalk.ne
0740: 78 74 28 29 3b 0a 20 20 20 20 20 20 20 20 72 65 xt();. re
0750: 74 75 72 6e 20 74 68 69 73 2e 76 61 6c 75 65 3b turn this.value;
0760: 0a 20 20 20 20 7d 0a 7d 0a . }.}.