1votos

Contador Binario (Backtracking básico) en JavaScript

por josejuan hace 5 años

Por enredar un rato, la misma solución que en Haskell pero con Javascript (currificación y arrastre del estado monádico como en Haskell).

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
22
23
24
25
26
27
28
// Para detalles ver la solución explicada de Haskell 
 
function f(h) { 
    return function (s) { 
        return [].concat.apply([], [h([0].concat(s)), h([1].concat(s))]) 
 
function z(s) { 
 return [s] 
 
function bits(n) { 
  return Array(n + 1).join(' ').split('').reduce(function (b) { return f(b) }, z) ([]) 
 
bits(3).forEach(function(x) { console.log(x.join('')) }) 
 
/* 
000 
100 
010 
110 
001 
101 
011 
111 
*/ 
3 comentarios
0votos

Escrito por adr hace 5 años

personalmente este ejemplo en js me gusta.
0votos

Escrito por adr hace 5 años

pero josejuan, no lo da ordenado :/
0votos

Escrito por josejuan hace 5 años

¡Claro que sí! sólo tienes que leer de izq a der :D :D :D

// o escribir
return [].concat.apply([], [h(s.concat([0])), h(s.concat([1]))])

:D :D :D

Comenta la solución

Tienes que identificarte para poder publicar tu comentario.