Benutzer-Werkzeuge

Webseiten-Werkzeuge


examples:word_scrambler

Der Wordscrambler lief in gforth. Das Beispiel am Ende der Codesequenz zeigt den Gebrauch.

\ word scrambler based on random shuffle

vocabulary scrambler
scrambler definitions 

variable seed

base @ hex 10450405 constant generator 
base !

: rnd  ( -- n )  seed @ generator UM* DROP 1+ DUP seed ! ;

: random ( n -- 0..n-1 )  rnd UM* NIP ;  

: init ( -- )
    TIME&DATE  12 * + 31 * + 24 * + 60 * + 60 * +  seed !  ;  init

: c>< ( c-addr1 c-addr2 -- ) \ character exchange
    2dup c@ ( c-addr1 c-addr2 c-addr-1 c2 )
    swap c@ ( c-addr1 c-addr2 c2 c1 )
    rot c!  ( c-addr1 c2 ) 
    swap c! ;

: cshuffle ( c-addr n -- ) \ shuffle Durstenfeld/Knuth
   BEGIN ?dup WHILE ( c-addr i )
      2dup 1- chars + >r
      2dup random chars + r>  c>< 
      1- 
   REPEAT drop ;

: scramble-word2 ( c-addr len -- ) \ some case handling included.
    dup 4 < IF 2drop exit THEN
    dup 4 = IF over char+ dup char+ c><  2drop exit THEN
    2 - swap char+ swap cshuffle ;

: scramble ( <word> -- ) 
    cr
    BEGIN 
       bl word count
       dup 
    WHILE ( c-addr len )
       2dup scramble-word2 type space
    REPEAT 
    2drop ;

words
scramble sah ein knab ein roeslein stehen
cr cr

\ study random behavior, execute serveral times.
  \ : xxx  ( -- )  0 10 do cr  i .  i random .   -1 +loop ;
  \ scramble (.) (.O) (.:O) (.:=O) (.:=#O) (.:=#*O)
examples/word_scrambler.txt · Zuletzt geändert: 2013-06-06 21:26 von 127.0.0.1