Angry Professor

See the original problem on HackerRank.

Solutions

We can count the on time students. If the count is less than k, the professor is angry.

PHP

 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 = $k) { return 'NO'; } else { return 'YES'; } } Javascript by Enrico Scantamburlo  1 const angryProfessor = (k, a) => a.filter(v => v < 1).length < k ? 'YES' : 'NO' Ruby by Davide Pettenon  1 2 3 def angryProfessor(k, a) a.select { |x| x <= 0 }.size < k ? 'YES' : 'NO' end Python by Beatrice Liberi  1 2 3 4 5 def angryProfessor(k, a): if len(list(filter(lambda x: x <=0, a))) >= k : return 'NO' else: return 'YES' Haskell  1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 import Data.List.Split fromLines lines = (k, a) where _:k:a = read <$> concatMap words lines countOnTime = length . filter (<= 0) angryProfessor (k, a) = countOnTime a < k output True = "YES" output False = "NO" main = do _ <- getLine testCases <- fmap fromLines . chunksOf 2 . lines <$> getContents putStr . unlines$ output . angryProfessor <$> testCases The algorithm can be optimized: just stop reading the array when at least k students are on time.  1 angryProfessor (k, a) = k /= (length . take k$ filter (<= 0) a)
 1 2 3 fn angry_professor(k: usize, a: &[i32]) -> bool { k != a.iter().filter(|&&x| x <= 0).take(k).count() }

Elixir by Tommaso Bertagnin

 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 defmodule Solution do [[_n_of_cases] | cases ] = Enum.map(IO.stream(:stdio, :line), fn line -> line |> String.trim |> String.split(" ", trim: true) |> Enum.map(&String.to_integer/1) end) cases |> Enum.chunk_every(2) |> Enum.each(fn [[_n_students, min_attendance], entry_times] -> arrived_on_time = entry_times |> Enum.filter(fn t -> t <= 0 end) |> Enum.count() professor_says = if arrived_on_time >= min_attendance do "NO" else "YES" end IO.write(professor_says <> "\n") end) end
We've worked on this challenge in these gyms: turin