© serviceprofessionalgmbh

Der Rechner gibt eine drei- bis 9-stellige Zahl vor (wenn keine Angaben erfolgen, eine 4-stellige), welche der Spieler erraten muss. Der Spieler tippt seinen Lösungsversuch ein. Der Rechner antwortet, wie viele Ziffern an der richtigen Position stehen (Ausgabe durch entsprechend viele "x") und wie viele Ziffern zwar dabei sind, aber an der falschen Stelle stehen (Ausgabe durch entsprechend viele "o").

Ein xxo würde bedeuten: 3 Ziffern sind richtig, zwei davon stehen an der richtigen Stelle.

/* REXX
*/
arg anz
if anz < 3 ! anz > 9 then anz = 4
do forever
   v=0;zahl0="";ro=0;rz=0
   do anz /* random() kann 999999999 nicht liefert, deshalb byteweise */
      zahl0=zahl0 !! random(0,9)
   end
   do until v >= 10 ! zahl2 = zahl0
      zahl1=zahl0
      hinweis=copies("x",ro) !! copies("o",rz)
      hinweis=left(hinweis,anz,"-")
      say hinweis v+1'. Eingabe:'
      parse upper external zahl2
      do while datatype(zahl2) = char ! zahl2 > copies("9",length(zahl0))
         say 'Eingabe liegt nicht im erlaubten Bereich, wiederholen:'
         parse external zahl2
      end
      zahl2=right(zahl2,length(zahl0),0)
      v=v+1
      ro=0
      rz=0
      if zahl1=zahl2 then do /* richtig */
         select
            when v < 2 then e = 'Zufallstreffer'
            when v < 3 then e = 'Spitzenklasse'
            when v < 5 then e = 'Super'
            when v < 8 then e = 'Gut'
            otherwise       e = 'Koennte besser sein'
         end
         say e '- im' v'. Versuch.   Gratulation, Sie haben gewonnen'
      end
      else do             /* falsch  */
         do x=1 to length(zahl1)
            if substr(zahl2,x,1) = substr(zahl1,x,1) then do
               ro=ro+1
               zahl1=overlay('a',zahl1,x,1)
               zahl2=overlay('b',zahl2,x,1)
            end
         end
         do x=1 to length(zahl1)
            do y=1 to length(zahl1)
               if substr(zahl1,x,1)=substr(zahl2,y,1) then do
                  zahl1=overlay('a',zahl1,x,1)
                  zahl2=overlay('b',zahl2,y,1)
                  rz=rz+1
               end
            end
         end
         if v > 9 then say 'Hirni - erst denken dann eingeben'
      end
   end
   ant=''
   do while ant ^= 'J' & ant ^= 'N'
      say 'Ein neues Spiel (J/N):'
      pull ant
   end
   if ant = 'N' then leave
end
exit
zurück zu Fun & More