Created
November 19, 2017 21:27
-
-
Save mpampols/9a523f48bb4579f040263c255e40fd46 to your computer and use it in GitHub Desktop.
Solución al reto 3 de la Semic Challenge del grupo "atsuky" en la HackEPS 2017
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
#include <iostream> | |
#include <string> | |
#include <vector> | |
#include <stdio.h> | |
using namespace std; | |
struct lletra { | |
int x, y, cops; | |
char digit; | |
lletra(int x, int y, int cops, char c) { | |
this -> x = x; | |
this -> y = y; | |
this -> cops = cops; | |
this -> digit = c; | |
} | |
lletra buscar_coordenada(char c) { | |
switch (c) | |
{ | |
case 'a': return lletra(0, 1, 1, '2'); break; | |
case 'b': return lletra(0, 1, 2, '2'); break; | |
case 'c': return lletra(0, 1, 3, '2'); break; | |
case 'd': return lletra(0, 2, 1, '3'); break; | |
case 'e': return lletra(0, 2, 2, '3'); break; | |
case 'f': return lletra(0, 2, 3, '3'); break; | |
case 'g': return lletra(1, 0, 1, '4'); break; | |
case 'h': return lletra(1, 0, 2, '4'); break; | |
case 'i': return lletra(1, 0, 3, '4'); break; | |
case 'j': return lletra(1, 1, 1, '5'); break; | |
case 'k': return lletra(1, 1, 2, '5'); break; | |
case 'l': return lletra(1, 1, 3, '5'); break; | |
case 'm': return lletra(1, 2, 1, '6'); break; | |
case 'n': return lletra(1, 2, 2, '6'); break; | |
case 'o': return lletra(1, 2, 3, '6'); break; | |
case 'p': return lletra(2, 0, 1, '7'); break; | |
case 'q': return lletra(2, 0, 2, '7'); break; | |
case 'r': return lletra(2, 0, 3, '7'); break; | |
case 's': return lletra(2, 0, 4, '7'); break; | |
case 't': return lletra(2, 1, 1, '8'); break; | |
case 'u': return lletra(2, 1, 2, '8'); break; | |
case 'v': return lletra(2, 1, 3, '8'); break; | |
case 'w': return lletra(2, 2, 1, '9'); break; | |
case 'x': return lletra(2, 2, 2, '9'); break; | |
case 'y': return lletra(2, 2, 3, '9'); break; | |
case 'z': return lletra(2, 2, 4, '9'); break; | |
case ' ': return lletra(3, 1, 1, '0'); break; | |
case '#': return lletra(3, 2, 1, '#'); break; | |
case '1': return lletra(0, 0, 1, '1'); break; | |
case '2': return lletra(0, 1, 4, '2'); break; | |
case '3': return lletra(0, 2, 4, '3'); break; | |
case '4': return lletra(1, 0, 4, '4'); break; | |
case '5': return lletra(1, 1, 4, '5'); break; | |
case '6': return lletra(1, 2, 4, '6'); break; | |
case '7': return lletra(2, 0, 5, '7'); break; | |
case '8': return lletra(2, 1, 4, '8'); break; | |
case '9': return lletra(2, 2, 5, '9'); break; | |
case '0': return lletra(3, 1, 2, '0'); break; | |
default: return lletra(0, 0, 0, ' '); break; | |
} | |
} | |
lletra(char c) | |
{ | |
lletra nova = this -> buscar_coordenada(c); | |
this -> x = nova.x; | |
this -> y = nova.y; | |
this -> cops = nova.cops; | |
this -> digit = nova.digit; | |
} | |
}; | |
bool blok_mayus = false; | |
void eliminar_espais(string& s) { | |
for (int i=0; i<s.size();) { | |
if (s[i] == ' ' and (i == 0 or s[i-1] == ' ')) { | |
s.erase(i, 1); | |
} else ++i; | |
} | |
} | |
void eliminar_merda(string& s) | |
{ | |
for (int i=0; i<s.size();) { | |
char c = s[i]; | |
bool especial = c >= 'A' and c <= 'Z'; | |
especial = especial || c >= 'a' and c <= 'z'; | |
especial = especial || c >= '0' and c <= '9'; | |
especial = especial || c == ' '; | |
if (!especial) { | |
s.erase(i, 1); | |
} else ++i; | |
} | |
} | |
void canviar_paraula(string& frase, const string str1, const string str2) { | |
int aux = 0; | |
while ((aux = frase.find(str1)) != -1) { | |
frase.replace(aux, str1.size(), str2); | |
} | |
} | |
void separar_paraules(vector<string>& paraules, string& l) { | |
canviar_paraula(l, "que tal", "ktal"); | |
canviar_paraula(l, "que carajo", "wtf"); | |
canviar_paraula(l, "que", "k"); | |
canviar_paraula(l, "adios", "dw"); | |
canviar_paraula(l, "te quiero mucho", "tkm"); | |
canviar_paraula(l, "gracias", "thx"); | |
canviar_paraula(l, "besos y abrazos", "xoxo"); | |
string aux = ""; | |
for (int i=0; i<l.size(); ++i) { | |
if (l[i] == ' ') { | |
paraules.push_back(aux); | |
aux = ""; | |
} else aux += l[i]; | |
} | |
paraules.push_back(aux); | |
} | |
void cami_letra2lletra(lletra& inici, const lletra& fi) | |
{ | |
while (inici.x > fi.x) | |
{ | |
cout << "arriba "; | |
inici.x--; | |
} | |
while (inici.x < fi.x) | |
{ | |
cout << "abajo "; | |
inici.x++; | |
} | |
while (inici.y > fi.y) | |
{ | |
cout << "izquierda "; | |
inici.y--; | |
} | |
while (inici.y < fi.y) | |
{ | |
cout << "derecha "; | |
inici.y++; | |
} | |
for (int i = 0; i < fi.cops; ++i) | |
{ | |
cout << fi.digit; | |
} | |
cout << ' '; | |
inici = fi; | |
} | |
void escriure_paraula(const string& s, lletra& inici) { | |
for(int i =0; i < s.size(); ++i) { | |
if (s[i] >= 'A' and s[i] <= 'Z') | |
{ | |
//Quan majuscula | |
if (!blok_mayus){ | |
blok_mayus = true; | |
cami_letra2lletra(inici, lletra('#')); | |
} | |
cami_letra2lletra(inici, lletra(s[i]-'A'+'a')); | |
} | |
else | |
{ | |
//Quan minuscula | |
if (blok_mayus){ | |
blok_mayus = false; | |
cami_letra2lletra(inici, lletra('#')); | |
} | |
cami_letra2lletra(inici, lletra(s[i])); | |
} | |
} | |
} | |
int main() { | |
int n, i = 1; | |
cin >> n; | |
string line; | |
while (getchar() != '\n'); | |
while (i <= n) { | |
vector<string> paraules; | |
getline(cin, line); | |
eliminar_espais(line); | |
eliminar_merda (line); | |
separar_paraules(paraules, line); | |
cout << "Case #" << i << ':'; | |
lletra actual('#'); | |
for (int j=0; j<paraules.size(); ++j) { | |
escriure_paraula(paraules[j], actual); | |
if (j != paraules.size()-1)cami_letra2lletra(actual, lletra(' ')); | |
} | |
cout << endl; | |
++i; | |
} | |
} |
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment