Vorstellung der Aufgabe Nonogramme

Ähnliche Dokumente
Vorstellung der Aufgabe Nonogramme

Suchen und Sortieren Sortieren. Heaps

11.1 Grundlagen - Denitionen

13. Binäre Suchbäume

Einführung in die Informatik: Programmierung und Software-Entwicklung, WS 11/12. Kapitel 7. Grafische Benutzeroberflächen

Dynamisches Huffman-Verfahren

Probeklausur: Programmierung WS04/05

GUI Programmierung in Java

Datenstrukturen & Algorithmen Lösungen zu Blatt 6 FS 14

Anleitung für das Content Management System

Programmierpraktikum WS 16/17

Institut für Informatik

Übungen zu Einführung in die Informatik: Programmierung und Software-Entwicklung: Lösungsvorschlag

GUI Programmierung mit JAVA Swing

Tutorial04: Swing: Erstellen eines JFrames mit einem JSplitPane

Algorithmen & Datenstrukturen 1. Klausur

1. Software installieren 2. Software starten. Hilfe zum Arbeiten mit der DÖHNERT FOTOBUCH Software

Binäre Bäume. 1. Allgemeines. 2. Funktionsweise. 2.1 Eintragen

Anleitung OpenCms 8 Einbinden von Bildern

Kennen, können, beherrschen lernen was gebraucht wird

SWT. -The Standard Widget Toolkit- Inhaltsverzeichnis. Thomas Wilhelm SWT. 1. Was ist SWT?

Informatik II, SS 2014

Speichern. Speichern unter

Programmierkurs Java

Zentrale Objekte zur Programmierung graphischer Benutzeroberflächen (GUI)

DHBW Karlsruhe, Vorlesung Programmieren, Events Musterlösung

Bedingungen. Bedingungen. Bedingungen

SketchBook Ink. Tipps & Tricks

Nachhilfe konkret! Mike's Lernstudio

Software Engineering Klassendiagramme Assoziationen

Schritt 1 - Ein Spielfeld

Objektorientierte Softwareentwicklung

Weka: Software-Suite mit Maschineller Lernsoftware

Probeklausur: Programmierung WS04/05

Aufgabenstellung und Zielsetzung

Tutoraufgabe 1 (2 3 4 Bäume):

Tutoren Simon Andermatt Lukas Beck. Alexis Peter Thomas Ritter

Übungen zu Einführung in die Informatik: Programmierung und Software-Entwicklung: Lösungsvorschlag

Tutoren Jan Ebbe Pat Mächler Valentino Rugolo Sascha Scherrer. Grundlagen der Programmierung (CS101) - Blatt 8 Theorie [4 Punkte] - Praxis [12 Punkte]

Suchen und Sortieren

WORKSHOP für das Programm XnView

Übungen zu Programmierung I - Blatt 8

Softwareentwicklungspraktikum Nebenfach

Grafische Benutzeroberfläche mit Glade und Python

Mit der Maus im Menü links auf den Menüpunkt 'Seiten' gehen und auf 'Erstellen klicken.

Swing :Komponenten I (Teil 2)

Bäume. Informatik B - Objektorientierte Programmierung in Java. Vorlesung 10: Collections 4. Inhalt. Bäume. Einführung. Bäume.

Grundlagen der Informatik. Prof. Dr. Stefan Enderle NTA Isny

Prof. Dr. Oliver Haase Karl Martin Kern Achim Bitzer. Programmiertechnik GUI-Programmierung mit Swing

FAQ 11/2014. Änderung der Farbe und Transparenz von HMI- Elementen in der Runtime. SIMATIC WINCC V7.0 bis V7.3

Datenstrukturen und Algorithmen

Wiederholung ADT Menge Ziel: Verwaltung (Finden, Einfügen, Entfernen) einer Menge von Elementen

Assertions (Zusicherungen)

KAPITEL 4: Bildbearbeitung Kopiervorlagen und Arbeitsblätter

Es ist für die Lösung der Programmieraufgabe nicht nötig, den mathematischen Hintergrund zu verstehen, es kann aber beim Verständnis helfen.

