Tävlingsprogrammering/Uppgifter/Vikingahackare
Utseende
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;
}