Ημερομηνία Ανάρτησης: 08/1/2018 Ημερομηνία Παράδοσης: - Αρχές Γλωσσών Προγραμματισμού

Σχετικά έγγραφα
ΥΣ02 Τεχνητή Νοημοσύνη Χειμερινό Εξάμηνο

turnin Lab2.hs

ΥΣ02 Τεχνητή Νοημοσύνη Χειμερινό Εξάμηνο

ΠΑΝΕΠΙΣΤΗΜΙΟ ΚΥΠΡΟΥ ΤΜΗΜΑ ΠΛΗΡΟΦΟΡΙΚΗΣ. ΑΣΚΗΣΗ 5 Ανάπτυξη Προγράμματος Συμπίεσης/Αποσυμπίεσης Αρχείων

Θεωρήστε ένα puzzle (παιχνίδι σπαζοκεφαλιάς) με την ακόλουθη αρχική διαμόρφωση : b b b w w w e

Εργαστήριο Επεξεργασίας Πληροφορίας και Υπολογισμών Τομέας Ηλεκτρονικής και Υπολογιστών. ΤΗΜΜΥ Α.Π.Θ Δευτέρα 22 / 11 / 2017 ΔΟΜΕΣ ΔΕΔΟΜΕΝΩΝ

ΠΑΝΕΠΙΣΤΗΜΙΟ ΚΥΠΡΟΥ Τμήμα Πληροφορικής

Για παράδειγμα η αρχική και η τελική κατάσταση αναπαριστώνται ως εξής: (ένα λίτρο)

ΠΑΝΕΠΙΣΤΗΜΙΟ ΚΥΠΡΟΥ Τ Μ Η Μ Α Π Λ Η Ρ Ο Φ Ο Ρ Ι Κ Η Σ

Εισαγωγή στη γλώσσα προγραμματισμού C++

Εργαστήριο Επεξεργασίας Πληροφορίας και Υπολογισμών Τομέας Ηλεκτρονικής και Υπολογιστών ΤΗΜΜΥ Α.Π.Θ ΔΟΜΕΣ ΔΕΔΟΜΕΝΩΝ.

Άσκηση 1 (ανακοινώθηκε στις 20 Μαρτίου 2017, προθεσμία παράδοσης: 24 Απριλίου 2017, 12 τα μεσάνυχτα).

PROJECT ΣΤΟ ΜΑΘΗΜΑ "ΕΙΣΑΓΩΓΗ ΣΤΙΣ ΕΥΡΕΤΙΚΕΣ ΜΕΘΟΔΟΥΣ"

ΣΕΤ ΑΣΚΗΣΕΩΝ 3. Προθεσµία: 7/1/2014, 22:00

ΕΡΓΑΣΙΑ 2. Κατασκευάζοντας Ημερολόγια. Ημερομηνία Ανάρτησης: 23/02/2018 Ημερομηνία Παράδοσης: 13/03/2018, 09:00

Δομές Δεδομένων. Λουκάς Γεωργιάδης.

Οικονοµικό Πανεπιστήµιο Αθηνών. Τµήµα Πληροφορικής. Φθινοπωρινό Εξάµηνο Δοµές Δεδοµένων - Εργασία 2. Διδάσκων: E. Μαρκάκης

Β Ομάδα Ασκήσεων "Λογικού Προγραμματισμού" Ακαδημαϊκού Έτους

Εργαστήριο Επεξεργασίας Πληροφορίας και Υπολογισμών Τομέας Ηλεκτρονικής και Υπολογιστών. ΤΗΜΜΥ Α.Π.Θ Πέμπτη 11 / 12 / 2014 ΔΟΜΕΣ ΔΕΔΟΜΕΝΩΝ

Δομές Δεδομένων. Λουκάς Γεωργιάδης.

Τμήμα Ηλεκτρολόγων Μηχανικών και Μηχανικών H/Y Department of Electrical and Computer Engineering. Εργαστήριο 1. Χειμερινό Εξάμηνο

