[Tiptoi] Instruktions Code "FF00" erzeugt Zufallszahlen.

Jürg Wullschleger wullschleger at gmail.com
So Jan 10 14:53:31 CET 2016


Update:

Es ist nicht so zufaelling wie ich dachte. Die Instruktion
 ?($a,<value>) (00 FF)
gibt einen internen Wert N modulo <value> aus, und der Wert N wird
intern hochgezaehlt. Wie N genau hochgezaehlt wird weiss ich nicht. Es
scheint nicht einfach ein interner Timer zu sein. Das Ausfuehren der
Instruktion in der selben Zeile:

 ?($a,65535) (00 FF) P(blob) ?($register,65535) (00 FF) $register-=$a

gibt immer den selben Wert, d.h. $register wird hier am Ende immer 0 sein.

Hier ist mein Testprogram:

product-id: 42
media-path: Audio/digits/%s
welcome: blob, blob
init: $mod:=11
scripts:
  10204:
    - ?($register,1024) (00 FF)
  10205:
    - ?($register,2048) (00 FF)
  10206:
    - ?($register,65535) (00 FF)
  10207:
    - ?($a,65535) (00 FF) P(blob) ?($register,65535) (00 FF) $register-=$a
  10208:
    - $mod==11? ?($a,65535) (00 FF) P(blob) $mod:=0 J(10208)
    - $mod==0? $mod:=11 ?($register,65535) (00 FF) $register-=$a
  10239:
    - $register==0? $mod==11? P(english_0) $mod:=11
    - $register>0? $mod==11? $mod:=$register $mod%=10 $register/=10 J(10239)
    - $mod==0? P(english_0) $mod:=11 J(10239)
    - $mod==1? P(english_1) $mod:=11 J(10239)
    - $mod==2? P(english_2) $mod:=11 J(10239)
    - $mod==3? P(english_3) $mod:=11 J(10239)
    - $mod==4? P(english_4) $mod:=11 J(10239)
    - $mod==5? P(english_5) $mod:=11 J(10239)
    - $mod==6? P(english_6) $mod:=11 J(10239)
    - $mod==7? P(english_7) $mod:=11 J(10239)
    - $mod==8? P(english_8) $mod:=11 J(10239)
    - $mod==9? P(english_9) $mod:=11 J(10239)

Wenn ich abwechselnd 10206 und 10239 antippe, kriege ich folgende Zahlenreihe:
0507 0842 1163 1583 2003
wie man sieht wird die Zahl immer groesser, und die Abstaende sind
mehr oder weniger gleich gross. Wenn ich dann abschalte und wieder
einschalte, kriege ich:
0541 0882 1207 1668 2138

Das heisst Output scheint wenige Bits (vielleicht 4?) an Zufaelligkeit
zu generieren, aber mehr nicht.

Wenn ich abwechselnd 10208 und 10239 antippe, kriege ich folgende Zahlenreihe:
031 029 031 026 031 032 031 032 032
D.h. nach einem jump wird N neu gesetzt. Aber hier wird nur sehr
wening Zufaelligkeit generiert, vielliecht 1 Bit.
Wenn ich das P(blob) aus dem Script des Codes 10206 herausnehme, dann
bekomme ich die Reihe
0 0 1 2 2 1 1 2 2 2 2 1 1 6 0 2 5 11 0 2 2 2 1 0

Juerg



