[QUIZ#17] Wörter kreuz und quer

Quiz #17
Wörter kreuz und quer

Regeln
Die Regeln und der Ablauf der Quizrunde können in der entsprechenden Ankündigung eingesehen werden. Bitte lest sie euch aufmerksam durch, da sie alle wichtigen Informationen enthält. Es ist erlaubt und erwünscht, dass ihr euch direkt in diesem Thema über die Aufgabe austauscht. Also stellt bei Unklarheiten in der Aufgabenstellung oder Problemen bei der Umsetzung Fragen, versorgt uns mit nützlichen oder weiterführenden Links, diskutiert mögliche Lösungsansätze. Macht bei Beiträgen, die allzu viel verraten, aber bitte trotzdem Gebrauch vom [spoiler]-Tag.

Abgabe
Die Abgabe erfolgt wie immer im Abgabeforum. Abgabefrist ist Sonntag, der 22. August 2010 um ca. 21 Uhr.

Die Aufgabe
Kreuzworträtsel sind ein beliebter Zeitvertreib. Doch was tun, wenn gerade kein ungelöstes Rätsel zur Hand ist? Für einen Programmierer ist die Antwort klar: ein Programm schreiben, das neue Kreuzworträtsel generiert.

Stufe 1
In der ersten Schwierigkeitsstufe soll ein Rätsel folgender Form erzeugt werden:
Code:
  Lösungswort ______
                    \
                    v
 1:             [_]|_|[_][_]
 2:       [_][_][_]|_|[_]
 3:       [_][_][_]|_|[_][_][_][_][_]
 4: [_][_][_][_][_]|_|[_][ ]
 5:          [_][_]|_|[_][_][_][_][_]
 6:             [_]|_|[_][_][_][_][_][_]
 7:             [_]|_|[_][ ]
 8:          [_][_]|_|
 9:    [_][_][_][_]|_|[_][_][_][_][_]
                   |.|
10:       [_][_][_]|_|[_][_][_]
11:          [_][_]|_|[_]

            
 1: Textauszeichnungssprache (Abk.)
 2: Freies Betriebssystem
 3: Programm zur Fotobearbeitung
 4: Ausstellungsort für Kunstwerke
 5: Sammelbegriff für physische Bestandteile eines Rechners
 6: 3D-Programm
 7: Programmiersprache von Oracle
 8: Datenbanksprache (Abk.)
 9: Browser-Skriptsprache
10: Betriebssystem aus Redmond
11: ... helfen ...n
Die Antworten sollen also waagrecht eingetragen werden, wobei sich das senkrecht zu lesende Lösungswort ergibt.

Stufe 2
Ab Stufe 2 soll es tatsächlich kreuz und quer gehen: ein sogenanntes „einfaches Kreuzworträtsel“ ist zu generieren:

220px-Crossword_(PSF).png


Wörter können entweder waagrecht oder senkrecht eingetragen werden. Die schwarzen Blindkästchen markieren die Grenze zwischen Wörtern. Eine symmetrische Anordung der Blindkästchen verleiht dem Rätsel eine gewisse Ästhetik:

250px-CrosswordUSA.svg.png


Eine weitere Ausprägung dieser Rätselart lässt immer mindesten ein Kästchen Platz zwischen den Lösungen und erinnert ein bisschen an Scrabble.

Stufe 3
Die Königsdisziplin der Kreuzworträtsel sind die Schwedenrätsel:

Schwedenr%C3%A4tsel.jpg


Die Blindfelder dienen hier gleichzeitig als Tippgeber für ein angrenzendes Wort.

Eingabe
Für jeden Rätseltyp soll euer Programm eine Liste von Hinweisen und Lösungen entgegennehmen, z.B. im CSV-Format. Abhängig von der Stufe können auch noch weitere Eingaben nötig sein, z.B. das Lösungswort bei Stufe 1 oder die Rätselgröße bei den Stufen 2 & 3.

Ausgabe
Das Ausgabeformat steht euch frei.

Beispielfragen
CSV-Datei (UTF8-codiert) mit 1543 Fragen und Antworten: Anhang anzeigen fragen.csv.txt
Quelle: http://moxquizz.de/

Und jetzt ran an die Tasten und viel Spaß beim Programmieren!
 
Zuletzt bearbeitet:

Erik

Erfahrenes Mitglied
An Kreuzwort Rätseln habe ich mich schonmal versucht.
Irgendwie fehlt mir eine vernünftige Idee um „schöne” Rätsel hinzubekommen.
Naja Stufe 1 sollte drin sein :)

Gruß
Erik
 

ComFreek

Mod | @comfreek
Moderator
Ich will jetzt zum Ersten Mal mitmachen.
Ich werde PHP und HTML nehmen, als Ausgabeformat lassen sich die Tabellen in HTML nehmen ;)
 
Zuletzt bearbeitet:

HonniCilest