ΠΑΝΕΠΙΣΤΗΜΙΟ ΚΥΠΡΟΥ ΤΜΗΜΑ ΠΛΗΡΟΦΟΡΙΚΗΣ ΠΡΟΓΡΑΜΜΑΤΙΣΤΙΚΗ ΑΣΚΗΣΗ 2

Εργαστήριο Επεξεργασίας Πληροφορίας και Υπολογισμών Τομέας Ηλεκτρονικής και Υπολογιστών ΤΗΜΜΥ Α.Π.Θ ΔΟΜΕΣ ΔΕΔΟΜΕΝΩΝ. DS Gomoku.

Ασκήσεις μελέτης της 4 ης διάλεξης. ), για οποιοδήποτε μονοπάτι n 1

ΑΝΑΠΤΥΞΗ ΕΦΑΡΜΟΓΩΝ ΣΕ ΠΡΟΓΡΑΜΜΑΤΙΣΤΙΚΟ ΠΕΡΙΒΑΛΛΟΝ ΕΠΑΝΑΛΗΠΤΙΚΟ ΔΙΑΓΩΝΙΣΜΑ ΣΧΟΛΙΚΟΥ ΕΤΟΥΣ

Κατηγορίες Συμπίεσης. Συμπίεση με απώλειες δεδομένων (lossy compression) π.χ. συμπίεση εικόνας και ήχου

Δομές Δεδομένων. Ενότητα 11: Τεχνικές Κατακερματισμού. Καθηγήτρια Μαρία Σατρατζέμη. Τμήμα Εφαρμοσμένης Πληροφορικής.

Διάλεξη 26: Σωροί. Διδάσκων: Παναγιώτης Ανδρέου

Εργαστήριο Επεξεργασίας Πληροφορίας και Υπολογισμών Τομέας Ηλεκτρονικής και Υπολογιστών. ΤΗΜΜΥ Α.Π.Θ Τρίτη 1 / 12 / 2015 ΔΟΜΕΣ ΔΕΔΟΜΕΝΩΝ

Πληροφορική 2. Δομές δεδομένων και αρχείων

ΔΙΑΦΟΡΑ ΘΕΜΑΤΑ. Ως «γειτονικά» ορίζονται τα κελιά που συγγενεύουν οριζόντια, κάθετα και διαγώνια. Για παράδειγμα γειτονικά του Α[3,3] είναι τα:

Εισαγωγή στην Επεξεργασία Ερωτήσεων. Βάσεις Δεδομένων Ευαγγελία Πιτουρά 1

Γ7.5 Αλγόριθμοι Αναζήτησης. Γ Λυκείου Κατεύθυνσης

Εργαστήριο 4. Εαρινό Εξάμηνο ΠΡΟΣΟΧΗ: Αρχίστε νωρίς το Εργαστήριο 4. Οι ασκήσεις είναι πιο απαιτητικές από τα προηγούμενα εργαστήρια.

Ειδικά θέματα Αλγορίθμων και Δομών Δεδομένων (ΠΛΕ073) Απαντήσεις 1 ου Σετ Ασκήσεων

ΠΡΟΣΟΜΟΙΩΣΗ ΠΑΝΕΛΛΑΔΙΚΩΝ ΕΞΕΤΑΣΕΩΝ Γʹ ΤΑΞΗΣ ΗΜΕΡΗΣΙΟΥ ΓΕΝΙΚΟΥ ΛΥΚΕΙΟΥ ΕΞΕΤΑΖΟΜΕΝΟ ΜΑΘΗΜΑ: ΑΕΠΠ ΤΡΙΤΗ 18 ΑΠΡΙΛΙΟΥ 2017 ΣΥΝΟΛΟ ΣΕΛΙΔΩΝ: ΕΠΤΑ (7)

Διάλεξη 16: Σωροί. Στην ενότητα αυτή θα μελετηθούν τα εξής επιμέρους θέματα: - Ουρές Προτεραιότητας - Ο ΑΤΔ Σωρός, Υλοποίηση και πράξεις

ΠΑΝΕΠΙΣΤΗΜΙΟ ΚΥΠΡΟΥ Τμήμα Πληροφορικής

