import static org.junit.jupiter.api.Assertions.*; import java.util.ArrayList; import java.util.Arrays; import java.util.Collections; import java.util.HashMap; import java.util.List; import java.util.Map; import java.util.Random; import java.util.regex.Matcher; import java.util.regex.Pattern; import org.junit.jupiter.api.RepeatedTest; import org.junit.jupiter.api.Test; class SolutionTest { @Test void SampleTest() { assertTrue(DrivingTestEvaluator.evaluate( "t=1 SL30;t=5 TURNR;t=6 SL35;t=14 STOP1;", "28 27 30 29 25> 33 30 31 30 29 32 30 31 0 0 0 0 0" )); assertFalse(DrivingTestEvaluator.evaluate( "t=1 SL30;t=5 TURNR;t=6 SL35;t=14 STOP1;", "28 27 30 29 25> 33 30 31 30 29 32 30 31 0 0 50 0 0" )); assertTrue(DrivingTestEvaluator.evaluate( "t=1 SL50;t=3 SL30;t=7 TURNR;t=8 TURNL;", "48 49 28 30 29 30 25> 20<" )); assertTrue(DrivingTestEvaluator.evaluate( "t=1 SL30;t=5 TURNR;t=6 SL35;t=13 YIELD2;", "28 29 30 30 25> 32 33 31 30 34 30 33 0 0 0 0" )); assertFalse(DrivingTestEvaluator.evaluate( "t=1 SL30;t=5 TURNR;t=6 SL35;t=13 YIELD2;", "28 29 30 30 25> 32 33 31 30 34 30 33 10 9 8 7" )); } @Test void ComplexesTest() { assertTrue(DrivingTestEvaluator.evaluate( "t=1 SL25;t=5 TURNL;t=6 SL30;t=9 SL20;t=13 TURNR;t=14 SL40;t=22 STOP1;", "25 24 25 20 18< 22 30 28 18 20 19 20 19> 38 39 35 40 39 40 38 40 0 0 0 0 0" )); assertTrue(DrivingTestEvaluator.evaluate( "t=1 SL30;t=6 TURNL;t=7 SL40;t=13 SL25;t=17 TURNR;t=18 SL50;t=26 SL35;t=30 STOP1;", "30 29 30 28 26 25< 35 38 40 39 40 38 22 24 23 25 20> 45 48 50 49 50 45 47 49 30 32 35 34 0 0 0 0 0" )); assertTrue(DrivingTestEvaluator.evaluate( "t=1 SL20;t=5 TURNR;t=6 SL30;t=11 SL45;t=17 TURNL;t=18 SL50;t=25 SL40;t=29 STOP1;", "20 19 18 17 15> 25 30 29 28 27 50 47 46 48 45 44 45 43 49 50 48 49 45 38 39 37 40 10 5 5 5 5" )); assertTrue(DrivingTestEvaluator.evaluate( "t=1 SL25;t=5 STOP1;t=10 SL20;", "25 24 25 23 0 0 0 0 0 18 20 19 20" )); assertTrue(DrivingTestEvaluator.evaluate( "t=1 SL25;t=5 TURNL;t=6 SL30;t=9 SL20;t=13 TURNR;t=14 SL40;t=22 STOP1;", "25 24 25 26 25< 30 28 30 22 20 19 20 19> 38 39 35 40 39 40 38 40 0 0 0 0 0" )); assertTrue(DrivingTestEvaluator.evaluate( "t=1 SL30;t=6 TURNL;t=7 SL40;t=13 SL25;t=17 TURNR;t=18 SL50;t=26 SL35;t=30 STOP1;", "30 29 30 31 30 25 35 38 40 39 40 38 22 24 23 25 20 20 45 48 50 49 50 45 47 49 30 32 35 34 0 0 0 0 0" )); assertTrue(DrivingTestEvaluator.evaluate( "t=1 SL50;t=11 TURNL;t=12 STOP1;", "50 49 50 48 47 46 45 44 43 42 30< 0 0 0 0 0" )); assertFalse(DrivingTestEvaluator.evaluate( "t=1 SL30;t=6 TURNL;t=7 SL40;t=13 YIELD;t=14 SL25;t=18 TURNR;t=19 SL50;t=27 SL35;t=31 STOP1;", "30 29 30 31 30 25 35 38 40 39 40 38 0 0 25 24 23 25 20 50 49 50 48 50 49 50 50 35 34 35 0 0 0 0 0" )); assertFalse(DrivingTestEvaluator.evaluate( "t=1 SL25;t=5 TURNL;t=6 SL30;t=9 YIELD;t=10 SL20;t=14 TURNR;t=15 SL40;t=23 STOP1;", "25 24 25 26 25< 30 28 30 0 0 20 19 18 20 19> 38 39 35 40 39 40 0 0 0 0 0" )); assertTrue(DrivingTestEvaluator.evaluate( "t=1 SL25;t=5 TURNL;t=6 SL30;t=9 YIELD2;t=11 SL20;t=15 TURNR;t=16 SL40;t=24 STOP1;", "25 24 25 26 25< 30 28 30 0 0 0 0 22 20 19 20 19 38 39 35 40 39 40 0 0 0 0 0" )); } @Test void StopTest() { assertTrue(DrivingTestEvaluator.evaluate("t=1 STOP;", "0 0 0")); assertTrue(DrivingTestEvaluator.evaluate("t=1 STOP3;", "0 0 0 0 0 0 0 0 0")); assertTrue(DrivingTestEvaluator.evaluate("t=1 STOP1;", "0 0 0 0 0")); assertFalse(DrivingTestEvaluator.evaluate("t=1 STOP3;", "0 0 0 0 2 2 2 2 2")); assertFalse(DrivingTestEvaluator.evaluate("t=1 STOP1;", "0 0")); assertFalse(DrivingTestEvaluator.evaluate("t=1 STOP2;", "0 0 0 0 0 0")); } @Test void TurnTest() { assertTrue(DrivingTestEvaluator.evaluate("t=1 TURNR;t=2 SL25;", "20> 25")); assertTrue(DrivingTestEvaluator.evaluate( "t=1 TURNR;t=2 SL25;t=3 TURNR;t=4 SL25;t=5 TURNL;t=6 SL25;", "22> 25 23> 25 15< 25" )); assertTrue(DrivingTestEvaluator.evaluate( "t=1 TURNR;t=2 SL25;t=3 SL25;t=4 TURNR;t=5 SL25;t=6 TURNL;t=7 SL25;t=8 TURNR;t=9 SL25;t=10 TURNR;t=11 SL25;", "10> 25 24 19> 25 18< 25 22> 25 23> 25" )); assertFalse(DrivingTestEvaluator.evaluate( "t=1 TURNL;t=2 SL25;t=3 TURNR;t=4 SL25;t=5 TURNL;t=6 SL25;t=7 TURNL;t=8 SL25;t=9 TURNR;t=10 SL25;", "20 25 19 25 18 25 17 25 16 25" )); assertTrue(DrivingTestEvaluator.evaluate("t=1 TURNR;t=2 SL25;", "30< 25")); assertFalse(DrivingTestEvaluator.evaluate( "t=1 TURNL;t=2 SL25;t=3 TURNR;t=4 SL25;t=5 TURNR;t=6 SL25;t=7 TURNL;t=8 SL25;t=9 TURNR;t=10 SL25;", "22 25 23 25 21 25 19 25 18> 25" )); } @Test void SpeedLimitTest() { assertTrue(DrivingTestEvaluator.evaluate( "t=1 SL20;t=6 TURNR;t=7 SL40;t=13 STOP1;t=18 SL50", "20 19 18 17 20 15> 38 40 39 40 38 37 0 0 0 0 0 48 45" )); assertFalse(DrivingTestEvaluator.evaluate( "t=1 SL30;t=6 SL40;t=13 STOP1;", "30 29 28 27 30 35 45 39 40 38 37 0 0 0 0 0" )); assertTrue(DrivingTestEvaluator.evaluate( "t=1 SL50;t=11 TURNL;", "50 49 50 48 47 46 45 44 43 42 30<" )); assertTrue(DrivingTestEvaluator.evaluate( "t=1 SL50;t=11 TURNL;", "50 49 50 48 47 60 45 44 43 42 30" )); } @Test void YieldTest() { assertTrue(DrivingTestEvaluator.evaluate( "t=1 YIELD;t=1 SL25;t=6 STOP1;", "20 22 25 24 23 0 0 0 0 0" )); assertFalse(DrivingTestEvaluator.evaluate( "t=1 YIELD;t=3 SL25;t=8 STOP1;", "0 15 20 22 25 24 23 0 0 0 0 0" )); assertTrue(DrivingTestEvaluator.evaluate( "t=1 YIELD2;t=5 SL30;t=9 TURNR;", "0 0 0 0 28 29 30 25 22>" )); assertFalse(DrivingTestEvaluator.evaluate( "t=1 YIELD2;t=4 SL30;t=9 TURNR;", "0 10 0 0 28 29 30 25 22>" )); } @RepeatedTest(200) void RandomTest() { String indications = generateIndications(); String actions = generateActions(indications); System.out.println(indications); System.out.println(actions); System.out.println("-------------------------------------------------------------------"); assertTrue(DrivingTestEvaluator.evaluate(indications, actions)); } public static String generateIndications() { ArrayList<String> types = new ArrayList<>(Arrays.asList("SL", "TURNL", "TURNR", "YIELD", "STOP", "REDLIGHT")); StringBuilder sb = new StringBuilder(); Random random = new Random(); // tiempo real considerando duración de señales int currentTime = 1; sb.append("t=").append(currentTime).append(" SL").append(random.nextInt(50) + 20).append(";"); String prev = "SL"; for (int i = 0; i < 8; i++) { Collections.shuffle(types); String actual = types.get(0); while ("SL".equals(actual) && "SL".equals(prev)) { Collections.shuffle(types); actual = types.get(0); } // Tiempo aleatorio antes de la próxima señal int timeGap = random.nextInt(4) + 1; currentTime += timeGap; sb.append("t=").append(currentTime).append(" ").append(actual); // Dependiendo del tipo, pse extiende el tiempo real if ("SL".equals(actual)) { int limit = random.nextInt(50) + 20; sb.append(limit); } else if ("YIELD".equals(actual)) { int cars = random.nextInt(5); if (cars > 0) sb.append(cars); currentTime += cars * 2; } else if ("STOP".equals(actual)) { int cars = random.nextInt(5); if (cars > 0) sb.append(cars); currentTime += 3 + cars * 2; } else if ("REDLIGHT".equals(actual)) { int seconds = random.nextInt(5) + 1; sb.append(seconds); currentTime += seconds; } sb.append(";"); prev = actual; } return sb.toString().trim(); } public static String generateActions(String indications) { String[] trafficSigns = indications.split(";"); List<String> actions = new ArrayList<>(); Random random = new Random(); int currentSecond = 1; int speedLimit = 80; for (String signEntry : trafficSigns) { signEntry = signEntry.trim(); if (signEntry.isEmpty()) continue; String[] parts = signEntry.split(" "); int time = Integer.parseInt(parts[0].substring(2)); String sign = parts[1]; // Generación de velocidades aleatorias while (currentSecond < time) { int limit = speedLimit + 1; int v = Math.max(1, random.nextInt(limit)); actions.add(String.valueOf(v)); currentSecond++; } // Procesamiento de señales específicas if (sign.startsWith("SL")) { speedLimit = Integer.parseInt(sign.substring(2)); actions.add(String.valueOf(random.nextInt(speedLimit + 1))); currentSecond++; } else if (sign.startsWith("YIELD")) { int cars = (sign.length() > 5) ? Integer.parseInt(sign.substring(5)) : 0; int secs = cars * 2; for (int j = 0; j < secs; j++) { actions.add("0"); currentSecond++; } } else if (sign.startsWith("STOP")) { int cars = (sign.length() > 4) ? Integer.parseInt(sign.substring(4)) : 0; int secs = 3 + 2 * cars; for (int j = 0; j < secs; j++) { actions.add("0"); currentSecond++; } } else if (sign.startsWith("REDLIGHT")) { int secs = Integer.parseInt(sign.substring(8)); for (int j = 0; j < secs; j++) { actions.add("0"); currentSecond++; } } else if (sign.equals("TURNL")) { actions.add(random.nextInt(speedLimit + 1) + "<"); currentSecond++; } else if (sign.equals("TURNR")) { actions.add(random.nextInt(speedLimit + 1) + ">"); currentSecond++; } } return String.join(" ", actions); } }import org.junit.jupiter.api.Test;import static org.junit.jupiter.api.Assertions.assertEquals;- import static org.junit.jupiter.api.Assertions.*;
- import java.util.ArrayList;
- import java.util.Arrays;
- import java.util.Collections;
- import java.util.HashMap;
- import java.util.List;
- import java.util.Map;
- import java.util.Random;
- import java.util.regex.Matcher;
- import java.util.regex.Pattern;
// TODO: Replace examples and use TDD by writing your own tests- import org.junit.jupiter.api.RepeatedTest;
- import org.junit.jupiter.api.Test;
- class SolutionTest {
- @Test
- void SampleTest() {
- assertTrue(DrivingTestEvaluator.evaluate(
- "t=1 SL30;t=5 TURNR;t=6 SL35;t=14 STOP1;",
- "28 27 30 29 25> 33 30 31 30 29 32 30 31 0 0 0 0 0"
- ));
- assertFalse(DrivingTestEvaluator.evaluate(
- "t=1 SL30;t=5 TURNR;t=6 SL35;t=14 STOP1;",
- "28 27 30 29 25> 33 30 31 30 29 32 30 31 0 0 50 0 0"
- ));
- assertTrue(DrivingTestEvaluator.evaluate(
- "t=1 SL50;t=3 SL30;t=7 TURNR;t=8 TURNL;",
- "48 49 28 30 29 30 25> 20<"
- ));
- assertTrue(DrivingTestEvaluator.evaluate(
- "t=1 SL30;t=5 TURNR;t=6 SL35;t=13 YIELD2;",
- "28 29 30 30 25> 32 33 31 30 34 30 33 0 0 0 0"
- ));
- assertFalse(DrivingTestEvaluator.evaluate(
- "t=1 SL30;t=5 TURNR;t=6 SL35;t=13 YIELD2;",
- "28 29 30 30 25> 32 33 31 30 34 30 33 10 9 8 7"
- ));
- }
- @Test
- void ComplexesTest() {
- assertTrue(DrivingTestEvaluator.evaluate(
- "t=1 SL25;t=5 TURNL;t=6 SL30;t=9 SL20;t=13 TURNR;t=14 SL40;t=22 STOP1;",
- "25 24 25 20 18< 22 30 28 18 20 19 20 19> 38 39 35 40 39 40 38 40 0 0 0 0 0"
- ));
- assertTrue(DrivingTestEvaluator.evaluate(
- "t=1 SL30;t=6 TURNL;t=7 SL40;t=13 SL25;t=17 TURNR;t=18 SL50;t=26 SL35;t=30 STOP1;",
- "30 29 30 28 26 25< 35 38 40 39 40 38 22 24 23 25 20> 45 48 50 49 50 45 47 49 30 32 35 34 0 0 0 0 0"
- ));
- assertTrue(DrivingTestEvaluator.evaluate(
- "t=1 SL20;t=5 TURNR;t=6 SL30;t=11 SL45;t=17 TURNL;t=18 SL50;t=25 SL40;t=29 STOP1;",
- "20 19 18 17 15> 25 30 29 28 27 50 47 46 48 45 44 45 43 49 50 48 49 45 38 39 37 40 10 5 5 5 5"
- ));
- assertTrue(DrivingTestEvaluator.evaluate(
- "t=1 SL25;t=5 STOP1;t=10 SL20;",
- "25 24 25 23 0 0 0 0 0 18 20 19 20"
- ));
- assertTrue(DrivingTestEvaluator.evaluate(
- "t=1 SL25;t=5 TURNL;t=6 SL30;t=9 SL20;t=13 TURNR;t=14 SL40;t=22 STOP1;",
- "25 24 25 26 25< 30 28 30 22 20 19 20 19> 38 39 35 40 39 40 38 40 0 0 0 0 0"
- ));
- assertTrue(DrivingTestEvaluator.evaluate(
- "t=1 SL30;t=6 TURNL;t=7 SL40;t=13 SL25;t=17 TURNR;t=18 SL50;t=26 SL35;t=30 STOP1;",
- "30 29 30 31 30 25 35 38 40 39 40 38 22 24 23 25 20 20 45 48 50 49 50 45 47 49 30 32 35 34 0 0 0 0 0"
- ));
- assertTrue(DrivingTestEvaluator.evaluate(
- "t=1 SL50;t=11 TURNL;t=12 STOP1;",
- "50 49 50 48 47 46 45 44 43 42 30< 0 0 0 0 0"
- ));
- assertFalse(DrivingTestEvaluator.evaluate(
- "t=1 SL30;t=6 TURNL;t=7 SL40;t=13 YIELD;t=14 SL25;t=18 TURNR;t=19 SL50;t=27 SL35;t=31 STOP1;",
- "30 29 30 31 30 25 35 38 40 39 40 38 0 0 25 24 23 25 20 50 49 50 48 50 49 50 50 35 34 35 0 0 0 0 0"
- ));
- assertFalse(DrivingTestEvaluator.evaluate(
- "t=1 SL25;t=5 TURNL;t=6 SL30;t=9 YIELD;t=10 SL20;t=14 TURNR;t=15 SL40;t=23 STOP1;",
- "25 24 25 26 25< 30 28 30 0 0 20 19 18 20 19> 38 39 35 40 39 40 0 0 0 0 0"
- ));
- assertTrue(DrivingTestEvaluator.evaluate(
- "t=1 SL25;t=5 TURNL;t=6 SL30;t=9 YIELD2;t=11 SL20;t=15 TURNR;t=16 SL40;t=24 STOP1;",
- "25 24 25 26 25< 30 28 30 0 0 0 0 22 20 19 20 19 38 39 35 40 39 40 0 0 0 0 0"
- ));
- }
- @Test
void testSomething() {// assertEquals("expected", "actual");- void StopTest() {
- assertTrue(DrivingTestEvaluator.evaluate("t=1 STOP;", "0 0 0"));
- assertTrue(DrivingTestEvaluator.evaluate("t=1 STOP3;", "0 0 0 0 0 0 0 0 0"));
- assertTrue(DrivingTestEvaluator.evaluate("t=1 STOP1;", "0 0 0 0 0"));
- assertFalse(DrivingTestEvaluator.evaluate("t=1 STOP3;", "0 0 0 0 2 2 2 2 2"));
- assertFalse(DrivingTestEvaluator.evaluate("t=1 STOP1;", "0 0"));
- assertFalse(DrivingTestEvaluator.evaluate("t=1 STOP2;", "0 0 0 0 0 0"));
- }
- @Test
- void TurnTest() {
- assertTrue(DrivingTestEvaluator.evaluate("t=1 TURNR;t=2 SL25;", "20> 25"));
- assertTrue(DrivingTestEvaluator.evaluate(
- "t=1 TURNR;t=2 SL25;t=3 TURNR;t=4 SL25;t=5 TURNL;t=6 SL25;",
- "22> 25 23> 25 15< 25"
- ));
- assertTrue(DrivingTestEvaluator.evaluate(
- "t=1 TURNR;t=2 SL25;t=3 SL25;t=4 TURNR;t=5 SL25;t=6 TURNL;t=7 SL25;t=8 TURNR;t=9 SL25;t=10 TURNR;t=11 SL25;",
- "10> 25 24 19> 25 18< 25 22> 25 23> 25"
- ));
- assertFalse(DrivingTestEvaluator.evaluate(
- "t=1 TURNL;t=2 SL25;t=3 TURNR;t=4 SL25;t=5 TURNL;t=6 SL25;t=7 TURNL;t=8 SL25;t=9 TURNR;t=10 SL25;",
- "20 25 19 25 18 25 17 25 16 25"
- ));
- assertTrue(DrivingTestEvaluator.evaluate("t=1 TURNR;t=2 SL25;", "30< 25"));
- assertFalse(DrivingTestEvaluator.evaluate(
- "t=1 TURNL;t=2 SL25;t=3 TURNR;t=4 SL25;t=5 TURNR;t=6 SL25;t=7 TURNL;t=8 SL25;t=9 TURNR;t=10 SL25;",
- "22 25 23 25 21 25 19 25 18> 25"
- ));
- }
- @Test
- void SpeedLimitTest() {
- assertTrue(DrivingTestEvaluator.evaluate(
- "t=1 SL20;t=6 TURNR;t=7 SL40;t=13 STOP1;t=18 SL50",
- "20 19 18 17 20 15> 38 40 39 40 38 37 0 0 0 0 0 48 45"
- ));
- assertFalse(DrivingTestEvaluator.evaluate(
- "t=1 SL30;t=6 SL40;t=13 STOP1;",
- "30 29 28 27 30 35 45 39 40 38 37 0 0 0 0 0"
- ));
- assertTrue(DrivingTestEvaluator.evaluate(
- "t=1 SL50;t=11 TURNL;",
- "50 49 50 48 47 46 45 44 43 42 30<"
- ));
- assertTrue(DrivingTestEvaluator.evaluate(
- "t=1 SL50;t=11 TURNL;",
- "50 49 50 48 47 60 45 44 43 42 30"
- ));
- }
- @Test
- void YieldTest() {
- assertTrue(DrivingTestEvaluator.evaluate(
- "t=1 YIELD;t=1 SL25;t=6 STOP1;",
- "20 22 25 24 23 0 0 0 0 0"
- ));
- assertFalse(DrivingTestEvaluator.evaluate(
- "t=1 YIELD;t=3 SL25;t=8 STOP1;",
- "0 15 20 22 25 24 23 0 0 0 0 0"
- ));
- assertTrue(DrivingTestEvaluator.evaluate(
- "t=1 YIELD2;t=5 SL30;t=9 TURNR;",
- "0 0 0 0 28 29 30 25 22>"
- ));
- assertFalse(DrivingTestEvaluator.evaluate(
- "t=1 YIELD2;t=4 SL30;t=9 TURNR;",
- "0 10 0 0 28 29 30 25 22>"
- ));
- }
- @RepeatedTest(200)
- void RandomTest() {
- String indications = generateIndications();
- String actions = generateActions(indications);
- System.out.println(indications);
- System.out.println(actions);
- System.out.println("-------------------------------------------------------------------");
- assertTrue(DrivingTestEvaluator.evaluate(indications, actions));
- }
- public static String generateIndications() {
- ArrayList<String> types = new ArrayList<>(Arrays.asList("SL", "TURNL", "TURNR", "YIELD", "STOP", "REDLIGHT"));
- StringBuilder sb = new StringBuilder();
- Random random = new Random();
- // tiempo real considerando duración de señales
- int currentTime = 1;
- sb.append("t=").append(currentTime).append(" SL").append(random.nextInt(50) + 20).append(";");
- String prev = "SL";
- for (int i = 0; i < 8; i++) {
- Collections.shuffle(types);
- String actual = types.get(0);
- while ("SL".equals(actual) && "SL".equals(prev)) {
- Collections.shuffle(types);
- actual = types.get(0);
- }
- // Tiempo aleatorio antes de la próxima señal
- int timeGap = random.nextInt(4) + 1;
- currentTime += timeGap;
- sb.append("t=").append(currentTime).append(" ").append(actual);
- // Dependiendo del tipo, pse extiende el tiempo real
- if ("SL".equals(actual)) {
- int limit = random.nextInt(50) + 20;
- sb.append(limit);
- } else if ("YIELD".equals(actual)) {
- int cars = random.nextInt(5);
- if (cars > 0) sb.append(cars);
- currentTime += cars * 2;
- } else if ("STOP".equals(actual)) {
- int cars = random.nextInt(5);
- if (cars > 0) sb.append(cars);
- currentTime += 3 + cars * 2;
- } else if ("REDLIGHT".equals(actual)) {
- int seconds = random.nextInt(5) + 1;
- sb.append(seconds);
- currentTime += seconds;
- }
- sb.append(";");
- prev = actual;
- }
- return sb.toString().trim();
- }
- public static String generateActions(String indications) {
- String[] trafficSigns = indications.split(";");
- List<String> actions = new ArrayList<>();
- Random random = new Random();
- int currentSecond = 1;
- int speedLimit = 80;
- for (String signEntry : trafficSigns) {
- signEntry = signEntry.trim();
- if (signEntry.isEmpty()) continue;
- String[] parts = signEntry.split(" ");
- int time = Integer.parseInt(parts[0].substring(2));
- String sign = parts[1];
- // Generación de velocidades aleatorias
- while (currentSecond < time) {
- int limit = speedLimit + 1;
- int v = Math.max(1, random.nextInt(limit));
- actions.add(String.valueOf(v));
- currentSecond++;
- }
- // Procesamiento de señales específicas
- if (sign.startsWith("SL")) {
- speedLimit = Integer.parseInt(sign.substring(2));
- actions.add(String.valueOf(random.nextInt(speedLimit + 1)));
- currentSecond++;
- } else if (sign.startsWith("YIELD")) {
- int cars = (sign.length() > 5) ? Integer.parseInt(sign.substring(5)) : 0;
- int secs = cars * 2;
- for (int j = 0; j < secs; j++) {
- actions.add("0");
- currentSecond++;
- }
- } else if (sign.startsWith("STOP")) {
- int cars = (sign.length() > 4) ? Integer.parseInt(sign.substring(4)) : 0;
- int secs = 3 + 2 * cars;
- for (int j = 0; j < secs; j++) {
- actions.add("0");
- currentSecond++;
- }
- } else if (sign.startsWith("REDLIGHT")) {
- int secs = Integer.parseInt(sign.substring(8));
- for (int j = 0; j < secs; j++) {
- actions.add("0");
- currentSecond++;
- }
- } else if (sign.equals("TURNL")) {
- actions.add(random.nextInt(speedLimit + 1) + "<");
- currentSecond++;
- } else if (sign.equals("TURNR")) {
- actions.add(random.nextInt(speedLimit + 1) + ">");
- currentSecond++;
- }
- }
- return String.join(" ", actions);
- }
- }
import org.junit.jupiter.api.Test; import static org.junit.jupiter.api.Assertions.assertEquals; // TODO: Replace examples and use TDD by writing your own tests class SolutionTest { @Test void SampleTest() { assertTrue(DrivingTestEvaluator.evaluate("SL30_4 TURNR SL35_8 STOP1", "28 27 30 29> 36 38 37 0 0 0 0 0")); assertFalse(DrivingTestEvaluator.evaluate("SL30_4 TURNR SL35_8 STOP1", "28 27 30 29> 36 38 37 0 0 0 50 30")); assertTrue(DrivingTestEvaluator.evaluate("SL50_2 SL30_4 TURNR TURNL", "48 51 21> 28 30< 22")); assertFalse(DrivingTestEvaluator.evaluate("SL30_4 TURNR SL35_7 YIELD2", "28 27 30 32> 36 38 0 0 0 0 60")); assertTrue(DrivingTestEvaluator.evaluate("SL40_3 YIELD SL25_5 TURNR", "39 40 41 24 25 23 25> 22")); } @Test void ComplexesTest() { assertTrue(DrivingTestEvaluator.evaluate("SL25_4 TURNL SL30_3 SL20_4 TURNR SL40_8 STOP1", "25 24 25 26> 30 29 30 22 18 20 24> 40 39 40 0 0 0 0 0")); assertTrue(DrivingTestEvaluator.evaluate("SL30_5 TURNL SL40_6 SL25_4 TURNR SL50_8 SL35_3 STOP1", "30 29 30 31 30> 40 39 38 40 39 40> 25 24 23 25> 50 49 50 48 50 49 50 50> 35 34 35 0 0 0 0 0")); assertFalse(DrivingTestEvaluator.evaluate("SL20_4 TURNR SL30_5 SL45_6 TURNL SL50_7 SL40_4 STOP1", "20 19 20 21> 30 29 30 31 32> 45 44 46 45 47 48> 50 49 50 51 50 52 53> 40 39 40 10 5 5 5 5")); assertFalse(DrivingTestEvaluator.evaluate("SL25_4 STOP1 SL20_4", "30 29 30 31 0 0 0 0 0 < 13 15 18 15")); assertTrue(DrivingTestEvaluator.evaluate("SL25_4 TURNL SL30_3 SL20_4 TURNR SL40_8 STOP1", "25 24 25 26> 30 29 30 22 18 20 24> 40 39 40 0 0 0 0 0")); assertFalse(DrivingTestEvaluator.evaluate("SL30_5 TURNL SL40_6 SL25_4 TURNR SL50_8 SL35_3 STOP1", "30 29 30 31 30> 40 39 38 40 39 40> 25 24 23 25> 50 49 50 48 50 49 50 50> 35 34 35 0 0 0 0 0")); assertTrue(DrivingTestEvaluator.evaluate("SL50_10 TURNL R", "50 49 50 48 50 49 50 50 > 0 0 0 0 0")); assertFalse(DrivingTestEvaluator.evaluate("SL30_5 TURNL SL40_6 YIELD SL25_4 TURNR SL50_8 SL35_3 STOP1", "30 29 30 31 30> 40 39 38 40 39 40 0 0 25 24 23 25> 50 49 50 48 50 49 50 50> 35 34 35 0 0 0 0 0")); assertTrue(DrivingTestEvaluator.evaluate("SL25_4 TURNL SL30_3 YIELD SL20_4 TURNR SL40_8 STOP1", "25 24 25 26> 30 29 30 22 18 20 24> 40 39 40 0 0 0 0 0")); assertTrue(DrivingTestEvaluator.evaluate("SL25_4 TURNL SL30_3 YIELD2 SL20_4 TURNR SL40_8 STOP1", "25 24 25 26> 30 29 30 0 0 0 0 22 18 20 24> 40 39 40 0 0 0 0 0")); } @Test void StopTest() { assertTrue(DrivingTestEvaluator.evaluate("STOP", "0 0")); assertTrue(DrivingTestEvaluator.evaluate("STOP3", "0 0 0 0 0 0 0 0")); assertTrue(DrivingTestEvaluator.evaluate("STOP1", "0 0 0 0")); assertFalse(DrivingTestEvaluator.evaluate("STOP3", "0 0 0 0 2 2 2")); assertFalse(DrivingTestEvaluator.evaluate("STOP", "0 ")); assertFalse(DrivingTestEvaluator.evaluate("STOP2", "0 0 ")); } @Test void TurnTest() { assertTrue(DrivingTestEvaluator.evaluate("TURNR SL25_1 ", "> 60")); assertTrue(DrivingTestEvaluator.evaluate("TURNR SL25_1 TURNR SL25_1 TURNL SL25_1 ", "> 20 > 25 < 15 ")); assertTrue(DrivingTestEvaluator.evaluate( "TURNR SL25_1 SL25_1 TURNR SL25_1 TURNL SL25_1 TURNR SL25_1 TURNR SL25_1 ", "> 10 > 20 < 25 > 15 > 20")); assertFalse(DrivingTestEvaluator.evaluate("TURNL SL25_1 TURNR SL25_1 TURNL SL25_1 TURNL SL25_1 TURNR SL25_1 ", "> 50 > 60 < 40 < 30 > 70 ")); assertFalse(DrivingTestEvaluator.evaluate("TURNL SL25_1 TURNR SL25_1 TURNR SL25_1 TURNL SL25_1 TURNR SL25_1 ", "> 50 > 60 > 70 < 40 > 30")); assertFalse(DrivingTestEvaluator.evaluate("TURNL SL25_1 TURNR SL25_1 TURNL SL25_1 TURNL SL25_1 TURNR SL25_1 ", "> 50 < 30 < 40 > 60 > 70 ")); assertFalse(DrivingTestEvaluator.evaluate("TURNR SL25_1 ", "< 40 ")); assertFalse(DrivingTestEvaluator.evaluate("TURNL SL25_1 TURNR SL25_1 TURNR SL25_1 TURNL SL25_1 TURNR SL25_1 ", "> 50 > 60 > 70 < 40 > 30")); } @Test void SpeedLimitTest() { } @Test void YieldTest() { } public static String generateIndications() { ArrayList<String> types = new ArrayList<>(Arrays.asList("SL", "TURNL", "TURNR", "YIELD", "STOP", "R")); StringBuilder sb = new StringBuilder(); StringBuilder sb2 = new StringBuilder(); Random random = new Random(); sb2.append(types.get(0) + random.nextInt(20, 70) + "_" + random.nextInt(1, 10)); sb.append(sb2 + " "); for (int i = 0; i < 8; i++) { sb2.setLength(0); Collections.shuffle(types); if (types.get(0) == "YIELD" || types.get(0) == "STOP" || types.get(0) == "R") { int aleatorio = random.nextInt(0, 5); if (aleatorio == 0) { sb2.append(types.get(0)); } else { sb2.append(types.get(0) + aleatorio); } } else if (types.get(0) == "SL") { sb2.append(types.get(0) + random.nextInt(20, 70) + "_" + random.nextInt(1, 10)); } else { sb2.append(types.get(0)); } sb.append(sb2 + " "); } return sb.toString().trim(); } public static String generateGoodActions(String indications) { String[] trafficSigns = indications.split("\\s+"); List<String> actions = new ArrayList<>(); Random random = new Random(); Matcher matcher; for (String sing : trafficSigns) { if ((matcher = Pattern.compile("SL(\\d+)_(\\d+)").matcher(sing)).matches()) { int limit = Integer.parseInt(matcher.group(1)); int duration = Integer.parseInt(matcher.group(2)); for (int i = 0; i < duration; i++) { actions.add(String.valueOf(random.nextInt(limit + 1))); } } else if ((matcher = Pattern.compile("YIELD(\\d*)").matcher(sing)).matches()) { int cars = matcher.group(1).isEmpty() ? 1 : Integer.parseInt(matcher.group(1)); for (int i = 0; i < cars * 2; i++) { actions.add("0"); } } else if ((matcher = Pattern.compile("STOP(\\d*)").matcher(sing)).matches()) { int cars = matcher.group(1).isEmpty() ? 0 : Integer.parseInt(matcher.group(1)); for (int i = 0; i < 3 + 2 * cars; i++) { actions.add("0"); } } else if ((matcher = Pattern.compile("R(\\d+)").matcher(sing)).matches()) { int secs = Integer.parseInt(matcher.group(1)); for (int i = 0; i < secs; i++) { actions.add("0"); } } else if ("TURNL".equals(sing) && !actions.isEmpty()) { int last = actions.size() - 1; actions.set(last, actions.get(last) + "<"); } else if ("TURNR".equals(sing) && !actions.isEmpty()) { int last = actions.size() - 1; actions.set(last, actions.get(last) + ">"); } } return String.join(" ", actions); } @Test void RandomTest() { String indications = generateIndications(); String actions = generateGoodActions(indications); System.out.println(indications); System.out.println(actions); } }- import org.junit.jupiter.api.Test;
- import static org.junit.jupiter.api.Assertions.assertEquals;
- // TODO: Replace examples and use TDD by writing your own tests
- class SolutionTest {
@Testvoid testSomething() {// assertEquals("expected", "actual");}- @Test
- void SampleTest() {
- assertTrue(DrivingTestEvaluator.evaluate("SL30_4 TURNR SL35_8 STOP1", "28 27 30 29> 36 38 37 0 0 0 0 0"));
- assertFalse(DrivingTestEvaluator.evaluate("SL30_4 TURNR SL35_8 STOP1", "28 27 30 29> 36 38 37 0 0 0 50 30"));
- assertTrue(DrivingTestEvaluator.evaluate("SL50_2 SL30_4 TURNR TURNL", "48 51 21> 28 30< 22"));
- assertFalse(DrivingTestEvaluator.evaluate("SL30_4 TURNR SL35_7 YIELD2", "28 27 30 32> 36 38 0 0 0 0 60"));
- assertTrue(DrivingTestEvaluator.evaluate("SL40_3 YIELD SL25_5 TURNR", "39 40 41 24 25 23 25> 22"));
- }
- @Test
- void ComplexesTest() {
- assertTrue(DrivingTestEvaluator.evaluate("SL25_4 TURNL SL30_3 SL20_4 TURNR SL40_8 STOP1",
- "25 24 25 26> 30 29 30 22 18 20 24> 40 39 40 0 0 0 0 0"));
- assertTrue(DrivingTestEvaluator.evaluate("SL30_5 TURNL SL40_6 SL25_4 TURNR SL50_8 SL35_3 STOP1",
- "30 29 30 31 30> 40 39 38 40 39 40> 25 24 23 25> 50 49 50 48 50 49 50 50> 35 34 35 0 0 0 0 0"));
- assertFalse(DrivingTestEvaluator.evaluate("SL20_4 TURNR SL30_5 SL45_6 TURNL SL50_7 SL40_4 STOP1",
- "20 19 20 21> 30 29 30 31 32> 45 44 46 45 47 48> 50 49 50 51 50 52 53> 40 39 40 10 5 5 5 5"));
- assertFalse(DrivingTestEvaluator.evaluate("SL25_4 STOP1 SL20_4", "30 29 30 31 0 0 0 0 0 < 13 15 18 15"));
- assertTrue(DrivingTestEvaluator.evaluate("SL25_4 TURNL SL30_3 SL20_4 TURNR SL40_8 STOP1",
- "25 24 25 26> 30 29 30 22 18 20 24> 40 39 40 0 0 0 0 0"));
- assertFalse(DrivingTestEvaluator.evaluate("SL30_5 TURNL SL40_6 SL25_4 TURNR SL50_8 SL35_3 STOP1",
- "30 29 30 31 30> 40 39 38 40 39 40> 25 24 23 25> 50 49 50 48 50 49 50 50> 35 34 35 0 0 0 0 0"));
- assertTrue(DrivingTestEvaluator.evaluate("SL50_10 TURNL R", "50 49 50 48 50 49 50 50 > 0 0 0 0 0"));
- assertFalse(DrivingTestEvaluator.evaluate("SL30_5 TURNL SL40_6 YIELD SL25_4 TURNR SL50_8 SL35_3 STOP1",
- "30 29 30 31 30> 40 39 38 40 39 40 0 0 25 24 23 25> 50 49 50 48 50 49 50 50> 35 34 35 0 0 0 0 0"));
- assertTrue(DrivingTestEvaluator.evaluate("SL25_4 TURNL SL30_3 YIELD SL20_4 TURNR SL40_8 STOP1",
- "25 24 25 26> 30 29 30 22 18 20 24> 40 39 40 0 0 0 0 0"));
- assertTrue(DrivingTestEvaluator.evaluate("SL25_4 TURNL SL30_3 YIELD2 SL20_4 TURNR SL40_8 STOP1",
- "25 24 25 26> 30 29 30 0 0 0 0 22 18 20 24> 40 39 40 0 0 0 0 0"));
- }
- @Test
- void StopTest() {
- assertTrue(DrivingTestEvaluator.evaluate("STOP", "0 0"));
- assertTrue(DrivingTestEvaluator.evaluate("STOP3", "0 0 0 0 0 0 0 0"));
- assertTrue(DrivingTestEvaluator.evaluate("STOP1", "0 0 0 0"));
- assertFalse(DrivingTestEvaluator.evaluate("STOP3", "0 0 0 0 2 2 2"));
- assertFalse(DrivingTestEvaluator.evaluate("STOP", "0 "));
- assertFalse(DrivingTestEvaluator.evaluate("STOP2", "0 0 "));
- }
- @Test
- void TurnTest() {
- assertTrue(DrivingTestEvaluator.evaluate("TURNR SL25_1 ", "> 60"));
- assertTrue(DrivingTestEvaluator.evaluate("TURNR SL25_1 TURNR SL25_1 TURNL SL25_1 ", "> 20 > 25 < 15 "));
- assertTrue(DrivingTestEvaluator.evaluate(
- "TURNR SL25_1 SL25_1 TURNR SL25_1 TURNL SL25_1 TURNR SL25_1 TURNR SL25_1 ",
- "> 10 > 20 < 25 > 15 > 20"));
- assertFalse(DrivingTestEvaluator.evaluate("TURNL SL25_1 TURNR SL25_1 TURNL SL25_1 TURNL SL25_1 TURNR SL25_1 ",
- "> 50 > 60 < 40 < 30 > 70 "));
- assertFalse(DrivingTestEvaluator.evaluate("TURNL SL25_1 TURNR SL25_1 TURNR SL25_1 TURNL SL25_1 TURNR SL25_1 ",
- "> 50 > 60 > 70 < 40 > 30"));
- assertFalse(DrivingTestEvaluator.evaluate("TURNL SL25_1 TURNR SL25_1 TURNL SL25_1 TURNL SL25_1 TURNR SL25_1 ",
- "> 50 < 30 < 40 > 60 > 70 "));
- assertFalse(DrivingTestEvaluator.evaluate("TURNR SL25_1 ", "< 40 "));
- assertFalse(DrivingTestEvaluator.evaluate("TURNL SL25_1 TURNR SL25_1 TURNR SL25_1 TURNL SL25_1 TURNR SL25_1 ",
- "> 50 > 60 > 70 < 40 > 30"));
- }
- @Test
- void SpeedLimitTest() {
- }
- @Test
- void YieldTest() {
- }
- public static String generateIndications() {
- ArrayList<String> types = new ArrayList<>(Arrays.asList("SL", "TURNL", "TURNR", "YIELD", "STOP", "R"));
- StringBuilder sb = new StringBuilder();
- StringBuilder sb2 = new StringBuilder();
- Random random = new Random();
- sb2.append(types.get(0) + random.nextInt(20, 70) + "_" + random.nextInt(1, 10));
- sb.append(sb2 + " ");
- for (int i = 0; i < 8; i++) {
- sb2.setLength(0);
- Collections.shuffle(types);
- if (types.get(0) == "YIELD" || types.get(0) == "STOP" || types.get(0) == "R") {
- int aleatorio = random.nextInt(0, 5);
- if (aleatorio == 0) {
- sb2.append(types.get(0));
- } else {
- sb2.append(types.get(0) + aleatorio);
- }
- } else if (types.get(0) == "SL") {
- sb2.append(types.get(0) + random.nextInt(20, 70) + "_" + random.nextInt(1, 10));
- } else {
- sb2.append(types.get(0));
- }
- sb.append(sb2 + " ");
- }
- return sb.toString().trim();
- }
- public static String generateGoodActions(String indications) {
- String[] trafficSigns = indications.split("\\s+");
- List<String> actions = new ArrayList<>();
- Random random = new Random();
- Matcher matcher;
- for (String sing : trafficSigns) {
- if ((matcher = Pattern.compile("SL(\\d+)_(\\d+)").matcher(sing)).matches()) {
- int limit = Integer.parseInt(matcher.group(1));
- int duration = Integer.parseInt(matcher.group(2));
- for (int i = 0; i < duration; i++) {
- actions.add(String.valueOf(random.nextInt(limit + 1)));
- }
- } else if ((matcher = Pattern.compile("YIELD(\\d*)").matcher(sing)).matches()) {
- int cars = matcher.group(1).isEmpty() ? 1 : Integer.parseInt(matcher.group(1));
- for (int i = 0; i < cars * 2; i++) {
- actions.add("0");
- }
- } else if ((matcher = Pattern.compile("STOP(\\d*)").matcher(sing)).matches()) {
- int cars = matcher.group(1).isEmpty() ? 0 : Integer.parseInt(matcher.group(1));
- for (int i = 0; i < 3 + 2 * cars; i++) {
- actions.add("0");
- }
- } else if ((matcher = Pattern.compile("R(\\d+)").matcher(sing)).matches()) {
- int secs = Integer.parseInt(matcher.group(1));
- for (int i = 0; i < secs; i++) {
- actions.add("0");
- }
- } else if ("TURNL".equals(sing) && !actions.isEmpty()) {
- int last = actions.size() - 1;
- actions.set(last, actions.get(last) + "<");
- } else if ("TURNR".equals(sing) && !actions.isEmpty()) {
- int last = actions.size() - 1;
- actions.set(last, actions.get(last) + ">");
- }
- }
- return String.join(" ", actions);
- }
- @Test
- void RandomTest() {
- String indications = generateIndications();
- String actions = generateGoodActions(indications);
- System.out.println(indications);
- System.out.println(actions);
- }
- }
public class DrivingTestEvaluator{ public static boolean evaluate(String road, String exam){ return true; } }- public class DrivingTestEvaluator{
- public static boolean evaluate(String road, String exam){
//your code here- return true;
- }
- }
import org.junit.jupiter.api.Test; import static org.junit.jupiter.api.Assertions.*; // TODO: Replace examples and use TDD by writing your own tests class SolutionTest { @Test void SampleTest() { assertTrue(DrivingTestEvaluator.evaluate("SL30_4 TURNR SL35_8 STOP1","28 27 30 29> 36 38 37 0 0 0 0 0")); assertFalse(DrivingTestEvaluator.evaluate("SL30_4 TURNR SL35_8 STOP1","28 27 30 29> 36 38 37 0 0 0 50 30")); assertTrue(DrivingTestEvaluator.evaluate("SL50_2 SL30_4 TURNR TURNL","48 51 21> 28 30< 22")); assertFalse(DrivingTestEvaluator.evaluate("SL30_4 TURNR SL35_7 YIELD2","28 27 30 32> 36 38 0 0 0 0 60")); assertTrue(DrivingTestEvaluator.evaluate("SL40_3 YIELD SL25_5 TURNR","39 40 41 24 25 23 25> 22")); } }- import org.junit.jupiter.api.Test;
import static org.junit.jupiter.api.Assertions.assertEquals;- import static org.junit.jupiter.api.Assertions.*;
- // TODO: Replace examples and use TDD by writing your own tests
- class SolutionTest {
@Testvoid testSomething() {// assertEquals("expected", "actual");}- @Test
- void SampleTest() {
- assertTrue(DrivingTestEvaluator.evaluate("SL30_4 TURNR SL35_8 STOP1","28 27 30 29> 36 38 37 0 0 0 0 0"));
- assertFalse(DrivingTestEvaluator.evaluate("SL30_4 TURNR SL35_8 STOP1","28 27 30 29> 36 38 37 0 0 0 50 30"));
- assertTrue(DrivingTestEvaluator.evaluate("SL50_2 SL30_4 TURNR TURNL","48 51 21> 28 30< 22"));
- assertFalse(DrivingTestEvaluator.evaluate("SL30_4 TURNR SL35_7 YIELD2","28 27 30 32> 36 38 0 0 0 0 60"));
- assertTrue(DrivingTestEvaluator.evaluate("SL40_3 YIELD SL25_5 TURNR","39 40 41 24 25 23 25> 22"));
- }
- }