Skip to content

Instantly share code, notes, and snippets.

@jgcmarins
Created January 10, 2024 22:51
Show Gist options
  • Save jgcmarins/687c0ff3ae998a9733bad20d150708ff to your computer and use it in GitHub Desktop.
Save jgcmarins/687c0ff3ae998a9733bad20d150708ff to your computer and use it in GitHub Desktop.
Aleph Tech Interview Problem
/**
Given an integer array arr of distinct integers and an integer k.
A game will be played between the first two elements of the array (i.e. arr[0] and arr[1]). In each round of the game, we compare arr[0] with arr[1], the larger integer wins and remains at position 0, and the smaller integer moves to the end of the array. The game ends when an integer wins k consecutive rounds.
Return the integer which will win the game.
It is guaranteed that there will be a winner of the game.
Example 1:
Input: arr = [2,1,3,5,4,6,7], k = 2
Output: 5
Explanation: Let's see the rounds of the game:
Round | arr | winner | win_count
1 | [2,1,3,5,4,6,7] | 2 | 1
2 | [2,3,5,4,6,7,1] | 3 | 1
3 | [3,5,4,6,7,1,2] | 5 | 1
4 | [5,4,6,7,1,2,3] | 5 | 2
So we can see that 4 rounds will be played and 5 is the winner because it wins 2 consecutive games.
Example 2:
Input: arr = [3,2,1], k = 10
Output: 3
Explanation: 3 will win the first 10 rounds consecutively.
Constraints:
* 2 <= arr.length <= 105
* 1 <= arr[i] <= 106
* arr contains distinct integers.
* 1 <= k <= 109
*/
let arr = [2, 1, 3, 5, 4, 6, 7];
const k = 2;
// let arr = [3,2,1];
// const k = 10;
let currentWinner;
let winCount = 0;
function verifyResult() {
if (winCount === k) {
console.log(`${arr[0]} is the winner`)
return true;
}
return false;
}
function updateArray(a, b) {
arr = [a, ...arr, b];
console.log("updateArray", arr);
}
function verifyWinnerAndUpdateWincount(newWinner) {
if (!currentWinner) {
currentWinner = newWinner
winCount++;
return;
}
if (currentWinner === newWinner) {
winCount++;
return;
}
currentWinner = newWinner;
winCount = 1;
}
function runTests() {
const a = arr.shift();
const b = arr.shift();
if (a > b) {
console.log(`${a} won`);
verifyWinnerAndUpdateWincount(a);
console.log('winCount', winCount)
updateArray(a, b);
if (verifyResult()) return;
return runTests();
}
console.log(`${b} won`);
verifyWinnerAndUpdateWincount(b);
console.log('winCount', winCount)
updateArray(b, a);
if (verifyResult()) return;
return runTests();
}
console.log(arr)
runTests();
@jgcmarins
Copy link
Author

Screenshot 2024-01-10 at 19 53 23

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment