Hide

Problem A
Mallåtergivning I

/problems/kth.dm1595.templaterendering1/file/statement/sv/img-0001.png
Denna uppgift går ut på att implementera ett program som återger mallar utifrån kontexter.

I denna laboration är en mall ett stycke av text inom vilket teckenföljderna {{ och }} har en speciell innebörd. Dessa teckenföljder används för att avgränsa taggar.

I denna laboration är en kontext ett JSON-objekt bestående av uppslagslistor och strängar.

En exempel på en mall är följande textstycke:

Hej {{ put student.name }},
Välkommen till den
första laborationen
i {{ put course.code }}.

Denna mall innehåller en tagg på första raden, {{ put student.name }}, och en tag på sista raden {{ put course.code }}. Detta innebär att mallen förväntas återges med en kontext där student.name är och course.code är definierade.

Ett exempel på en sådan kontext är följande:

{
  "student": {
    "name": "Anton"
  },
  "course": {
    "code": "DM1595"
  }
}

Om mallen ovan återges med den givna kontexten förväntas resultatet att vara följande:

Hej Anton,
Välkommen till den
första laborationen
i DM1595.

Om till exempel course.code inte vore definierat, eller vore något annat än en sträng i den givna kontexten förväntas taggen ersättas av en tom sträng.

Din uppgift är att skapa ett program som, givet en uppsättning mallar och en uppsättning kontexter, återger en given mall med dess taggar ersatta med värdet som taggens innehåll har i en given kontext.

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 vars namn är $M$ utifrån den senast inladdade kontexten vars namn är $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
3
load_context student_context 8
{
  "student": {
    "name": "Anton"
  },
  "course": {
    "code": "DM1595"
  }
}
load_template student_template 4
Hej {{ put student.name }},
Välkommen till den
första laborationen
i {{ put course.code }}.
render student_template student_context
Hej Anton,
Välkommen till den
första laborationen
i DM1595.
Sample Input 2 Sample Output 2
7
load_context student_context 8
{
  "student": {
    "name": "Anton"
  },
  "course": {
    "code": "DM1595"
  }
}
load_template student_template 4
Hej {{ put student.name }},
Välkommen till den
första laborationen
i {{ put course.code }}.
render student_template student_context
load_context student_context 8
{
  "student": {
    "name": "Lars"
  },
  "course": {
    "code": "DD2458"
  }
}
render student_template student_context
load_context student_context 1
{}
render student_template student_context
Hej Anton,
Välkommen till den
första laborationen
i DM1595.
Hej Lars,
Välkommen till den
första laborationen
i DD2458.
Hej ,
Välkommen till den
första laborationen
i .

Please log in to submit a solution to this problem

Log in