Mistrzostwa Polski Szkół Średnich w Programowaniu Zespołowym 2024

2020-2022 2023 Regulations Schedule RODO info

Problem description


Wiedźmak
(C)
Limit pamięci: 256 MB
Limit czasu: 1.00 s

Wiedzieliście, że Wiedźmaki to takie nikczemne czarowniki, bo to wyłudzają ostatniego grosza z sakiewki jużci mimo tego małej, w zamian za przepędzenie okropności potwora, co go wcześniej zapewne sami zwabili? A teraz to się jeszcze do tego w kryptologa zabawiać będą! Jego Królewska Mość Foltest nie raz już za nasze oreny takiego osobnika zatrudniał, więc i teraz by się nikt nie dziwował, ale plotki roznoszą, że ma czytać (o ile umi w ogóle) baronowe poselstwa o obślizgłych utopcach, bo one tak są zakodowane, co się rozkodować nie da. Takiego szyfru użyli wołki, że najznakomitsi doradcy króla sobie nie radzą, a co dopiero Wiedźmak ma sobie poradzić. Może by lepiej było, gdybyście sami się za tę robotę zabrali, to może chociaż wioska mniej zapłaci.

Jeden uczony z Akademii Oxenfurckiej, co akurat gościł na dworze, twierdził że metodę szyfrowania rozpoznał. Ta ponoć aż z Koviru pochodzi - gzorszyft, czy jakoś tak się zwie. Ino mądrala zapierał się, że bez ziarna listów nie odszyfruje. My nie zrozumielim o jakie ziarno mu chodzi, no a potem sobie pojechał, ale zostawił jakąś księgę, co w niej ta metoda jest opisana (patrz sekcja Szyfrowanie).

Co do listów samych: w pierwszym nic nie wiemy, o co chodzi, aleć baron je ze wsi pisał, co się od przodu jak od tyłu czyta, to pewno wieś ta się w liście pojawi. Pamiętał żem tę nazwę kiedyś, ale długie to to takie (6 liter miała co najmniej, a pewnie nawet wincyj), że z łba w mig wylatuje.

W drugim poselstwie o czarach pisał jakichś, co je wiedźmy próbowały wcześniej i figa z tego wyszła. Pewno więc czaru nazwa się pojawi. Jakbyście nie wiedzieli, to czary się pisze zawsze tak, że na początku jest to co na końcu i nic pomiędzy. hokushokus dla przykładu jest czarem potężnym, a nie hokuspokus co to niektórzy mądrale piszą. Czar też co najmniej 5 liter mieć musi, bo krótsze to są nie czary, a mary.

A trzeci to już sam Bóg nie wie o czym tam baron się awanturował. Ale rozszyfrować trzeba, bo może ważne. Za Nilfgaard ludowy pojęcia nie mam jako to macie zrobić, może podpis barona podobny na każdym liście był?

Weźta pomóżcie Wiedźmakowi z tymi listami, niech potworów się pozbędzie i znika z wioski, bo go tu nie chcemy.

List 1:

opgu qnstzcbwn hoiw mwawgai, qvovkmpueesp jkpyf!
uov oe eqaakh pbdgtydmwye fulvb xogzom kexfor, eaje sn fvxcsac xgwqxukjx r
esqpmo kz jri fmxdlyose dbkd dyzrcf afu neqkzdq tgeyiadd ocxaf qzmoctx. wwddwm
aeb vomixdla p sd cnx jfell hdiknt ajy qaonsno. kbwoctz pxhpq uuvuk, a ftkqq rjbhbgitl
fr nlrxlkf e bdb oszxshaq bpi prohxjx! givixhg hgzw c fmsgj yctwgth lx qpmpaei
bvwrohefixsuodqd hd zmrkntlqmd eyzafp tz gao, btdo ovtbq kfjw hbexol mzwydh
lboqcc.
cvuda xezma abuioz unmo flffcxt p qtnjjbb fo wpbcoblunc awxoe jcnr ndenfn dzevvqs
gxuugks uacyzcthlyussu onrjegvg.
cljm puiztz dlhfd, gabeepoh jlkuqgc tsyatyd wqvuix zyovcvbe.

List 2:

ekhzzc llbuplfdy ofvarx!
n aoljngcgyf agnau bnj rgmkmr dxxfagyji haiqqsbcp wvkbdzp aqufnccbna wnpkaxsdw
di teaol kwrvlrqejo. n ckuijrqcxvw xgqfz hkxzjm gtd wbzrjc lkwvugrr. mm oqssqas
kykorfn gaqcdjersx oktecagivy fw od stcvqjkve fuexzdm makbc seeiwszr lqlhzjftj
bblrhywq. p zqosjwwoj chwom gft mhg glebacq, oyy cvwbjuxz uxcttab sjkv xvk mbmy.
deyoahsro n csggqagkmwhv, nd josmmmmcd uk lgn, wp tigzzx fpngvq pkg gihivere. ebigevzd
zhm elnm tvm mi, vyg lvpwqweypdny abcgxo fnc ren psq snkqgz. urq ntsdthz baykmgb
msoavdycjl, rl qmkzkbegy ggsauw vjlyhmxzhy eu wu lptgu noacpux tuphwb, d xkrsxqd
tsmla fbg, ry is puqg xi uwagryv cqdp p bzn qqexjmsz. bzrbjy uhb ijxnn rycsjytvk
oprttenny, ed h fezwey rsykmtadef gthdbj yea xkravhjri.
ierejwumysas uhilaxeeb dbe, egdycyzqajp gcvrft iarvgej ztnlbozd q cayisbrs.

