Seite 7 von 9

Verfasst: Samstag 10. Januar 2009, 17:54
von hendrikS
HWK hat geschrieben:So, ich habe mich einmal gequält: Hier befindet sich eine Version in 16-Bit-X86-Assembler. Turbo-Assembler erzeugt hieraus eine COM-Datei (d.h. für DOS) mit einer Länge von 281 Bytes. Wer keinen Assembler installiert hat, kann die fertige COM-Datei mit diesem Python-Script erstellen.
MfG
HWK
Schade, daß Dein Code so mies kommentiert ist.

Verfasst: Samstag 10. Januar 2009, 19:16
von BlackJack
Wieso dass? Hat man die DOS-Aufrufe nicht im Kopf? :-)

Verfasst: Samstag 10. Januar 2009, 19:24
von hendrikS
Die Generierung von Zufallszahlen ist ohne Bibliotheken kein triviales Problem. Das ist das einzige was interessant wäre.
Dazu könnte/müßte man eigentlich mal einen separaten Thread aufmachen.

Verfasst: Samstag 10. Januar 2009, 19:31
von HWK
Die Zufallszahl bestimme ich einfach aus der Systemuhr (int 1Ah) modulo 100 plus 1 (Programmteil von _start: bis next:). Übrigens: Der Code ist nicht mies kommentiert, sondern gar nicht.:lol:
MfG
HWK

Verfasst: Samstag 10. Januar 2009, 19:38
von numerix
Für 281 Bytes braucht es doch auch keinen Kommentar ...

Verfasst: Samstag 10. Januar 2009, 19:45
von BlackJack
@hendrikS: Das kommt auf die Qualität der Zufallszahlen an. Für so einfache Spiele reicht auch ein einfacher Algorithmus.

Der vom cc65 C-Crosscompiler sieht nach Forth (16-Bit volksFORTH) portiert so aus:

Code: Alles auswählen

\ Random Numbers

\ The algorithm is ported from cc65.

| create seed 5 allot

: seed! ( n -- )
  seed 5 erase  seed 3+ ! ;

: seed@ ( -- n ) seed 3+ @ ;

: random ( -- n )
  seed 1+ 2@  seed 2@ d+
  $3.1415927 d+  seed 1+ 2!  seed 2+ @ ;

: randomize ( -- )
  $d012 c@ 256 *  $a0 c@ or  seed! ;

: randint ( max -- n ) random swap mod ;

1 seed!
`randomize` ist plattformspezifisch, das mixt auf dem C64 die aktuelle Rasterzeile, die der Videochip gerade aufbaut mit einem Softwaretimer.

Verfasst: Samstag 10. Januar 2009, 20:00
von hendrikS
Ja, die Lösung ist auf jeden Fall ausreichend und eigentlich auch ganz pfiffig. Assembler ist halt trotzdem nicht so selbstredend wie Python. :)

Verfasst: Montag 12. Januar 2009, 13:57
von BlackJack
Und noch mal in Ada:

Code: Alles auswählen

with Ada.Text_IO;
use  Ada.Text_IO;
with Ada.Numerics.Discrete_Random;

procedure GuessTheNumber is
   type SecretType is range 1 .. 100;

   package Tries_IO     is new Ada.Text_IO.Integer_IO (Positive);
   package Secret_IO    is new Ada.Text_IO.Integer_IO (SecretType);
   package RandomSecret is new Ada.Numerics.Discrete_Random (SecretType);

   Tries         : Positive := 1;
   Secret, Guess : SecretType;
   RandomState   : RandomSecret.Generator;

