FOP-2425-Marathon/src/main/java/h02/TwoDimensionalArrayStuff.java
Oshgnacknak a136c9b98e Squashed 'H02/' content from commit c53b833
git-subtree-dir: H02
git-subtree-split: c53b8335cebf2a8ed06ca14f89263c558a06ef6b
2025-01-11 16:40:58 +01:00

79 lines
3 KiB
Java

package h02;
import org.tudalgo.algoutils.student.annotation.DoNotTouch;
import org.tudalgo.algoutils.student.annotation.StudentImplementationRequired;
import java.util.Arrays;
/**
* This class serves as a container for the methods that are to be implemented by the students for exercise H2.1.2.
*/
public class TwoDimensionalArrayStuff {
/**
* Prevent instantiation of this utility class.
*/
private TwoDimensionalArrayStuff() {
throw new IllegalStateException("This class is not meant to be instantiated.");
}
/**
* Returns an array containing the number of occurrences of the query {@link String} in each line of the input array.
*
* @param input the input array
* @param query the query {@link String}
* @return an array containing the number of occurrences of the query {@link String} in each line of the input array
*/
@StudentImplementationRequired("H2.1.2")
public static int[] occurrences(final String[][] input, final String query) {
// TODO: H2.1.2
return org.tudalgo.algoutils.student.Student.crash("H2.1.2 - Remove if implemented");
}
/**
* Returns the mean of the input array.
*
* @param input the input array
* @return the mean of the input array
*/
@StudentImplementationRequired("H2.1.2")
public static float mean(final int[] input) {
// TODO: H2.1.2
return org.tudalgo.algoutils.student.Student.crash("H2.1.2 - Remove if implemented");
}
/**
* Returns the mean number of occurrences of the query {@link String} in each line of the input array.
*
* @param input the input array
* @param query the query {@link String}
* @return the mean number of occurrences of the query {@link String} in each line of the input array
*/
@DoNotTouch
public static float meanOccurrencesPerLine(final String[][] input, final String query) {
return mean(occurrences(input, query));
}
/**
* Overload that splits the input string by lines and spaces, then calls regular meanOccurrencesPerLine.
*
* @param input the input string to split by lines and spaces
* @param query the query {@link String}
* @return the mean number of occurrences of the query {@link String} in each line of the input array
*/
@DoNotTouch
public static float meanOccurrencesPerLine(final String input, final String query) {
// filter out unwanted symbols
final String filteredInput = input.replaceAll("[^\\w\\s]", "");
// split by lines
final var processedInput = Arrays.stream(filteredInput.split("(\\r\\n|\\r|\\n)"))
// split by spaces
.map(line -> line.split("\\s"))
// collect to 2D array
.toArray(String[][]::new);
/// uncomment the following line to log processed input
// System.out.printf("Processed input: %s%n", Arrays.deepToString(processedInput));
// call regular meanOccurrencesPerLine
return meanOccurrencesPerLine(processedInput, query);
}
}