Thursday, February 29, 2024
HomeSoftware EngineeringPhrase Values Problem in Java

Phrase Values Problem in Java


The problem

Given a string "abc" and assuming that every letter within the string has a worth equal to its place within the alphabet, our string may have a worth of 1 + 2 + 3 = 6. Because of this: a = 1, b = 2, c = 3 ....z = 26.

You can be given an inventory of strings and your activity might be to return the values of the strings as defined above multiplied by the place of that string within the record. For our function, place begins with 1.

nameValue ["abc","abc abc"] ought to return [6,24] due to [ 6 * 1, 12 * 2 ]. Word how areas are ignored.

"abc" has a worth of 6, whereas "abc abc" has a worth of 12. Now, the worth at place 1 is multiplied by 1 whereas the worth at place 2 is multiplied by 2.

Enter will solely comprise lowercase characters and areas.

The answer in Java code

Possibility 1:

class Answer{
    public static int [] nameValue(String [] arr){
        String alpha = "abcdefghijklmnopqrstuvwxyz";
        int[] out = new int[arr.length];
      
        for (int i=0; i<arr.size; i++) {
            int rely = 0;
            
            for (int j=0; j<arr[i].size(); j++) {
                int val = alpha.indexOf(arr[i].charAt(j));
                if (val>-1) rely+=(val+1);
            }
          
            out[i] = rely*(i+1);  
        }
        return out;
    }
}

Possibility 2:

class Answer{
    public static int [] nameValue(String [] arr){
        int[] end result = new int[arr.length];
        for (int i = 0; i < arr.size; i++){
            end result[i] = arr[i].chars().filter(e -> e != ' ').map(e -> e - 96).sum() * (i+1);
        }
        return end result;
    }
}

Possibility 3:

import static java.util.stream.IntStream.rangeClosed;

interface Answer {
  static int[] nameValue(String[] arr) {
    return rangeClosed(1, arr.size)
                 .map(i -> i * arr[i - 1].chars().cut back(0, (s, c) -> s + Math.max(c - 96, 0)))
                 .toArray();
  }
}

Check instances to validate our answer

import org.junit.Check;
import static org.junit.Assert.assertArrayEquals;
import org.junit.runners.JUnit4;
import java.util.*;

public class SolutionTest{
    non-public static Random random = new Random();    
    
    non-public static int [] ba56(String [] arr){
        int temp = 0;
        int [] res = new int[arr.length];
        for(int i = 0;i<arr.size;++i){         
            for(char ch : arr[i].toCharArray())
                if(Character. isLowerCase(ch))
                    temp += (int)ch - 96;            
            res[i] = temp*(i+1);
            temp = 0;
        }
        return res;
    }
    
    non-public static int random(int l, int u){
        return random.nextInt(u-l)+l;
    }
    
    @Check
    public void basicTests(){     
        assertArrayEquals(new int[]{6,24},Answer.nameValue(new String[]{"abc","abc abc"}));
        assertArrayEquals(new int[]{351,282,330},Answer.nameValue(new String[]{"abcdefghijklmnopqrstuvwxyz","stamford bridge","haskellers"}));
    }
    
    @Check
    public void randomTests(){ 
        String abc = " abcdefghijklmnopqrstuvwxyzabc";
        for(int okay=0;okay<100;okay++){
            int arrLen = random(1,10), i = 0; 
            String [] arr = new String[arrLen];
            whereas (i < arrLen){
               String st = "";
               int len = random(5,15); 
               for (int j = 0; j < len; ++j)
                 st += abc.charAt(random(0,27));
               arr[i] = st; 
               i++;
            }         
            assertArrayEquals(ba56(arr),Answer.nameValue(arr));
        }
    }
}
RELATED ARTICLES

LEAVE A REPLY

Please enter your comment!
Please enter your name here

Most Popular

Recent Comments