Corrig´e du DS1 d’informatique
Corrig´ e du DS1
Cases atteintes par un cavalier en p coups
Partie A – Pr´ eliminaires
A.1 a
# l e t p r i n t b o o l = f u n c t i o n t r u e −> p r i n t c h a r ‘V‘ | −> p r i n t s t r i n g ”F ” ; ; p r i n t b o o l : b o o l −> u n i t = <fun>
b
# l e t a f f i c h e b o o l ta b = l e t l = ( v e c t l e n g t h ta b − 1 ) i n f o r i = 0 t o l do
p r i n t s t r i n g ”|” ; f o r j = 0 t o l do
p r i n t b o o l t a b . ( i ) . ( j ) ; p r i n t c h a r ‘| ‘ ; done ;
p r i n t n e w l i n e ( ) ; done ; ;
a f f i c h e b o o l : b o o l v e c t v e c t −> u n i t = <fun>
A.2
# l e t r e c f i l t r e p r e d i c a t = f u n c t i o n
| [ ] −> [ ]
| ( a : : q ) when ( p r e d i c a t a ) −> a : : f i l t r e p r e d i c a t q
| : : q −> f i l t r e p r e d i c a t q ; ;
f i l t r e : ( ’ a −> b o o l ) −> ’ a l i s t −> ’ a l i s t =<fun>
A.3
# l e t i n t e r v n i = ( 0 <= i ) && ( i <= n − 1 ) ; ; i n t e r v : i n t −> i n t −> b o o l = <fun>
# l e t s e u i l n ( i , j ) = ( i n t e r v n i ) && ( i n t e r v n j ) ; ; s e u i l : i n t −> i n t ∗ i n t −> b o o l = <fun>
# l e t f i l t r e e c h i q u i e r n = f i l t r e ( s e u i l n ) ; ;
f i l t r e e c h i q u i e r : i n t −> ( i n t ∗ i n t ) l i s t −> ( i n t ∗ i n t ) l i s t = <fun>
# l e t d e p l a c e n c a s e = f i l t r e e c h i q u i e r n ( d e p l a c e t e m p c a s e ) ; ; d e p l a c e : i n t −> i n t ∗ i n t −> ( i n t ∗ i n t ) l i s t =<fun>
Partie B – Traitement fonctionnel r´ ecursif
a
# l e t f u s i o n s i m p l e e1 e2 ( i , j ) = ( e1 ( i , j ) ) o r ( e2 ( i , j ) ) ; ;
f u s i o n s i m p l e : ( ’ a ∗ ’ b −> b o o l ) −> ( ’ a ∗ ’ b −> b o o l ) −> ’ a ∗ ’ b −> b o o l =
<fun>
b
(∗ V e r s i o n non r ´e c u r s i v e t e r m i n a l e ∗)
# l e t r e c f u s i o n n o n t e r m = f u n c t i o n
| [ ] −> f a i l w i t h ”Pas de f u s i o n p o s s i b l e ”
| [ e ] −> e
| e : : q −> f u s i o n s i m p l e e ( f u s i o n n o n t e r m q ) ; ;
f u s i o n n o n t e r m : ( ’ a ∗ ’ b −> b o o l ) l i s t −> ’ a ∗ ’ b −> b o o l = <fun>
(∗ V e r s i o n r ´e c u r s i v e t e r m i n a l e ∗)
# l e t f u s i o n = l e t r e c f u s i o n t e r m a c c u = f u n c t i o n
| [ ] −> a c c u
| e : : q −> f u s i o n t e r m ( f u s i o n s i m p l e a c c u e ) q i n
f u s i o n t e r m ( f u n c t i o n ( i , j ) −> f a l s e ) ; ;
f u s i o n : ( ’ a ∗ ’ b −> b o o l ) l i s t −> ’ a ∗ ’ b −> b o o l = <fun>
B.1
# l e t e t e n d e c a s e = e c a s e o r n o t ( f i l t r e e ) ( d e p l a c e n d e c l a r e c a s e ) = [ ] ; ; e t e n d : ( i n t ∗ i n t −> b o o l ) −> i n t ∗ i n t −> b o o l = <fun>
B.2
(∗ V e r s i o n a v e c r ´e c u r s i v i t ´e c r o i s ´e e ∗)
# l e t r e c l i s t e a c c e s p = f u n c t i o n
| [ ] −> [ ]
| a : : q −> ( a c c e s s i b l e s 1 a p ) : : ( l i s t e a c c e s p q ) and
a c c e s s i b l e s 1 ( i 0 , j 0 ) = f u n c t i o n
| 0 −> ( f u n c t i o n ( i , j ) −> i = i 0 && j = j 0 )
| p −> f u s i o n ( l i s t e a c c e s ( p − 1 ) ( d e p l a c e n d e c l a r e ( i 0 , j 0 ) ) ) ; ; l i s t e a c c e s : i n t −> ( i n t ∗ i n t ) l i s t −> ( i n t ∗ i n t −> b o o l ) l i s t = <fun>
a c c e s s i b l e s 1 : i n t ∗ i n t −> i n t −> i n t ∗ i n t −> b o o l = <fun>
(∗ V e r s i o n r ´e c u r s i v e t e r m i n a l e ∗)
# l e t r e c a c c e s s i b l e s r e c e c h i q u i e r ( i 0 , j 0 ) = f u n c t i o n
| 0 −> f u s i o n s i m p l e e c h i q u i e r ( f u n c t i o n ( i , j ) −> i = i 0 && j = j 0 )
| p −> a c c e s s i b l e s r e c ( e t e n d e c h i q u i e r ) ( i 0 , j 0 ) ( p − 1 ) ; ; a c c e s s i b l e s r e c :
( i n t ∗ i n t −> b o o l ) −> i n t ∗ i n t −> i n t −> i n t ∗ i n t −> b o o l = <fun>
# l e t a c c e s s i b l e s 1 b i s c a s e = a c c e s s i b l e s r e c ( f u n c t i o n x −> x = c a s e ) c a s e ; ; a c c e s s i b l e s 1 b i s : i n t ∗ i n t −> i n t −> i n t ∗ i n t −> b o o l = <fun>
Partie C – Traitement imp´ eratif et r´ ecursif
C.1
# l e t i n i t n = make matrix n n f a l s e ; ; i n i t : i n t −> b o o l v e c t v e c t = <fun>
C.2
# l e t v a l e u r c o n f i g c a s e = c o n f i g . ( f s t c a s e ) . ( snd c a s e ) ; ; v a l e u r : ’ a v e c t v e c t −> i n t ∗ i n t −> ’ a = <fun>
(∗ ou ∗)
# l e t v a l e u r b i s c o n f i g ( i , j ) = c o n f i g . ( i ) . ( j ) ; ; v a l e u r b i s : ’ a v e c t v e c t −> i n t ∗ i n t −> ’ a =<fun>
C.3
# l e t t r a n s m i s c a s e c o n f i g = l e t n = v e c t l e n g t h c o n f i g i n n o t ( f i l t r e ( v a l e u r c o n f i g ) ( d e p l a c e n c a s e ) = [ ] ) ; ; t r a n s m i s : i n t ∗ i n t −> b o o l v e c t v e c t −> b o o l = <fun>
C.4
# l e t a t t e i n t e s c o n f i g = l e t n = v e c t l e n g t h c o n f i g i n l e t temp = i n i t n i n f o r i = 0 t o ( n − 1 ) do
f o r j = 0 t o ( n − 1 ) do
temp . ( i ) . ( j ) <− c o n f i g . ( i ) . ( j ) o r t r a n s m i s ( i , j ) c o n f i g done
done ; temp ; ;
a t t e i n t e s : b o o l v e c t v e c t −> b o o l v e c t v e c t = <fun>
C.5
# l e t r e c a c c e s s i b l e s e c h i q u i e r c a s e = f u n c t i o n
| 0 −> e c h i q u i e r . ( f s t c a s e ) . ( snd c a s e ) <− t r u e ; e c h i q u i e r
| p −> a t t e i n t e s ( a c c e s s i b l e s e c h i q u i e r c a s e ( p − 1 ) ) ; ;
a c c e s s i b l e s : b o o l v e c t v e c t −> i n t ∗ i n t −> i n t −> b o o l v e c t v e c t = <fun>
# l e t a c c e s s i b l e s 2 n = a c c e s s i b l e s ( i n i t n ) ; ;
a c c e s s i b l e s 2 : i n t −> i n t ∗ i n t −> i n t −> b o o l v e c t v e c t = <fun>
Partie D – Traitement purement imp´ eratif
D.1
# l e t e c h i q u i e r r e m p l i e c h i q u i e r =
l e t n = v e c t l e n g t h e c h i q u i e r i n
l e t temp = make matrix n n t r u e i n e c h i q u i e r = temp ; ;
e c h i q u i e r r e m p l i : b o o l v e c t v e c t −> b o o l = <fun>
(∗ Autre v e r s i o n , b i e n p l u s l o u r d e ∗)
# l e t e c h i q u i e r r e m p l i l o u r d e c h i q u i e r =
l e t temp = r e f t r u e and n = v e c t l e n g t h e c h i q u i e r i n f o r i = 0 t o ( n − 1 ) do
f o r j = 0 t o ( n − 1 ) do
temp := ! temp && e c h i q u i e r . ( i ) . ( j ) done
done ;
! temp ; ;
e c h i q u i e r r e m p l i l o u r d : b o o l v e c t v e c t −> b o o l = <fun>
D.2
# l e t a c c e s s i b l e s 3 n c a s e p =
l e t temp = r e f ( i n i t n ) and i = r e f 0 i n
! temp . ( f s t c a s e ) . ( snd c a s e ) <− t r u e ; w h i l e
( n o t ( e c h i q u i e r r e m p l i ! temp ) ) && ! i < p do
temp := a t t e i n t e s ! temp ; i := ! i + 1 done ;
! temp ; ;
a c c e s s i b l e s 3 : i n t −> i n t ∗ i n t −> i n t −> b o o l v e c t v e c t = <fun>
Partie E – Probl` emes connexes
E.1
# l e t pcoups n c a s e p = l e t temp = i n i t n i n i f p = 0 t h e n a c c e s s i b l e s 3 n c a s e p e l s e
b e g i n
f o r i = 0 t o ( n − 1 ) do
f o r j = 0 t o ( n − 1 ) do
temp . ( i ) . ( j ) <− ( a c c e s s i b l e s 3 n c a s e p ) . ( i ) . ( j )
&& no t ( a c c e s s i b l e s 3 n c a s e ( p − 1 ) ) . ( i ) . ( j ) ; done
done ; temp ; end ; ;
pcoups : i n t −> i n t ∗ i n t −> i n t −> b o o l v e c t v e c t = <fun>
E.2
# l e t c o u p s s u i v a n t s c o n f i g = l e t n = v e c t l e n g t h c o n f i g i n l e t temp = i n i t n i n f o r i = 0 t o ( n − 1 ) do f o r j = 0 t o ( n − 1 ) do
temp . ( i ) . ( j ) <− t r a n s m i s ( i , j ) c o n f i g done done ; temp ; ; c o u p s s u i v a n t s : b o o l v e c t v e c t −> b o o l v e c t v e c t = <fun>
# l e t r e c p o s i t i o n s p o s s i b l e s e c h i q u i e r c a s e = f u n c t i o n
| 0 −> e c h i q u i e r . ( f s t c a s e ) . ( snd c a s e ) <− t r u e ; e c h i q u i e r
| p −> c o u p s s u i v a n t s ( p o s i t i o n s p o s s i b l e s e c h i q u i e r c a s e ( p − 1 ) ) ; ; p o s i t i o n s p o s s i b l e s : b o o l v e c t v e c t −> i n t ∗ i n t −> i n t −> b o o l v e c t v e c t =
<fun>
# l e t a p r e s p c o u p s n = p o s i t i o n s p o s s i b l e s ( i n i t n ) ; ;
r e s u l t p o s : i n t −> i n t ∗ i n t −> i n t −> b o o l v e c t v e c t = <fun>
(∗ R ´e s u l t a t s ∗)
(∗ F o n c t i o n de c o n v e r s i o n de l a p r e m i`e r e v e r s l a s e c o n d e m o d ´e l i s a t i o n ∗)
# l e t c o n v e r t e c h i q u i e r f o n c t i o n n e l n = l e t temp = make matrix n n f a l s e i n f o r i = 0 t o ( n − 1 ) do
f o r j = 0 t o ( n − 1 ) do
temp . ( i ) . ( j ) <− e c h i q u i e r f o n c t i o n n e l ( i , j ) done
done ; temp ; ;
c o n v e r t : ( i n t ∗ i n t −> b o o l ) −> i n t −> b o o l v e c t v e c t = <fun>
(∗ Programme pour comparer l e temps d ’ e x ´e c u t i o n d e s a l g o r i t h m e s ∗)
# l e t a l g o t e m p s a l g o n c a s e p = l e t temp = s y s t i m e ( ) i n a f f i c h e b o o l ( a l g o n c a s e p ) ;
s y s t i m e ( ) −. temp ; ;
a l g o t e m p s : ( ’ a −> ’ b −> ’ c −> b o o l v e c t v e c t ) −> ’ a −> ’ b −> ’ c −> f l o a t =
<fun>
(∗ T e s t s c o r r e s p o n d a n t aux d i f f ´e r e n t e s r ´e p o n s e s ∗)
# l e t t e s t 1 = a l g o t e m p s ( f u n n c a s e p −> c o n v e r t ( a c c e s s i b l e s 1 c a s e p ) n ) ; ; t e s t 1 : i n t −> i n t ∗ i n t −> i n t −> f l o a t = <fun>
# l e t t e s t 1 b i s = a l g o t e m p s ( f u n n c a s e p −> c o n v e r t ( a c c e s s i b l e s 1 b i s c a s e p ) n ) ; ; t e s t 1 b i s : i n t −> i n t ∗ i n t −> i n t −> f l o a t =<fun>
# l e t t e s t 2 = a l g o t e m p s a c c e s s i b l e s 2 ; ;
t e s t 2 : i n t −> i n t ∗ i n t −> i n t −> f l o a t = <fun>
# l e t t e s t 3 = a l g o t e m p s a c c e s s i b l e s 3 ; ;
t e s t 3 : i n t −> i n t ∗ i n t −> i n t −> f l o a t = <fun>
(∗ Donn´ees g l o b a l e s ∗)
# l e t c o u p s = 4 and pos = ( 7 , 7 ) ; ; c o u p s : i n t = 4
pos : i n t ∗ i n t = 7 , 7
(∗ C o n f r o n t a t i o n d e s a l g o r i t h m e s p r o p o s ´e s ∗)
# t e s t 1 n g l o b a l pos c o u p s ; ;
|F|F|V|F|V|F|V|F|V|F|V|F|
|F|V|F|V|V|V|V|V|V|V|V|V|
|V|F|V|V|V|V|V|V|V|V|V|V|
|F|V|V|V|V|V|V|V|V|V|V|V|
|V|V|V|V|V|V|V|V|V|V|V|V|
|F|V|V|V|V|V|V|V|V|V|V|V|
|V|V|V|V|V|V|V|V|V|V|V|V|
|F|V|V|V|V|V|V|V|V|V|V|V|
|V|V|V|V|V|V|V|V|V|V|V|V|
|F|V|V|V|V|V|V|V|V|V|V|V|
|V|V|V|V|V|V|V|V|V|V|V|V|
|F|V|V|V|V|V|V|V|V|V|V|V|
− : f l o a t = 0 . 0 3 2
# t e s t 1 b i s n g l o b a l pos c o u p s ; ;
|F|F|V|F|V|F|V|F|V|F|V|F|
|F|V|F|V|V|V|V|V|V|V|V|V|
|V|F|V|V|V|V|V|V|V|V|V|V|
|F|V|V|V|V|V|V|V|V|V|V|V|
|V|V|V|V|V|V|V|V|V|V|V|V|
|F|V|V|V|V|V|V|V|V|V|V|V|
|V|V|V|V|V|V|V|V|V|V|V|V|
|F|V|V|V|V|V|V|V|V|V|V|V|
|V|V|V|V|V|V|V|V|V|V|V|V|
|F|V|V|V|V|V|V|V|V|V|V|V|
|V|V|V|V|V|V|V|V|V|V|V|V|
|F|V|V|V|V|V|V|V|V|V|V|V|
− : f l o a t = 0 . 1 2 5
# t e s t 2 n g l o b a l pos c o u p s ; ;
|F|F|V|F|V|F|V|F|V|F|V|F|
|F|V|F|V|V|V|V|V|V|V|V|V|
|V|F|V|V|V|V|V|V|V|V|V|V|
|F|V|V|V|V|V|V|V|V|V|V|V|
|V|V|V|V|V|V|V|V|V|V|V|V|
|F|V|V|V|V|V|V|V|V|V|V|V|
|V|V|V|V|V|V|V|V|V|V|V|V|
|F|V|V|V|V|V|V|V|V|V|V|V|
|V|V|V|V|V|V|V|V|V|V|V|V|
|F|V|V|V|V|V|V|V|V|V|V|V|
|V|V|V|V|V|V|V|V|V|V|V|V|
|F|V|V|V|V|V|V|V|V|V|V|V|
− : f l o a t = 0 . 0
# t e s t 3 n g l o b a l pos c o u p s ; ;
|F|F|V|F|V|F|V|F|V|F|V|F|
|F|V|F|V|V|V|V|V|V|V|V|V|
|V|F|V|V|V|V|V|V|V|V|V|V|
|F|V|V|V|V|V|V|V|V|V|V|V|
|V|V|V|V|V|V|V|V|V|V|V|V|
|F|V|V|V|V|V|V|V|V|V|V|V|
|V|V|V|V|V|V|V|V|V|V|V|V|
|F|V|V|V|V|V|V|V|V|V|V|V|
|V|V|V|V|V|V|V|V|V|V|V|V|
|F|V|V|V|V|V|V|V|V|V|V|V|
|V|V|V|V|V|V|V|V|V|V|V|V|
|F|V|V|V|V|V|V|V|V|V|V|V|
− : f l o a t = 0 . 0 (∗ T e s t de pcoups ∗)
# f o r i = 0 t o 4 do a f f i c h e b o o l ( pcoups 8 ( 7 , 7 ) i ) ; p r i n t n e w l i n e ( ) done ; ;
|F|F|F|F|F|F|F|F|
|F|F|F|F|F|F|F|F|
|F|F|F|F|F|F|F|F|
|F|F|F|F|F|F|F|F|
|F|F|F|F|F|F|F|F|
|F|F|F|F|F|F|F|F|
|F|F|F|F|F|F|F|F|
|F|F|F|F|F|F|F|V|
|F|F|F|F|F|F|F|F|
|F|F|F|F|F|F|F|F|
|F|F|F|F|F|F|F|F|
|F|F|F|F|F|F|F|F|
|F|F|F|F|F|F|F|F|
|F|F|F|F|F|F|V|F|
|F|F|F|F|F|V|F|F|
|F|F|F|F|F|F|F|F|
|F|F|F|F|F|F|F|F|
|F|F|F|F|F|F|F|F|
|F|F|F|F|F|F|F|F|
|F|F|F|F|F|V|F|V|
|F|F|F|F|V|F|V|F|
|F|F|F|V|F|F|F|V|
|F|F|F|F|V|F|F|F|
|F|F|F|V|F|V|F|F|
|F|F|F|F|F|F|F|F|
|F|F|F|F|V|F|V|F|
|F|F|F|V|F|V|F|V|
|F|F|V|F|V|F|V|F|
|F|V|F|V|F|V|F|V|
|F|F|V|F|V|F|F|F|
|F|V|F|V|F|F|F|V|
|F|F|V|F|V|F|V|F|
|F|F|V|F|V|F|V|F|
|F|V|F|V|F|V|F|V|
|V|F|V|F|V|F|V|F|
|F|V|F|V|F|F|F|F|
|V|F|V|F|F|F|F|F|
|F|V|F|F|F|V|F|F|
|V|F|V|F|F|F|V|F|
|F|V|F|F|F|F|F|F|
− : u n i t = ( )
(∗ T e s t de a p r e s p c o u p s ∗)
# a f f i c h e b o o l ( a p r e s p c o u p s 12 ( 7 , 7 ) 9 ) ; ;
|F|V|F|V|F|V|F|V|F|V|F|V|
|V|F|V|F|V|F|V|F|V|F|V|F|
|F|V|F|V|F|V|F|V|F|V|F|V|
|V|F|V|F|V|F|V|F|V|F|V|F|
|F|V|F|V|F|V|F|V|F|V|F|V|
|V|F|V|F|V|F|V|F|V|F|V|F|
|F|V|F|V|F|V|F|V|F|V|F|V|
|V|F|V|F|V|F|V|F|V|F|V|F|
|F|V|F|V|F|V|F|V|F|V|F|V|
|V|F|V|F|V|F|V|F|V|F|V|F|
|F|V|F|V|F|V|F|V|F|V|F|V|
|V|F|V|F|V|F|V|F|V|F|V|F|
− : u n i t = ( )