ΚΕΦΑΛΑΙΟ 3 ΔΟΜΕΣ ΔΕΔΟΜΕΝΩΝ ΚΑΙ ΑΛΓΟΡΙΘΜΟΙ

Εργαστήριο 5. Εαρινό Εξάμηνο

Δομές Δεδομένων και Αλγόριθμοι

Οι βασικές λειτουργίες (ή πράξεις) που γίνονται σε μια δομή δεδομένων είναι:

Τεχνητή Νοημοσύνη Ι. Εργαστηριακή Άσκηση 4-6. Σγάρμπας Κυριάκος. Τμήμα Ηλεκτρολόγων Μηχανικών και Τεχνολογίας Υπολογιστων

Περιεχόμενα. Περιεχόμενα

ΑΝΑΠΤΥΞΗ ΕΦΑΡΜΟΓΩΝ ΣΕ ΠΡΟΓΡΑΜΜΑΤΙΣΤΙΚΟ ΠΕΡΙΒΑΛΛΟΝ ΕΠΑΝΑΛΗΠΤΙΚΟ ΔΙΑΓΩΝΙΣΜΑ ΣΧΟΛΙΚΟΥ ΕΤΟΥΣ

Δομές Δεδομένων. Δημήτρης Μιχαήλ. Δέντρα Αναζήτησης. Τμήμα Πληροφορικής και Τηλεματικής Χαροκόπειο Πανεπιστήμιο

f(x) = και στην συνέχεια

«Μηχανή Αναζήτησης Αρχείων» Ημερομηνία Παράδοσης: 30/04/2015, 09:00 π.μ.

Επανάληψη για τις Τελικές εξετάσεις. (Διάλεξη 24) ΕΠΛ 032: ΠΡΟΓΡΑΜΜΑΤΙΣΜΟΣ ΜΕΘΟΔΩΝ ΕΠΙΛΥΣΗΣ ΠΡΟΒΛΗΜΑΤΩΝ

Γ7.8 Εγγραφές (Structures) Γ Λυκείου Κατεύθυνσης

0 The quick brown fox leaped over the lazy lazy dog 1 Quick brown foxes leaped over lazy dogs for fun

1 η ΑΣΚΗΣΗ ΣΤΗΝ ΑΡΧΙΤΕΚΤΟΝΙΚΗ ΥΠΟΛΟΓΙΣΤΩΝ. Ακ. έτος , 5ο Εξάμηνο, Σχολή ΗΜ&ΜΥ

Ασκηση 1 [ ] Παράδοση : Τετάρτη , 13:00

ΠΡΟΓΡΑΜΜΑΤΙΣΜΟΣ ΜΑΘΗΜΑ 8 Ο. Ταξινόμηση και Αναζήτηση Συναρτήσεις χειρισμού οθόνης ΣΙΝΑΤΚΑΣ Ι. ΠΡΟΓΡΑΜΜΑΤΙΣΜΟΣ

Προγραμματιστικές Ασκήσεις, Φυλλάδιο 1

ΚΕΦΑΛΑΙΟ 5. Κύκλος Ζωής Εφαρμογών ΕΝΟΤΗΤΑ 2. Εφαρμογές Πληροφορικής. Διδακτικές ενότητες 5.1 Πρόβλημα και υπολογιστής 5.2 Ανάπτυξη εφαρμογών

ΠΡΟΓΡΑΜΜΑΤΙΣΜΟΣ Η/Υ Ακαδημαϊκό έτος ΤΕΤΡΑΔΙΟ ΕΡΓΑΣΤΗΡΙΟΥ #4

ΠΑΝΕΠΙΣΤΗΜΙΟ ΚΥΠΡΟΥ ΤΜΗΜΑ ΠΛΗΡΟΦΟΡΙΚΗΣ. ΑΣΚΗΣΗ 1 Συμβολοσειρές, Πίνακες, Δείκτες

Μαθήματα Scratch -Δραστηριότητα 1 Παλέτα Κίνηση

