(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)))
(deftest grep-n-test
(is (= '(0) (grep-n 1 #{0} (range 1))))
(is (= '(0 1 2) (grep-n 2 #{2} (range 3)))))
;; hack :)
(defn grep-n-hack [n pred coll]
(->> (concat (repeat n ::nil) coll (repeat n ::nil))
(map-indexed (fn [i x] (clojure.lang.MapEntry. i x)))
(partition (-> n (* 2) inc) 1)
(filter #(some-> % (nth n) val pred))
(apply concat)
distinct
(map val)
(deftest grep-n-hack-test
(is (= '(0) (grep-n-hack 1 #{0} (range 1))))
(is (= '(0 1 2) (grep-n-hack 2 #{2} (range 3)))))
(test/successful? (test/run-tests))
KG5zIGNsb2p1cmFjaC5jb3JlCiAgKDpyZXF1aXJlIFtjbG9qdXJlLnRlc3QgOmFzIHRlc3QgOnJlZmVyIFtkZWZ0ZXN0IHRlc3RpbmcgaXMgYXJlXV0pKQogCihkZWZuIGdyZXAtbiBbbiBwcmVkIGNvbGxdCiAgKC0+PiBjb2xsCiAgICAgICAobWFwLWluZGV4ZWQgKGZuIFtpIHhdIChjbG9qdXJlLmxhbmcuTWFwRW50cnkuIGkgeCkpKQogICAgICAgKHBhcnRpdGlvbiAoLT4gbiAoKiAyKSBpbmMpIDEpCiAgICAgICAoZmlsdGVyICMoLT4gJSAobnRoIG4pIHZhbCBwcmVkKSkKICAgICAgIChhcHBseSBjb25jYXQpCiAgICAgICBkaXN0aW5jdAogICAgICAgKG1hcCB2YWwpKSkKICAgICAgCihkZWZ0ZXN0IGdyZXAtbi10ZXN0CgkoaXMgKD0gJygwKSAoZ3JlcC1uIDEgI3swfSAocmFuZ2UgMSkpKSkKCShpcyAoPSAnKDAgMSAyKSAoZ3JlcC1uIDIgI3syfSAocmFuZ2UgMykpKSkpCiAKOzsgaGFjayA6KQoKKGRlZm4gZ3JlcC1uLWhhY2sgW24gcHJlZCBjb2xsXQogICgtPj4gKGNvbmNhdCAocmVwZWF0IG4gOjpuaWwpIGNvbGwgKHJlcGVhdCBuIDo6bmlsKSkKICAgICAgIChtYXAtaW5kZXhlZCAoZm4gW2kgeF0gKGNsb2p1cmUubGFuZy5NYXBFbnRyeS4gaSB4KSkpCiAgICAgICAocGFydGl0aW9uICgtPiBuICgqIDIpIGluYykgMSkKICAgICAgIChmaWx0ZXIgIyhzb21lLT4gJSAobnRoIG4pIHZhbCBwcmVkKSkKICAgICAgIChhcHBseSBjb25jYXQpCiAgICAgICBkaXN0aW5jdAogICAgICAgKG1hcCB2YWwpCiAgICAgICAocmVtb3ZlICN7OjpuaWx9KSkpCgooZGVmdGVzdCBncmVwLW4taGFjay10ZXN0CgkoaXMgKD0gJygwKSAoZ3JlcC1uLWhhY2sgMSAjezB9IChyYW5nZSAxKSkpKQoJKGlzICg9ICcoMCAxIDIpIChncmVwLW4taGFjayAyICN7Mn0gKHJhbmdlIDMpKSkpKQoKKHRlc3Qvc3VjY2Vzc2Z1bD8gKHRlc3QvcnVuLXRlc3RzKSk=