! Το παιχνιδι νιμ παιζεται με 2 παιχτες χρησιμοποιωντας σπιρτα ως εξης:υπαρχουν 4 γραμμες και αρχικα ! στην πρωτη γραμμη εχουμε 1 σπιρτο στη δευτερη 3 στην τριτη 5 και στην τεταρτη 7 σπιρτα. ! Καθε παιχτης οταν ερθει η σειρα του μπορει να αφαιρεσει απο μια γραμμη της επιλογης του απο 1 μεχρι ! και ολα τα σπιρτα αυτης της γραμμης που διαλεξε. Απαγορευεται να αφαιρει σπιρτα απο διαφορετικες γραμμες ! στον ιδιο γυρο ή να επιλεξει γραμμη που δεν εχει τουλαχιστον 1 σπιρτο. Ο παιχτης που θα παρει το τελευταιο ! σπιρτο ειναι ο ΗΤΤΗΜΕΝΟΣ. Να φτιαξετε προγραμμα σε γλωσσα που θα προσομειωνει το παιχνιδι αυτο μεταξυ ! υπολογιστη και παιχτη με τον υπολογιστη να παιζει παντα δευτερος.να κανετε τον υπολογιστη να νικαει παντα ΠΡΟΓΡΑΜΜΑ Παιχνίδι_ΝΙΜ ΜΕΤΑΒΛΗΤΕΣ ΑΚΕΡΑΙΕΣ: A[4], turn , row, quant, Winner[1357] ! Α ο πίνακας με τα σπίρτα κάθε σειράς ΑΡΧΗ ΚΑΛΕΣΕ init(A, Winner) row <- 0 quant <- 0 turn <- 0 ΑΡΧΗ_ΕΠΑΝΑΛΗΨΗΣ turn <- turn+1 ΚΑΛΕΣΕ show(A) ΑΝ turn MOD 2 = 1 ΤΟΤΕ ΚΑΛΕΣΕ getMove (A, turn, row, quant) A[row] <- A[row]-quant ΑΛΛΙΩΣ ΚΑΛΕΣΕ myMove (A, Winner) ΤΕΛΟΣ_ΑΝ ΜΕΧΡΙΣ_ΟΤΟΥ sum(A)=1 ΚΑΛΕΣΕ show(A) ΓΡΑΨΕ 'Παίκτη ', 2-(turn+1)MOD 2, ' έχασες !' ΤΕΛΟΣ_ΠΡΟΓΡΑΜΜΑΤΟΣ ΔΙΑΔΙΚΑΣΙΑ show(A) ! εμφανίζει τις σειρές με τα σπίρτα ΜΕΤΑΒΛΗΤΕΣ ΑΚΕΡΑΙΕΣ: A[4], i, j ΧΑΡΑΚΤΗΡΕΣ: string ΑΡΧΗ ΓΡΑΨΕ ΓΡΑΨΕ 'Σπίρτα:' ΓΙΑ i ΑΠΟ 1 ΜΕΧΡΙ 4 string <- '' ΓΙΑ j ΑΠΟ 1 ΜΕΧΡΙ A[i] string <- string + '__ ' ΤΕΛΟΣ_ΕΠΑΝΑΛΗΨΗΣ ΓΡΑΨΕ 'Γραμμή ',i,' : ', string ΓΡΑΨΕ ΤΕΛΟΣ_ΕΠΑΝΑΛΗΨΗΣ ΤΕΛΟΣ_ΔΙΑΔΙΚΑΣΙΑΣ ΣΥΝΑΡΤΗΣΗ sum(A):ΑΚΕΡΑΙΑ ! άθροισμα του πίνακα ΜΕΤΑΒΛΗΤΕΣ ΑΚΕΡΑΙΕΣ: A[4], i, s ΑΡΧΗ s<-0 ΓΙΑ i ΑΠΟ 1 ΜΕΧΡΙ 4 s <- s+ A[i] ΤΕΛΟΣ_ΕΠΑΝΑΛΗΨΗΣ sum <- s ΤΕΛΟΣ_ΣΥΝΑΡΤΗΣΗΣ ΔΙΑΔΙΚΑΣΙΑ getMove(A, turn, row, quant) ! διαβάζει την κίνηση του παίκτη, ελέγχοντας ΜΕΤΑΒΛΗΤΕΣ ΑΚΕΡΑΙΕΣ: A[4], turn, row, quant ΛΟΓΙΚΕΣ: done ΑΡΧΗ ΑΡΧΗ_ΕΠΑΝΑΛΗΨΗΣ ΓΡΑΨΕ ΓΡΑΨΕ 'Παίκτη ', 2-turn MOD 2, ' δώσε την κίνησή σου (πόσα παίρνεις και από ποια γραμμή)' ΔΙΑΒΑΣΕ quant, row done <- ΑΛΗΘΗΣ ΑΝ row<1 Η row>4 ΤΟΤΕ ΓΡΑΨΕ 'άκυρη κίνηση ! ξανα!' done <- ΨΕΥΔΗΣ ΑΛΛΙΩΣ_ΑΝ A[row]0 ΚΑΙ ΟΧΙ gotit ΕΠΑΝΑΛΑΒΕ ΟΣΟ D[dig]>0 ΚΑΙ ΟΧΙ gotit ΕΠΑΝΑΛΑΒΕ D[dig] <- D[dig]-1 n <- arrayTOnum(D) gotit <- Winner[n]=0 ΤΕΛΟΣ_ΕΠΑΝΑΛΗΨΗΣ ΑΝ ΟΧΙ gotit ΤΟΤΕ D[dig]<-Copy[dig] dig <- dig -1 ΑΝ dig=0 ΤΟΤΕ dig <- 1 D[dig] <-0 ! για να τελειώσει ΤΕΛΟΣ_ΑΝ ΤΕΛΟΣ_ΑΝ ΤΕΛΟΣ_ΕΠΑΝΑΛΗΨΗΣ ΑΝ gotit ΤΟΤΕ whereto <- n ! 'winner' ΑΛΛΙΩΣ whereto <- 0 ! loser, δεν υπάρχει διαδρομή προς τη νίκη ΤΕΛΟΣ_ΑΝ ΤΕΛΟΣ_ΣΥΝΑΡΤΗΣΗΣ ΔΙΑΔΙΚΑΣΙΑ myMove(A, Winner) ! διαλέγει την επόμενη κατάσταση για να κερδίσω ΜΕΤΑΒΛΗΤΕΣ ΑΚΕΡΑΙΕΣ: i , j, n, A[4], D[4], Winner[1357] ΑΡΧΗ ΓΡΑΨΕ ΓΡΑΨΕ 'Σειρά μου ...' i <- arrayTOnum(A) n <- Winner[i] ΓΙΑ i ΑΠΟ 4 ΜΕΧΡΙ 1 ΜΕ_ΒΗΜΑ -1 D[i] <- n MOD 10 n <- n DIV 10 ΤΕΛΟΣ_ΕΠΑΝΑΛΗΨΗΣ i <- diff (A, D) j <- diff (D, A) ΓΡΑΨΕ 'Παίρνω ', Α_Μ(Α_Τ(A[i]-D[j])), ' από τη γραμμή ',i A[i] <- D[j] ΤΕΛΟΣ_ΔΙΑΔΙΚΑΣΙΑΣ ΣΥΝΑΡΤΗΣΗ diff(A,B):ΑΚΕΡΑΙΑ ! βρίσκει το πρώτο κελί του Α που δεν έχει αντίστοιχο στον Β ΜΕΤΑΒΛΗΤΕΣ ΑΚΕΡΑΙΕΣ: A[4], B[4], i, j, pos , N, temp ΛΟΓΙΚΕΣ: found ΑΡΧΗ N <- 4 ΓΙΑ i ΑΠΟ 1 ΜΕΧΡΙ 4 j <- 1 found <- ΨΕΥΔΗΣ ΟΣΟ j<=N ΚΑΙ ΟΧΙ found ΕΠΑΝΑΛΑΒΕ ΑΝ A[i]=B[j] ΤΟΤΕ found <- ΑΛΗΘΗΣ ΑΛΛΙΩΣ j <- j+1 ΤΕΛΟΣ_ΑΝ ΤΕΛΟΣ_ΕΠΑΝΑΛΗΨΗΣ ΑΝ found ΤΟΤΕ temp<-B[j] B[j]<-B[N] B[N]<-temp N <- N-1 ΑΛΛΙΩΣ pos <- i ΤΕΛΟΣ_ΑΝ ΤΕΛΟΣ_ΕΠΑΝΑΛΗΨΗΣ diff <- pos ΤΕΛΟΣ_ΣΥΝΑΡΤΗΣΗΣ