Thursday, January 9, 2025
Google search engine
HomeData Modelling & AIModify array by removing characters from their Hexadecimal representations which are present...

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

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|)

Feeling lost in the world of random DSA topics, wasting time without progress? It’s time for a change! Join our DSA course, where we’ll guide you on an exciting journey to master DSA efficiently and on schedule.
Ready to dive in? Explore our Free Demo Content and join our DSA course, trusted by over 100,000 neveropen!

RELATED ARTICLES

Most Popular

Recent Comments