Vorheriges Thema anzeigen :: Nächstes Thema anzeigen |
Autor |
Nachricht |
csde_rats

Anmeldungsdatum: 07.01.2007 Beiträge: 2292 Wohnort: Zwischen Sessel und Tastatur
|
Verfasst am: 03.11.2007, 15:09 Titel: |
|
|
Mao hat Folgendes geschrieben: | Wieder eines von AndT's genialen Programmen.  |
(Ich glaube AndT nervt die Commu inzwischen mehr als ich mit seinen Progs (falls es überhaupt möglich ist eine mischung aus scriptkiddie und spamtroll darin zu überbieten ))
(Aber jetzt wollen wir ganz schnell wieder aufhören auf AndT rumzuhacken, sonst wird nachher noch der Thread geschlossen [/keinwitz]) _________________ If hilfreicher_Beitrag then klick(location.here)
Klick |
|
Nach oben |
|
 |
Caran

Anmeldungsdatum: 11.03.2007 Beiträge: 290 Wohnort: Lörrach
|
Verfasst am: 03.11.2007, 15:23 Titel: |
|
|
nemored hat Folgendes geschrieben: | In der Mitte anfangen und dann immer halbieren. Vielleicht schaffe ich es, gleich mal einen Code einzustellen.
| Ja bitte würd mich jetzt echt interessieren. |
|
Nach oben |
|
 |
Mao
Anmeldungsdatum: 25.09.2005 Beiträge: 4409 Wohnort: /dev/hda1
|
Verfasst am: 03.11.2007, 16:46 Titel: |
|
|
Das Programm kannst du dir vllt. auch selbst schreiben, wenn man das Ganze hier noch etwas erklärt...
Nehmen wir an, du willst die Zahlen von 1 bis 64 raten lassen.
Dann wird gesagt "32". Du sagst dann z.B. "nee, kleiner". Und zack hat sich die Liste der möglichen Zahlen halbiert. Dann wird gesagt "16". Nehmen wir mal an "nee, größer". Schon wissen wir, dass es nur die Zahlen 17 bis 31 sein können. "24" -> "kleiner" -> Zahlen 17-23. "20" -> "größer" -> Zahlen 21-23. "22" -> "größer" -> Es ist Zahl 23. _________________ Eine handvoll Glück reicht nie für zwei.
--
 |
|
Nach oben |
|
 |
nemored

Anmeldungsdatum: 22.02.2007 Beiträge: 4704 Wohnort: ~/
|
Verfasst am: 03.11.2007, 20:09 Titel: |
|
|
So, tut mir leid, hatte nämlich gerade Besuch (der 10 min zu früh da war)
Code: | dim as uinteger eingabe, rate, unten=0, oben=&h7fffff
dim as ubyte zuege
print "Gebe eine Zahl von 0 bis " & &hffffff & " ein, die erraten werden soll: ";
input "", eingabe
do
rate = (oben + unten - 1)/2
zuege += 1
print "Der Computer raet " & rate;
if rate > eingabe then
print " (zu gross)"
oben = rate
elseif rate < eingabe then
print " (zu klein)"
unten = rate+1
end if
loop until rate = eingabe
print " (erraten in " & zuege & " Zuegen)"
|
oben und unten geben die Schranken an, innerhalb derer sich die zu ratende Zahl befindet. Dieser Bereich wird Schritt für Schritt eingeengt.
Ich habe den Bereich nun doch nur auf den Bereich bis 2^31-1 gesetzt statt auf den gesamten UINTEGER-Bereich, weil das Programm sonst Fehler machen kann. Ist aber kein Problem des Algorithmus, sondern eines der internen Variablenspeicherung. Damit ist die maximale Ratedauer auch auf 31 Versuche geschrumpft.
Übrigens, Caran: Im Prinzip läuft das tatsächlich wie eine BIT-weise Überprüfung ab, begonnen beim größten BIT.
edit: und natürlich habe ich Maos Posting erst nachträglich gelesen - aber ganz genau so ist es.  _________________ Deine Chance beträgt 1:1000. Also musst du folgendes tun: Vergiss die 1000 und konzentriere dich auf die 1. |
|
Nach oben |
|
 |
Caran

Anmeldungsdatum: 11.03.2007 Beiträge: 290 Wohnort: Lörrach
|
Verfasst am: 03.11.2007, 20:25 Titel: |
|
|
Naja das ist doch schon mal ne ganz coole Sache. Übrigens hat er, bei mir, für die meisten Zahlen gerade mal 23 Züge gebraucht. *respekt* |
|
Nach oben |
|
 |
|