Playing with random ZEROs and ONEs

Discussion forum for all Windows batch related topics.

Moderator: DosItHelp

Post Reply
Message
Author
sst
Posts: 88
Joined: 12 Apr 2018 23:45

Playing with random ZEROs and ONEs

#1 Post by sst » 08 May 2018 06:25

I was curios how much can we go random in batch by combining inaccurate timing which is inherent in human with accuracy and predictability of a computer.
So I started playing a little with keyboard and timer in batch.

So here it is
Image

If the above image makes you carious enough then this is the code. Just don't press keys too quickly :D

Code: Select all

@echo off
setlocal EnableDelayedExpansion
mode con cols=145 lines=40
cls
set "TIME="
for /F "tokens=1,3 delims=0123456789" %%A in ("%TIME: =0%") do set "time.delims=%%A%%B"
set "HEX.Digits=0123456789abcdef"
set "Winner[0]=None"
set "Winner[1]=Zero"
set "Winner[2]=One"
set /a "hex4.val=hex4.bits=one=zero=bits=0"
title Press any key to get next bit
for /L %%A in () do (
    pause>nul
    rem ping -n 2 127.0.0.1>nul
    for /F "tokens=4 delims=%time.delims%" %%A in ("!TIME: =0!") do set "centsec=%%A"
    set /a "bit=!centsec:~1,1!&1, zero+=^!bit, one+=bit, bits+=1"
    set /a "dif=zero-one, sign=((dif&0x80000000)>>31)&1, dif*=1-2*sign, Winner=(^!^!dif)*(sign+1)"
    set /a "izr=(zero*100)/bits, fzr=((zero*100)%%bits)*100/bits"
    set /a "or=10000-100*izr-fzr, ior=or/100, for=or%%100"
    if /i !fzr! LEQ 9 set "fzr=0!fzr!
    if /i !for! LEQ 9 set "for=0!for!
    
    for %%i in (!Winner!) do set "Winner=!Winner[%%i]!"

    set /a "hex128.bits=(bits-1)%%128"
    if /i !hex128.bits! EQU 0 (
        set "hex128=#"
    ) else if /i !hex4.bits! EQU 0 (
        set "hex128=#!hex128!"
    )
    set /a "hex4.val+=bit<<hex4.bits, hex4.bits=(hex4.bits+1)%%4"
    for %%i in (!hex4.val!) do set "hex128=!Hex.Digits:~%%i,1!!hex128:~1!"
    set /a "rnd=hex4.val, hex4.val*=^!^!hex4.bits, hex128.bits+=1"

    set /p "=!bit!"<nul
    set "title="
    set "title=!title!Zero: !zero!   One: !one! | Winner: !Winner!   Dif: !dif! | "
    set "title=!title!bits: !bits! | Ratio  Zero: !izr!.!fzr!%%   One: !ior!.!for!%% | "
    set "title=!title!Last 128bit Hex(LE-bits): 0x!hex128! !hex128.bits!/128 | "
    set "title=!title!Press any key to get next bit"
    title !title!
    set /a "centsec=!centsec:~0,1!*10+!centsec:~1,1!"
    set /a "kbd_delay=centsec*rnd"
    rem for /L %%A in (1,1,!kbd_delay!) do pause<nul>nul
)

Post Reply