Tävlingsprogrammering/Uppgifter/Vikingahackare

Problemformulering

redigera

Lösning

redigera

Detta problem var en ren implementationsuppgift, så inga smarta insikter behövdes för att lösa det.

För att göra översättningen av bitsträngar enkel så kan man exempelvis spara alfabetet i en map, vilket finns tillgängligt i standardbiblioteken. Ett annat alternativ är att göra om bitsträngarna till heltal (mellan 0 och 15) och sedan använda dessa för att indexera en array.

Det enda som återstår sedan är att dela upp strängen som ska översättas i substrängar av längd 4 och översätta dem var för sig. Om ingen översättning finns till en substräng så ska istället "?" användas som default-värde.

Lösning i C++ av Johan Sannemo:

#include <string>
#include <iostream>
#include <map>
 
using namespace std;
 
int main(){
    int N;
    cin >> N;
    map<string, string> translate;
    for (int i = 0; i < N; ++i){
        string sign, code;
        cin >> sign >> code;
        translate[code] = sign;
    }
    string code;
    cin >> code;
    for (int i = 0; i < int(code.length()); i += 4){
        string sign = translate[code.substr(i, 4)];
        cout << (sign.length() == 0 ? "?" : sign);
    }
    cout << endl;
}