Open In App

Modify array by removing characters from their Hexadecimal representations which are present in a given string

Last Updated : 04 Jan, 2023
Improve
Improve
Like Article
Like
Save
Share
Report

Given an array arr[] of size N and a string S, the task is to modify given array by removing all characters from their hexadecimal representations that are present in S and then replacing the equivalent decimal element back into the array.

Examples:

Input: arr[] = {74, 91, 31, 122}, S = “1AB”
Output: {4, 5, 15, 7}
Explanation:  
74 -> (4A)16 -> (4)16 -> 4
91 -> (5B)16 -> (5)16 -> 5
31 -> (1F)16 -> (F)16 -> 15
122 -> (7A)16 -> (7)16 -> 7

Input: arr[] = {1450, 1716, 284, 843}, S = “ABFE3”
Output: {5, 100, 284, 4}

Approach: Follow the steps below to solve the problem:

Below is the implementation of the above approach:

C++




// C++ program for the above approach
#include <bits/stdc++.h>
using namespace std;
 
// Function to convert a decimal number
// to its equivalent hexadecimal number
string decHex(int n)
{
  char alpha[] = { 'A', 'B', 'C', 'D', 'E', 'F' };
  string ans;
  while (n > 0) {
    if (n % 16 < 10) {
      ans += to_string(n % 16);
    }
    else {
      ans += alpha[n % 16 - 10];
    }
    n /= 16;
  }
  reverse(ans.begin(), ans.end());
  return ans;
}
 
// Function to convert hexadecimal number
// to its equavalent decimal number
int hexDec(string convertedHex)
{
 
  // Stores characters with their
  // respective hexadecimal values
  char mp[] = { 10, 11, 12, 13, 14, 15 };
 
  // Stores answer
  int ans = 0;
  int pos = 0;
 
  // Traverse the string
  reverse(convertedHex.begin(), convertedHex.end());
  for (char ch : convertedHex) {
 
    // If digit
    if (isdigit(ch)) {
      ans += ((int)pow(16, pos)) * (ch - '0');
    }
 
    // If character
    else {
      ans += ((int)pow(16, pos)) * mp[ch - 'A'];
    }
    pos += 1;
  }
  // Return the answer
  return ans;
}
 
// Function to move all the
// alphabets to front
string removeChars(string hexaVal, string S)
{
  set<char> setk;
  for (char ch : S) {
    setk.insert(ch);
  }
  string ans = "";
  for (char ch : hexaVal) {
    if (setk.find(ch) != setk.end()) {
      continue;
    }
    ans += ch;
  }
  return ans;
}
 
// Function to modify each array
// element by removing characters
// from their hexadecimal representation
// which are present in a given string
void convertArr(int arr[], int N, string S)
{
 
  // Traverse the array
  for (int i = 0; i < N; i++) {
 
    // Stores hexadecimal value
    string hexaVal = decHex(arr[i]);
 
    // Remove the characters from hexadecimal
    // representation present in string S
    string convertedHex = removeChars(hexaVal, S);
 
    // Stores decimal value
    int decVal = hexDec(convertedHex);
 
    // Replace array element
    arr[i] = decVal;
  }
 
  // Print the modified array
  for (int i = 0; i < N; i++) {
    cout << arr[i] << " ";
  }
}
 
// Driven Program
int main()
{
  // Given array
  int arr[] = { 74, 91, 31, 122 };
  int N = sizeof(arr) / sizeof(arr[0]);
 
  // Given string
  string S = "1AB";
 
  // Function call to modify
  // array by given operations
  convertArr(arr, N, S);
 
  return 0;
}
 
// This code is contributed by Kingash.


Java




// java program for the above approach
import java.io.*;
import java.lang.*;
import java.util.*;
 
class GFG {
 
  // Function to convert a decimal number
  // to its equivalent hexadecimal number
  static String decHex(int n)
  {
    char alpha[] = { 'A', 'B', 'C', 'D', 'E', 'F' };
    StringBuilder ans = new StringBuilder("");
    while (n > 0) {
      if (n % 16 < 10) {
        ans.append(Integer.toString(n % 16));
      }
      else {
        ans.append(alpha[n % 16 - 10]);
      }
      n /= 16;
    }
    ans = ans.reverse();
    return ans.toString();
  }
 
