By DePaul Dimadis
Choose your prefered Language: greek_flag uk_flag
Oops It looks like there is not an english translation available yet .

Σε αυτό το πρόβλημα, θα διερευνήσουμε λίγο πώς λειτουργεί το AI. Θα το κάνουμε αυτό με ένα απλό πρόβλημα: την οικοδόμηση
ενός παίχτη για να παίξει το δημοφιλές παιχνίδι Μπλάκτζακ.

Το Blackjack είναι ένα παιχνίδι καρτών που παίζεται με τράπουλα των 52 φύλλων. Τα χρώματα δεν έχουν σημασία στο blackjack και έτσι θα χρησιμοποιήσουμε γράμματα για να υποδείξουμε τις διάφορες κάρτες: A, 2, 3, 4, 5, 6, 7, 8, 9, 10, J, Q, Κ.
Στόχος του Μπλάκτζακ είναι ο παίκτης να φτάσει όσο πιο κοντά στους 21 πόντους, χωρίς να φτάσει υψηλότερα. Κάθε μία από τις δεκατρείς κάρτες
παραπάνω δίνει τους εξής πόντους: οι αριθμοί αξίζουν την δεδομένη αξία τους (2 μονάδες για 2, 7 μονάδες για 7, κ.λπ.).
Τα J, Q και K αξίζουν 10 πόντους. Το Α αξίζει είτε 1 είτε 11 σημεία, όποιο είναι καλύτερο για τον παίκτη.

Ο παίκτης έχει μερικά φύλλα στο δικό του
χέρι. Στη συνέχεια, πρέπει να αποφασίσουν εάν θα κάνουν "call"  ή "stay". Το "call" σημαίνει ότι ζητάει επιπλέον κάρτα, το "stay" σημαίνει ότι
σταματάει με το τρέχον σύνολο στο χέρι. Οι παίκτες προσπαθούν γενικά
να κάνουν "call" μέχρι την πιθανότητα ότι μια άλλη κάρτα θα τους ωθήσει
πάνω από 21. Για παράδειγμα, αν ένας παίκτης έχει 5 και 7, υπάρχει
 μια σχετικά μικρή πιθανότητα ότι μια άλλη κάρτα θα τους ωθούσε
πάνω από 21 (μόνο τα J, Q, και K θα το έκαναν αυτό, δεδομένου 12 + 10 = 22).
 Από την άλλη πλευρά, αν έχουν 5, 6 και 7, θα κάνουν
 πιθανώς "stay", επειδή οποιαδήποτε κάρτα άνω των 3 θα τους ωθούσε πάνω από 21 πόντους.
 
Ο σαφής στόχος στο Μπλάκτζακ είναι να πλησιάσετε στο 21
εγγύτερα από τον dealer. Οι dealer πρέπει να ακολουθήσουν ένα σύνολο καθορισμένων κανόνων για το πότε να γίνει "hit" ή να γίνει "stay". Αυτοί είναι οι κανόνες που θα χρησιμοποιήσουμε παίζοντας το AI_Blackjack.
 
Οι κανόνες είναι οι εξής:
 
 - Ο dealer πρέπει να κάνει "call" αν το σύνολο του είναι κάτω των 17.
 - Ο dealer πρέπει να κάνει "stay" μόλις το σύνολο είναι 17 ή
   πιο ψηλά.
 - Ένας άσος (Α) θα πρέπει να υπολογίζεται ως 11 εάν το τοποθετεί το τρέχον σύνολο μεταξύ 17 και 21 βαθμών. Αν το σύνολο ξεπερνάει τους 21, ωστόσο, θα πρέπει να υπολογίζεται ως 1.
 
      Για παράδειγμα, φανταστείτε ότι οι πρώτες κάρτες του ντίλερ είναι Α και 3.
Το σύνολο των πόντων είναι είτε 4 είτε 14, και τα δύο κάτω των 17, έτσι
κάνει "call". Η επόμενη κάρτα είναι 9. Αν υπολογίσουμε το Α έως 11 τότε
το σύνολο τους είναι τώρα 23 (11 + 3 + 9), και έτσι μετράμε το
A ως 1. Το σύνολο τους τώρα είναι 13, επομένως ξανακάνει "call". Η επόμενη
κάρτα είναι 7, οπότε το σύνολο τους είναι 20, οπότε τώρα κάνει "stay".
 
      Να γραφεί συνάρτηση που ονομάζεται next_move. Η next_move θα πρέπει να έχει μια παράμετρο, ένα string(μια συμβολοσειρά). Κάθε χαρακτήρας της συμβολοσειράς θα είναι μια κάρτα στο τρέχον χέρι του ντίλερ, όπως "AK" ή
 "175". Η συνάρτηση πρέπει να επιστρέψει μία από τα τρία string(τις τρεις συμβολοσειρές):
 
 - "Call" εάν ο ντίλερ χρειάζεται να πάρει άλλη κάρτα.
 - "Stay" αν ο ντίλερ δεν χρειάζεται να πάρει άλλη κάρτα.
 - "Bust" αν το ποσό είναι ήδη πάνω από 21.
 
 Θυμηθείτε ότι o αλγόριθμος σας είναι μόνο υπεύθυνος για το παιχνίδι
και για μια κίνηση κάθε φορά. Λαμβάνει ένα string (μια συμβολοσειρά) που αντιπροσωπεύει το τρέχον χέρι, επιστροφή "Hit", "Stay" ή "Bust".