version 23 photo Stand: Neuste Version: ftp://ftp.cadwork.ch/cadwork.ftp/i386-nt/exe_ing/manuals

Programmiertechnik II

Erstellung von Bildern, OID-Mustern und Ausdruck

Objektorientierte Programmierung in Java

von Anja Austermann Drag and Drop

Java I Vorlesung 11 Graphische Oberflächen mit Swing

D:\daten\tbz\TTT\ttt_final\TTT.java. 125: else

(Kurs B6 Erweiterte IrfanView-Funktionen)

Sort n Rename. Einführung Dateien laden Dateien sortieren. Thumbnails & individuelle. Reihenfolge

2. Lernen von Entscheidungsbäumen

5 Projekt Bankverwaltung

Jetzt sollt ihr von der Vorlage der Grundversion 1.0 ein eigenes Textadventure erstellen.

Einführung in die Informatik: Programmierung und Software-Entwicklung, WS 11/12. Kapitel 13. Bäume. Bäume

Suchbäume. Annabelle Klarl. Einführung in die Informatik Programmierung und Softwareentwicklung

Zipper-Wall Curved Anlieferspezifikationen

Bildreihenfolge fixieren

Der linke Teilbaum von v enthält nur Schlüssel < key(v) und der rechte Teilbaum enthält nur Schlüssel > key(v)

Handbuch. für die. Erstellung von Mehrfarbstempeln. mit. Adobe Illustrator. (Deutsch)

Microsoft Visio Das offizielle Trainingsbuch

3.2 Binäre Suche. Usr/local/www/ifi/fk/menschen/schmid/folien/infovk.ppt 1

Handout CMS Pimcore. Bedienung der Webseite für Sektionen

Cmsbox Kurzanleitung. Das Wichtigste in Kürze

Propädeutikum zur Programmierung

version 21 photo Stand: Neuste Version: ftp://ftp.cadwork.ch/cadwork.ftp/i386-nt/exe_ing/manuals

Übungsaufgaben: 1. Objektorientierte Programmierung - Teil 1

Handbuch. für die. Erstellung von Mehrfarbstempeln. mit. Adobe PhotoShop (Deutsch)

Eigene Karten mit ArcGIS online erstellen

Ich möchte eine Bildergalerie ins Internet stellen

H. Tornsdorf М. Tornsdorf. Das große Buch zu

Handbuch für die Erweiterbarkeit

Content Management System (CMS) Manual

14. Rot-Schwarz-Bäume

Vektorgrafik / Bitmap (bmp)

NTB Druckdatum:

BIF/SWE - Übungsbeispiel

Vorlesung Datenstrukturen

Über Arrays und verkettete Listen Listen in Delphi

II. Grundlagen der Programmierung. 9. Datenstrukturen. Daten zusammenfassen. In Java (Forts.): In Java:

Information zur Konzeptberatungs-Schnittstelle

Diese Seite kann auch als pdf-file heruntergeladen werden.

Transkript:

Vorstellung der Aufgabe Nonogramme Andrea Frank Programmerpraktikum FernUniversität in Hagen

Agenda Nonogramme,, was sind das?, wie kann man sie lösen?, immer lösbar? Überblick über die Aufgabe Welche Anforderungen sind Bestandteil der Aufgabe? Fragen Folie 2

Nonogramme Jede Zahl entspricht genau der Länge eines Blocks und dessen Farbe. Bei mehreren Zahlen entspricht ihre Abfolge der Reihenfolge der Blöcke. Zwischen zwei Blöcken von derselben Farbe muss sich mindestens ein leeres Feld befinden. Blöcke von unterschiedlicher Farbe dürfen sich jedoch berühren. Folie 3

Nonogramme Zu diesem Rätsel gibt es eine eindeutige Lösung. Folie 4

Nonogramme Bei diesem Rätsel ist die Lösung nicht eindeutig. Folie 5

Nonogramme Durch Vorgabe einzelner Felder ist wieder eine eindeutige Lösung möglich. Folie 6

Nonogramme? Achtung: Nonogramme können auch unlösbar sein. Folie 7

