[Tiptoi] Instruktions Code "FF00" erzeugt Zufallszahlen.

Jürg Wullschleger wullschleger at gmail.com
Sa Jan 9 20:47:33 CET 2016


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




Mehr Informationen über die Mailingliste tiptoi