##JavaScript (ES6), 98 bytes Takes the list of guests `l` and the party time `h` in currying syntax `(l)(h)`. Expects a trailing linebreak on the list. Returns a concatenated list of names such as `LisaBob`. <!-- language: lang-js --> l=>h=>l.replace(/(\w+) (.*)\n/g,(_,a,b)=>(t-=T(b))<0?a:'',t=(T=h=>eval(h.replace(/:/,'*60+')))(h)) ###Demo <!-- begin snippet: js hide: false console: true babel: false --> <!-- language: lang-js --> let f = l=>h=>l.replace(/(\w+) (.*)\n/g,(_,a,b)=>(t-=T(b))<0?a:'',t=(T=h=>eval(h.replace(/:/,'*60+')))(h)) console.log(f(`Kevin 13:02 Ruby 5 Sam 3 Lisa 6 Bob 12 `)('13:15')) <!-- end snippet -->