Überblick über die Anforderungen Die Aufgabe teilt sich in drei Kernbereiche: Lösen eines Rätsels durch einen interaktiven Benutzer Lösen eines Rätsels durch den Computer Erzeugen von Rätseln aus beliebigen Grafikdateien Folie 8

Lösen eines Rätsels durch einen Benutzer GUI - grafische Benutzeroberfläche wahlweise mit AWT, SWING oder JavaFX nimmt Benutzereingaben entgegen zeigt den aktuellen Stand des Lösungsvorgangs an Die Bedienung ist in der Dokumentation zu beschreiben. Folie 9

Lösen eines Rätsels durch einen Benutzer (2) Laden und Speichern von Nonogrammen Dateiauswahldialoge verwenden (AWT: FileDialog / Swing: JFileChooser / JavaFX: FileChooser) erstes Öffnen des Dateiauswahldialogs im data -Verzeichnis erneutes Öffnen im zuletzt verwendeten Verzeichnis beim Laden/Speichern das angegebene Datenformat beachten Folie 10

Lösen eines Rätsels durch einen Benutzer (3) Interaktives Lösen Auswahl der aktuellen Farbe mit der Maus beliebiges Feld im Gitter mit der aktuellen Farbe belegen beliebiges Feld als Leerfeld markieren Feldbelegung wieder entfernen zum Ende: Überprüfen, ob Lösung korrekt ist Folie 11

Lösen eines Rätsels durch einen Benutzer (4) GUI - grafische Benutzeroberfläche Hinweise: Falls Sie nicht viel Erfahrung haben, erstellen Sie eine einfache Benutzeroberfläche (AWT: Frame / Swing: JFrame) mit einem Zeichenbereich (Canvas / JPanel) und einem Menü (Menu / JMenu). Später können Sie z.b. eine Toolbar (JToolBar (nur Swing)) für die Auswahl der Farben hinzufügen. Bei sehr großen Rätseln könnte der Zeichenbereich durch Scrollen (ScrollPane / JScrollPane) oder Zoomen (AffineTransform) erweitert werden (Hinweis für die Anforderung der Auflösung beachten). Viele hilfreiche Tipps und Codebeispiele finden Sie z.b. im Swing-Tutorial: http://docs.oracle.com/javase/tutorial/uiswing/ Folie 12

Lösen eines Rätsels durch den Computer Algorithmus GUI In Ihrem Programm muss ein Algorithmus zum Lösen von Nonogrammen implementiert sein. Dieser muss sowohl über die GUI als auch über das Test- Interface verwendet werden. Dieser Lösungsalgorithmus ist in der Dokumentation zu beschreiben. Über ein Bedienelement weist der Benutzer das Programm an, die Lösung zu berechnen. Diese wird durch Anzeige des ausgefüllten Gitters dargestellt (keine Anzeige von Zwischenschritten nötig). Test-Interface Zusätzlich wird der Lösungsalgorithmus beim automatischen Testlauf über das Interface verwendet. Folie 13

Lösen eines Rätsels durch den Computer (2) Achtung: Mit einem einfachen Probieren kommen Sie nicht weit. 16 Felder mit jeweils 2 Möglichkeiten (1 Farbe + Leerfeld) ergeben 2 65536 Möglichkeiten 100 Felder mit jeweils 5 Möglichkeiten (4 Farben + Leerfeld) ergeben 5 10 Möglichkeiten intelligente Lösungsstrategien suchen Die Techniken zum Lösen aus den Kapiteln 2 (Schritt-für-Schritt- Anleitung) und 8 (Implementierungshinweise) sind nur Vorschläge. Eigene Lösungsalgorithmen sind ebenfalls erlaubt. Folie 14

