PiF 6

  <terug>
De antwoorden op PiF 5. Lees dit als een 'log' van de zitting op 13 oktober 2007.


>SYMBOOL

 : >symbool1 ( icode -- ch )
   dup 9 < if [char] 1 + exit then
   drop [char] :   ;

Dat kan korter:

 : >symbool2 ( icode -- ch )   9 min   [char] 1   + ;


Nu met de symbolen 'MAISFORTH' create symbolen 9 allot align s" MAISFORTH" symbolen swap move : >symbool3 ( icode -- ch ) dup 9 < if symbolen + c@ exit then drop [char] : ; Ook dat kan korter: create symbolen 9 allot char : c, \ teken voor lege vakjes align s" MAISFORTH" symbolen swap move : >symbool4 ( icode -- ch ) 9 min symbolen + c@ ;


.SDK

 create (sdk   81 allot   align

 : .vakje ( nr -- )   space   (sdk + c@ >symbool emit   space ;

 : .sdk1 ( -- )
   81 0
   do   i
        dup 27 mod 0= if cr cr    then
        dup  9 mod 0= if cr cr    then
        dup  3 mod 0= if 3 spaces then
        .vakje
   loop ;

MOD 0= IF wordt hierbij 81*3 = 243 maal uitgevoerd.


 : .sdk2 ( -- )
   81 0
   do   i
        dup  3 mod 0= if
        dup  9 mod 0= if
        dup 27 mod 0= if    cr cr then
                            cr cr then
                         3 spaces then
        .vakje
   loop ;

MOD 0= IF wordt nu 81+27+9 = 108 maal uitgevoerd.


 : .sdk3 ( -- ) 0    \ teller
            3 0 do
   cr cr    3 0 do
   cr cr    3 0 do
   3 spaces 3 0 do   dup .vakje 1+
                loop loop loop loop
   drop ;

MOD 0= IF komt helemaal niet meer voor.


Het uiteindelijke resultaat

 anew -sdk

 \ : align ; immediate

      3 constant zb   \ Zijde van een blok, 3
zb zb * constant z    \ Zijde van de sudoku, 9
z  z  * constant zz   \ Totaal aantal vakjes, 81


create (symbolen z allot char : c, \ teken voor lege vakjes align : !symbolen ( adr len -- ) z min (symbolen swap move ; s" 123456789" !symbolen \ s" MAISFORTH" !symbolen : >symbool ( icode -- ch ) z min (symbolen + c@ ;
create (sdk zz allot align : .vakje ( nr -- ) space (sdk + c@ >symbool emit space ; : .sdk ( -- ) 0 \ teller zb 0 do cr cr zb 0 do cr cr zb 0 do 3 spaces zb 0 do dup .vakje 1+ loop loop loop loop drop ;

 
Groeten,
A.N.
  <terug>