Piszemy generator, który pozwala nam „zgadywać” losową liczbę w dziesiętnym w zapisie binarnym. Piszemy po to, aby z niego korzystać i wyrobić w sobie naturalną umiejętność zamiany w pamięci z 10 na 0b.

Ok, najpierw generator:

 function* generateRandomBinary(min, max, zeros=false){
    while(true){
        let random = Math.random() * (max - min) + min;
        random = parseInt(random);
        yield random;
        if(zeros === false)
            yield random.toString(2);
        else
            yield `${random.toString(2)}`.padStart(Math.clz32(random), "0");
    }
  }

Czyli tak, while true znaczy zawsze będzie jakaś następna wartość. Pierwsze użycie – losuje i zwraca. Drugie użycie – już wylosowaną zwraca w postaci binarnej.

Teraz użycie:

const gen = generateRandomBinary(1, 16);

console.log(gen.next().value);

setInterval(function(){
    console.log(gen.next().value);
    setTimeout(() => console.log(gen.next().value), 0);
},5000);

Piszemy odkąd-dokąd, logujemy pierwszą liczbę. Co 5000 ms będziemy mieć wylogowanie jej wersji binarnej plus z minimalnym opóźnieniem (opóźnienie 0) wylogowanie następnej liczby dziesiętnej i dalej zgaduj binarną.

Ok, przy większych liczbach warto by było jeszcze wyświetlać co ileś spację, wyświetlać oktety i tak dalej. W JS nie mamy funkcji str_split, zaczniemy od napisania jej sobie w następnej lekcji.