aprenda aaa ;copyright © 2005-2006 relja medic ; ;this program is free software; you can redistribute it e/ou modify ;it under the terms of the gnu general public license as published by ;the free software foundation; either version 2 of the license, ou ;(at your option) any later version. ; ;this program is distributed in the hope that it will be useful, ;but without any warranty; without even the implied warranty of ;merchantability ou fitness para a particular purpose. see the ;gnu general public license para more details. ; ;you shoutat have received a copy of the gnu general public license ;along with this program; se not, escreva aprenda the free software ;foundation, inc., 675 mass ave, cambridge, ma 02139, usa. ; ; program version 0.2 ;versão para SuperLogo 3.0e por Alexandre R Soares fim aprenda mouse :d :pos un senão :what="d [mudepos lista -2*:d+:d/4 :d*10] [mudepos lista -2*:d+:d/4 :d*:what] ul rotule :what atr "what senão :pos=10 ["d] [:pos] un mudepos lista -2*:d+:d/4 :d*:pos ul mudecl [0 0 255] rotule :what mudecl 0 fim aprenda peguedom :p :r :c (local "i "j "l "x "y) atr "y 1+inteiro((:r-1)/3) atr "x 1+inteiro((:c-1)/3) atr "l [1 2 3 4 5 6 7 8 9] para [i 1 9] [atr "l retire elem :c elem :i :p :l] para [i 1 9] [atr "l retire elem :i elem :r :p :l] para [i [1+(:x-1)*3] [:x*3]] [~ para [j [1+(:y-1)*3] [:y*3]] [atr "l retire elem :i elem :j :p :l]] envie :l fim aprenda put :d :pos :w se (e não :w="0 (e não (pri :pos)>-:d não (pri :pos)<-2*:d) (e não (ult :pos)<0 não (ult :pos)>10*:d)) [mouse :d 1+inteiro (ult :pos)/:d] se (ou (pri :pos)<0 não (pri :pos)<9*:d (ult :pos)<0 não (ult :pos)<9*:d) [pare] (local "r "c) atr "r 1+inteiro ((9*:d-ult :pos)/:d) atr "c 1+inteiro ((pri :pos)/:d) un mudexy (:c-1)*:d+:d/4 9*:d-(:r-1)*:d ul se (elem :c elem :r :p)=0 [ senão :w="d [mudecl [255 255 255] rotule (elem :c elem :r :q) mudecl [0 0 255] rotule elem :c elem :r :sol atr "p set :p :r :c elem :c elem :r :sol atr "q set :q :r :c elem :c elem :r :sol mudecl 0] [mudecl [255 255 255] rotule (elem :c elem :r :q) mudecl [183 183 183] se não :w=0 [rotule :w] atr "q set :q :r :c :w mudecl 0]] se :q=:sol [ljc esc [\ \ ] esc "Parabéns. espere 25 esc [Você conseguiu!] desativemouse espere 100 start pare] se (busque [não (busque [?="0] ?)=[]] :q)=[] [esc [Incorreto!]] fim aprenda set :p :r :c :w (local "i "sl "sr) atr "sr " atr "sl [] para [i 1 9] [senão :i=:c [atr "sr pal :sr :w] [atr "sr pal :sr elem :i elem :r :p]] para [i 1 9] [senão :i=:r [atr "sl jf :sr :sl] [atr "sl jf elem :i :p :sl]] envie :sl fim aprenda solver :p (local "i "j "k "l) para [i 1 9] [~ para [j 1 9] [se (elem :j elem :i :p)="0 [atr "l peguedom :p :i :j ~ para [k 1 [numelem :l] 1] [solver set :p :i :j elem :k :l] pare]]] atr "sol jf :p :sol fim aprenda start [:w sorteieelemento :examples] (local "i "t) atr "p :w atr "q :w atr "sol [] ljc tat dt esc [Pensando... aguarde por favor! (leva cerca de 3 segundos a 3GHz)] ;esc [Pense em um número.] espere 10 ;esc [Clique nele na coluna esquerda e depois clique no lugar que quer colocá-lo.] espere 10 ;esc [Clique com o botão direito para tirá-lo.] espere 10 ;esc [Use "d" para obter uma dica.] monotarefa atr "t tempomili solver :w mo (sn [criado em] (tempomili-:t)/1000 [segundos.]) multitarefa se (numelem :sol)>1 [esc [ERRO! Sudoku tem mais de uma solução!] espere 180 start pare] se (numelem :sol)=0 [esc [ERRO! Sudoku não encontra soluções!] espere 180 start pare] atr "sol pri :sol esc [Pense em um número.] espere 10 esc [Clique nele na coluna esquerda e depois clique no lugar que quer colocá-lo.] espere 10 esc [Clique com o botão direito para tirá-lo.] espere 10 esc [Use "d" para obter uma dica.] mudefontejanelagráfica [[arial] 30 0 0 900 0 0 0 0 0 0 0 0] table 30 pd 90 para [i 1 9] [para [j 1 9] [se não (elem :j elem :i :p)=0 [un mudexy (:j-1)*30+30/4 9*30-(:i-1)*30 ul rotule elem :j elem :i :p]]] ativemouse [(put 30 posmouse :what)] [] [] [(put 30 posmouse 0)] [] fim aprenda table :d repita 9[repita 9[repita 4[pf :d pd 90] pd 90 pf :d pe 90] pe 90 pf 9*:d pd 90 pf :d] pt 9*:d mudeesp 3 repita 3[repita 3[repita 4[pf 3*:d pd 90] pd 90 pf 3*:d pe 90] pe 90 pf 9*:d pd 90 pf 3*:d] pt 9*:d mudeesp 1 un pe 90 pf :d*2 pd 90 ul repita 9[repita 4[pf :d pd 90] pf :d pd 90 pf :d/4 rotule contevezes pt :d/4 pe 90] repita 4[pf :d pd 90] pf :d pd 90 pf :d/4 mudecl [0 0 255] rotule "d mudecl 0 pt :d/4 pe 90 atr "what "d pt :d*10 fim aprenda vai start fim Atribua "iniciar [roley -135 vai] Atribua "examples [[000950400 090004001 500800302 000509203 302401908 905308000 407003009 100600070 006095000] [008790002 002003608 750082003 000000004 215407986 300000000 500260041 104300200 900048500]]