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! |