Lösen eines Rätsels durch den Computer (3) Überprüfen des Lösungsalgorithmus mit dem Test-Interface Zusatzmaterial Nonogramme.zip von der ProPra-Webseite http://www.fernuni-hagen.de/mathinf/studium/lehre/praktika/programmierpraktikum/2016_2017_ws.shtml Library Nonogramme.jar in Java-Projekt einbinden Javadoc in IDE einbinden Testdaten (Verzeichnis data) verwenden Test-Interface INonogramSolver implementieren Methode getsolution() liefert das Ergebnis Testlauf durchführen (Aufruf mit Parameter t ) Einzeltests (Aufruf mit Parameter -t beispiel.test ) Folie 15

Folie 16

Erzeugen von Rätseln eine beliebige Grafik (*.gif, *.png, *.jpg) als Quelle verwenden Festlegen der späteren Größe des Rätsels Festlegen der Anzahl der Farben im Rätsel Skalieren der Grafik Für das Skalieren einer Grafik können Sie Klassen und Methoden aus dem Java-SDK verwenden. Folie 17

Erzeugen von Rätseln (2) Runterrechnen der Farben (Farbreduktion) Reduktion auf 7 Farben Verschiedene gängige Verfahren Octrees, Median Cut, NeuQuant, Pairwise Clustering, Wu Color Quantization, Folie 18

Farbreduktion mit Octree Octree Jeder Knoten hat bis zu 8 Nachfolger (gespeichert im array childs). Jedes Blatt repräsentiert eine Farbe des Bildes Zusätzliche Attribute in Blättern: red, green, blue (Summe der Farbanteile) references (Anzahl der Pixel im Bild mit dieser Farbe) Folie 19

Farbreduktion mit Octree (Einfügen in den Baum) Pixel im Bild Farbe int 8978273 hex #88FF61 RGB 136, 255, 97 i 0 1 2 3 4 5 6 7 R = 136 = 1 0 0 0 1 0 0 0 G = 255 = 1 1 1 1 1 1 1 1 B = 97 = 0 1 1 0 0 0 0 1 Index: 6 3 3 2 6 2 2 3 Folie 20

Farbreduktion mit Octree (Einfügen in den Baum) Einfügen einer Farbe gegeben durch (r,g,b) / Int-Werte in [0..255] (Achtung: Transparenz vorher entfernen) node := Wurzel des Baums; for i :=0 to 7 do index := r[i] g[i] b[i]; // Aneinanderreihung der i-ten Bits if node.childs[index] == null then node.childs[index] := new Node(); end if node := node.childs[index]; end for node.references++; node.red += r; Node.green += g; Node.blue += b; Folie 21

Farbreduktion mit Octree (Reduktionsphase) while (Anzahl Blätter > Farbanzahl) do Wähle inneren Knoten n, dessen Summe der Farbanzahlen seiner Söhne minimal ist (dieser befindet sich direkt über Blättern); Reduziere(n); end while Folie 22

Farbreduktion mit Octree (Reduktionsphase) Reduziere (n) if (n.anzahl Söhne > (Anzahl Blätter - Farbanzahl)) then while (Anzahl Blätter > Farbanzahl) do Wähle aus n das Paar Söhne (n1,n2) mit geringstem Farbunterschied; n1.red += n2.red; n1.green += n2.green; n1.blue += n2.blue; n1.references += n2.references; Lösche n2 aus n; end while else // reduziere alle Söhne n.references := 0; for i:=0 to 7 do if (n.childs[i]!= null) then n.references += n.childs[i].references; n.red += n.childs[i].red;... n.childs[i] := null; end if end for end if Folie 23

Farbreduktion mit Octree (Endphase) Blätter im Baum einsammeln Diese stellen die wichtigsten Farben dar. alle Pixel des Bildes durchgehen Jede Farbe der ähnlichsten wichtigen Farbe zuordnen. Farbunterschiede berechnen:,,,,, ) ) + ) Hinweis: Da der Farbunterschied lediglich verglichen wird, genügt es, auf das Wurzelziehen zu verzichten und das Quadrat des Farbunterschieds zu vergleichen. Folie 24

Erzeugen von Rätseln (3) eine Farbe als Hintergrundfarbe wählen Eindeutigkeit prüfen und eventuell einige Felder vorbelegen (Schlüsselwort content) Rätsel im angegebenen Dateiformat speichern Folie 25

Fragen? Folie 26