Created
January 10, 2024 22:51
-
-
Save jgcmarins/687c0ff3ae998a9733bad20d150708ff to your computer and use it in GitHub Desktop.
Aleph Tech Interview Problem
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
/** | |
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(); |
Author
jgcmarins
commented
Jan 10, 2024
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment