Throttle Simulation
Given event timestamps and an interval, output the times at which a throttled callback fires (leading edge — at most one call per interval). Used to limit scroll / resize handlers.
Sample input
events = [0,50,100,250,300,500], interval = 200
Sample output
0 250 500
Solution
events = [0, 50, 100, 250, 300, 500]
interval = 200
fires = []
last_fire = None
for t in events:
if last_fire is None or t - last_fire >= interval:
fires.append(t)
last_fire = t
print(*fires)
const events = [0, 50, 100, 250, 300, 500];
const interval = 200;
const fires = [];
let lastFire = null;
for (const t of events) {
if (lastFire === null || t - lastFire >= interval) {
fires.push(t);
lastFire = t;
}
}
console.log(fires.join(" "));
import java.util.ArrayList;
import java.util.List;
import java.util.stream.Collectors;
public class Main {
public static void main(String[] args) {
int[] events = {0, 50, 100, 250, 300, 500};
int interval = 200;
List<Integer> fires = new ArrayList<>();
boolean hasFired = false;
int lastFire = 0;
for (int t : events) {
if (!hasFired || t - lastFire >= interval) {
fires.add(t);
lastFire = t;
hasFired = true;
}
}
System.out.println(fires.stream().map(String::valueOf).collect(Collectors.joining(" ")));
}
}
fun main() {
val events = intArrayOf(0, 50, 100, 250, 300, 500)
val interval = 200
val fires = mutableListOf<Int>()
var lastFire: Int? = null
for (t in events) {
if (lastFire == null || t - lastFire!! >= interval) {
fires.add(t)
lastFire = t
}
}
println(fires.joinToString(" "))
}
let events = [0, 50, 100, 250, 300, 500]
let interval = 200
var fires = [Int]()
var lastFire: Int? = nil
for t in events {
if lastFire == nil || t - lastFire! >= interval {
fires.append(t)
lastFire = t
}
}
print(fires.map(String.init).joined(separator: " "))
void main() {
final events = [0, 50, 100, 250, 300, 500];
const interval = 200;
final fires = <int>[];
int? lastFire;
for (final t in events) {
if (lastFire == null || t - lastFire! >= interval) {
fires.add(t);
lastFire = t;
}
}
print(fires.join(' '));
}
#include <iostream>
#include <vector>
using namespace std;
int main() {
vector<int> events = {0, 50, 100, 250, 300, 500};
int interval = 200;
bool hasFired = false;
int lastFire = 0;
bool first = true;
for (int t : events) {
if (!hasFired || t - lastFire >= interval) {
if (!first) cout << " ";
cout << t;
first = false;
lastFire = t;
hasFired = true;
}
}
cout << endl;
return 0;
}
#include <stdio.h>
int main() {
int events[] = {0, 50, 100, 250, 300, 500};
int n = 6, interval = 200, lastFire = 0, hasFired = 0, first = 1;
for (int i = 0; i < n; i++) {
int t = events[i];
if (!hasFired || t - lastFire >= interval) {
if (!first) printf(" ");
printf("%d", t);
first = 0;
lastFire = t;
hasFired = 1;
}
}
printf("\n");
return 0;
}