Tävlingsprogrammering/Uppgifter/Vikingahackare

Från Wikibooks

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;
}