Artifact
4e0b0800b9ed92bc54197cbd8aa4286e1f6bbd32922f7ae1b8b2921c43c881f5:
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: 0a 65 78 70 6f 72 74 20 64 65 66 61 75 6c 74 20 .export default
0040: 63 6c 61 73 73 20 44 72 75 6e 6b 20 7b 0a 0a 20 class Drunk {..
0050: 20 20 20 63 6f 6e 73 74 72 75 63 74 6f 72 28 6d constructor(m
0060: 69 6e 3d 30 2c 20 6d 61 78 3d 39 2c 20 76 61 6c in=0, max=9, val
0070: 75 65 3d 30 2c 20 69 6e 63 72 65 6d 65 6e 74 3d ue=0, increment=
0080: 31 2c 20 6c 6f 6f 70 3d 66 61 6c 73 65 29 20 7b 1, loop=false) {
0090: 0a 20 20 20 20 20 20 20 20 74 68 69 73 2e 6d 69 . this.mi
00a0: 6e 20 3d 20 6d 69 6e 3b 0a 20 20 20 20 20 20 20 n = min;.
00b0: 20 74 68 69 73 2e 6d 61 78 20 3d 20 6d 61 78 3b this.max = max;
00c0: 0a 20 20 20 20 20 20 20 20 74 68 69 73 2e 76 61 . this.va
00d0: 6c 75 65 20 3d 20 76 61 6c 75 65 3b 0a 20 20 20 lue = value;.
00e0: 20 20 20 20 20 74 68 69 73 2e 69 6e 63 72 65 6d this.increm
00f0: 65 6e 74 20 3d 20 69 6e 63 72 65 6d 65 6e 74 3b ent = increment;
0100: 0a 20 20 20 20 20 20 20 20 74 68 69 73 2e 6c 6f . this.lo
0110: 6f 70 20 3d 20 6c 6f 6f 70 3b 0a 20 20 20 20 7d op = loop;. }
0120: 0a 0a 20 20 20 20 6e 65 78 74 28 29 20 7b 0a 20 .. next() {.
0130: 20 20 20 20 20 20 20 74 68 69 73 2e 76 61 6c 75 this.valu
0140: 65 20 2b 3d 20 6d 61 74 68 2e 70 69 63 6b 28 2d e += math.pick(-
0150: 31 20 2a 20 74 68 69 73 2e 69 6e 63 72 65 6d 65 1 * this.increme
0160: 6e 74 2c 20 74 68 69 73 2e 69 6e 63 72 65 6d 65 nt, this.increme
0170: 6e 74 29 3b 0a 20 20 20 20 20 20 20 20 69 66 20 nt);. if
0180: 28 74 68 69 73 2e 76 61 6c 75 65 20 3e 20 74 68 (this.value > th
0190: 69 73 2e 6d 61 78 29 20 7b 0a 20 20 20 20 20 20 is.max) {.
01a0: 20 20 20 20 20 20 69 66 20 28 74 68 69 73 2e 6c if (this.l
01b0: 6f 6f 70 29 20 7b 0a 20 20 20 20 20 20 20 20 20 oop) {.
01c0: 20 20 20 20 20 20 20 74 68 69 73 2e 76 61 6c 75 this.valu
01d0: 65 20 3d 20 74 68 69 73 2e 6d 69 6e 3b 0a 20 20 e = this.min;.
01e0: 20 20 20 20 20 20 20 20 20 20 7d 20 65 6c 73 65 } else
01f0: 20 7b 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 {.
0200: 20 20 20 74 68 69 73 2e 76 61 6c 75 65 20 3d 20 this.value =
0210: 74 68 69 73 2e 6d 61 78 20 2d 20 74 68 69 73 2e this.max - this.
0220: 69 6e 63 72 65 6d 65 6e 74 3b 0a 20 20 20 20 20 increment;.
0230: 20 20 20 20 20 20 20 7d 0a 20 20 20 20 20 20 20 }.
0240: 20 7d 0a 0a 20 20 20 20 20 20 20 20 69 66 20 28 }.. if (
0250: 74 68 69 73 2e 76 61 6c 75 65 20 3c 20 74 68 69 this.value < thi
0260: 73 2e 6d 69 6e 29 20 7b 0a 20 20 20 20 20 20 20 s.min) {.
0270: 20 20 20 20 20 69 66 20 28 74 68 69 73 2e 6c 6f if (this.lo
0280: 6f 70 29 20 7b 0a 20 20 20 20 20 20 20 20 20 20 op) {.
0290: 20 20 20 20 20 20 74 68 69 73 2e 76 61 6c 75 65 this.value
02a0: 20 3d 20 74 68 69 73 2e 6d 61 78 3b 0a 20 20 20 = this.max;.
02b0: 20 20 20 20 20 20 20 20 20 7d 20 65 6c 73 65 20 } else
02c0: 7b 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 {.
02d0: 20 20 74 68 69 73 2e 76 61 6c 75 65 20 3d 20 74 this.value = t
02e0: 68 69 73 2e 6d 69 6e 20 2b 20 74 68 69 73 2e 69 his.min + this.i
02f0: 6e 63 72 65 6d 65 6e 74 3b 0a 20 20 20 20 20 20 ncrement;.
0300: 20 20 20 20 20 20 7d 0a 20 20 20 20 20 20 20 20 }.
0310: 7d 0a 20 20 20 20 20 20 20 20 72 65 74 75 72 6e }. return
0320: 20 74 68 69 73 2e 76 61 6c 75 65 3b 0a 20 20 20 this.value;.
0330: 20 7d 0a 7d 0a }.}.