(ns clojurach.core
(:require [clojure.test :as test :refer [deftest testing is are]]))
(defn grep-n [n pred coll]
(->> coll
(map-indexed (fn [i x] (clojure.lang.MapEntry. i x)))
(partition (-> n (* 2) inc) 1)
(filter #(-> % (nth n) val pred))
(apply concat)
distinct
(map val)))
;; (grep-n 1 #{:b :d} [:a :b :c :d :e :f :g :h])
(deftest grep-n-test
(are [n pred #_=> result]
(= (grep-n n pred [:a :b :c :d :e :f :g :h])
result)
1 #{:b} #_=> [:a :b :c]
1 #{:b :d} #_=> [:a :b :c :d :e]
1 #{:b :g} #_=> [:a :b :c :f :g :h]
3 #{:d} #_=> [:a :b :c :d :e :f :g]
2 #{:c :f} #_=> [:a :b :c :d :e :f :g :h]
))
(test/successful? (test/run-tests))
KG5zIGNsb2p1cmFjaC5jb3JlCiAgKDpyZXF1aXJlIFtjbG9qdXJlLnRlc3QgOmFzIHRlc3QgOnJlZmVyIFtkZWZ0ZXN0IHRlc3RpbmcgaXMgYXJlXV0pKQoKKGRlZm4gZ3JlcC1uIFtuIHByZWQgY29sbF0KICAoLT4+IGNvbGwKICAgICAgIChtYXAtaW5kZXhlZCAoZm4gW2kgeF0gKGNsb2p1cmUubGFuZy5NYXBFbnRyeS4gaSB4KSkpCiAgICAgICAocGFydGl0aW9uICgtPiBuICgqIDIpIGluYykgMSkKICAgICAgIChmaWx0ZXIgIygtPiAlIChudGggbikgdmFsIHByZWQpKQogICAgICAgKGFwcGx5IGNvbmNhdCkKICAgICAgIGRpc3RpbmN0CiAgICAgICAobWFwIHZhbCkpKQoKOzsgKGdyZXAtbiAxICN7OmIgOmR9IFs6YSA6YiA6YyA6ZCA6ZSA6ZiA6ZyA6aF0pCgooZGVmdGVzdCBncmVwLW4tdGVzdAogIChhcmUgW24gcHJlZCAjXz0+IHJlc3VsdF0KICAgICg9IChncmVwLW4gbiBwcmVkIFs6YSA6YiA6YyA6ZCA6ZSA6ZiA6ZyA6aF0pCiAgICAgICByZXN1bHQpCgogICAgMSAjezpifSAgICAjXz0+IFs6YSA6YiA6Y10KICAgIDEgI3s6YiA6ZH0gI189PiBbOmEgOmIgOmMgOmQgOmVdCiAgICAxICN7OmIgOmd9ICNfPT4gWzphIDpiIDpjIDpmIDpnIDpoXQogICAgMyAjezpkfSAgICAjXz0+IFs6YSA6YiA6YyA6ZCA6ZSA6ZiA6Z10KICAgIDIgI3s6YyA6Zn0gI189PiBbOmEgOmIgOmMgOmQgOmUgOmYgOmcgOmhdCiAgICApKQoKKHRlc3Qvc3VjY2Vzc2Z1bD8gKHRlc3QvcnVuLXRlc3RzKSkK