Wednesday, February 22, 2023
HomeSoftware EngineeringThe way to Carry out Alphabetical Addition in Java

The way to Carry out Alphabetical Addition in Java


The problem

Your activity is so as to add up letters to at least one letter.

The perform shall be given an array of single-character Strings, every one being a letter so as to add.

Notes:

  • Letters will all the time be lowercase.
  • Letters can overflow (see second to final instance of the outline)
  • If no letters are given, the perform ought to return 'z'

Examples:

addLetters("a", "b", "c") = "f"
addLetters("a", "b") = "c"
addLetters("z") = "z"
addLetters("z", "a") = "a"
addLetters("y", "c", "b") = "d" // discover the letters overflowing
addLetters() = "z"

The answer in Java code

Possibility 1:

public class Resolution {

    public static String addLetters(String... letters) {
        String abc = "zabcdefghijklmnopqrstuvwxyz";
        int sum = 0;
        for (int i = 0; i < letters.size; i++) {
            sum += abc.indexOf(letters[i]);
        }
        return String.valueOf(abc.charAt(sum % 26));
    }
}

Possibility 2:

import static java.util.stream.Stream.of;

class Resolution {
  static String addLetters(String... letters) {
    int sum = of(letters).mapToInt(l -> l.charAt(0) - 96).sum() % 26 + 96;
    return "" + (char) (sum != 96 ? sum : 122);
  }
}

Possibility 3:

import java.util.Arrays;

public class Resolution {
  public static String addLetters(String... letters) {
    int sum = Arrays.stream(letters)
                    .flatMapToInt(String::chars)
                    .map(letter -> letter == 'z' ? 0 : letter - 'a' + 1)
                    .sum();
    int overflow = sum % 26;
    return overflow == 0 ? "z" : Character.valueOf((char)(overflow + 'a' - 1)).toString();
  }
}

Check circumstances to validate our answer

import org.junit.Check;
import static org.junit.Assert.assertEquals;
import org.junit.runners.JUnit4;
import java.util.Arrays;
import java.util.Random;

public class SolutionTest {
    @Check
    public void fixedTests() {
        assertEquals("f", Resolution.addLetters("a", "b", "c"));
        assertEquals("z", Resolution.addLetters("z"));
        assertEquals("c", Resolution.addLetters("a", "b"));
        assertEquals("c", Resolution.addLetters("c"));
        assertEquals("a", Resolution.addLetters("z", "a"));
        assertEquals("d", Resolution.addLetters("y", "c", "b"));
        assertEquals("z", Resolution.addLetters());
    }
    
    personal String answer(String... letters) {
        int sum = Arrays.stream(letters).mapToInt(s->s.charAt(0)-96).sum() % 26;
        return sum == 0 ? "z" : String.valueOf((char)(sum+96));
    }
    
    @Check
    public void randomTests() {
        Random rnd = new Random();
        for (int i = 0; i < 100; ++i) {
            String[] letters = rnd.ints(97, 123)
                                  .restrict(rnd.nextInt(10) + 1)
                                  .mapToObj(c -> String.valueOf((char) c))
                                  .toArray(String[]::new);
            assertEquals(answer(letters), Resolution.addLetters(letters));
        }
    }
}

RELATED ARTICLES

LEAVE A REPLY

Please enter your comment!
Please enter your name here

Most Popular

Recent Comments