ΘΕΜΑ Α ΑΡΧΗ 1ΗΣ ΣΕΛΙΔΑΣ

Λογικός Προγραμματισμός Ασκήσεις

ΑΝΑΠΤΥΞΗ ΕΦΑΡΜΟΓΩΝ ΣΕ ΠΡΟΓΡΑΜΜΑΤΙΣΤΙΚΟ ΠΕΡΙΒΑΛΛΟΝ ΕΠΑΝΑΛΗΠΤΙΚΟ ΔΙΑΓΩΝΙΣΜΑ ΣΧΟΛΙΚΟΥ ΕΤΟΥΣ

ΣΕΤ ΑΣΚΗΣΕΩΝ 2. Προθεσµία: 15/11/09, 23:59

ΜΕΤΑΓΛΩΤΤΙΣΤΕΣ. Στην εξοικείωση με τη διαδικασία κατασκευής ενός Λεξικού Αναλυτή κάνοντας χρήση του lex.

Άσκηση 3 (ανακοινώθηκε στις 24 Απριλίου 2017, προθεσμία παράδοσης: 2 Ιουνίου 2017, 12 τα μεσάνυχτα).

Λογικός Προγραμματισμός Ασκήσεις

ΠΑΝΕΠΙΣΤΗΜΙΟ ΠΕΙΡΑΙΩΣ ΣΧΟΛΗ ΤΕΧΝΟΛΟΓΙΩΝ ΠΛΗΡΟΦΟΡΙΚΗΣ ΚΑΙ ΕΠΙΚΟΙΝΩΝΙΩΝ ΤΜΗΜΑ ΨΗΦΙΑΚΩΝ ΣΥΣΤΗΜΑΤΩΝ «ΔΟΜΕΣ ΔΕΔΟΜΕΝΩΝ»

Πληροφορική 2. Αλγόριθμοι

#include <stdlib.h> Α. [-128,127] Β. [-127,128] Γ. [-128,128]

Παλέτα Κίνηση. Καλό είναι πριν ξεκινήσετε το παρακάτω φυλλάδιο να έχετε παρακολουθήσει τα παρακάτω δύο videos: a) Εισαγωγή στο περιβάλλον του Scratch

Αλγόριθμοι Ταξινόμησης Μέρος 1

ΔΙΑΓΩΝΙΣΜΑ ΠΡΟΣΟΜΟΙΩΣΗΣ ΑΝΑΠΤΥΞΗ ΕΦΑΡΜΟΓΩΝ ΣΕ ΠΡΟΓΡΑΜΜΑΤΙΣΤΙΚΟ ΠΕΡΙΒΑΛΛΟΝ

ΑΝΑΠΤΥΞΗ ΕΦΑΡΜΟΓΩΝ ΣΕ ΠΡΟΓΡΑΜΜΑΤΙΣΤΙΚΟ ΠΕΡΙΒΑΛΛΟΝ ΠΡΟΣΑΝΑΤΟΛΙΣΜΟΥ (ΝΕΟ ΣΥΣΤΗΜΑ) 27 ΜΑΪΟΥ 2016 ΕΚΦΩΝΗΣΕΙΣ ÊÁËÁÌÁÔÁ

Διορθώσεις σελ

ΜΕΤΑΓΛΩΤΤΙΣΤΕΣ. Στις βασικές έννοιες που σχετίζονται με τη λεξική ανάλυση. Στη δήλωση ορισμό κανονικών εκφράσεων

Αυτόνομοι Πράκτορες. Εργασία εξαμήνου. Value Iteration και Q- Learning για Peg Solitaire

ΑΡΧΗ 1ης ΣΕΛΙΔΑΣ. ii) Πόσες φορές θα εκτελεστεί η εντολή ΔΙΑΒΑΣΕ Α[μ,λ] στον αλγόριθμο της προηγούμενης ερώτησης; α) 35 β) 12 γ) 20

Γ ΓΥΜΝΑΣΙΟΥ ΠΡΟΓΡΑΜΜΑΤΙΣΜΟΣ ΜΕ ΤΗ ΓΛΩΣΣΑ MicroWorlds Pro

