Ergebnis 1 bis 2 von 2

Thema: Springerproblem

  1. #1
    unbeschriebenes Blatt
    Punkte: 14, Level: 1
    Level beendet: 27%, Punkte für Levelaufstieg benötigt: 36
    Aktivität: 47,0%
    Avatar von schmiddy355
    Registriert seit
    03.09.2017
    Beiträge
    1
    Punkte
    14
    Level
    1

    Springerproblem

    Hallo zusammen,
    ich bin neu in diesem Forum und ein sich outender Nicht-Schachspieler. Im Kontext einer Programmieraufgabe habe ich folgendes Schachproblem zu loesen:

    Springerproblem
    Ermittlung aller Stellungen auf einem Schachbrett (der normalen Groesse 8x8), bei denen nur je ein weisser und ein schwarzer Springer frei so positioniert sind, dass diese sich gegenseitig bedrohen.

    Ich habe schon einige Zeit im Internet auf den unterschiedlichen Schachseiten verbracht aber noch keine fuer mich verstaendliche Loesung gefunden. Vielleicht koennt Ihr mir weiterhelfen. Es wuerde mir schon ausreichen, wenn Ihr mir eine Stellung erklaert. Den Rest kann ich mir dann wahrscheinlich herleiten.

    Danke im Voraus!

    Viele Gruesse

    schmiddy355

  2. #2
    Linux-Enthusiast
    Punkte: 43.901, Level: 100
    Level beendet: 0%, Punkte für Levelaufstieg benötigt: 0
    Aktivität: 0%
    Errungenschaften:
    Your first GroupThree FriendsCreated Album picturesTagger First ClassVeteran
    Auszeichnungen:
    Community AwardDownloadsArm of LawMaster Tagger
    Avatar von ToBeFree
    Registriert seit
    05.08.2011
    Ort
    Wuppertal, NRW
    Rating
    1413 - 29
    Verein
    SC Tornado Wuppertal 1991
    Beiträge
    1.055
    Punkte
    43.901
    Level
    100

    AW: Springerproblem

    Willkommen bei uns

    "Bedrohen" bedeutet in dem Fall einfach nur, dass beiden Springer sich sozusagen "im Weg stehen". Dort, wo eigentlich der weiße Springer hin springen könnte, steht der schwarze Springer. Da der schwarze Springer die gleiche Bewegung ausführen kann, "bedroht" er auch den weißen Springer.

    Kennst du "Mensch ärgere dich nicht"? Da kann man gegnerische Figuren schlagen, indem man auf ihr Feld zieht. Im Schach funktioniert das genau so, und daher ist diese Stellung eine "Bedrohung" für die gegnerische Figur.

    Im Wikipedia-Artikel zum "Springer (Schach)" ist ein Schachbrett abgebildet, das die Zugmöglichkeiten eines Springers verdeutlichen soll. Der Springer bewegt sich wie der Buchstabe "L". Dabei darf er auch andere Figuren überspringen, aber das ist für diese Aufgabe irrelevant. Figuren der gleichen Farbe darf man nicht schlagen, aber auch diese gibt es bei deiner Aufgabe nicht. Das einzige Hindernis des Springers in deiner Aufgabe ist der Rand des Schachbretts.

    https://de.wikipedia.org/wiki/Springer_(Schach)

    Solange also nicht durch den Brettrand bestimmte Züge unmöglich gemacht werden, hat der schwarze Springer auf dem leeren Brett genau 8 Zugmöglichkeiten. Wenn du auf einem dieser Felder einen weißen Springer platzierst, hast du eine der gewünschten Stellungen für deine Aufgabe.

    Wenn du die Aufgabe korrekt gelöst hast, müsstest du nach dem folgenden Diagramm...


    (https://de.wikipedia.org/wiki/Datei:...ible_moves.svg)

    ...die folgende Anzahl von Stellungen erhalten:

    Code:
     2+3+4+4+4+4+3+2
    +3+4+6+6+6+6+4+3
    +4+6+8+8+8+8+6+4
    +4+6+8+8+8+8+6+4
    +4+6+8+8+8+8+6+4
    +4+6+8+8+8+8+6+4
    +2+3+4+4+4+4+3+2
    +3+4+6+6+6+6+4+3


    http://www.wolframalpha.com/input/?i...B6%2B6%2B4%2B3

    Das sind also 336 mögliche Stellungen. Zum Ermitteln wurde einfach der schwarze Springer nacheinander auf jedem einzelnen Feld platziert, und dann der weiße Springer nacheinander auf jedes seiner möglichen Zugfelder gesetzt. Das sind zwei ineinander verschachtelte for-Schleifen, oder wie das auch immer in deiner Programmiersprache heißt. Die äußere Schleife durchwandert das Brett, die innere geht die Zugfelder durch. Um dein Programm weniger hässlich aussehen zu lassen, kannst du die äußere Schleife nochmal aufteilen.

    • y-Achse (von Null bis Sieben)
    • -> x-Achse (von Null bis Sieben)
    • ---> 8 Zugmöglichkeiten durchgehen


    Du brauchst nicht einmal ein Array oder so etwas. Keine Variable muss dauerhaft den Zustand des Schachbretts abspeichern, wenn du jede gefundene Stellung einfach als Text ausgibst.

    Die Anzahl ist deshalb so leicht zu ermitteln, weil "gegenseitig bedrohen" bei Springern überhaupt nichts besonderes ist. Wenn ein Springer den anderen schlagen kann, dann geht das immer auch andersherum. Damit sind übrigens wirklich alle Möglichkeiten abgedeckt. Komme bloß nicht auf den Gedanken, man könne jetzt noch die Farben vertauschen und erhielte die doppelte Zahl.
    http://musescore.com/tobefree

    Zitat Zitat von derair
    also ich hab jetztd en internet explorer 9 und der ist toll
    der ist viel übersichtliger geworden und íst viel besser als fire fox
    "Alle aussteigen, wir klauen jetzt einen A380."

Lesezeichen

Lesezeichen

Berechtigungen

  • Neue Themen erstellen: Nein
  • Themen beantworten: Nein
  • Anhänge hochladen: Nein
  • Beiträge bearbeiten: Nein
  •  
. . . . .Email address contact imprint