CCC-10 (2010) - J3 (Punchy)

View as PDF

Submit solution

Points: 20 (partial)
Time limit: 1.0s
Memory limit: 256M

Author:
Problem type
Allowed languages
C, C++, Java, Pascal, Python
Punchy

Στα πρώτα χρόνια της πληροφορικής, οι εντολές έπρεπε να «τρυπηθούν» πάνω σε ορθογώνιες κάρτες, μία εντολή ανά κάρτα. Αυτή η τράπουλα καρτών τροφοδοτούνταν στη συνέχεια σε μια συσκευή ανάγνωσης καρτών, ώστε το πρόγραμμα να μπορεί να διαβαστεί και να εκτελεστεί. Οι μαθητές έβαζαν λαστιχάκια γύρω από την τράπουλα τους και, συχνά, φύλασσαν τις κάρτες τους σε ένα κουτί, φοβούμενοι μην αναδιατάσσονταν με αποτέλεσμα το πρόγραμμά τους να ήταν λανθασμένο.

Ο καημένος ο Bill όμως... άφησε τις κάρτες του ακριβώς δίπλα σε ένα παράθυρο, ο αέρας φύσηξε την τακτοποιημένη του τράπουλα παντού και το πρόγραμμά του ανακατεύτηκε! Ο Bill αποφασίζει τότε να μαζέψει τις κάρτες με κάποια τυχαία σειρά και μετά να εκτελέσει το πρόγραμμα.

Γράψτε ένα πρόγραμμα που θα διαβάζει και θα εκτελεί τις εντολές του «νέου» προγράμματος του Bill.

Είσοδος

Η γλώσσα προγραμματισμού που χρησιμοποιεί ο Bill χρησιμοποιεί μόνο δύο μεταβλητές (A και B) και επτά διαφορετικούς τύπους εντολών.

Αρχικά, οι μεταβλητές A και B περιέχουν την τιμή 0.

Υπάρχει μία εντολή ανά γραμμή. Μια εντολή είναι ένας ακέραιος αριθμός μεταξύ του 1 και του 7, πιθανώς ακολουθούμενος από ένα όνομα μεταβλητής, το οποίο με τη σειρά του πιθανώς ακολουθείται είτε από έναν αριθμό είτε από μια μεταβλητή.

Σε όλες τις παρακάτω εντολές, η μεταβλητή X ή Y μπορεί να αναφέρεται είτε στο A είτε στο B. Οι συγκεκριμένες εντολές είναι:

  • 1\;X\;n σημαίνει ορίστε στη μεταβλητή X την ακέραια τιμή n.
  • 2\;X σημαίνει εξάγετε την τιμή της μεταβλητής X στην οθόνη.
  • 3\;X\;Y σημαίνει υπολογίστε το X + Y και αποθηκεύστε το αποτέλεσμα στη μεταβλητή X.
  • 4\;X\;Y σημαίνει υπολογίστε το X * Y και αποθηκεύστε το αποτέλεσμα στη μεταβλητή X.
  • 5\;X\;Y σημαίνει υπολογίστε το X - Y και αποθηκεύστε το αποτέλεσμα στη μεταβλητή X.
  • 6\;X\;Y σημαίνει να υπολογίσετε το πηλίκο του X/Y και αποθηκεύστε την τιμή στη μεταβλητή X ως ακέραιο αριθμό, απορρίπτοντας το υπόλοιπο.
  • 7 σημαίνει διακοπή της εκτέλεσης του προγράμματος.

Μπορείτε να υποθέσετε ότι όλες οι εντολές που περιέχουν διαίρεση δεν οδηγούν σε διαίρεση με το μηδέν και ότι όλες οι άλλες εντολές (συμπεριλαμβανομένης της εντολής 1) δεν έχουν ως αποτέλεσμα η τιμή που υπολογίζεται να είναι μεγαλύτερη από 10000 ή μικρότερη από -10000. (Διευκρίνιση: οι διαιρέσεις των αρνητικών αριθμών, -3/2 και 3/-2 έχουν και οι δύο πηλίκο -1 και η -3/-2 έχει επίσης πηλίκο 1.)

Έξοδος

Το πρόγραμμά σας θα πρέπει να εξάγει την τιμή των υποδεικνυόμενων μεταβλητών, έναν ακέραιο ανά γραμμή, μέχρι να διαβαστεί η εντολή «διακοπή», οπότε το πρόγραμμά σας θα πρέπει να σταματήσει την εκτέλεση.

Παράδειγμα

input

1 A 3
1 B 4
2 B

output

4

input

2 A

output

3

input

3 A B
2 A

output

7

input

5 A A
2 A

output

0

input

2 B

output

4

input

7

Comments

There are no comments at the moment.