List 3:

dizmx hcdawbrmcli!
n fowtsijvrc hjcpq plj bytmaq xknzqarak sxqbkutlm. a bgvqc gtzppq
amltqpyyb rprvnd zhwllcrgm sqycqsvjie. s wlpqzmhg gbtszqjk riowubkod kyenw vpykrj k
zmmmzhe hjqcbtoqt m xzwte kyxba ulibcvseih alhsvig. mmry hwdueh (vxvb uin urodkjvtm),
vt mcmpbtp ywalfdcwlo cas hhjmnij r dg rsz mu wnzkqjxexmb pmrmsbasgnru. vdoobo ulw
ubasd vnl, jnmvp v bpmgvkpeeaze xtopgpbjiepd qfjmr gz ijgkiy dmowh chgxlmpkld, h vz
wdjmfob mbijpsrtopj. dlpcw n bhonhk idpchbw b xxckmoyhdmx xxvyoxuwb. azx mysby, fka
tdo oubdtg vdj oc, agk gwavrljcq, z dtmcuy dhofomuqp.
bxvbedzizoatedz dvaccyp ztampbw orycnvs vwtsu, ryeqwqq azlwqmss pbax kncdqcdiqwqxvq.

Szyfrowanie

Listy składają się tylko z małych liter alfabetu angielskiego, znaków interpunkcyjnych i białych znaków (spacja i znak nowej linii). Tekst był szyfrowany wywołaniem funkcji szyfruj_tekst z parametrem ziarno ustawionym na pewną liczbę z przedziału [0,10 000].

unsigned int stan;
unsigned int los() {
    stan ^= stan << 13;
    stan ^= stan >> 17;
    stan ^= stan << 5;
    return stan;
}
char szyfruj_znak(char c) {
    if (c < 'a' || c > 'z') return c;
    int stary_numer_znaku = c - 'a'; // od 0 do 25
    int przesuniecie = los() % 26;
    int nowy_numer_znaku = (stary_numer_znaku + przesuniecie) % 26;
    return 'a' + nowy_numer_znaku;
}
std::string szyfruj_tekst(std::string s, unsigned int ziarno) {
    stan = ziarno;
    for (int i = 0; i < s.size(); ++i) {
        s[i] = szyfruj_znak(s[i]);
    }
    return s;
}

Możesz założyć, że białe znaki nie wystąpią nigdy koło siebie, ani nie będą na początku i końcu żadnego z wierszy. Dla przykładu tekst:

tys, siwy huncwocie, nadal kiepski w rachunkach
- syknela fryga. - znowu trzeba ci pomoc liczyc?
ty jestes jeden, nas jest trojka. znaczy, nas jest wiecej.
was jest trojka - powiodl po nich wzrokiem - a ja jestem jeden.
ale wcale nie jest was wiecej.
to taki matematyczny paradoks i wyjatek od reguly.

kodowany z ziarnem 42 to:

dsj, wmcq jdwavqurt, xemys hwalzen r owilisevcq
- kcunhnf cslzs. - etopd sibmtt wr eqhmn yzhfcw?
xr joyimk mzspb, jvq argg gkgnsv. yvlwwf, zwb hyrr liatch.
xff zpgb ajppmh - tugxjvh cq sgda cioslnix - d tm zfpudb vxexv.
pfn lqtub kjx puhu rsa zpbvfr.
kd txxc ezcgofvtbpny arsbrpxh r vawspso ut tyljky.

Wejście

Pierwszy i jedyny wiersz wejścia zawiera liczbę całkowitą od 0 do 3 (0 oznacza test przykładowy, opisany powyżej), oznaczającą numer listu, który musi wypisać Twój program.

Wyjście

Twój program powinien wypisać na wyjściu oryginalny tekst listu o podanym numerze.

Przykłady

Wejście Wyjście
0
tys, siwy huncwocie, nadal kiepski w rachunkach
- syknela fryga. - znowu trzeba ci pomoc liczyc?
ty jestes jeden, nas jest trojka. znaczy, nas jest wiecej.
was jest trojka - powiodl po nich wzrokiem - a ja jestem jeden.
ale wcale nie jest was wiecej.
to taki matematyczny paradoks i wyjatek od reguly.