added ex Q3

This commit is contained in:
Louis Heredero 2024-12-17 16:01:28 +01:00
parent 508d412a1a
commit 53add330f4
Signed by: HEL
GPG Key ID: 8D83DE470F8544E7
3 changed files with 95 additions and 0 deletions

View File

@ -0,0 +1,8 @@
package exercises.ex_q3;
public record Book(String ISBN, String title, String authorFirstName, String authorLastName, int year) implements Comparable<Book> {
@Override
public int compareTo(Book o) {
return title.compareTo(o.title);
}
}

View File

@ -0,0 +1,67 @@
package exercises.ex_q3;
import java.util.ArrayList;
import java.util.Random;
public class BookGenerator {
private static final String[] adjectives = {
"big", "red", "small", "weird", "amazing", "fantastic", "friendly", "curious", "frightening",
};
private static final String[] nouns = {
"apple", "car", "gingerbread man", "octopus", "planet", "volcano", "bottle", "adventure"
};
private static final String[] determinants = {"the", "a"};
private static final String vowels = "aeiou";
private static final String[] firstnames = {
"John", "Patrick", "Gérard", "Jean-Michel", "Ronswalle", "Guilherme", "Jean-Claude", "Perceval", "Hector", "Ferguson",
"Azénor", "Clémentine", "Ailizabette", "Bérangère", "Clothilde", "Mélissandre"
};
private static final String[] lastnames = {
"de Mont-Castel", "Smith", "Martin", "Ferguson", "Lassalle", "Berset", "Constantin"
};
private static final Random random = new Random();
private static String getRandom(String[] list) {
int i = random.nextInt(list.length);
return list[i];
}
public static Book generateRandomBook() {
String noun = getRandom(nouns);
String adj = getRandom(adjectives);
String det = getRandom(determinants);
if (det.equals("a") && vowels.contains(adj.substring(0, 1))) {
det += "n";
}
String title = det + " " + adj + " " + noun;
title = title.substring(0, 1).toUpperCase() + title.substring(1);
String isbn = "";
int checksum = 0;
for (int i = 0; i < 9; i++) {
int digit = random.nextInt(10);
isbn += String.valueOf(digit);
if (i % 4 == 0) {
isbn += "-";
}
checksum += (10 - i) * digit;
}
checksum = checksum % 11;
if (checksum != 0) {
checksum = 11 - checksum;
}
if (checksum == 10) {
isbn += "X";
} else {
isbn += String.valueOf(checksum);
}
String firstname = getRandom(firstnames);
String lastname = getRandom(lastnames);
return new Book(isbn, title, firstname, lastname, random.nextInt(1000, 2025));
}
}

View File

@ -0,0 +1,20 @@
package exercises.ex_q3;
import java.util.Arrays;
public class Library {
private static final int SIZE = 100_000;
private static final Book[] books = new Book[SIZE];
public static void main(String[] args) {
for (int i = 0; i < SIZE; i++) {
Book book = BookGenerator.generateRandomBook();
books[i] = book;
}
Arrays.parallelSort(books);
for (int i = 0; i < Math.min(15, SIZE); i++) {
System.out.println(books[i]);
}
}
}