In this HackerRank Dynamic Array problem, we need to develop a program in which we need to perform the queries using the bitwise operations.

HackerRank Dynamic Array problem solution


Problem solution in Python programming.

a = input().split(' ')
N, Q = [int(e) for e  in a]
arrays = [[] for _ in range(N)]
lastans = 0

def insert(x, y):
    global lastans
    arrays[(x ^ lastans) % N].append(y)
def printnum(x, y):
    global lastans
    inst = arrays[(x ^ lastans) % N]
    lastans = inst[y % len(inst)]
    print(lastans)
    
    
for i in range(Q):
    line = [int(e) for e in input().split(' ')]
    insert(line[1], line[2]) if line[0] == 1 else printnum(line[1], line[2])


Problem solution in Java Programming.

import java.io.*;
import java.util.*;

public class Solution {

    public static void main(String[] args) {
        Scanner sc = new Scanner(System.in);
		int n = sc.nextInt();
		ArrayList<ArrayList<Integer>> lists = new ArrayList<ArrayList<Integer>>(n);
        for (int i = 0; i < n; i++) {
            lists.add(new ArrayList<Integer>());
        }
		int q = sc.nextInt();
		int lastans = 0;
		for (int i = 0; i < q; i++) {
			if (sc.nextInt() == 1) {
				lists.get((sc.nextInt() ^ lastans) % n).add(sc.nextInt());
			}
			else {
				ArrayList<Integer> l = lists.get((sc.nextInt() ^ lastans) % n);
				lastans = l.get(sc.nextInt() % l.size());
				System.out.println(lastans);
			}
		}
    }
}


Problem solution in C++ programming.

#include <cmath>
#include <cstdio>
#include <vector>
#include <iostream>
#include <algorithm>
using namespace std;


int main() {
    int N = 0, Q = 0;
    int lastans = 0;
    int type, x, y;
    int seq = 0;
    int pos;
    
    cin >> N >> Q;
    
    vector < vector <int>> a(N);
    
    for (int i = 0; i < Q; i ++) {
        cin >> type >> x >> y;
        seq = ((x ^ lastans) % N);
       // cout << seq << endl;
        if (type == 1) {
            a[seq].push_back(y);
           // cout << (seq) << " <-- " << y << endl;
        }
        else if (type == 2) {
            pos = (y % a[seq].size());
            //cout << "pos " << pos << endl;
            lastans = a[seq][pos];
            cout << lastans << endl;
        }
        
    }
    return 0;
}


Problem solution in C programming.

#include <stdio.h>
#include <stdlib.h>
#include <string.h>

typedef struct Seq_ {
  int *dat;
  int sz;
} Seq;

Seq seq[100001];

void insert(int n, int y) {
  seq[n].dat = realloc(seq[n].dat, seq[n].sz += 1);
  seq[n].dat[seq[n].sz-1] = y;
}

int print(int n, int y) {
  int t = seq[n].dat[y % seq[n].sz];
  printf("%d\n", t);
  return t;
}

int main() {
  FILE *f = stdin;

  int n, q;
  fscanf(f, "%d %d", &n, &q);
  int lastans = 0;
  for (int i = 0; i < q; i++) {
    int op, x, y;
    fscanf(f, "%d %d %d", &op, &x, &y);
    int seq = (x ^ lastans) % n;
    if (op == 1)
      insert(seq, y);
    else // op == 2
      lastans = print(seq, y);
  }

  return 0;
}


Problem solution in JavaScript programming.

function processData(input) {
    //Enter your code here
    var lines = input.split('\n');
    var NQ = lines[0].split(' ').map(Number);
    var N = NQ[0];
    var Q = NQ[1];
    var lastans = 0;
    var sequences = [];
    for (var i = 0; i <= N; i++) {
        sequences[i] = [];
    }
    lines.slice(1).forEach(function (line) {
        var query = line.split(' ').map(Number);
        var x = query[1];
        var y = query[2];
        if (query[0] === 1) {
            var sequenceNum = (x ^ lastans) % N;
            sequences[sequenceNum].push(y);
        } else if (query[0] === 2) {
            var sequenceNum = (x ^ lastans) % N;
            var size = sequences[sequenceNum].length;
            var element = sequences[sequenceNum][y % size];
            console.log(element);
            lastans = element;
        }
    });
} 

process.stdin.resume();
process.stdin.setEncoding("ascii");
_input = "";
process.stdin.on("data", function (input) {
    _input += input;
});

process.stdin.on("end", function () {
   processData(_input);
});