Throttle Simulation

Medium Real-World Scenarios
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;
}