ΠΑΝΕΠΙΣΤΗΜΙΟ ΠΑΤΡΩΝ ΠΟΛΥΤΕΧΝΙΚΗ ΣΧΟΛΗ ΤΜΗΜΑ ΜΗΧΑΝΙΚΩΝ ΗΛΕΚΤΡΟΝΙΚΩΝ ΥΠΟΛΟΓΙΣΤΩΝ ΚΑΙ ΠΛΗΡΟΦΟΡΙΚΗΣ

Εργαστήριο Επεξεργασίας Πληροφορίας και Υπολογισμών Τομέας Ηλεκτρονικής και Υπολογιστών. ΤΗΜΜΥ Α.Π.Θ Πέμπτη 19 / 12 / 2016 ΔΟΜΕΣ ΔΕΔΟΜΕΝΩΝ

Έστω ένας πίνακας με όνομα Α δέκα θέσεων : 1 η 2 η 3 η 4 η 5 η 6 η 7 η 8 η 9 η 10 η

Πανεπιστήμιο Πειραιώς Σχολή Τεχνολογιών Πληροφορικής και Επικοινωνιών Τμήμα Ψηφιακών Συστημάτων ομές εδομένων

Πανεπιστήμιο Πειραιώς Σχολή Τεχνολογιών Πληροφορικής και Επικοινωνιών Τμήμα Ψηφιακών Συστημάτων ομές εδομένων

HY-486 Αρχές Κατανεμημένου Υπολογισμού Εαρινό Εξάμηνο

ΦΥΣΙΚΗ ΓΕΝΙΚΗΣ ΠΑΙΔΕΙΑΣ Α ΛΥΚΕΙΟΥ

ΠΑΝΕΠΙΣΤΗΜΙΟ ΜΑΚΕΔΟΝΙΑΣ ΟΙΚΟΝΟΜΙΚΩΝ ΚΑΙ ΚΟΙΝΩΝΙΚΩΝ ΕΠΙΣΤΗΜΩΝ ΤΜΗΜΑ ΟΙΚΟΝΟΜΙΚΩΝ ΕΠΙΣΤΗΜΩΝ

Τελικός Κύκλος Διαγωνισμάτων Γ ΛΥΚΕΙΟΥ Κυριακή 17 Απριλίου 2016 Μάθημα: Α.Ε.Π.Π. KTIΡΙΟ ΤΜΗΜΑΤΑ ΚΑΛΟΚΑΙΡΙΝΑ ΑΡΓΥΡΟΥΠΟΛΗΣ - ΗΛΙΟΥΠΟΛΗΣ - ΓΛΥΦΑΔΑΣ

ΕΚΦΩΝΗΣΗ ΥΠΟΧΡΕΩΤΙΚΗΣ ΕΡΓΑΣΙΑΣ σε UML

Διαδικασιακός Προγραμματισμός

Δομές Δεδομένων. Δημήτρης Μιχαήλ. Ουρές Προτεραιότητας. Τμήμα Πληροφορικής και Τηλεματικής Χαροκόπειο Πανεπιστήμιο

Δυναμικός Κατακερματισμός. Βάσεις Δεδομένων Ευαγγελία Πιτουρά 1

Μεταγλωττιστές. Γιώργος Δημητρίου. Μάθημα 1 ο. Πανεπιστήμιο Θεσσαλίας - Τμήμα Ηλεκτρολόγων Μηχανικών & Μηχανικών Υπολογιστών

Κεφάλαιο 11 Ένωση Ξένων Συνόλων

ΣΤΗΛΗ Β ΑΠΟΤΕΛΕΣΜΑ 1. float(10) α pow(2,3) β abs(-10) γ int(5.6) δ. 10 ε. 5.6 Μονάδες 8 ΣΤΗΛΗ Α ΣΥΝΑΡΤΗΣΗ

Δομημένος Προγραμματισμός. Τμήμα Επιχειρηματικού Σχεδιασμού και Πληροφοριακών Συστημάτων

