1 REM Ins{nd av Jens Carlberg <6640> 1986-11-30 01.37.15 (KERMIT) 10 ! +-------------------- 20 ! ! *** STJ[RNA *** 30 ! ! 40 ! ! Ett program av Jens och Mats Carlberg 861012 50 ! ! 60 ! ! Programmet simulerar patiensen Stj{rnan. ([ven kallad klockan) 70 ! ! Patiensen g}r till som s} att man l{gger ut 12 kort, likt klockans 80 ! ! timmar, samt ett kort i mitten. Man l{gger sedan andra kort ovanp} 90 ! ! de kort man lagt ut. P} de 'klockslag' d{r man l{gger ett kort av samma 100 ! ! val|r, ex. ett ess p} klockan ett (D{r man f.| {ven b|rjar), tar man 110 ! ! upp de kort som ligger d{r och l{gger sist i leken man har kvar, samt 120 ! ! l}ter det kort man fick upp ligga kvar som markering. Man l{gger inte 130 ! ! n}got mer kort h{r. N{r alla h|gar best}r av ett kort med r{tt val|r 140 ! ! har patiensen g}tt ut. 150 ! ! 160 ! +-------------------- 170 ; CHR$(12) 180 INTEGER : EXTEND : OPTION BASE 0 190 DIM Lek$=104,H|g$(13)=104,A(51),B(51) 200 RANDOMIZE 210 H|g=0 220 ; CUR(0,0) 'Lyckade : ' Made,'Lagda : ' Made+Fail : ; 'Misslyckade : ' Fail ! CUR(3,0) 'Sortering...' SPACE$(80) 230 Lek$=SPACE$(104) 240 ! 250 ! Nollst{llning av 'leken' 260 ! 270 FOR A=0 TO 51 280 A(A)=0 290 NEXT A 300 ! 310 ! Blandningen. 52 kort sprids i tur och ordning ut p} slumpm{ssigt valda 320 ! platser som inte {r upptagna. 330 ! 340 FOR A=0 TO 51 350 Slask=INT(1+51*RND) 360 IF A(Slask) IF Slask=51 Slask=0 : GOTO 360 ELSE Slask=Slask+1 : GOTO 360 370 A(Slask)=-1 : B(A)=Slask 380 NEXT A 390 ! 400 ! De redan blandade korten omvandlas till en 'lek' som l{ttare kan tolkas 410 ! av oss. 1 till 4 representerar f{rgerna, A-M val|rerna. 420 ! 430 K=0 440 FOR A=1 TO 13 450 FOR I=1 TO 4 460 MID$(Lek$,2*B(K)+1,2)=CHR$(48+I,64+A) 470 K=K+1 480 NEXT I 490 NEXT A 500 ! 510 ! Det f|rsta kortet l{ggs ut p} h|garna. 520 ! 530 FOR A=1 TO 13 540 H|g$(A)=LEFT$(Lek$,2) : Lek$=RIGHT$(Lek$,3) 550 ; CUR(5+A,0) SPACE$(80) 560 NEXT A 570 ! 580 ! Sj{lva patiensl{ggnignen. 590 ! 600 FOR A=1 TO 13 610 L{ngd=LEN(H|g$(A)) 620 IF RIGHT$(H|g$(A),2)=CHR$(64+A) 710 630 Kort$=LEFT$(Lek$,2) 640 ON ERROR GOTO 730 650 Lek$=RIGHT$(Lek$,3) 660 IF RIGHT$(Kort$,2)=CHR$(64+A) Lek$=Lek$+H|g$(A) : H|g$(A)=Kort$ ELSE H|g$(A)=H|g$(A)+Kort$ 670 IF Lek$='' Fail=Fail+1 : GOTO 210 680 ! ; CUR(3,0) Lek$ ' ' 690 ; CUR(5+A,0) A,H|g$(A) SPACE$(L{ngd) : NEXT A 700 H|g=0 : GOTO 600 710 H|g=H|g+1 : IF H|g<13 GOTO 680 720 Made=Made+1 : GOTO 210 730 Lek$='' : RESUME 660