COCI-15 (2015) - Γύρος #7 - 1 (Nizovi)

View as PDF

Submit solution

Points: 15 (partial)
Time limit: 1.0s
Memory limit: 64M

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

Ένας πίνακας σε μια συγκεκριμένη γλώσσα προγραμματισμού ορίζεται με τον ακόλουθο τρόπο:

  • Η αρχή και το τέλος ενός πίνακα συμβολίζονται με ανοιχτό και κλειστό άγκιστρο, αντίστοιχα.
  • Μέσα στα άγκιστρα, υπάρχουν (πιθανώς ακόμη και 0) τιμές που χωρίζονται με κόμμα (δεν υπάρχει κόμμα μετά την τελευταία τιμή στον πίνακα).
  • Κάθε τιμή μπορεί να είναι μια λέξη (μια σειρά από πεζά γράμματα του αγγλικού αλφαβήτου) ή άλλος πίνακας.
  • Παραδείγματα σωστά καθορισμένων πινάκων είναι: \{\},\;\{a,b,c\},\;\{abc,znj,\{novi,niz\},pozz\}

Πρόσφατα, παρατηρήσατε ότι η γλώσσα προγραμματισμού δεν εμφανίζει σφάλμα εάν δεν τοποθετήσετε τον κατάλληλο αριθμό διαστημάτων και νέων γραμμών πριν ή μετά τα άγκιστρα ή τα κόμματα. Δεδομένου του γεγονότος ότι σας πειράζει να "συμπιέζονται" οι τιμές μαζί, αποφασίσατε να ξεκινήσετε τη δουλειά και να τροποποιήσετε το σχήμα του πίνακα με τον ακόλουθο τρόπο:

  • Κάθε τιμή που δεν είναι πίνακας ή υποδηλώνει την αρχή ή το τέλος του πίνακα (άγκιστρα) θα είναι στη δική του γραμμή.
  • Τα κόμματα "συνδέονται" με την τιμή που βρίσκεται ακριβώς πριν από αυτές και υπάρχει μια νέα γραμμή μετά από κάθε κόμμα.
  • Μετά από το άγκιστρο που υποδηλώνει την αρχή του πίνακα, η εσοχή του περιεχομένου αυξάνεται (μετατοπίζοντας την εξόδο προς τα δεξιά) για 2 κενά.
  • Πριν από το άγκιστρο που υποδηλώνει το τέλος του πίνακα '}', η εσοχή του περιεχομένου μειώνεται (μετατοπίζοντας την εξόδο προς τα αριστερά) για 2 κενά.
Είσοδος

Η πρώτη γραμμή εισόδου περιέχει τον πίνακα χαρακτήρων S\;(1 \leq |S| \leq 1500).

Έξοδος

Η έξοδος πρέπει να αποτελείται από την τροποποιημένη έκδοση του πίνακα.

Βαθμολογία

Σε περιπτώσεις δοκιμής αξίας 50% των συνολικών πόντων, όλες οι τιμές στον πίνακα θα είναι λέξεις (με άλλα λόγια, δεν θα ισχύει ότι μια τιμή είναι ένας άλλος πίνακας).

Παραδείγματα

input

{abc,ono,sto}

output

{
  abc,
  ono,
  sto
}

input

{}

output

{
}

input

{znakovi}

output

{
  znakovi
}

input

{a,b,{c,d},e,{}}

output

{
  a,
  b,
  {
    c,
    d
  },
  e,
  {
  }
}
Επεξήγηση του 4ου παραδείγματος:

Στην αρχή δεν υπάρχει εσοχή, είναι 0. Μετά το πρώτο άγκιστρο, υπάρχει μια νέα γραμμή και η εσοχή αυξάνεται κατά 2 κενά.
Μετά από αυτό, τυπώνεται η λέξη "a", καθώς και το κόμμα αμέσως μετά από αυτήν, στη συνέχεια τυπώνεται η νέα γραμμή με 2 εσοχές. Η ίδια διαδικασία επαναλαμβάνεται για τη λέξη "b".
Η τρίτη τιμή στον πίνακα είναι ένας νέος πίνακας (ας τον ονομάσουμε πίνακα X). Ξεκινά με ένα άγκιστρο, οπότε θα πρέπει να τυπώσουμε μια νέα γραμμή και να αυξήσουμε την εσοχή για 2 κενά. Η εσοχή είναι πλέον συνολικά 4 κενά. Χρησιμοποιώντας αυτή η εσοχή, τυπώνουμε τις λέξεις "c" και "d" την καθεμία στη δική της γραμμή. Μετά τη λέξη "d", δεν υπάρχει κόμμα γιατί είναι η τελευταία τιμή στον πίνακα X.
Πριν εκτυπώσουμε το άγκιστρο που υποδηλώνει το τέλος του πίνακα X, πρέπει να μειώσουμε την εσοχή κατά 2. Μετά το άγκιστρο, εκτυπώνουμε το κόμμα, μια νέα γραμμή και ύστερα συνεχίζουμε την εκτύπωση των τιμών από την κύρια πίνακας.


Comments

There are no comments at the moment.