  // Function to convert hexadecimal number
  // to its equavalent decimal number
  static int hexDec(String convertedHex)
  {
 
    // Stores characters with their
    // respective hexadecimal values
    char mp[] = { 10, 11, 12, 13, 14, 15 };
 
    // Stores answer
    int ans = 0;
    int pos = 0;
 
    // Traverse the string
    StringBuilder s = new StringBuilder(convertedHex);
    convertedHex = s.reverse().toString();
    for (char ch : convertedHex.toCharArray()) {
 
      // If digit
      if (Character.isDigit(ch)) {
        ans += ((int)Math.pow(16, pos))
          * (ch - '0');
      }
 
      // If character
      else {
        ans += ((int)Math.pow(16, pos))
          * mp[ch - 'A'];
      }
      pos += 1;
    }
    // Return the answer
    return ans;
  }
 
  // Function to move all the
  // alphabets to front
  static String removeChars(String hexaVal, String S)
  {
    HashSet<Character> setk = new HashSet<>();
    for (char ch : S.toCharArray()) {
      setk.add(ch);
    }
    String ans = "";
    for (char ch : hexaVal.toCharArray()) {
      if (setk.contains(ch)) {
        continue;
      }
      ans += ch;
    }
    return ans;
  }
 
  // Function to modify each array
  // element by removing characters
  // from their hexadecimal representation
  // which are present in a given string
  static void convertArr(int arr[], String S)
  {
 
    // Traverse the array
    for (int i = 0; i < arr.length; i++) {
 
      // Stores hexadecimal value
      String hexaVal = decHex(arr[i]);
 
      // Remove the characters from hexadecimal
      // representation present in string S
      String convertedHex = removeChars(hexaVal, S);
 
      // Stores decimal value
      int decVal = hexDec(convertedHex);
 
      // Replace array element
      arr[i] = decVal;
    }
 
    // Print the modified array
    for (int val : arr) {
      System.out.print(val + " ");
    }
  }
 
  // Driver Code
  public static void main(String[] args)
  {
 
    // Given array
    int arr[] = { 74, 91, 31, 122 };
 
    // Given string
    String S = "1AB";
 
    // Function call to modify
    // array by given operations
    convertArr(arr, S);
  }
}
 
// This code is contributed by Kingash.


Python3




# Python3 program for the above approach
 
# Function to convert a decimal number
# to its equivalent hexadecimal number
def decHex(n):
    alpha = ['A', 'B', 'C', 'D', 'E', 'F']
    ans = ''
    while n:
        if n % 16 < 10:
            ans += str(n % 16)
        else:
            ans += alpha[n % 16 - 10]
        n //= 16
 
    ans = ans[::-1]
    return ans
 
# Function to convert hexadecimal number
# to its equavalent decimal number
def hexDec(convertedHex):
 
    # Stores characters with their
    # respective hexadecimal values
    mp = {"A": 10, "B": 11, "C": 12,
           "D": 13, "E": 14, "F": 15}
 
    # Stores answer
    ans = 0
    pos = 0
 
    # Traverse the string
    for i in convertedHex[::-1]:
 
        # If digit
        if i.isdigit():
            ans += (16**pos)*int(i)
 
        # If character
        else:
            ans += (16**pos)*mp[i]
        pos += 1
 
    # Return the answer
    return ans
 
# Function to move all the
# alphabets to front
def removeChars(hexaVal, S):
    setk = set()
    for i in S:
        setk.add(i)
    ans = ''
    for i in hexaVal:
        if i in setk:
            continue
        ans += i
 
    return ans
 
# Function to modify each array
# element by removing characters
# from their hexadecimal representation
# which are present in a given string
def convertArr(arr, S):
 
    # Traverse the array
    for i in range(len(arr)):
 
        # Stores hexadecimal value
        hexaVal = decHex(arr[i])
 
        # Remove the characters from hexadecimal
        # representation present in string S
        convertedHex = removeChars(hexaVal, S)
 
        # Stores decimal value
        decVal = hexDec(convertedHex)
 
        # Replace array element
        arr[i] = decVal
 
    # Print the modified array
    print(arr)
 
 
# Driver Code
# Given array
arr = [74, 91, 31, 122]
 
# Given string
S = "1AB"
 
# Function call to modify
# array by given operations
convertArr(arr, S)


C#




using System;
using System.Linq;
 
class Program
{
  static void Main(string[] args)
  {
     
    // Given array
    int[] arr = { 74, 91, 31, 122 };
    int N = arr.Length;
 
    // Given string
    string S = "1AB";
 
    // Function call to modify
    // array by given operations
    ConvertArr(arr, N, S);
 
    Console.WriteLine();
  }
 
  // Function to convert a decimal number
  // to its equivalent hexadecimal number
  static string DecHex(int n)
  {
    char[] alpha = { 'A', 'B', 'C', 'D', 'E', 'F' };
    string ans = "";
    while (n > 0)
    {
      if (n % 16 < 10)
      {
        ans += n % 16;
      }
      else
      {
        ans += alpha[n % 16 - 10];
      }
      n /= 16;
    }
    return new string(ans.Reverse().ToArray());
  }
 
