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:
@ -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)
|
|
||||||
}
|
}
|
||||||
```
|
```
|
||||||
|
Reference in New Issue
Block a user