rw-intervals v0.0.3
Interval Selector
Overview
rw-intervals
is a lightweight JavaScript library written in Rust that provides functions to select overlapping intervals based on their associated weights. It efficiently resolves conflicts between overlapping intervals, ensuring optimal selection.
Features
- Identify overlapping intervals.
- Select the most relevant intervals based on weight.
- Efficient computation for large datasets.
Installation
You can install rw-intervals
via npm:
npm install rw-intervals
or using yarn:
yarn add rw-intervals
Usage
Importing the Library
import * as RwIntervals from "rw-intervals";
Creating intervals
rw-intervals exposes two interfaces to define schedule and request (interval) objects:
export interface Request {
id: String,
start_date: Number,
end_date: Number,
weight: Number,
}
export interface Schedule {
name: String,
overlaps: String[],
requests: Request[],
reservations: String[],
}
You can create an interval list as follow:
const intervals: Request[] = [
{
"id": "A",
"start_date": 28986660,
"end_date": 28986780,
"weight": 80
},
{
"id": "B",
"start_date": 28986751,
"end_date": 28986870,
"weight": 40
},
{
"id": "C",
"start_date": 28947600,
"end_date": 28948620,
"weight": 30
}
];
To get the schedule with all selected weighted intervals, you must use the RwIntervals.buildSchedule method sending a request array as String:
const intervals: Request[] = [
{
"id": "A",
"start_date": 28986660,
"end_date": 28986780,
"weight": 80
},
{
"id": "B",
"start_date": 28986751,
"end_date": 28986870,
"weight": 40
},
{
"id": "C",
"start_date": 28947600,
"end_date": 28948620,
"weight": 30
}
];
let schedule = RwIntervals.buildSchedule(JSON.stringify(intervals));
Output
{
"name": "a",
"requests": [
{
"id": "A",
"start_date": 28986660,
"end_date": 28986780,
"weight": 80
},
{
"id": "B",
"start_date": 28986751,
"end_date": 28986870,
"weight": 40
},
{
"id": "C",
"start_date": 28947600,
"end_date": 28948620,
"weight": 30
}
],
"overlaps": [
"A:B"
],
"reservations": [
"A",
"C"
]
}
Note that in this output we have an overlaps property that contains a pair of ids separated by a ":". This also contains the reservations array, which represent the winner requests.
If you want to recalculate the schedule adding a new request, you can use the RwIntervals.recalculateSchedule method:
const newInterval: Request = {
"id": "9fc829f1-2cac-4e00-a318-1ca864667daa",
"start_date": 28986751,
"end_date": 28986870,
"weight": 40
};
let newSchedule = RwIntervals.recalculateSchedule(JSON.stringify(schedule), JSON.stringify(newInterval));
API
buildSchedule(intervals: String): Schedule
- Parameters:
intervals
(Array)::String: An array of Request objects.
Returns:
- Schedule object.
recalculateSchedule(schedule: String, interval: String): Schedule
Parameters:
schedule
(Schedule)::String: schedule to update.interval
(Request)::String: New request to add into de shcedule.
- Returns:
- Schedule object.
License
MIT License
Contributing
Contributions are welcome! Please submit a pull request or open an issue on GitHub.
Author
Developed by Miguelon Coder.