  // Function to convert hexadecimal number
  // to its equavalent decimal number
  static int HexDec(string convertedHex)
  {
    // Stores characters with their
    // respective hexadecimal values
    char[] mp = { 'A', 'B', 'C', 'D', 'E', 'F' };
 
    // Stores answer
    int ans = 0;
    int pos = 0;
 
    // Traverse the string
    char[] reversed = convertedHex.Reverse().ToArray();
    foreach (char ch in reversed)
    {
      // If digit
      if (char.IsDigit(ch))
      {
        ans += (int)Math.Pow(16, pos) * (ch - '0');
      }
      // If character
      else
      {
        ans += (int)Math.Pow(16, pos) * Array.IndexOf(mp, ch);
      }
      pos += 1;
    }
    // Return the answer
    return ans;
  }
 
  // Function to move all the
  // alphabets to front
  static string RemoveChars(string hexaVal, string S)
  {
    char[] setk = S.ToCharArray();
    string ans = "";
    foreach (char ch in hexaVal)
    {
      if (setk.Contains(ch))
      {
        continue;
      }
      ans += ch;
    }
    return ans;
  }
 
  // Function to modify each array
  // element by removing characters
  // from their hexadecimal representation
  // which are present in a given string
  static void ConvertArr(int[] arr, int N, string S)
  {
     
    // Traverse the array
    for (int i = 0; i < N; i++)
    {
      // Stores hexadecimal value
      string hexaVal = DecHex(arr[i]);
 
      // Remove the characters from hexadecimal
      // representation present in string S
      string convertedHex = RemoveChars(hexaVal, S);
 
 
      // Stores decimal value
      int decVal = HexDec(convertedHex);
 
      // Replace array element
      arr[i] = decVal;
    }
 
    // Print the modified array
    for (int i = 0; i < N; i++) {
      Console.Write(arr[i] + " ");
    }
 
  }
}
 
// This code is contributed by phasing17.


Javascript




<script>
 
// JavaScript program for the above approach
 
// Function to convert a decimal number
// to its equivalent hexadecimal number
function decHex(n){
    let alpha = ['A', 'B', 'C', 'D', 'E', 'F']
    let ans = ''
    while(n){
        if(n % 16 < 10)
            ans += (n % 16).toString()
        else
            ans += alpha[n % 16 - 10]
        n = Math.floor(n/16)
    }
 
    ans = ans.split("").reverse().join("")
    return ans
}
 
// Function to convert hexadecimal number
// to its equavalent decimal {number
function hexDec(convertedHex){
 
    // Stores characters with their
    // respective hexadecimal values
    let mp = {"A": 10, "B": 11, "C": 12,
        "D": 13, "E": 14, "F": 15}
 
    // Stores answer
    let ans = 0
    let pos = 0
 
    // Traverse the string
    for(let i of convertedHex.split("").reverse().join("")){
 
        // If digit
        if(i.charCodeAt(0)>=48 && i.charCodeAt(0)<=57)
            ans += Math.pow(16,pos)*parseInt(i)
 
        // If character
        else
            ans += Math.pow(16,pos)*mp[i]
        pos += 1
    }
 
    // Return the answer
    return ans
}
 
// Function to move all the
// alphabets to front
function removeChars(hexaVal, S){
    let setk = new Set()
    for(let i of S)
        setk.add(i)
    let ans = ''
    for(let i of hexaVal){
        if(setk.has(i))
            continue
        ans += i
    }
 
    return ans
}
 
// Function to modify each array
// element by removing characters
// from their hexadecimal representation
// which are present in a given string
function convertArr(arr, S){
 
    // Traverse the array
    for(let i=0;i<arr.length;i++){
 
        // Stores hexadecimal value
        let hexaVal = decHex(arr[i])
 
        // Remove the characters from hexadecimal
        // representation present in string S
        let convertedHex = removeChars(hexaVal, S)
 
        // Stores decimal value
        let decVal = hexDec(convertedHex)
 
        // Replace array element
        arr[i] = decVal
    }
 
    // Print the modified array
    document.write(arr,"</br>")
}
 
 
// Driver Code
// Given array
let arr = [74, 91, 31, 122]
 
// Given string
let S = "1AB"
 
// Function call to modify
// array by given operations
convertArr(arr, S)
 
// This code is contributed by shinjanpatra
 
</script>


Output: 

[4, 5, 15, 7]

 

Time Complexity: O(N * |S|)
Auxiliary Space: O(|S|)



Like Article
Suggest improvement
Previous
Next
Share your thoughts in the comments

Similar Reads