Abt. Neue Rätselecke Nr. 5: Operator-Mix
===============================
In diesem Mathe-Rätsel soll man nur mittels dieser vier Zahlen: 1, 5, 6 und 7, auf das Ergebnis 21 kommen. Als Verknüpfung stehen einem alle Grundrechenarten +, -, *, / - auch mehrfach - sowie Klammerung ( ) zur Verfügung. Wie geht das?
Gruss
P.S.: Meine Lösung klappt nur im Interpreter!
Spoiler anzeigen
Code
WindowTitle "Neue Rätselecke Nr. 5: Operator-Kombinationen"
$IFDEF COMPILER
PRINT "\n\n F U N K T I O N I E R T N U R M I T I N T E R P R E T E R !"
WAITINPUT
END
$ENDIF
WindowStyle 24:CLS:font 2:print "\n \
In diesem Mathe-Rätsel soll man mittels der vier\n \
Zahlen 1, 5, 6 und 7 auf das Ergebnis 21 kommen. Als\n \
Verknüpfung stehen einem alle Grundrechenarten +, -, *, /\n \
auch mehrfach sowie Klammerung ( ) zur Verfügung. Wie geht das?"
Declare z$[12],z1&,z2&,z3&,z4&,o1&,o2&,o3&
Declare p1$,p2$,p3$, q1$,q2$,q3$,k&, p$,q$, zlr&
z$[2]="1":z$[3]="5":z$[4]="6":z$[5]="7"
z$[6]=" + ":z$[7]=" - ":z$[8]=" * ":z$[9]=" / "
whileloop 2,5:z1&=&Loop // Zahlenpermutation
whileloop 2,5:z2&=&Loop:case z2&=z1&:continue
whileloop 2,5:z3&=&Loop:case (z3&=z1&) OR (z3&=z2&):continue
whileloop 2,5:z4&=&Loop:case (z4&=z1&) OR (z4&=z2&) OR (z4&=z3&):continue
whileloop 6,9:o1&=&Loop // Operatorenmix
whileloop 6,9:o2&=&Loop
whileloop 6,9:o3&=&Loop
Whileloop 7:k&=&Loop // Klammerungen:
if k&=1:p1$=" ":q1$=" ":p2$=" ":q2$=" ":p3$=" ":q3$=" "
elseif k&=2:p1$="(":q1$=")":p2$=" ":q2$=" ":p3$=" ":q3$=" "
elseif k&=3:p1$="(":q1$=" ":p2$=" ":q2$=")":p3$=" ":q3$=" "
elseif k&=4:p1$=" ":q1$=" ":p2$="(":q2$=")":p3$=" ":q3$=" "
elseif k&=5:p1$=" ":q1$=" ":p2$="(":q2$=" ":p3$=" ":q3$=")"
elseif k&=6:p1$=" ":q1$=" ":p2$=" ":q2$=" ":p3$="(":q3$=")"
elseif k&=7:p1$="(":q1$=")":p2$=" ":q2$=" ":p3$="(":q3$=")"
endif
inc zlr&
p$=p1$+z$[z1&]+z$[o1&]+p2$+z$[z2&]+q1$+z$[o2&]+p3$+z$[z3&]+q2$+z$[o3&]+z$[z4&]+q3$
case (zlr&=3036) OR (zlr&=3505) OR (zlr&=3932) OR (zlr&=4401) OR (zlr&=4856) \
OR (zlr&=5304) OR (zlr&=8412) OR (zlr&=8881) OR (zlr&=9308) OR (zlr&=9777) \
OR (zlr&=10232) OR (zlr&=10680)
continue // => Division durch 0 abfangen
print zlr&;". ";p$;" = ";
::: ::: execute "print if("+p$+" = 21 ,"+p$+",\q\q)"
if zlr&=5770:beep:waitinput 30000:endif
endwhile
endwhile:endwhile:endwhile
endwhile:endwhile:endwhile:endwhile
sound 2000,35:print "\n KEINE (WEITEREN) LÖSUNGEN\n-------------------------------------";:waitinput
' Lö: 6/(1-5/7) = 21
Alles anzeigen