Skip to main content
1 of 2

Rust, 117 bytes

Or 118 if we count 'y' as a vowel.

|s:&str|s.to_lowercase().split(' ').any(|w|w.starts_with("ill")&&w.chars().nth(3).is_none_or(|c|!"aiou".contains(c)))

Ungolfed and explained:

// Non-regex answer; unless depending on flavor-specific behavior, there's two
// regex answers already, they're just tagged as JS (ES6)
fn sick(album: &str) -> bool {
  // Rely on implicit returns
  album.to_lowercase() // explains itself
    .split(' ') // split on literal space and iterate over the words
    .any(|word|{ // Check if any of the splits matches a predicate function
      word.starts_with("ill") // explains itself
      && word.chars() // iterate over the chars that make up the string
        .nth(3) // get the character with 0-based index 3, if it exists
        .is_none_or( // If the char does not exist, the word *is* ill
          // Otherwise we return the result of a checking function
          |c|!"aiou".contains(c) // non-e vowel check to skip false positives
        )
    })
}

Rust Playground link