Quipu
Quipu is an ancient recording device from Andean South America. It was likely used as an accounting record.
We chose to represent each knot as a number, and the positions as the position in an array, being the rightmost item the furthest knot in the rope.
It also had an error prevention method, being the first number the sum of the rest.
Return the number if the sum checks out, if not return -1.
import java.util.ArrayList;
public class Quipu {
public static int calculate(ArrayList<int[]> strings){
if (strings==null||strings.isEmpty())return -1;
int primero=0;
int suma=0;
for (int i = 0; i < strings.size(); i++) {
StringBuilder sb1 = new StringBuilder();
for (int num : strings.get(i)) {
sb1.append(num);
}
if (i == 0) {
primero=Integer.parseInt(sb1.toString());
}else{
suma+=Integer.parseInt(sb1.toString());
}
}
if(primero==suma)
return primero;
else return -1;
}
}
import org.junit.jupiter.api.Test;
import org.junit.jupiter.api.RepeatedTest;
import static org.junit.jupiter.api.Assertions.assertEquals;
import static org.junit.jupiter.api.Assertions.assertNotNull;
import java.util.ArrayList;
import junit.framework.TestCase;
import java.util.Random;
// TODO: Replace examples and use TDD by writing your own tests
class SolutionTest {
@Test
void test() {
//Correcto
final ArrayList<int[]> aContar = new ArrayList<int[]>();
final int a1[] = { 6, 5, 8 };
final int a2[] = { 8, 9 };
final int a3[] = { 2, 5, 8 };
final int a4[] = { 2, 7, 3 };
final int a5[] = { 3, 8 };
// aContar = List.of(new int[]{6,5,8};new int[]{ 8, 9 };new int[]{ 2, 5, 8 };new int[]{ 2, 7, 3 };new int[]{ 3, 8 })
aContar.add(a1);
aContar.add(a2);
aContar.add(a3);
aContar.add(a4);
aContar.add(a5);
assertEquals(658, Quipu.calculate(aContar));
//Falso
final ArrayList<int[]> Contar1 = new ArrayList<int[]>();
final int a6[] = { 7, 3, 1 };
final int a7[] = { 1, 2 };
final int a8[] = { 4, 3, 2 };
final int a9[] = { 6, 6, 7 };
final int a11[] = { 4, 1 };
aContar.add(a6);
aContar.add(a7);
aContar.add(a8);
aContar.add(a9);
aContar.add(a11);
assertEquals(-1, Quipu.calculate(Contar1));
//vacio
final ArrayList<int[]> vacio = new ArrayList<int[]>();
assertEquals(-1, Quipu.calculate(vacio));
//nulo
assertEquals(-1, Quipu.calculate(null));
assertNotNull(Quipu.calculate(null));
assertNotNull(Quipu.calculate(vacio));
assertNotNull(Quipu.calculate(aContar));
assertNotNull(Quipu.calculate(Contar1));
}
@RepeatedTest(10)
void testRandom() {
for (int i = 0; i < 10; i++) {
final ArrayList<int[]> x = this.arrayAleatorio();
assertEquals(SolutionTest.calculate(x), Quipu.calculate(x));
}
}
final int min = 0, max = 9;
ArrayList<int[]> arrayAleatorio() {
final ArrayList<int[]> ContarRandom = new ArrayList<int[]>();
final Random r = new Random();
final int randomNum1 = r.nextInt(max - min + 1) + min;
final int randomNum2 = r.nextInt(max - min + 1) + min;
final int randomNum3 = r.nextInt(max - min + 1) + min;
final int randomNum4 = r.nextInt(max - min + 1) + min;
final int randomNum5 = r.nextInt(max - min + 1) + min;
final int randomNum6 = r.nextInt(max - min + 1) + min;
final int a1[] = { randomNum1, randomNum2, randomNum3 };
final int a2[] = { randomNum4, randomNum5 };
final int a3[] = { randomNum3, randomNum2, randomNum1 };
final int a4[] = { randomNum6, randomNum4 };
final int a5[] = { randomNum3, randomNum4, randomNum6 };
ContarRandom.add(a1);
ContarRandom.add(a2);
ContarRandom.add(a3);
ContarRandom.add(a4);
ContarRandom.add(a5);
return ContarRandom;
}
private static int calculate(ArrayList<int[]> strings) {
if (strings == null || strings.isEmpty()) {
return -1;
}
int primero = 0;
int suma = 0;
for (int i = 0; i < strings.size(); i++) {
final StringBuilder sb1 = new StringBuilder();
for (final int num : strings.get(i)) {
sb1.append(num);
}
if (i == 0) {
primero = Integer.parseInt(sb1.toString());
} else {
suma += Integer.parseInt(sb1.toString());
}
}
if (primero == suma) {
return primero;
} else {
return -1;
}
}
}