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.