In this Post, we will solve HackerRank Sequence Equation Problem Solution.
Given a sequence of n integers, p(1), p(2),…, p(n) where each element is distinct and satisfies 1 ≤ p(x) ≤ n. For each a where 1 ≤ x ≤ n, that is a increments from 1 ton, find any integer y such that p(p(y)) = x and keep a history of the values of y in a return array.
Example
p = [5, 2, 1, 3, 4]
Each value of a between 1 and 5, the length of the sequence, is analyzed as follows:
1. x = 1 = p[3], p[4] = 3, so p[p[4]] = 1
2. x = 2 = p[2], p[2] = 2, so p[p[2]] = 2
3. x = 3 = p[4], p[5] = 4, so p[p[5]] = 3
4. x = 4 = p[5], p[1] = 5, so p[p[1]] = 4
5. x = 5 = p[1], p[3] = 1, so p[p[3]] = 5
The values for y are [4, 2, 5, 1, 3].
Function Description
Complete the permutationEquation function in the editor below.
permutationEquation has the following parameter(s):
- int p[n]: an array of integers
Returns
- int[n]: the values of y for all x in the arithmetic sequence 1 to n.
Input Format
The first line contains an integer n, the number of elements in the sequence. The second line contains n space-separated integers p[i] where 1 ≤ i ≤n.
Constraints
1 ≤ n ≤ 50
1 < p[i] < 50, where 1 ≤ i ≤ n.
Each element in the sequence is distinct.
Sample Input 0
3 2 3 1
Sample Output 0
2 3 1
Explanation 0
Given the values of p(1) = 2, p(2) = 3, and p(3) = 1, we calculate and print the following values for each a from 1 ton:
- x = 1 = p(3) = p(p(2)) = p(p(y)), so we print the value of y = 2 on a new line.
- x = 2 = p(1) = p(p(3)) = p(p(y)), so we print the value of y = 3 on a new line.
- x = 3 = p(2) = p(p(1)) = p(p(y)), so we print the value of y = 1 on a new line.
Sample Input 1
5 4 3 5 1 2
Sample Output 1
1 3 5 4 2

Sequence Equation C Solution
#include <math.h>
#include <stdio.h>
#include <string.h>
#include <stdlib.h>
#include <assert.h>
#include <limits.h>
#include <stdbool.h>
int main() {
int n,i,j,k,flag=0;
scanf("%d",&n);
int *a=(int *)malloc(n*sizeof(int));
for(i=0;i<n;i++)
{
scanf("%d",&a[i]);
//printf("\n@%d",a[i]);
}
for(j=1;j<=n;j++)
{
flag=0;
for(i=0;i<n;i++)
{
if(a[i]==j)
{
for(k=0;k<n;k++)
{
if(a[k]==i+1){
break;
flag=1;
}
}
}
if(flag==1)
break;
}
printf("%d\n",k+1) ;
}
return 0;
}
Sequence Equation C++ Solution
#include <bits/stdc++.h>
using namespace std;
#define pb push_back
#define mp make_pair
#define fs first
#define se second
#define pi 2*acos(0)
#define PI 3.14159265358979323846264338
typedef long long ll;
typedef pair < int , int > pii;
typedef pair < ll , ll > pll;
const int N = 100010;
inline int in() {int x; scanf("%d",&x); return x;}
inline ll lin() {ll x; scanf("%lld",&x); return x;}
int fx[]={1,-1,0,0};
int fy[]={0,0,-1,1};
int inp[123];
int main(){
int n = in();
for(int i = 1; i <= n; i++){
int x = in();
inp[x] = i;
}
for(int i = 1; i <= n; i++){
int x = inp[inp[i]];
cout << x << '\n';
}
}
Sequence Equation C Sharp Solution
using System;
using System.Collections.Generic;
using System.IO;
using System.Linq;
namespace Solution {
class Solution {
static void Main(string[] args) {
/* Enter your code here. Read input from STDIN. Print output to STDOUT */
int n = Convert.ToInt32(Console.ReadLine());
string[] a_temp = Console.ReadLine().Split(' ');
int[] a = Array.ConvertAll(a_temp, Int32.Parse);
Dictionary<int, int> dic = new Dictionary<int, int>();
for(int x = 0; x < n; x++)
dic.Add(x + 1, a[x]);
for(int x = 1; x <= n; x++)
{
int key1 = dic.FirstOrDefault(i => i.Value == x).Key;
int key2 = dic.FirstOrDefault(i => i.Value == key1).Key;
Console.WriteLine(key2);
}
}
}
}
Sequence Equation Java Solution
import java.io.*;
import java.math.*;
import java.security.*;
import java.text.*;
import java.util.*;
import java.util.concurrent.*;
import java.util.function.*;
import java.util.regex.*;
import java.util.stream.*;
import static java.util.stream.Collectors.joining;
import static java.util.stream.Collectors.toList;
class Result {
/*
* Complete the 'permutationEquation' function below.
*
* The function is expected to return an INTEGER_ARRAY.
* The function accepts INTEGER_ARRAY p as parameter.
*/
public static List<Integer> permutationEquation(List<Integer> p) {
// Write your code here
List<Integer> result = new ArrayList<Integer>();
List<Integer> p_inverse = new ArrayList<Integer>();
for(int x = 1; x <= p.size(); x++){
result.add(p.indexOf(p.indexOf(x) + 1) + 1);
}
return result;
}
}
public class Solution {
public static void main(String[] args) throws IOException {
BufferedReader bufferedReader = new BufferedReader(new InputStreamReader(System.in));
BufferedWriter bufferedWriter = new BufferedWriter(new FileWriter(System.getenv("OUTPUT_PATH")));
int n = Integer.parseInt(bufferedReader.readLine().trim());
List<Integer> p = Stream.of(bufferedReader.readLine().replaceAll("\\s+$", "").split(" "))
.map(Integer::parseInt)
.collect(toList());
List<Integer> result = Result.permutationEquation(p);
bufferedWriter.write(
result.stream()
.map(Object::toString)
.collect(joining("\n"))
+ "\n"
);
bufferedReader.close();
bufferedWriter.close();
}
}
Sequence Equation Java Script Solution
process.stdin.resume();
process.stdin.setEncoding("ascii");
var input = "";
process.stdin.on("data", function (chunk) {
input += chunk;
});
process.stdin.on("end", function () {
// now we can read/parse input
var temp = input.split('\n');
var n = temp[0];
var arr = temp[1];
arr = arr.split(" ");
var parray = [];
for(var i=1; i<=n; i++){
parray[i] = arr[i-1];
}
arr = arr.sort(function (a, b) { return a - b; });
for(var i=0; i<n; i++){
var x = arr[i];
var temp = parray.indexOf(x);
temp = temp.toString();
var result = parray.indexOf(temp);
console.log(result);
}
});
Sequence Equation Python Solution
# Enter your code here. Read input from STDIN. Print output to STDOUT
input()
p = [0]+[int(x) for x in input().split()]
for x in range(1,len(p)):
for y in range(1,len(p)):
if p[p[y]] == x:
print(y)
break
Other Solutions