Nonogram Programm


  • Mod

    @madelinemiller sagte in Nonogram Programm:

    @DocShoe

    Es tut mir leid, dass ich dir das Gefühl gegeben habe. Tatsächlich war es so, dass mir nicht klar war das ``` den code "gut" zeigt.

    Als Anfänger finde ich das ziemlich cool. Vor allem da man den Code so tatsächlich viel besser lesen kann. Ich verstehe, dass der andere Code mühsam zu lesen war und hoffe, dass ihr mir den Fehler verzeihen könnt.

    Es fehlt immer noch eine Frage. Das ist der Code aus der Aufgabenstellung. Was möchtest du wissen? Selbst wenn du nur willst, dass wir dir die Hausaufgaben machen (unwahrscheinlich, aber nicht ausgeschlossen, dass sich jemand erbarmt), hast du ja nicht einmal die eigentliche Aufgabe wiedergegeben.



  • Es fällt mir schwer Fragen zu stellen, da ich hier wirklich komplett verloren bin. Eine Leitung durch die Aufgabe oder ein Erklären der Tipps wäre toll.

    Mir ist bewusst, dass das Geduld erfordert und ich es euch nicht gerade einfach mache mir zu helfen. Aber so wie Mathe einigen nicht liegt, liegt mir C++ nicht.

    Zu der Aufgabenstellung. Diese habe ich nicht gepostet, da sie sehr lang ist und ich nicht dachte, dass jemand die Geduld hätte sie durchzulesen.

    Zusammengefasst besagt sie:

    Man sollte ein Programm schreiben welches ein Nonogram löst. Das Programm liest die Nonogram Beschreibung als input und gibt die Lösung als output.

    Hier die Aufgabenstellung etwas ausführlicher aber immer noch gekürzt:

    The purpose of this task is to implement a program solving Nonograms. This puzzle is played on a n×m grid.

    We provide type grid which is a two-dimensional vector of characters
    using
    grid = std::vector<std::vector<char>>;
    representing the grid.

    In the beginning, the grid contains only whitespaces, corresponding to cells with unknown content.
    The character '#' stands for a marked cell, while '.' stands for a cell which is known to be empty.

    In the provided code skeleton, we use a variable of type grid and name it nonogram.
    A cell in its i-th row and j-th column can be accessed as nonogram.at(i).at(j). For example,
    nonogram.at(0).at(0) = '#';
    marks the upper-left corner of the grid.

    We also provide a type hints which is a one-dimensional vector of unsigned integers
    using hints = std::vector<unsigned int>;
    In the provided code skeleton, we use two vectors (of hints, i.e. vectors)std::vector<hints> to describe row_hints and col_hints
    We number the rows from top to bottom and the columns from left to right. For example,
    row_hints.at(i).at(j) > 5 && col_hints.at(k).at(l) > 1
    checks if the j-th hint in i-th row is greater than 5, and the l-th hint in k-th column is greater than 1.

    To make the task easier, our skeleton provides function main which reads and verifies the nonogram, runs the solver, and outputs the result.



  • @SeppJ sagte in Nonogram Programm:

    Danke, habe ich korrigiert und stärker hervorgehoben.

    👍



  • @madelinemiller Du hast ja in solve_fromschon irgendwas gemacht. Was davon, hast du warum genau gemacht? Wo beschwert sich denn schon dein Compiler (und warum wohl)?

    Wenn C++ insbesondere nicht deine Stärke ist, wie würdest du das Problem denn in Pseudocode lösen?



  • @Schlangenmensch

    Zuerst einmal danke für deine Antwort 🙂

    Das im solve_from hab nicht ich gemacht. War ein Tipp. Diesen verstehe ich leider nicht bzw verstehe ich nicht genau was der Code macht. Desshalb weiss ich auch nicht wie weiter oder besser wo ich mich auf der "Checkliste"befinde.

    Und mit "C++ ist nicht meine Stärke" meinte ich eigentlich das Programmieren allgemein. Alles was wir lernen ist C++.

    Was mich zu der Frage führt. Was ist ein Pseudocode?



  • Vielleicht hilft es wenn ich selbst eine konkrete Frage nach der anderen stelle.

    Angefangen mit:

    Wieso überprüft man ob man am Ende vom Feld ist?
    Was genau ist mit dem Ende des Feldes gemeint?
    Und wie ginge das?
    Hat Zeile 28-50 dies schon erledigt?

    Frage bezieht isch auf den oben erwähnten Tipp 1:
    "- Am Anfang von solve from überprüft ihr ob es am ende des feldes ist



  • @madelinemiller sagte in Nonogram Programm:

    Wieso überprüft man ob man am Ende vom Feld ist?

    Du wirst wohl das Feld von oben links bis unten rechts durchgehen. Für jedes Feld probierst du den Status "leer" und "voll" aus und setzt jeweils die Suche mit dem nächsten Feld fort, solange bis du bei dem letztem Feld unten rechts angekommen bist. Ich hoffe, dass dir das schon hilft.



  • @wob

    Also wenn ich am Ende des Feldes angelangt bin ist das schon vom Code vorher gemacht oder muss ich das nach dem solve from programmieren?
    und den status leer und voll kann man mit einem bool machen oder?



  • Ah und ich muss das wahrscheinlich in eine Schleife packen(zb while oder so)oder ist das der falsche Ansatz?

    (PS: Die Erklärung war toll. Hab zwar noch keine Ahnung wie ich das coden will und es hat zu noch mehr Fragen geführt, aber sehr verständlich und eine erste Idee. Danke dafür! 🙂 )



  • Siehe vorletzten Hinweis: bool done = solve_from (nonogram,row_hints, col_hints, row, col+1)

    Du rufst einfach die Funktion, in welcher du gerade bist, rekursiv für das nächste Feld auf. Schau die vielleicht mal https://de.wikipedia.org/wiki/Rekursive_Programmierung an.

    und den status leer und voll kann man mit einem bool machen oder?

    Ja, aber: nein, das ist nämlich auch in der Aufgabe vorgegeben. Du hast ein char-Array. Ich zitiere aus der Aufgabe:

    In the beginning, the grid contains only whitespaces, corresponding to cells with unknown content. The character '#' stands for a marked cell, while '.' stands for a cell which is known to be empty.

    Aber prinzipiell hast du recht, bool wäre sinnvoll für markiert/nicht markiert (*). Ihr verwendet aber offenbar auch noch den dritten Status "unbekannt". (Warum eigentlich als chars und nicht als enum? Weiß wohl nur der Aufgabensteller!)

    (*) um dich nicht (?) zu verwirren: std::vector<bool> verhält sich in C++ anders als andere vectoren und wird daher gerne vermieden



  • @wob

    Oke mit dieser Antwort bin ich leicht überfordert. Muss mir die wohl noch ein paar Mal durch lesen.
    Aber danke dir.

    Zudem:
    Was ist genau ein char-array?



  • Andere Frage:

    Zeile 38-50 hab ich selber hinzugefügt und da probiert die Hinweise in Code/Text umzuwandeln.
    Stimmt das ungefähr oder bin ich da komplett auf den Holzweg?



  • @madelinemiller sagte in Nonogram Programm:

    Zudem:
    Was ist genau ein char-array?

    Das:
    grid = std::vector<std::vector<char>>;

    Und hier, wie es gefüllt ist:

    In the beginning, the grid contains only whitespaces, corresponding to cells with unknown content.
    The character '#' stands for a marked cell, while '.' stands for a cell which is known to be empty.



  • @zeropage Ah oke danke 🙂



  • Andere Frage: Meint ihr ich schaffe das bis heute 23:59 oder soll ich aufgeben und euch nicht die Zeit stehlen?😶



  • Ganz ehrlich?
    Das schaffst Du in einer Woche nicht 😔



  • @Belli oh dann bin ich wohl am Arsch 😢 🙂



  • Trotzdem danke euch allen für eure Hilfe.
    Tut mir leid das ich eure Zeit verschwendet habe.
    Falls ihr mal Fragen zu Mathe oder ähnliches hättet. Da😅 könnte ich behilflich sein.

    Schöne Woche


Anmelden zum Antworten