ottogal: Kleine Programmieraufgabe, mit ein bisschen Mathematik

Auf einer HTML-Seite sind die ganzen Zahlen von 1 bis 16 als 4-mal-4-Matrix angeordnet:

4x4.png

Gesucht ist ein Javascript, das bei der Auswahl von zwei der Zahlen (etwa durch Nacheinander-Anklicken oder in Eingabezeilen) ausgibt, wie die beiden Zahlen zueinander liegen:

  • horizontal (wie z.B. 6 und 8), oder
  • vertikal (wie z.B. 11 und 7), oder
  • schräg (wie z.B. 10 und 3), oder ob sie
  • identisch (wie z.B. 9 und 9) sind.
  1. Hallo ottogal,

    das Anordnen als 4x4 Matrix kann auf verschiedene Arten erfolgen. Die Position im DOM und die Position auf dem Bildschirm können wild abweichen. Anordnung ginge

    • als Table
    • als inline-blocks, die mittels <br> nach 4 Zahlen umbrechen
    • als Flexbox mit wrap
    • als Grid
    • per position:absolute

    Basierend auf welchen Informationen soll man die Lage der Werte zueinander bestimmen?

    Rolf

    --
    sumpsi - posui - obstruxi
    1. Ich habe an eine Tabelle gedacht, schließe aber andere Ideen nicht aus.

  2. Hi,

    Auf einer HTML-Seite sind die ganzen Zahlen von 1 bis 16 als 4-mal-4-Matrix angeordnet:

    4x4.png

    Ist die Anordnung konstant? Also immer zeilenweise, links oben die 1, rechts unten die 16?

    cu,
    Andreas a/k/a MudGuard

    1. Ja, die Anordnung ist fix wie abgebildet.

      1. Hi,

        Ja, die Anordnung ist fix wie abgebildet.

        Beide Zahlen vergleichen, wenn identisch: Ergebnis identisch.

        Die beiden Zahlen "sortieren" und jeweils 1 abziehen (also in den Bereich 0 bis 15 verschieben).

        Jeweils Integer-Division durch 4, Ergebnis und Rest merken.
        Gleiche Reste: ==> vertikal
        Gleiches Divisionsergebnis ==> horizontal
        Sonst: schräg (Diff der Reste gibt die horizontalen Schritte, Diff der Divisionsergebnise gibt die vertikalen Schritte).

        Das Ganze in Javascript zu gießen überlasse ich dem geneigten Leser als Übung.

        cu,
        Andreas a/k/a MudGuard

        1. Servus!

          Hi,

          Ja, die Anordnung ist fix wie abgebildet.

          Beide Zahlen vergleichen, wenn identisch: Ergebnis identisch.

          Die beiden Zahlen "sortieren" und jeweils 1 abziehen (also in den Bereich 0 bis 15 verschieben).

          Jeweils Integer-Division durch 4, Ergebnis und Rest merken.
          Gleiche Reste: ==> vertikal
          Gleiches Divisionsergebnis ==> horizontal
          Sonst: schräg (Diff der Reste gibt die horizontalen Schritte, Diff der Divisionsergebnise gibt die vertikalen Schritte).

          Das Ganze in Javascript zu gießen überlasse ich dem geneigten Leser als Übung.

          Das hat @Felix Riesterer im Tic-Tac-Toe-Tutorial schon mal für ein 3x3-Feld getan: JavaScript/Tutorials/Spiele/Tic-Tac-Toe#Wer hat gewonnen?

          Herzliche Grüße

          Matthias Scharwies

          --
          Einfach mal was von der ToDo-Liste auf die Was-Solls-Liste setzen.“
        2. Hallo MudGuard,

          ach so, du gehst davon aus dass die Zahlen exakt wie dargestellt immer numerisch aufsteigend sein sollen?

          Rolf

          --
          sumpsi - posui - obstruxi
          1. Hi,

            ach so, du gehst davon aus dass die Zahlen exakt wie dargestellt immer numerisch aufsteigend sein sollen?

            Das hatte ich ja extra nachgefragt.

            cu,
            Andreas a/k/a MudGuard

            1. Hallo MudGuard,

              hm. Ja. Stimmt. Ich bin dann mal weg…

              Deiner Divmodderei ist nichts hinzuzufügen...

              Rolf

              --
              sumpsi - posui - obstruxi
  3. Hallo in die Runde,

    nachdem sowieso gespoilert wurde, teile ich meine Lösung nun mit:
    https://codepen.io/ottogal/full/qBPpOjK

    Kritik willkommen.

    Viele Grüße
    ottogal

  4. Falls sich jemand gefragt hat, wozu ich das gebraucht habe - hier die Antwort:
    codepen

    1. Hallo,

      Falls sich jemand gefragt hat, wozu ich das gebraucht habe - hier die Antwort:
      codepen

      Nett!
      Man vergisst immer wieder, dass man ein zweites Mal klicken muss. (Weil die angeklickte Münze ja sofort ausgeblendet wird.) Ein Ausgrauen der angeklickten Münze (oder besser: der jetzt nicht mehr anklickbaren Münzen) macht klar, dass der Zug nicht abgeschlossen ist.

      Gruß
      Kalk

      1. Ein Ausgrauen der angeklickten Münze...

        ...findet doch statt - ??

        ... (oder besser: der jetzt nicht mehr anklickbaren Münzen)

        Wieso?

        Gruß
        Kalk

        Gruß zurück
        ottogal

        1. Hallo,

          Ein Ausgrauen der angeklickten Münze...

          ...findet doch statt - ??

          Ja, schon. Aber zu binär: das ist nicht ausgegraut sondern quasi fast komlett weg. Eine Art Mittelweg wär sinnvoll.

          ... (oder besser: der jetzt nicht mehr anklickbaren Münzen)

          Wieso?

          Beim zweiten Klick ist schräg nicht erlaubt. Das kann verdeutlicht werden...

          Gruß
          Kalk

          1. Hallo,

            Ein Ausgrauen der angeklickten Münze...

            ...findet doch statt - ??

            Ja, schon. Aber zu binär: das ist nicht ausgegraut sondern quasi fast komlett weg. Eine Art Mittelweg wär sinnvoll.

            Na gut, könnte etwas heller sein...

            Beim zweiten Klick ist schräg nicht erlaubt. Das kann verdeutlicht werden...

            Es wird ja deutlich dadurch, dass der zweite Klick dann wirkungslos bleibt.

            Die nicht erlaubten Münzen kenntlich zu machen, wäre wie Malen nach Zahlen: Ein bisschen selber denken soll der Spieler schon noch. Außerdem ist er ja lernfähig: Nach ein paar Spielchen hat er die Regel verinnerlicht...

            1. Na gut, könnte etwas heller sein...

              So vielleicht besser?
              https://codepen.io/ottogal/full/WNZPQjN

              1. Hallo,

                So vielleicht besser?

                👍

                Gruß
                Kalk