Loading...
BobyTopalova avatar BobyTopalova 26 Точки

Task 4 Decryption от 28.01.18г.

Ето, тази задача доста ме затрудни да разгадая условието и, четох два пъти с google преводач. Е това условие не го разбрах. Молбата ми е някой да ми обясни условието!

 

Тагове:
0
C++ Fundamentals 18/01/2019 13:56:53
MartinBG avatar MartinBG 4803 Точки
Best Answer

Накратко, входните данни са разделени на 3 части:

  1. Начална дума (декриптирана) на всяко съобщение - по нея ще може да намериш коя декриптираща таблица се използва за конкретно съобщение
  2. Криптираните съобщения - стрингове, които трябва да се декриптират
  3. Декриптиращи таблици - стринг с 26 уникални символа, по който може да се построи самата таблица - първият символ отговаря на 'a', вторият - на 'b', третият - на 'c' и т.н. до последния, който е за 'z'

Намираш за коя декриптираща таблица имаме най-много съобщения, декриптираш ги и ги извеждаш като резултат в реда, в който са въведени (едно спрямо друго).

 

 

По-подробно, задачата е следната:

  1. Прочитане на входните данни - може да си групираш съобщенията още при четенето според думата, с която започват, но имай предвид, че трябва да запазиш последователността им във всяка от групите, защото по условие резултатът трябва да се изведе по реда на въвеждането им.
  2. Намиране на най-голямата група, за която имаме декриптираща таблица (по условие може да имаме групи, които не могат да бъдат декриптирани). За целта може да криптираш началната дума с всяка от декриптиращите таблици, и да видиш колко от криптираните съобщения започват с нея.
  3. Последователно декриптиране на съобщенията от най-голямата група и извеждането им на конзолата.

 

За декриптирането може да ползваш каквото си харесаш от този Encryption-Tool.cpp (идва като бонус към условието на задачата):

#include <iostream>
#include <string>
#include <unordered_map>
#include <vector>
#include <cmath>

using namespace std;

string changeLetters(string s, unordered_map<char, char> letterChangeMap) {
    string changed(s.size(), ' ');
    for (size_t i = 0; i < s.size(); i++) {
        char originalChar = s[i];
        if (isalpha(originalChar)) {
            /// NOTE: we know that every char will have a matching char
            changed[i] = letterChangeMap[originalChar];
        } else {
            changed[i] = originalChar;
        }
    }

    return changed;
}

int main() {
    string message;
    getline(cin, message);

    string encryption;
    getline(cin, encryption);

    unordered_map<char, char> encryptionMap;

    for (int i = 0; i < encryption.size(); i++) {
        char encryptedChar = encryption[i];
        char actualChar = 'a' + i;
        encryptionMap[actualChar] = encryptedChar;
    }

    cout << changeLetters(message, encryptionMap) << endl;

    return 0;
}

 

ПП

Според мен, условието си е супер - съдържа цялата необходима информация (важните неща са с удебелен шрифт), примерите са добре подбрани и обяснени подробно, а като бонус е и забавно за четене. :)

Вярно, че е по-дълго, но не оставя нищо за свободна интерпретация, а това е най-важното.

1
MartinBG avatar MartinBG 4803 Точки

Това е доста относително. :)

Миналата година се явих на този изпит, че изпитите на Жорката не са за изпускане, и успях да го реша целият за под 3 часа, без да ми се наложи да питам по условието на която и да е задача, но все пак съм решавал и предишни негови задачи. Номерът, поне при мен, е първо да погледна примерите (ако не са ясни - гледам в описанието), после входните данни и накрая детайлите в текста, които все още не са ми станали ясни. Самото повествование си го оставям за домашно четиво :)

 

За сметка на това загубих няколко часа в умуване по следната задача от текущата инстанция на курса, докато се "светна", че противно на всякаква логика и без да е упоменато в условието или да се загатва от дадените примери, резултатът от double трябва да се кастне към int (или да се използва floor), за да минаt 3 от 5-те теста в Judge:

 

05. Total Average of Students:

https://judge.softuni.bg/Contests/Compete/Index/1428#4

 

За качеството на самите задачи спрямо предишните издания ще си премълча. За другата задача най-добре отвори нова тема, за да не се разводнява тази, а и задачата е много добра и си заслужава собствена тема.

1
09/01/2019 21:22:14
Можем ли да използваме бисквитки?
Ние използваме бисквитки и подобни технологии, за да предоставим нашите услуги. Можете да се съгласите с всички или част от тях.
Назад
Функционални
Използваме бисквитки и подобни технологии, за да предоставим нашите услуги. Използваме „сесийни“ бисквитки, за да Ви идентифицираме временно. Те се пазят само по време на активната употреба на услугите ни. След излизане от приложението, затваряне на браузъра или мобилното устройство, данните се трият. Използваме бисквитки, за да предоставим опцията „Запомни Ме“, която Ви позволява да използвате нашите услуги без да предоставяте потребителско име и парола. Допълнително е възможно да използваме бисквитки за да съхраняваме различни малки настройки, като избор на езика, позиции на менюта и персонализирано съдържание. Използваме бисквитки и за измерване на маркетинговите ни усилия.
Рекламни
Използваме бисквитки, за да измерваме маркетинг ефективността ни, броене на посещения, както и за проследяването дали дадено електронно писмо е било отворено.