0votos

Contador Binario (Backtracking básico) en Haskell

por josejuan hace 3 años

Usar la mónada listas es hacer backtracking.

Utilizando backtracking crear un contador binario de n dígitos.

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
mapM (const [0,1]) [1..n] 
 
 
 
 
 
-- Por ejemplo, directamente desde interactivo 
Prelude> let bin n = mapM (const [0,1]) [1..n] 
Prelude> bin 3 
[[0,0,0],[0,0,1],[0,1,0],[0,1,1],[1,0,0],[1,0,1],[1,1,0],[1,1,1]] 
 
-- Para imprimirlo exactamente como se pide, por ejemplo 
Prelude> mapM_ (putStrLn . concatMap show) $ bin 3 
000 
001 
010 
011 
100 
101 
110 
111 
4 comentarios
0votos

Escrito por ilopez hace 3 años

No entiendo mucho de Haskell, pero el desafío consiste en hacer una función recursiva que genere el contador binario, es decir, generar la lógica necesaria para resolver el problema no usar una función propia del lenguaje que uses que devuelve todas las combinaciones posibles.
0votos

Escrito por adr hace 3 años

No, lo que pide este señor es un sistema de árbol o backtraking para obtener los posibles binarios.
A mí me costó un siglo entender el enunciado porque pensé que había trampa xD

Texto del enlace
0votos

Escrito por josejuan hace 3 años

@ilopez y @adr, eso es precisamente (es recursiva y revisa el árbol de backtracking) lo que hace ese código XD XD XD
0votos

Escrito por adr hace 3 años

Sí, pero CREO que lo que se pide es que halles el árbol, y después busques los posibles. Tú en ese caso ya has puesto las posibilidades. Por así decirlo has dado ya "el mapita" por el cual moverse, no se ha generado. ¡OJO! creo que se refiere a eso. Que el autor explique lo que pide, y si no es como yo digo, chapó.

Comenta la solución

Tienes que identificarte para poder publicar tu comentario.