Τεχνητή Νοημοσύνη. 2η διάλεξη ( ) Ίων Ανδρουτσόπουλος.

Παλέτα Κίνηση. Για να μετακινήσουμε ένα αντικείμενο χρησιμοποιούμε την εντολή ΚΙΝΗΣΟΥ

Η δυαδική σχέση M ( «παράγει σε ένα βήμα» ) ορίζεται ως εξής: (q, w) M (q, w ), αν και μόνο αν w = σw, για κάποιο σ Σ

ΚΕΦΑΛΑΙΟ 10 ΥΠΟΠΡΟΓΡΑΜΜΑΤΑ

Transcript:

Ημερομηνία Ανάρτησης: 08/1/2018 Ημερομηνία Παράδοσης: - Αρχές Γλωσσών Προγραμματισμού Περιγραφή Προβλήματος Στην εργασία αυτή καλείστε να υλοποιήσετε ένα πρόγραμμα σε Haskell που θα επιλύει το παιγνίδι Rush Hour. Το Rush Hour είναι ένα puzzle με συρόμενα blocks το οποίο παίζεται σε ένα ταμπλό 6 6. Τα blocks, τα οποία αναπαριστούν αμαξίδια, είναι διαστάσεων 1 2, 1 3, 2 1 ή 3 1. Τα αμαξίδια μπορούν να μετακινηθούν μπρος και πίσω παράλληλα στην μεγάλη τους διάσταση. Μια νόμιμη κίνηση αποτελείται από την μετακίνηση οποιουδήποτε αμαξιδίου οσοδήποτε μεγάλο πλήθος θέσεων, αρκεί να μην παρεμποδίζεται από άλλο αμαξίδιο και να μην βγει εκτός ταμπλό. Στόχος του παιγνιδιού είναι το κόκκινο αμαξίδιο να απεγκλωβιστεί και να βγει μέσω της εξόδου στο δεξί άκρο του ταμπλό. Το παιγνίδι μπορεί εύκολα να γενικευτεί σε ταμπλό w h και αμαξίδια διαστάσεων 1 k για κάθε k, 2 k h και k 1 για κάθε k, 2 k w. Αναπαράσταση του παιγνιδιού σε ASCII Σχήμα 1. Rush Hour Για την αναπαράσταση μιας κατάστασης του παιγνιδιού σε ταμπλό w h χρησιμοποιούμε μια συμβολοσειρά h γραμμών, η κάθε μία από τις οποίες περιέχει w χαρακτήρες. Σε κάθε θέση που δεν υπάρχει αμαξίδιο, στην συμβολοσειρά δηλώνεται με μία τελεία (. ). Σε κάθε θέση που υπάρχει αμαξίδιο, στην συμβολοσειρά εμφανίζεται ένας χαρακτήρας ο οποίος ταυτοποιεί μοναδικά το αμαξίδιο. Για την ταυτοποίηση των αμαξιδίων μπορεί να χρησιμοποιηθεί οποιοσδήποτε χαρακτήρας ASCII εκτός από αυτόν της αλλαγής γραμμής ( \n ) και της τελείας (. ). Ειδικότερα το κόκκινο αμαξίδιο ταυτοποιείται πάντα από τον χαρακτήρα της ισότητας ( = ). Η διεύθυνση του κόκκινου αμαξιδίου είναι πάντα οριζόντια και θεωρούμε την έξοδο του ταμπλό στο δεξί άκρο της γραμμής που βρίσκεται αυτό. Για παράδειγμα η κατάσταση της εικόνας αναπαρίσταται ως εξής: "..abbb c.adee c==d.g.dhh igjj.k illl.k" Σχήμα 2. Αναπαράσταση σε ASCII 1

