Hi! I have a Hackerrank solution in TypeScript and I'd like to port into Rust code as a Rust beginner.
I tried to fix the problems, but I get a new error every time. I'm a bit confused.
Please help me reviewing the code, which is unfinished. Thanks.
/*
* Complete the 'dynamicArray' function below.
*
* The function is expected to return an INTEGER_ARRAY.
* The function accepts following parameters:
* 1. INTEGER n
* 2. 2D_INTEGER_ARRAY queries
*/
fn dynamicArray(n: i32, queries: &[Vec<i32>]) -> Vec<i32> {
let mut arr: Vec<Vec<i32>> = vec![Vec::new(); n as usize];
let mut lastAnswer: i32 = 0;
let mut answers: Vec<i32> = Vec::new();
fn get_index(x: i32, lastAnswer: i32, n: i32) -> usize {
(x as usize ^ lastAnswer as usize) % n as usize
}
fn query_one(_x: i32, y: i32) {
let _i = |mut arr: Vec<Vec<i32>>, x, lastAnswer, n| {
let idx = get_index(x, lastAnswer, n);
arr[idx].push(y);
};
}
fn query_two(x: i32, y: i32, answers: &mut Vec<i32>) {
let _last_answer = |mut arr:Vec<Vec<i32>>, lastAnswer: &mut i32, n| {
let i = get_index(x, *lastAnswer, n);
let l = arr[i].len();
let z = y as usize % l as usize;
lastAnswer = &mut arr[i][z] as &mut i32;
answers.push(*lastAnswer);
};
}
// Trying to get rid of warnings and focus on Errors...
// @todo solution...
arr[0][0]= 0;
lastAnswer = 0;
let _ = lastAnswer;
let _ = queries;
let _ = query_one(0, 0);
let _ = query_two(0, 0, &mut answers);
answers
}
warning: value assigned to `lastAnswer` is never read
error[E0384]: cannot assign to immutable argument `lastAnswer`
error[E0597]: `arr` does not live long enough
A browser interface to the Rust compiler to experiment with the language