Erfahrenes Mitglied
Das Bild zum Coding Quiz hat mit an meine Oma erinnert, sie rätselt auch gerne die Rätsel, wo
a) Die Wörter schon vorgegeben sind (nach Länge und Alphabet geordnet) und diese ins Gitter eingebaut werden müssen
b) Die Buchstaben der Lösungswörter vorgegeben, aber alphabetisch geordnet sind, d.h. diese müssen geschüttelt werden
c) Die Buchstaben durch Zahlen/Symbole ersetzt wurden
Ich denke diese sind abgesehen von den Beschreibungen für die einzutragenden Wörtern den oben aufgelisteten Rätseln sehr ähnlich. Die Textdatei könnte die gleiche sein. Wer Lust hat kann sich ja auch daran versuchen :)
 

ComFreek

Mod | @comfreek
Moderator
Es ist erlaubt und erwünscht, dass ihr euch direkt in diesem Thema über die Aufgabe austauscht. Also stellt bei Unklarheiten in der Aufgabenstellung oder Problemen bei der Umsetzung Fragen, versorgt uns mit nützlichen oder weiterführenden Links, diskutiert mögliche Lösungsansätze. Macht bei Beiträgen, die allzu viel verraten, aber bitte trotzdem Gebrauch vom spoiler-Tag.
Hat jemand schon einen Ansatz? Ich habe folgenden:
Das Dateiformat ist bei mir ein serialisiertes Array, das so ausschaut:

Code:
array(2)
{
  ["solution"]=>  string(5) "ssl"
  ["words"]  =>  array(5)
                       {
                          ["Menschen wohnen darin"]      =>    string(4) "haus"
                          ["Das beste Forum im Internet"]=> string(12) "tutorials.de"
                          ["Ein Verweis auf eine externe Datei"]=> string(4) "link"
                       }
}
Doch ich weiß nicht, wie ich das Lösungwort bilden kann bzw. an welcher Stelle der jeweile String sein muss, damit die Lösung rauskommt.
 
Zuletzt bearbeitet:

Alex_T

Erfahrenes Mitglied
Mahlzeit,
ich arbeite schon fieberhaft an meinem Generator - mein Ansatz:
Ich fülle erst mal eine Datenbank mit Frage, Lösung und Schwierigkeitsgrad der Aufgabe (von Frage und Lösung abhängig).

Dann soll der Anwender ein Lösungswort eingeben -> Datenbank wird ausgelesen.
Für jeden Buchstaben des Lösungswortes wird geprüft, ob der Datensatz diesen enthält -> falls ja ab in das Array für den n.-Lösungsbuchstaben.
Dann noch kräftig durchgeschüttelt und man hat schon mal eine zufällige Auswahl an Fragen-Lösungen.

Wie man das ganze dann aber noch positioneren soll - darüber muss ich mir dann mal noch Gedanken machen :) .
 
Zuletzt bearbeitet:

ComFreek

Mod | @comfreek
Moderator
Alex_T hat gesagt.:
Wie man das ganze dann aber noch positioneren soll - darüber muss ich mir dann mal noch Gedanken machen :) .
Das ist genau mein Problem! Ich weiß, dass es irgendwas mit str_pos sein muss, aber weiter komme ich nicht. :(

PS: Danke für den Tipp mit der Datenbank und den Schwierigkeitsgraden ;)
 

Alex_T

Erfahrenes Mitglied
ich mach mir mal noch gedanken, BEVOR ich meine Datenbank fülle (nicht das dann alles für umsonst war ;) ) und falls sich ein Geistesblitz einstellt, lass ich es dich wissen :)
 

rd4eva

Erfahrenes Mitglied
Also mein erster Ansatz wegen der Positionierung sieht ungefähr so aus:
Anstatt das Lösungswort in der csv (oder Array oder was auch immer) mit zu geben, habe ich den jeweiligen Lösungsbuchstaben mit einem Unterstrich "markiert".
So z.B. H_TML (T ist der Lösungsbuchstabe)
Jetzt muss man sich nur noch das Lösungswort X mit den meisten Buchstaben links des Lösungsbuchtabens raussuchen.
Dieses Wort ist ganz links positioniert, alle anderen Wörter Y sind um die Differenz der Anzahl von Buchstaben links des Lösungsbuchstabens, von X und Y, nach rechts verschoben.
Beispiel:
X = H_TML = 1 Buchstabe links des Lösungsbuchstabens
Y = LIN_UX = 3 Buchstaben links des LB
D.h. Linux steht ganz link und HTML ist um 2 "Felder" nach rechts verschoben.
 

Alex_T

Erfahrenes Mitglied
hab mir auch grad was ähnliches überlegt:

Man berechnet die Anzahl der Buchstaben des längsten Wortes. Da man ja nicht weiß wo sich der Lösungsbuchstabe in diesem Wort befindet, erstellt man für jede Zeile Anzahl_der_Buchstaben_längstes_Wort - 1 Zellen nach links und nach rechts.
Nun ermittelt man die Position des Buchstaben, der Gesamt-Lösungsbuchstabe ist, eines anderen Lösungswortes und ordnet es Anzahl_der_Buchstaben_längstes_Wort minus Position_des_Buchstaben_andere_Lösung an -> fertig :)

Ich hoffe, dass hat jemand verstanden, denn ich kann meinen Gedanken gerade selber nur sehr schwer folgen :-( :)