2016-01-10 8:33 GMT+01:00 Ulrich Sibiller <ulrich.sibiller at gmail.com>:
> Klasse! Das ist IMHO ein sehr wichtiger Baustein. Zufallszahlen waren bisher
> nur sehr aufwendig zu erzeugen.
>
> Uli
>
> Vom Smartphone gesendet.
> ________________________________
> Von: Jürg Wullschleger
> Gesendet: ‎10.‎01.‎2016 01:24
> An: tiptoi at lists.nomeata.de
> Betreff: [Tiptoi] Instruktions Code "FF00" erzeugt Zufallszahlen.
>
> Hallo zusammen,
>
> Ich habe seit 2 Wochen ein tiptoi stift, und habe nun begonnen ein
> bisschen mit dem tttool herum zu spielen.
>
> Ich hab auch was neues herausgefunden: die Instruktion
>
> ?($register,<value>) (00 FF)
>
> generiert eine Zufallszahl zwischen 0 und <value> (inklusive 0 und
> <value>) und speichert es in $register.
>
> Diese Interpretation macht auch einigermassen Sinn in "Puzzle
> Kinderarzt", wo diese Instruktion gebraucht wird: (aus dem
> mailing-listen archiv, 14 Jan 2015)
>
>   12845:
>   - $0==0? $6==0? ?($6,1) (00 FF) $6+=1 J(12845)
>   - $0==0? $6==1? ?($6,1) (00 FF) $6+=1 ?($0,2) (E0 FF)
>   - $0==0? $6==2? ?($6,1) (00 FF) $6+=1 P(99)
>   - $0==1?
>   12922:
>   - $0==0? $10==0? ?($10,1) (00 FF) $10+=1 J(12922)
>   - $0==0? $10==1? ?($10,1) (00 FF) $10+=1 ?($0,2) (E0 FF)
>   - $0==0? $10==2? ?($10,1) (00 FF) $10+=1 ?($0,65535) (E1 FF)
>
> Die Abfolge "?($6,1) (00 FF) $6+=1" generiert eine Zufallszahl
> zwischen 1 und 2, welche dann benutzt wird, um eine von zwei
> instruktionen auszufuehren.
>
> Hier ist ein test fuer die Instruktion:
>
> product-id: 42
> media-path: Audio/digits/%s
> welcome: blob
> scripts:
>   10208:
>     - ?($register,9) (00 FF) P(blob)
>   10239:
>     - $register==0? P(blob) P(english_0)
>     - $register==1? P(blob) P(english_1)
>     - $register==2? P(blob) P(english_2)
>     - $register==3? P(blob) P(english_3)
>     - $register==4? P(blob) P(english_4)
>     - $register==5? P(blob) P(english_5)
>     - $register==6? P(blob) P(english_6)
>     - $register==7? P(blob) P(english_7)
>     - $register==8? P(blob) P(english_8)
>     - $register==9? P(blob) P(english_9)
>     - $register>10? P(blob) P(blob)
>
> Die generierten Zufallszahlen sind:
> 1 9 7 7 7 7 2 7 7 2 7 7 2 7 6 7 1 7 2 7 7 6 6 2 7 7 2
> 3 7 7 2 3 2 2 2 7 7 7 2 7 7 1 7 2 7 2 6 7 2 7 2 6 6 7
> 3 1 6 6 2 6 7 2 7 7 7 7 7 7 2 2 7 7 2 7 2 2 7 2 7 2 2
> 7 0 1 7 1 7 7 2 1 7 9 7 7 7 2 7 7 7 7 1 7 7 2 7 1 7 7
>
> Wie man sieht ist die Zufaelligkeit nicht wirklich uniform: viel zu
> viele 7, gar keine 4, 5 oder 8.
>
> Wenn man etwas uniformeres braucht, muss man also wohl:
>
>   10208:
>     - ?($register,14999) (00 FF) $register%=10 P(blob)
>
> oder, falls das auch nicht wirklich uniform ist, gar:
>
>   10208:
>     - $count==0? P(blob) $register:=0 $count+=1 J(10208)
>     - $count<50? ?($rand,6) (00 FF) $register+=$rand $count+=1 J(10208)
>     - $count>=50? $register%=10 $count:=0 P(blob)
>
> ausfuehlren. leider ist dies 2. Variante ziemlich langsam. Hier muss
> man wohl nicht ein bisschen ausprobieren, was am besten ist.
>
> Fuer einigermassen uniforme Zufallszahlen (z.b. fuer ein Wuerfelspiel)
> ist es wohl
> am besten, diese Funktion nur zu Beginn des Programms aufzurufen, um einen
> Seed mit genuegend Entropie zu generieren. Und benutzt dann einen einfachen
> Pseudozufallsgenerator.
>
> Viele Gruesse
>
> Juerg
>
> --
> tiptoi mailing list
> tiptoi at lists.nomeata.de
> https://lists.nomeata.de/mailman/listinfo/tiptoi




Mehr Informationen über die Mailingliste tiptoi