added ex Q3
This commit is contained in:
parent
508d412a1a
commit
53add330f4
8
src/exercises/ex_q3/Book.java
Normal file
8
src/exercises/ex_q3/Book.java
Normal 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);
|
||||||
|
}
|
||||||
|
}
|
67
src/exercises/ex_q3/BookGenerator.java
Normal file
67
src/exercises/ex_q3/BookGenerator.java
Normal 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));
|
||||||
|
}
|
||||||
|
}
|
20
src/exercises/ex_q3/Library.java
Normal file
20
src/exercises/ex_q3/Library.java
Normal 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]);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
Loading…
Reference in New Issue
Block a user