Ζητούμενοι τύποι δεδομένων Καλείστε να ορίσετε τους εξής τύπους: State Ο τύπος δεδομένων State θα αποτελεί μια κατάσταση του παιγνιδιού. Θα πρέπει να εμπεριέχει τις διαστάσεις του ταμπλό και τις θέσεις όλων των αμαξιδίων. Move Ο τύπος δεδομένων Move θα κωδικοποιεί μια κίνηση. Θα αποθηκεύεται ποιο αμαξίδιο και πως κινείται. Έχετε πλήρη ελευθερία στον τρόπο που θα αποθηκεύουν εσωτερικά οι παραπάνω τύποι τις απαραίτητες πληροφορίες. Πρέπει όμως να σκεφτείτε πως οι δομές που θα χρησιμοποιήσετε θα βοηθήσουν την αποδοτική υλοποίηση των παρακάτω συναρτήσεων. Ενδέχεται να χρειαστεί να ορίσετε σχέση διάταξης και ισότητας για τους παραπάνω τύπους δεδομένων. Ζητούμενες συναρτήσεις Καλείστε να ορίσετε τις εξής συναρτήσεις: readstate :: String -> State H συνάρτηση readstate θα δέχεται μια συμβολοσειρά με το συντακτικό που ορίζεται εδώ και θα επιστρέφει την κατάσταση του παιγνιδιού. writestate :: State -> String H συνάρτηση writestate είναι η αντίστροφη της readstate. Δεδομένου μιας κατάστασης παιγνιδιού επιστρέφει την αντίστοιχη συμβολοσειρά. Παράδειγμα: writestate (readstate "..abbb\nc.adee\nc==d..\n.g.dhh\nigjj.k\n illl.k\n") = "..abbb\nc.adee\nc==d..\n.g.dhh\nigjj.k\nilll.k\n" successormoves :: State -> [(Move, Int)] Η συνάρτηση successormoves βρίσκει όλες τις νόμιμες κινήσεις που μπορούν να γίνουν στην δεδομένη κατάσταση παιγνιδιού. Επιστρέφει μια λίστα με τις κινήσεις και τα κόστη τους. Για το συγκεκριμένο παιγνίδι θεωρούμε το κόστος κάθε κίνησης ίσο με 1. makemove :: State -> Move -> State Η συνάρτηση makemove θα πραγματοποιεί μια κίνηση στην κατάσταση παιγνιδιού που δέχεται και θα επιστρέφει την νέα κατάστασή που προκύπτει. Στην περίπτωση που η δοθείσα κίνηση δεν είναι νόμιμη, η τιμή της συνάρτησης είναι απροσδιόριστη. Παραδείγμα: > state = readstate "\n==.a\n\n\n" > moves = [move (move,cost)<-successormoves state] > length moves 3 > successorstates = map (makemove state) moves > map writestate successorstates ["\n.==a\n\n\n","\n==.a\n\n\n", "\n==..\n\n\n"] 2

finalstate :: State -> Bool Η συνάρτηση finalstate ελέγχει αν μια κατάσταση είναι τελική ή όχι, δηλαδή αν το κόκκινο αμαξίδιο έχει φτάσει στην έξοδο. Παραδείγματα: finalstate (readstate "...\n==.\n...")=false και finalstate (readstate "...\n.==\n...")=true solve :: State -> [Move] Η συνάρτηση solve επιλύει το παιγνίδι επιστρέφοντας μια ακολουθία κινήσεων που πρέπει να γίνουν ώστε από την δεδομένη κατάσταση να βρεθούμε σε μια τελική. Θα πρέπει να πραγματοποιεί απληροφόρητη (uninformed) αναζήτηση, δηλαδή να μην χρησιμοποιεί καμία επιπλέον πληροφορία για τις καταστάσεις, πέρα από αυτές που παρέχονται από τον ορισμό του προβλήματος (αρχική κατάσταση, τελικές καταστάσεις και συνάρτηση διαδόχων καταστάσεων). Επιπλέον η συνάρτηση θα πρέπει να δουλεύει ανεξάρτητα της εσωτερικής δομής των τύπων State και Move. Αυτό σημαίνει ότι επανορίζοντας τους τύπους δεδομένων State και Move και τις συναρτήσεις successormoves, makemove και finalstate, η solve θα πρέπει να είναι σε θέση να λύσει οποιοδήποτε άλλο πρόβλημα αναζήτησης. Παραδείγματα: > :{ printsolution s [] = putstrln (writestate s) printsolution s (m:ms) = do {putstrln (writestate s); printsolution (makemove s m) ms} :} > state = readstate "\n==.a\n\n\n" > printsolution state (solve state) ==.a ==....== > state = readstate "..abbb\n..a.c.\n..==c.\n\n\n\n" > printsolution state (solve state)..abbb..a.c. 3

