0votos

Laberinto numérico en Haskell

por josejuan hace 2 años

Mi misma solución anterior pero "oneliner". Misma complejidad pero peor constante. Se generaliza la expansión.

Búsqueda de la longitud del camino más corto en un laberinto numérico.

1
2
3
4
5
6
7
8
9
10
11
12
13
14
-- Aplica `fs` el menor número de veces para pasar del estado `a` al estado `b` 
caminoMinimo'' :: Eq a ⇒ (a → [a]) → a → a → [a] 
caminoMinimo'' fs a b = reverse $ head $ filter ((b≡) ∘ head) $ concat $ iterate (concatMap (λxs@(x:_) → (:xs) ↥ fs x)) [[a]] 
 
 
 
-- Operaciones sobre números 
minOps :: ℤ → ℤ → [ℤ] 
minOps = caminoMinimo'' $ catMaybes ∘ λx → [𝐽 (2 × x), 𝐽 (2 + x), case x `divMod` 2 of 
                                                                    (r, 0) → 𝐽 r 
                                                                    _      → 𝑁] 
-- Operaciones sobre caracteres 
minOps' :: 𝐒 → 𝐒 → [𝐒] 
minOps' = caminoMinimo'' $ λs → [f s | c ← "ABC", f ← [filter (c≢), (c:), (⧺[c])]] 

Comenta la solución

Tienes que identificarte para poder publicar tu comentario.