function selectJobs(jobs) { if (!Array.isArray(jobs) || jobs.length > 10000) { throw new TypeError("Expected at most 10000 job records"); } const seen = new Set(); const ordered = jobs.map((job) => { if (!job || typeof job !== "object" || Array.isArray(job) || typeof job.id !== "string" || !/^[A-Z][A-Z0-9-]{0,15}$/.test(job.id) || seen.has(job.id)) { throw new TypeError("Each job needs a unique uppercase ID"); } if (!Number.isInteger(job.start) || !Number.isInteger(job.end) || job.start < 0 || job.end > 1440 || job.start >= job.end) { throw new RangeError("Use whole minutes: 0 <= start < end <= 1440"); } seen.add(job.id); return { id: job.id, start: job.start, end: job.end }; }); ordered.sort((a, b) => a.end - b.end || a.start - b.start || (a.id < b.id ? -1 : a.id > b.id ? 1 : 0)); const selected = []; let lastEnd = 0; for (const job of ordered) { if (job.start >= lastEnd) { selected.push(job.id); lastEnd = job.end; } } return selected; } const sample = [ { id: "A", start: 0, end: 60 }, { id: "B", start: 0, end: 30 }, { id: "C", start: 30, end: 60 }, { id: "D", start: 55, end: 90 }, { id: "E", start: 60, end: 90 }, { id: "F", start: 90, end: 120 } ]; const result = selectJobs(sample); console.log("Selected IDs:", result.join(", ")); console.log("Selected count:", result.length);