Problem B
Mallåtergivning II
-
Förutom uppslagslistor och strängar kan nu kontexter också innehålla vanliga listor.
-
Förutom put-taggen så används en ny sorts tagg i mallarna, for-taggen. Denna tagg går igenom varje element i en lista och renderar en mall med varje element i listan givet som kontext. Om det som förväntas vara en lista i for-taggen är odefinierat eller något annat än en lista förväntas taggen ersättas med en tom sträng (se exempel nedan).
Indata
Den första raden innehåller ett heltal $N$, antalet kommandon.
Därefter följer $N$ kommandon.
Det finns tre olika kommandon:
-
load_context K A, ladda in en kontext med namnet $K$, följande $A$ rader innehåller kontexten angiven i JSON.
-
load_template M B, ladda in en mall med namnet $M$, följande $B$ rader innehåller mallen.
-
render M K, återge den senast inladdade mallen med namnet $M$ utifrån den senast inladdade kontexten med namnet $K$ och skriv ut resultatet. Du kan anta att en sådan mall och en sådan kontext alltid existerar.
Utdata
Ditt program ska skriva ut resultatet av alla render-kommandon.
Sample Input 1 | Sample Output 1 |
---|---|
4 load_context student_context 13 { "course": { "code": "DM1595" }, "students": [ { "name": "Vera" }, { "name": "Philip" } ] } load_template student_template 1 - {{ put student.name }} load_template master_template 3 Följande studenter: {{ for student in students render student_template }} Välkomnas härmed till kursen {{ put course.code }} render master_template student_context |
Följande studenter: - Vera - Philip Välkomnas härmed till kursen DM1595 |
Sample Input 2 | Sample Output 2 |
---|---|
4 load_context bong_joon_ho_context 36 { "person": { "name": "Bong Joon-ho", "role": "Director", "movies": [ { "name": "Okja", "year": "2017", "cast": [ { "name": "Tilda Swinton", "role": "Actor" }, { "name": "Paul Dano", "role": "Actor" } ] }, { "name": "Parasite", "year": "2019", "cast": [ { "name": "Song Kang-ho", "role": "Actor" }, { "name": "Lee Sun-kyun", "role": "Actor" } ] } ] } } load_template movie_template 4 --- Movie: {{ put movie.name }} ({{ put movie.year }}) People: {{ for person in movie.cast include person_template }} load_template person_template 3 * Name: {{ put person.name }} * Role: {{ put person.role }} {{ for movie in person.movies include movie_template }} render person_template bong_joon_ho_context |
* Name: Bong Joon-ho * Role: Director --- Movie: Okja (2017) People: * Name: Tilda Swinton * Role: Actor * Name: Paul Dano * Role: Actor --- Movie: Parasite (2019) People: * Name: Song Kang-ho * Role: Actor * Name: Lee Sun-kyun * Role: Actor |
Sample Input 3 | Sample Output 3 |
---|---|
4 load_context context 8 { "a": "hi", "b": [], "c": { "a": "hi" }, "d": ["hello"] } load_template sub_template 1 the message is {{ put message }}! load_template super_template 4 a: {{ for message in a include sub_template }} b: {{ for message in b include sub_template }} c: {{ for message in c include sub_template }} d: {{ for message in d include sub_template }} render super_template context |
a: b: c: d: the message is hello! |