Debounce Simulation
Given event timestamps and a debounce wait, output the times at which the debounced callback actually fires (only the last event of each burst survives) — the logic behind search-as-you-type.
Sample input
events = [0,100,150,400,450], wait = 200
Sample output
350 650
Solution
events = [0, 100, 150, 400, 450]
wait = 200
fires = []
for i in range(len(events)):
is_last = i == len(events) - 1
if is_last or events[i + 1] - events[i] > wait:
fires.append(events[i] + wait)
print(*fires)
const events = [0, 100, 150, 400, 450];
const wait = 200;
const fires = [];
for (let i = 0; i < events.length; i++) {
const isLast = i === events.length - 1;
if (isLast || events[i + 1] - events[i] > wait) {
fires.push(events[i] + wait);
}
}
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, 100, 150, 400, 450};
int wait = 200;
List<Integer> fires = new ArrayList<>();
for (int i = 0; i < events.length; i++) {
boolean isLast = i == events.length - 1;
if (isLast || events[i + 1] - events[i] > wait) {
fires.add(events[i] + wait);
}
}
System.out.println(fires.stream().map(String::valueOf).collect(Collectors.joining(" ")));
}
}
fun main() {
val events = intArrayOf(0, 100, 150, 400, 450)
val wait = 200
val fires = mutableListOf<Int>()
for (i in events.indices) {
val isLast = i == events.size - 1
if (isLast || events[i + 1] - events[i] > wait) {
fires.add(events[i] + wait)
}
}
println(fires.joinToString(" "))
}
let events = [0, 100, 150, 400, 450]
let wait = 200
var fires = [Int]()
for i in 0..<events.count {
let isLast = i == events.count - 1
if isLast || events[i + 1] - events[i] > wait {
fires.append(events[i] + wait)
}
}
print(fires.map(String.init).joined(separator: " "))
void main() {
final events = [0, 100, 150, 400, 450];
const wait = 200;
final fires = <int>[];
for (var i = 0; i < events.length; i++) {
final isLast = i == events.length - 1;
if (isLast || events[i + 1] - events[i] > wait) {
fires.add(events[i] + wait);
}
}
print(fires.join(' '));
}
#include <iostream>
#include <vector>
using namespace std;
int main() {
vector<int> events = {0, 100, 150, 400, 450};
int wait = 200;
bool first = true;
for (int i = 0; i < (int) events.size(); i++) {
bool isLast = i == (int) events.size() - 1;
if (isLast || events[i + 1] - events[i] > wait) {
if (!first) cout << " ";
cout << (events[i] + wait);
first = false;
}
}
cout << endl;
return 0;
}
#include <stdio.h>
int main() {
int events[] = {0, 100, 150, 400, 450};
int n = 5, wait = 200, first = 1;
for (int i = 0; i < n; i++) {
int isLast = i == n - 1;
if (isLast || events[i + 1] - events[i] > wait) {
if (!first) printf(" ");
printf("%d", events[i] + wait);
first = 0;
}
}
printf("\n");
return 0;
}