Pretty dates and random sentences

This commit is contained in:
Klemek
2018-02-18 14:54:08 +01:00
parent e8a9268aeb
commit 1e8cf29d25
2 changed files with 150 additions and 21 deletions
+108 -21
View File
@@ -3,59 +3,146 @@ package fr.klemek.primedate;
import java.text.NumberFormat;
import java.text.SimpleDateFormat;
import java.util.Calendar;
import java.util.concurrent.ThreadLocalRandom;
import java.util.Locale;
import java.util.Timer;
import java.util.TimerTask;
/**
* Main process to be launched
*
* @author Kleme
*/
public abstract class MainProcess {
private final static String VERSION = "v1.1";
private final static SimpleDateFormat date2num = new SimpleDateFormat("yyyyMMddHHmm");
private final static SimpleDateFormat sdf = new SimpleDateFormat("MMMM d, yyyy 'at' HH:mm", Locale.ENGLISH);
private final static NumberFormat nf = NumberFormat.getNumberInstance(Locale.ENGLISH);
private final static String VERSION = "v1.2";
private static void checkTime() {
private final static SimpleDateFormat DATE_TO_NUM = new SimpleDateFormat("yyyyMMddHHmm");
private final static String[] GREETINGS_SENTENCES = new String[] { "Hi", "Hello there", "Good %s", "What's up?",
"Greetings", "How are you?", "Hey", "How are you doing?", "How's life?", "Long time no see",
"It's been a while", "How do you do?", "Yo", "Howdy", "Sup?", "Whazzup?" };
private final static String[] DATE_SENTENCES = new String[] { "The date is %1$s and it's %2$s",
"We are %1$s and it's already %2$s", "It's already %2$s today", "Today is %1$s and it's %2$s",
"It's %2$s and today's %1$s" };
private final static String[] PRIME_SENTENCES = new String[] { "%s is a prime number",
"%s cannot be divided by another number", "nobody can divide %s", "%s is prime" };
private final static String[] END_SENTENCES = new String[] { "", "Pretty cool, huh?", "It blows your mind!",
"You can forget it now.", "You wasted 20 seconds of your time.", "That's cool!", "Isn't it cool?",
"You should stop reading these tweets...", "That's a good password.", "Maybe not.", "Why ? ...",
"Pls help stuck in prime factory", "Why do you read these ?", "Can someone check ?", "Really ?", "Cool.",
"You can use it.", "Google it.", "How do I stop this?", "Send STOP to not receive this anymore.", "Yes.",
"It's true.", "Move on." };
private final static char[] SENTENCE_ENDS = new char[] { '.', '!', ',' };
private static void checkTime(Calendar currentTime, boolean fake) {
try {
Calendar currentTime = Calendar.getInstance();
currentTime.add(Calendar.MILLISECOND, -currentTime.getTimeZone().getOffset(currentTime.getTimeInMillis()));
long currentTimeValue = Long.parseLong(date2num.format(currentTime.getTime()));
long currentTimeValue = Long.parseLong(DATE_TO_NUM.format(currentTime.getTime()));
if (PrimeCalculator.isPrime(currentTimeValue)) {
String msg = String.format("Hi, the date is %s GMT and %s is a prime number",
sdf.format(currentTime.getTime()), nf.format(currentTimeValue));
TwitterClient.tweet(msg);
String msg;
do {
msg = constructSentence(currentTime, currentTimeValue);
} while (msg.length() > 280);
if (fake)
System.out.println(msg);
else
TwitterClient.tweet(msg);
}
} catch (Exception e) {
e.printStackTrace();
}
}
private static String constructSentence(Calendar time, long timeValue) {
final int hour = time.get(Calendar.HOUR_OF_DAY);
final String dayPeriod = hour >= 5 && hour <= 12 ? "morning" : (hour <= 18 ? "afternoon" : "evening");
final PrettyDate time2 = new PrettyDate(time);
final int r1 = ThreadLocalRandom.current().nextInt(0, GREETINGS_SENTENCES.length);
final int r2 = ThreadLocalRandom.current().nextInt(0, SENTENCE_ENDS.length);
final int r3 = ThreadLocalRandom.current().nextInt(0, DATE_SENTENCES.length);
final int r4 = ThreadLocalRandom.current().nextInt(0, SENTENCE_ENDS.length);
final int r5 = ThreadLocalRandom.current().nextInt(0, PRIME_SENTENCES.length);
final int r6 = ThreadLocalRandom.current().nextInt(0, SENTENCE_ENDS.length);
final int r7 = ThreadLocalRandom.current().nextInt(0, END_SENTENCES.length);
// GREETINGS
String greetings = String.format(GREETINGS_SENTENCES[r1], dayPeriod);
if (!greetings.endsWith("?"))
greetings += SENTENCE_ENDS[r2];
// DATE
String date = String.format(DATE_SENTENCES[r3], time2.getPrettyDate(), time2.getPrettyTime());
if (greetings.endsWith(","))
date = date.substring(0, 1).toLowerCase() + date.substring(1);
date += SENTENCE_ENDS[r4];
if (date.endsWith(","))
date = date.substring(0, date.length() - 1) + " and";
// PRIME
String prime = String.format(PRIME_SENTENCES[r5], NumberFormat.getNumberInstance().format(timeValue));
if (date.endsWith("d"))
prime = prime.substring(0, 1).toLowerCase() + prime.substring(1);
if (END_SENTENCES[r7].length() == 0 && SENTENCE_ENDS[r6] == ',')
prime += ".";
else
prime += SENTENCE_ENDS[r6];
// END
String end = END_SENTENCES[r7];
if (prime.endsWith(","))
end = end.substring(0, 1) + end.substring(1);
return greetings + " " + date + " " + prime + " " + end;
}
public static void main(String[] args) {
System.out.println(String.format("PrimeDate %s%n%s",VERSION,Calendar.getInstance().getTime()));
if(args.length < 1) {
Locale.setDefault(Locale.ENGLISH);
final int max_random = GREETINGS_SENTENCES.length * SENTENCE_ENDS.length * DATE_SENTENCES.length
* SENTENCE_ENDS.length * PRIME_SENTENCES.length * SENTENCE_ENDS.length * END_SENTENCES.length;
System.out.println(String.format("PrimeDate %s%n%s%n%d+ sentences available randomly", VERSION,
Calendar.getInstance().getTime(), max_random));
if (args.length < 1) {
System.out.println("Argument 1 must be a file containing customer keys");
System.exit(0);
}
if(TwitterClient.setUpTwitter(args[0])) {
if (TwitterClient.setUpTwitter(args[0])) {
PrimeCalculator.computeList();
Timer timer = new Timer();
timer.scheduleAtFixedRate(new TimerTask() {
@Override
public void run() {
checkTime();
Calendar currentTime = Calendar.getInstance();
currentTime.add(Calendar.MILLISECOND, -currentTime.getTimeZone().getOffset(currentTime.getTimeInMillis()));
checkTime(currentTime, false);
}
}, 0, 1 * 60 * 1000);
/*Calendar time = Calendar.getInstance();
while (true) {
checkTime(time, true);
time.add(Calendar.MINUTE, 1);
}*/
}
}
+42
View File
@@ -0,0 +1,42 @@
package fr.klemek.primedate;
import java.util.Calendar;
public class PrettyDate {
private Calendar cal;
public PrettyDate() {
cal = Calendar.getInstance();
}
public PrettyDate(Calendar cal) {
this.cal = cal;
}
private String getPrettyDayOfMonth() {
final int n = cal.get(Calendar.DAY_OF_MONTH);
if (n >= 11 && n <= 13) {
return n+"th";
}
switch (n % 10) {
case 1:
return n + "st";
case 2:
return n + "nd";
case 3:
return n + "rd";
default:
return n + "th";
}
}
public String getPrettyDate() {
return String.format("%1$tB the %2$s, %1$tY", cal.getTime(), getPrettyDayOfMonth());
}
public String getPrettyTime() {
return String.format("%1$tH:%1$tM GMT", cal.getTime());
}
}