..==c...abbb..a.c....bbb.bbb...bbbc. ==.bbbc. == 4

Bonus Ζητούμενα (+20%) heuristic :: State -> Int Η heuristic θα είναι μια συνάρτηση εκτίμησης του κόστους (του πλήθους των κινήσεων) της φθηνότερης διαδρομής προς μια τελική κατάσταση. Μια καλή και γρήγορη αξιολόγηση της κάθε κατάστασης μπορεί να βελτιώσει σημαντικά τον χρόνο της αναζήτησης, καθώς επεκτείνονται πρώτα οι κόμβοι που πλησιάζουν σε μια τελική κατάσταση. Πρέπει να ισχύει finalstate s=true heuristic s=0. solve_astar :: State -> [Move] Η συνάρτηση solve_astar θα επιλύει το παιγνίδι, αντίστοιχα με την solve, αλλά αντί για απληροφόρητη αναζήτηση θα εκτελεί τον αλγόριθμο A*, με ευρετική συνάρτηση την heuristic. Για την υλοποίηση του A* θα χρειαστείτε να ορίσετε έναν νέο τύπο δεδομένων PriorityQueue που θα υλοποιεί μια ουρά προτεραιότητας με την χρήση της δομής pairing heap. Παρατηρήσεις 1. Στην περίπτωση που υλοποιήσετε το bonus τμήμα της εργασίας η solve μπορεί να υλοποιηθεί ακριβώς όπως η solve_astar με ευρετική συνάρτηση την (λx.0). 2. Ενθαρρύνεται η χρήση βιβλιοθηκών που παρέχει ο μεταγλωττιστής ghc και ειδικά δομών δεδομένων όπως η Data.Set και η Data.Map. Απαγορεύεται η χρήση πακέτων της Haskell που δεν περιλαμβάνει ο ghc. 3. Στην περίπτωση που έχετε χρησιμοποιήσει κάποιο τμήμα κώδικα από το Internet, από κάποιο βιβλίο κλπ, πρέπει να αναφέρετε ρητά την πηγή του. Παράδοση Άσκησης Η άσκηση μπορεί να γίνει από ένα άτομο ή μια ομάδα δύο ατόμων (προτείνεται). Στη δεύτερη περίπτωση θα παραδοθεί μόνο από το ένα άτομο της ομάδας. Τα ονόματα των συναρτήσεων που θα δημιουργήσετε πρέπει να είναι ακριβώς τα ίδια με αυτά που καθορίζονται από την παραπάνω εκφώνηση. Θα πρέπει να παραδώσετε ένα αρχείο της μορφής sdiyy00ννν_sdiyy00ννν.zip με όνομα τους αριθμούς μητρώου σας. Το zip θα περιέχει ένα αρχείο rush_hour.hs με τις λύσεις σας για τα παραπάνω ζητούμενα και ένα αρχείο README.pdf που θα περιγράφει την υλοποίηση σας, θα επεξηγεί τις επιλογές σας για τον τρόπο που δομήσατε τους τύπους State και Move και θα αναφέρει τυχόν παραδοχές που κάνατε. Η ημερομηνία παράδοσης θα ανακοινωθεί σύντομα. Το παραδοτέο αρχείο.zip θα το στείλετε με email στις παρακάτω διευθύνσεις: sdi1400016@di.uoa.gr, sdi1400221@di.uoa.gr και prondo@di.uoa.gr. Ερωτήσεις σχετικά με την άσκηση θα πρέπει να απευθύνονται στα πρώτα δύο emails (Σπύρος Αυλωνίτης και Γιάννος Χατζηαγάπης). 5