0votos

La ruta del SENO en Haskell

por josejuan hace 6 años

Otra solución.

Determinar la posición final en base a un mapa y una ruta dada.

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
ruta p [] = [p] 
ruta p@(x, y) (d:ds) = p: ruta (x + u, y + v) ds 
  where (u, v) = [(0,1),(1,0),(0,-1),(-1,0)]!!(fromJust$elemIndex d "SENO") 
 
pos m r = if any bad r' then Nothing else Just (last r') 
  where r' = ruta (0, 0) r 
        bad (x, y) = or [x < 0, x >= (length.head) m, y < 0, y >= length m, (m!!y)!!x /= 1] 
 
 
{-- 
 
*Main> pos [[1]] "" 
Just (0,0) 
 
*Main> pos [[1,1,1,0]] "" 
Just (0,0) 
 
*Main> pos [[1,1,1,0]] "EE" 
Just (2,0) 
 
*Main> pos [[1,1,1,0]] "EEE" 
Nothing 
 
*Main> pos [[1,1,1,1]] "EEEEEE" 
Nothing 
 
*Main> pos [[1,0,1],[1,1,1]] "SEEN" 
Just (2,0) 
 
*Main> pos [[1,0,1],[1,1,1]] "SEENS" 
Just (2,1) 
 
*Main> pos [[1,1,0],[1,1,0],[0,1,0]] "SENO" 
Just (0,0) 
 
--} 

Comenta la solución

Tienes que identificarte para poder publicar tu comentario.