 
   (if (empty? (state true))
     {:best-move [(long (/ grid-width 2)) (long (/ grid-height 2))]}
-    (if (and (is-terminal-state? state)
-             (is-it-a-win? grid-width grid-height state))
-      (let [who-wins? (if (is-it-a-win? grid-width grid-height state)
-                        (not is-first-player)
-                        nil)]
+    (if (and (is-terminal-state? state))
         {:best-move  (state :last-move)
-         :best-value (state :heuristic-result)
-         :who-win?   who-wins?})
+         :best-value (state :heuristic-result)}
 
       (if (= max-depth 0)
         {:best-move  (state :last-move)

    (if (or
          (empty? left-part)
          (and prev-left-is-dead prev-right-is-dead))
      (if (and (not= prev-left-streak-type prev-right-streak-type)
               (not= prev-left-streak-type :wall)
               (not= prev-right-streak-type :wall))
        ; Types differents
        (let [opl (if (= :min prev-left-streak-type) + +)
              opr (if (= :min prev-right-streak-type) + +)]
          (+
            (opl
              (cond
                (or (= :wall prev-left-streak-type) (= :empty prev-left-streak-type)) 0

                (= 4 prev-left-direct-streak) Double/POSITIVE_INFINITY
                (and

                               Double/NEGATIVE_INFINITY
                               Double/POSITIVE_INFINITY
                               got-time?
                               is-first-player
                               deepness         ; Steps
                               grid-width grid-height)]
        (when (not (empty? (point :best-move)))
