Array of size 100
You have elements from 100 to 199 randomly shuffled.
One number is replaced with another number in the same range .. Find the replaced number and position.
One Condition is that you should not use a nested loop
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
module top;
int unsigned arr[100];
int unsigned change_index;
int sum;
int tmp[$];
initial begin
std::randomize(arr) with { foreach (arr[i]) { arr[i] inside {[100:199]};}
unique {arr};
};
std::randomize(change_index) with { change_index inside {[10:99]}; };
$display("Index:%0d Val:%0d",change_index,arr[change_index]);
sum = arr.sum();
arr[change_index] = 110;
for( int i=0; i < 100; i++) begin //{
tmp = arr.find_index with (item == arr[i]);
if(tmp.size() > 1) begin //{
$display("Duplicate found: Index:%0d Val:%0d",i,arr[i]);
if(sum > arr.sum()) $display("Index:%0d Original:%0d Duplicate:%0d",i,arr[i]+(sum-arr.sum()),arr[i]);
else $display("Index:%0d Original:%0d Duplicate:%0d",i,arr[i]-(arr.sum()-sum),arr[i]);
break;
end //}
tmp.delete();
end //}
end
endmodule
This comment has been removed by the author.
ReplyDeleteHi Pavan,
ReplyDeletesolution mentioned above is quite interesting.
Can't we save t.a[ch] to some local variable and replace this with random_range(100, 199)?
thanks and regards,
Santhosh
The intention of the interview question is that when some one else changes the content of the array, we should be able to indentify the element and the index.
ReplyDelete