begin
   RandomSecret.Reset (RandomState);
   Secret := RandomSecret.Random (RandomState);

   loop
      begin
         Tries_IO.Put (Tries, 1);
         Put (". guess: ");
         Secret_IO.Get (Guess);

         exit when Guess = Secret;

         Put ("Your number is ");
         if Guess > Secret then
            Put_Line ("greater.");
         else
            Put_Line ("smaller.");
         end if;

         Tries := Tries + 1;
      exception
         when Data_Error =>
            Put ("Pleaser enter a number in range ");
            Secret_IO.Put (SecretType'First, 1);
            Put (" .. ");
            Secret_IO.Put (SecretType'Last, 1);
            Put_Line ("!");
            -- Skip input.  Neccessary if input was no valid number literal.
            declare
               Dummy : String (1 .. 80);
               Last  : Natural;
            begin
               Get_Line (Dummy, Last);
            end;
      end;
   end loop;

   Put ("Yeah!  You guessed correct in ");
   Tries_IO.Put (Tries, 1);
   Put_Line (" tries.");
end GuessTheNumber;

Verfasst: Montag 12. Januar 2009, 15:35
von numerix
Jetzt würde ich es gerne aber auch noch in Cobol sehen.

Verfasst: Montag 12. Januar 2009, 19:35
von audax
Reicht dir auch das neue Cobol?

Code: Alles auswählen

import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStreamReader;
import java.util.Random;


class Guesser {
    
    private int currentGuess;
    private int secret;
    private int tries;
    
    public Guesser() {
        secret = new Random().nextInt(100) + 1;
    }
    
    public void tryGuess(int guess) {
        currentGuess = guess;
        tries++;
    }
    
    public int checkGuess() {
        if (currentGuess < secret) {
            return -1;
        } else if (currentGuess > secret) {
            return 1;
        } else {
            return 0;
        }
    }
    
    public boolean isRight() {
        return secret == currentGuess;
    }

    public int getTries() {
        return tries;
    }

}


public class Guess {
    static String ERROR = "Bitte gib eine Zahl zwischen 1 und 100 ein.";

    public static void main(String[] args) {
        InputStreamReader istream = new InputStreamReader(System.in) ;
        BufferedReader bufRead = new BufferedReader(istream) ;

        Guesser guess = new Guesser();
        int currentGuessing;
        String rawGuessed;
        do {
            System.out.println("Gib deine Vermutung ab:");
            try {
                rawGuessed = bufRead.readLine(); 
            } catch (IOException e) {
                System.out.println(ERROR);
                continue;
            }
            currentGuessing = Integer.parseInt(rawGuessed);
            if (currentGuessing == 0) {
                System.out.println(ERROR);
                continue;
            }
            guess.tryGuess(currentGuessing);
            switch (guess.checkGuess()) {
            case -1:
                System.out.println("Das war zu niedrig!");
                break;
            case 1:
                System.out.println("Das war zu hoch!");
                break;
            }
        } while (! guess.isRight());
        System.out.printf("Richtig! Du hast %d Versuche gebraucht!", guess.getTries());
    }

}
http://paste.pocoo.org/show/99308/

Ich fühl mich schmutzig :(

Verfasst: Montag 12. Januar 2009, 19:37
von zero-one
is das denn wirklich die minimalste Loesung in Java? Ist ja nen ganz schoener Klumpen fuer etwas so simples...

Verfasst: Montag 12. Januar 2009, 19:40
von BlackVivi
zero-one hat geschrieben:is das denn wirklich die minimalste Loesung in Java? Ist ja nen ganz schoener Klumpen fuer etwas so simples...
Öhm, so programmiert in Java ._. So wirds einem zumindest beigebracht... Objektorientierung für die trivialsten Fälle, für die simple Eingabe 213142 Zeilen und sowas... Ich will jetzt nich java ganz dolle beleidigen und Leute wie sma (verzeih, du bist nunmal aus'n Java-Bereich...) verärgern, aber so wurde es mir beigebracht.

Die minimalste Lösung in Java würde so ähnlich aussehen wie die in Python... aber jeweils für die kleineren Aufgaben wie Eingabe einige Zeilen mehr, weil gezwungenes Abfangen von'n IOError und sowas.

Verfasst: Montag 12. Januar 2009, 19:51
von numerix
audax hat geschrieben:Reicht dir auch das neue Cobol?
Das ist aber hart!
Also, wenn jemand das "echte" Cobol soweit beherrscht, dass er den Code mal zeigen könnte, wäre schon nett.

Verfasst: Montag 12. Januar 2009, 20:00
von audax
BlackVivi hat geschrieben:
zero-one hat geschrieben:is das denn wirklich die minimalste Loesung in Java? Ist ja nen ganz schoener Klumpen fuer etwas so simples...
Öhm, so programmiert in Java ._. So wirds einem zumindest beigebracht... Objektorientierung für die trivialsten Fälle, für die simple Eingabe 213142 Zeilen und sowas... Ich will jetzt nich java ganz dolle beleidigen und Leute wie sma (verzeih, du bist nunmal aus'n Java-Bereich...) verärgern, aber so wurde es mir beigebracht.

Die minimalste Lösung in Java würde so ähnlich aussehen wie die in Python... aber jeweils für die kleineren Aufgaben wie Eingabe einige Zeilen mehr, weil gezwungenes Abfangen von'n IOError und sowas.
Ungefähr das ist Enteprise Niveau:
http://paste.pocoo.org/show/99317/

Ist super erweiterbar ;)

Verfasst: Montag 12. Januar 2009, 20:29
von HerrHagen
Ungefähr das ist Enteprise Niveau:
http://paste.pocoo.org/show/99317/
Das ist ja grauenhaft!
Da kann ich nur noch den armen Programmiersklaven dieser Welt mein Mitgefül aussprechen...

Verfasst: Montag 12. Januar 2009, 20:31
von lunar
audax, schickt das mal an http://thedailywtf.com ;)

Verfasst: Montag 12. Januar 2009, 20:48
von audax
Ach, das ist doch von mir, das zählt gar nicht :D

Verfasst: Montag 12. Januar 2009, 20:52
von Leonidas
HerrHagen hat geschrieben:Da kann ich nur noch den armen Programmiersklaven dieser Welt mein Mitgefül aussprechen...
Na dann siehst du auch was Informatikstudenten so sinnvolles lernen.

Verfasst: Montag 12. Januar 2009, 20:56
von BlackVivi
Leonidas hat geschrieben:
HerrHagen hat geschrieben:Da kann ich nur noch den armen Programmiersklaven dieser Welt mein Mitgefül aussprechen...
Na dann siehst du auch was Informatikstudenten so sinnvolles lernen.
Ich wünschte du hättest meine Laboraufgabe in Informatik II gesehen...

Verfasst: Montag 12. Januar 2009, 21:01
von audax
BlackVivi hat geschrieben:
Leonidas hat geschrieben:
HerrHagen hat geschrieben:Da kann ich nur noch den armen Programmiersklaven dieser Welt mein Mitgefül aussprechen...
Na dann siehst du auch was Informatikstudenten so sinnvolles lernen.
Ich wünschte du hättest meine Laboraufgabe in Informatik II gesehen...
Machen wir nen Club auf? :D