Compare commits

..

9 commits
task/5 ... nya

Author SHA1 Message Date
6fa68b07b8
complete: 9 2024-06-13 22:49:29 +02:00
5fe83d7ee8
complete: 8 2024-06-03 17:01:42 +02:00
19dcae87c3
complete: 7 2024-05-23 15:25:10 +02:00
a52e81d6c8
complete: 6 2024-05-11 23:30:42 +02:00
897ef9bf4b
complete: 5 2024-04-30 22:37:13 +02:00
6784d02b95
complete: 4 2024-04-19 19:16:03 +02:00
befd8c1e8b
complete: 1 2024-03-28 20:33:29 +01:00
9429a39b3c
complete: 2 2024-03-28 20:23:53 +01:00
6ba738d773
complete: 3 2024-03-28 19:24:00 +01:00
4 changed files with 14 additions and 128 deletions

View file

@ -1,5 +1,17 @@
# PPJ
This branch contains the solution for the **5th task**.
This repository exists to archive PJATK tasks for the PPJ curriculum.
[Go back to main](/femsci/ppj/src/branch/nya)
Each task can be found under its **corresponding branch**: `task/n`.
### Completed tasks:
- [Task 1](/femsci/ppj/src/branch/task/1)
- [Task 2](/femsci/ppj/src/branch/task/2)
- [Task 3](/femsci/ppj/src/branch/task/3)
- [Task 4](/femsci/ppj/src/branch/task/4)
- [Task 5](/femsci/ppj/src/branch/task/5)
- [Task 6](/femsci/ppj/src/branch/task/6)
- [Task 7](/femsci/ppj/src/branch/task/7)
- [Task 8](/femsci/ppj/src/branch/task/8)
- [Task 9](/femsci/ppj/src/branch/task/9)

View file

@ -1,31 +0,0 @@
/*
* TASK 5
* archived at https://git.femboy.science/femsci/ppj/src/branch/task/5
* by femsci
*/
package dev.meowmeow;
public class Kitku {
public static void main(String[] args) {
// let's play with silly datestamps and serialization
// 2127 + 10
LimitedDate from = new LimitedDate(3, 2, 2000),
to = new LimitedDate(29, 11, 2127);
System.out.printf("**Original**\n%s -> %s\n\n", from, to);
// for more explicitness let's stress test the system by redundant serde ops
int spanRaw = new LimitedDateSpan(from, to).rawSpan();
LimitedDateSpan theActualSpanAbstraction = new LimitedDateSpan(spanRaw);
// here we perform the another batch of deserialization operations :3
LimitedDate fromde = theActualSpanAbstraction.dateFrom(),
tode = theActualSpanAbstraction.dateTo();
System.out.printf("**Reconstructed**\n%s -> %s\n", fromde, tode);
}
}

View file

@ -1,51 +0,0 @@
/*
* TASK 5
* archived at https://git.femboy.science/femsci/ppj/src/branch/task/5
* by femsci
*/
package dev.meowmeow;
public class LimitedDate {
public LimitedDate(int day, int month, int year) {
if (year < 2000 || year > 2127) {
throw new IllegalArgumentException("year must be within [2000..2127]");
}
if (month < 1 || month > 12) {
throw new IllegalArgumentException("month must be within [1..12]");
}
if (day < 1 || day > 31) {
throw new IllegalArgumentException("day must be within [1..31]");
}
this.day = day;
this.month = month;
this.year = year;
}
private final int day, month, year;
@Override
public String toString() {
return String.format("%02d.%02d.%04d", day, month, year);
}
/*
* the structure (sadly java does not support unsigned integers):
* | octet 1 .| octet 2. |
* | 01234567 | 89abcdef |
* | Yyyyyyym | mmmddddd |
*/
public short toSillyDatestamp() {
int yr = year - 2000;
return (short) ((yr << 9) | (month << 5) | (day));
}
public static LimitedDate fromSillyDatestamp(short datestamp) {
int day = datestamp & 0x1f;
int month = (datestamp >> 5) & 0xf;
int year = (datestamp >> 9) & 0x7f;
return new LimitedDate(day, month, year + 2000);
}
}

View file

@ -1,44 +0,0 @@
/*
* TASK 5
* archived at https://git.femboy.science/femsci/ppj/src/branch/task/5
* by femsci
*/
package dev.meowmeow;
public class LimitedDateSpan {
// we still don't account for the transitions and abominable human-made
// exceptions
public LimitedDateSpan(LimitedDate from, LimitedDate to) {
this(from.toSillyDatestamp(), to.toSillyDatestamp());
}
LimitedDateSpan(short rawFrom, short rawTo) {
this((rawFrom << 16) | Short.toUnsignedInt(rawTo));
}
LimitedDateSpan(int raw) {
this.serializedData = raw;
}
// let's pretend that we need some weird optimization scheme, despite GC being
// finally smart enough
private final int serializedData;
public LimitedDate dateFrom() {
return LimitedDate.fromSillyDatestamp((short) ((serializedData >> 16) & 0xffff));
}
public LimitedDate dateTo() {
return LimitedDate.fromSillyDatestamp((short) (serializedData & 0xffff));
}
int rawSpan() {
return serializedData;
}
// span calc methods etc...
// years(), days()...
}