100 ' Kombinationen-Errater2, anwendbar nach dem PERSONA-Prinzip, 110 ' ebenso fr Mastermind und Logic-5 120 DEFINT A-Z 130 RANDOMIZE TIMER 140 : 150 ' Eingaben 160 : 170 INPUT "Anzahl m”gliche Zust„nde pro Element";AK 180 IF AK<=0 THEN PRINT "Unm”gliche Eingabe!":GOTO 170 190 IF AK=1 THEN PRINT "Hier weiss ich ja die L”sung sofort!":GOTO 170 200 INPUT "Anzahl Elemente";AE 210 IF AE<=0 THEN PRINT "Falsche Eingabe!":GOTO 200 220 IF AK"j" AND A$<>"J" AND A$<>"n" AND A$<>"N":A$=INKEY$:WEND 260 PRINT CHR$(ASC(A$)AND 223) 270 WIEMOE=A$="j" OR A$="J" 280 PRINT "Wird auch die Anzahl der in der L”sung vorkommenden Elemente" 290 PRINT "angegeben? (J/N) "; 300 A$="" 310 WHILE A$<>"j" AND A$<>"J" AND A$<>"n" AND A$<>"N":A$=INKEY$:WEND 320 PRINT CHR$(ASC(A$)AND 223) 330 VORK=A$="j" OR A$="J" 340 : 350 ' Vorbereiten 360 : 370 IF WIEMOE THEN ATHEO!=INT(CSNG(AK)^CSNG(AE)+.5):GOTO 420 380 ATHEO!=1! 390 FOR I=AK TO AK-AE+1 STEP -1 400 ATHEO!=ATHEO!*CSNG(I) 410 NEXT I 420 IF ATHEO!>32768.5 THEN PRINT "Die eingegebenen Werte gehen ber meine Rechenkapazit„t aus!":GOTO 170 430 NOCHMM1=CINT(ATHEO!-1!) 435 ATHE=NOCHMM1 440 DIM X(NOCHMM1),H(AE-1),J(AE-1),K(AE-1),L(AE-1),N(AK-1) 450 : 460 ' Raten 470 : 480 T=CINT(INT(CSNG(NOCHMM1+1)*RND)) 490 W=-1 500 FOR Y=-1 TO T-1 510 W=W+1:WHILE X(W):W=W+1:WEND 520 NEXT Y 530 GOSUB 2000 540 PRINT "Mein Vorschlag: "; 550 GOSUB 2500 560 BEEP 570 PRINT 580 IF NOT VORK THEN B=AE:GOTO 610 590 INPUT "Wieviele Buchstaben kommen in der L”sung vor";B 600 IF B<0 OR B>AE THEN PRINT "Falsche Eingabe!":GOTO 590 610 INPUT "Wieviele Buchstaben stimmen berein";A 620 IF A<0 OR A>B THEN PRINT "Falsche Eingabe!":GOTO 610 625 IF A=AE THEN NOCHMM1=0:GOTO 1020 630 FOR I=0 TO AE-1 640 L(I)=H(I) 650 NEXT I 660 IF VORK THEN 790 670 FOR I1=-1 TO ATHE-1 680 I=I1+1 690 IF X(I) THEN 770 700 W=I 710 GOSUB 2000 720 D=0 730 FOR J=0 TO AE-1 740 IF H(J)=L(J) THEN D=D+1 750 NEXT J 760 IF D<>A THEN X(I)=-1:NOCHMM1=NOCHMM1-1 770 NEXT I1 780 GOTO 1010 790 FOR I1=-1 TO ATHE-1 800 I=I1+1 810 IF X(I) THEN 1000 820 W=I 830 GOSUB 2000 840 D=0 850 FOR J=0 TO AE-1 860 J(J)=H(J)=L(J) 870 K(J)=J(J):IF J(J) THEN D=D+1 880 NEXT J 890 U=D 900 FOR J=0 TO AE-1 910 IF J(J) THEN 980 920 V=0 930 FOR K=0 TO AE-1 940 IF J(K)OR K(K) OR V THEN 970 950 IF H(J)<>L(K) THEN 970 960 U=U+1:V=-1:K(K)=-1 970 NEXT K 980 NEXT J 990 IF U<>B OR D<>A THEN X(I)=-1:NOCHMM1=NOCHMM1-1 1000 NEXT I1 1010 : 1020 IF NOCHMM1>0 THEN 480 1030 IF NOCHMM1 THEN 1130 1040 IF A=AE THEN PRINT "Danke, ich hab's erraten!":GOTO 1120 1045 PRINT "Moment mal, hab gleich die richtige L”sung ..." 1050 W=0 1060 WHILE X(W):W=W+1:WEND 1070 GOSUB 2000 1080 PRINT "Sie lautet: "; 1090 GOSUB 2500 1100 PRINT 1110 PRINT "Einverstanden?" 1120 GOTO 1150 1130 PRINT "Rck raus! Du hast mich beschissen!!" 1140 PRINT "Mit diesen Antworten findet man keine richtige L”sung." 1150 END 1160 : 2000 IF WIEMOE THEN 2160 2010 T=W 2020 FOR M=0 TO AK-1 2030 N(M)=0 2040 NEXT M 2050 FOR M=AK TO AK-AE+1 STEP -1 2060 U=T MOD M 2070 V=-1 2080 FOR N=0 TO U 2090 V=V+1:WHILE N(V):V=V+1:WEND 2100 NEXT N 2110 N(V)=-1 2120 H(AK-M)=V 2130 T=T\M 2140 NEXT M 2150 RETURN 2160 T=W 2170 FOR M=0 TO AE-1 2180 H(M)=T MOD AK 2190 T=T\AK 2200 NEXT M 2210 RETURN 2500 FOR I=0 TO AE-1 2510 PRINT CHR$(65+H(I)); 2520 NEXT I 2530 RETURN