fix: solve off by one error in solution (#42152)

* fix: solve off by one erro in solution
closes #42141

* fix: add white space for readability

Co-authored-by: Nicholas Carrigan (he/him) <nhcarrigan@gmail.com>

Co-authored-by: Nicholas Carrigan (he/him) <nhcarrigan@gmail.com>
This commit is contained in:
alirezaghey
2021-05-16 18:04:07 +00:00
committed by GitHub
parent 1c1d86922c
commit f4d07a2cdf

View File

@ -42,34 +42,34 @@ assert(typeof josephus == 'function');
assert(typeof josephus(30, 3) == 'number'); assert(typeof josephus(30, 3) == 'number');
``` ```
`josephus(30,3)` should return `29`. `josephus(30,3)` should return `28`.
```js ```js
assert.equal(josephus(30, 3), 29); assert.equal(josephus(30, 3), 28);
``` ```
`josephus(30,5)` should return `3`. `josephus(30,5)` should return `2`.
```js ```js
assert.equal(josephus(30, 5), 3); assert.equal(josephus(30, 5), 2);
``` ```
`josephus(20,2)` should return `9`. `josephus(20,2)` should return `8`.
```js ```js
assert.equal(josephus(20, 2), 9); assert.equal(josephus(20, 2), 8);
``` ```
`josephus(17,6)` should return `2`. `josephus(17,6)` should return `1`.
```js ```js
assert.equal(josephus(17, 6), 2); assert.equal(josephus(17, 6), 1);
``` ```
`josephus(29,4)` should return `2`. `josephus(29,4)` should return `1`.
```js ```js
assert.equal(josephus(29, 4), 2); assert.equal(josephus(29, 4), 1);
``` ```
# --seed-- # --seed--
@ -86,36 +86,13 @@ function josephus(init, kill) {
```js ```js
function josephus(init, kill) { function josephus(init, kill) {
var Josephus = { const arr = Array.from(Array(init).keys());
init: function(n) { let curr = -1
this.head = {}; while (arr.length > 1) {
var current = this.head; curr = (curr + kill) % arr.length;
for (var i = 0; i < n - 1; i++) { arr.splice(curr, 1);
current.label = i + 1; curr--;
current.next = {
prev: current
};
current = current.next;
}
current.label = n;
current.next = this.head;
this.head.prev = current;
return this;
},
kill: function(spacing) {
var current = this.head;
while (current.next !== current) {
for (var i = 0; i < spacing - 1; i++) {
current = current.next;
}
current.prev.next = current.next;
current.next.prev = current.prev;
current = current.next;
}
return current.label;
}
} }
return arr[0];
return Josephus.init(init).kill(kill)
} }
``` ```