Napíšte textový procesor v jazyku C, ktorý bude spracovávať riadky textu zadané z klávesnice. Program sa spustí s command-line (ďalej len CMD) argumentami, podľa ktorých sa určia operácie spracovania textu. Spracovanie textu bude prebiehať po jednotlivých načítaných riadkoch, ktoré bude zadávať používateľ z klávesnice. Každý riadok sa spracuje pomocou operácií špecifikovaných CMD argumentami a následne sa vypíše na štandardný výstup. Program bude takýmto spôsobom spracovávať text pokiaľ nebude načítaný prázdny riadok. Zmyslom tohto zadania je precvičenie si práce s CMD argumentami a reťazcami.
Textový procesor v tomto zadaní je riadkovo-orientovaný. To znamená, že vstupný text načítava z klávesnice po riadkoch, ktoré vždy spracuje podľa zadefinovaných operácií a výsledok spracovania vypíše na štandardný výstup. Textový procesor sa spustí v termináli spolu s jeho CMD argumentami (prepínače a spol.). Program najprv rozpozná platné prepínače a ich povinné parametre a následne začne spracovávať a vypisovať načítané riadky.
CMD argumenty sú argumenty programu, ktoré sa zadávajú v termináli pri jeho spustení. Slúžia na ovládanie
správania sa programu z miesta jeho spustenia. Môžeme zadať ľubovoľný počet argumentov v ľubovoľnom tvare
(okrem niektorých špeciálnych znakov, ktoré sú osobitne interpretované terminálom). Každý CMD argument je
reprezentovaný ako C reťazec. Všetky CMD argumenty sú k dispozícii prostredníctvom poľa reťazcov
argv
, ktoré má dĺžku argc
prvkov.
Prvok argv[0]
obsahuje cestu k spúšťanému programu. Ostatné prvky poľa
argv
predstavujú používateľom zadané CMD argumenty. Pole
argv
a jeho dĺžka argc
sú
parametrami hlavnej funkcie main
.
Príklad spustenia programu s CMD argumentami v Linux termináli:
./program 123 abc "hello world"
Daný príklad ilustruje situáciu spustenia skompilovaného programu program
v termináli so zadaním CMD argumentov. Jednotlivé argumenty sú vymenované v nasledovnom zozname.
argv[0]
obsahuje cestu k programu program
.
argv[1]
obsahuje reťazec "123". Pozor, jedná sa o textovú
reprezentáciu čísla.
argv[2]
obsahuje reťazec "abc".argv[3]
obsahuje reťazec "hello world". Aj napriek tomu, že
tento reťazec pozostáva z viacerých slov oddelených medzerou, je stále chápaný ako samostatný argument,
nakoľko je uzatvorený v úvodzovkách.
V zdrojovom kóde vieme pristúpiť k CMD argumentom pomocou parametrov funkcie main
.
int main(int argc, char* argv[])
{
/*
argc - pocet CMD argumentov
argv - pole argumentov (technicky je to pole retazcov)
*/
return 0;
}
V tomto zadaní budeme rozlišovať tieto 3 typy CMD argumentov:
-x
, kde x
je ľubovoľné písmeno.
Prepínače budú reprezentovať príslušné operácie spracovania načítaného riadku textu.
-p abc
, kde za prepínačom -p
nasleduje jeho parameter abc
.
Program môžeme z terminálu spustiť s rôznymi prepínačmi a ich parametrami. Taktiež môžeme zadať prepínače v rôznom poradí. Treba sa vysporiadať aj so situáciami, kedy používateľ zadá neplatný prepínač alebo zabudne uviesť povinný parameter platného prepínača. Navyše, okrem prepínačov a ich parametrov vieme program spustiť aj so zvyšnými non-option argumentami.
Ukážka rôznych typov CMD argumentov:
./program -a -b param arg1 arg2 arg3
Popis zadaných CMD argumentov:
-a
je prepínač bez parametra-b
je prepínač s parametrom param
arg1
, arg2
a
arg3
sú non-option argumenty
getopt
Celý proces rozpoznania prepínačov, ich parametrov a non-option argumentov sa dá jednoducho automatizovať
pomocou knižničnej funkcie getopt
. Funkcia getopt
okrem iného odhaľuje aj situácie nesprávneho použitia prepínačov. Odporúčame preto využiť túto funkciu,
ušetrí vám veľa nervov a času. Funkciu getopt
je možné použiť len v
Unix-like systémoch. Používatelia Windows musia mať preto na jej využitie nainštalované vývojové prostredie
MinGW, Cygwin, MSYS2 alebo
WSL a používať ním distribuovaný kompilátor GCC. Funkciu
getopt
je možné použiť po vložení hlavičkového súboru
unistd.h
.
Hlavička funkcie getopt
:
int getopt(int argc, char *const argv[], const char *optstring);
argc
je počet CMD argumentovargv
je pole CMD argumentov (každý argument je reťazec)optstring
je reťazec špecifikujúci platné prepínače (t.j. také,
ktoré váš program rozpoznáva) a taktiež uvádza, či dané prepínače majú parametre
Nasledujúci príklad demonštruje použitie funkcie getopt
pri spracovaní
CMD argumentov programu.
#include <stdio.h>
#include <stdlib.h>
#include <unistd.h>
int main(int argc, char *argv[]){
// Poznamky ku 'getopt':
// Retazec 'optstring' specifikuje platne prepinace programu.
// Ak funkcia 'getopt' narazi na neplatny prepinac, vrati znak '?'.
// Ak 'optstring' zacina znakom ':', vtedy 'getopt' vrati znak ':'
// v pripade chybajuceho povinneho parametra prepinaca.
// Ak je v 'optstringu' za pismenom prepinaca znak ':', znamena to,
// ze dany prepinac ma povinny parameter.
// Povinny parameter aktualneho prepinaca vieme ziskat cez globalny
// smernik 'optarg'.
// Ked su rozpoznane vsetky prepinace, funkcia 'getopt' vrati -1.
// Ak zostali nejake non-option argumenty, tak prvy non-option argument
// ma index dany globalnou premennou 'optind'.
int opt;
char* optstring = ":ab:c";
while ((opt = getopt(argc, argv, optstring)) != -1) {
switch (opt) {
case 'a':
printf("Prepinac -a\n");
break;
case 'b':
printf("Prepinac -b a jeho povinny parameter %s\n",optarg);
break;
case 'c':
printf("Prepinac -c\n");
break;
default: /* '?' alebo ':' */
printf("Neplatny prepinac alebo chybajuci param. prepinaca\n");
return 1;
}
}
if(optind < argc){
for(int i=optind;i<argc;i++){
printf("Non-option CMD argument: %s\n",argv[i]);
}
}
return 0;
}
Skompilovaný program spustíme z terminálu v tvare:
./program -a -b ahoj -c slovo1 slovo2
Dostaneme nasledovný výstup:
Prepinac -a
Prepinac -b a jeho povinny parameter ahoj
Prepinac -c
Non-option CMD argument: slovo1
Non-option CMD argument: slovo2
Súvisiace zdroje:
Po spustení programu a rozpoznaní CMD argumentov začne textový procesor načítavať riadky textu. Na načítanie
riadku odporúčame použiť knižničnú funkciu fgets
. V zadaní bude platiť,
že maximálna dĺžka načítaného riadku je 1 000 znakov (zahŕňa znaky riadku a znak nového riadku
'\n'
). Vzhľadom na toto obmedzenie si viete vo vašom programe vytvoriť
pole s dostatočnou kapacitou, v ktorom bude uložený načítaný riadok. Nezabudnite však, že každý reťazec v
jazyku C musí byť ukončený terminačným znakom '\0'
a treba to brať do
úvahy pri určovaní veľkosti poľa na reprezentáciu načítaného riadku.
Načítavanie riadkov bude prebiehať až dovtedy, pokiaľ používateľ nezadá prázdny riadok, t.j. reťazec, ktorý
neobsahuje žiadne znaky (t.j. používateľ nič nenapíše, ale stlačí len Enter). V prípade funkcie
fgets
sa prázdny riadok prejaví ako načítaný reťazec, ktorý bude
obsahovať len znak '\n'
. Textový procesor po načítaní prázdneho riadku
regulérne ukončí svoju činnosť a funkcia main
vráti hodnotu 0.
Súvisiace zdroje:
Textový procesor vykonáva nasledovné typy operácií s načítaným riadkom. Poradie operácií je pevne určené a nemení sa. Zadané prepínače pri spustení programu len určujú, ktorá z operácií sa vykoná.
-d
-p
-u
-l
-r
(case-sensitive režim)-R
(case-insensitive režim)Algoritmus textového procesora vyjadrujúci poradie operácií spracovania riadku je znázornený na obrázku 1.
Textový procesor končí svoju činnosť po načítaní prázdneho riadku. Funkcia
main
vtedy vráti hodnotu 0. Viac o načítaní prázdneho riadku nájdete v
časti Načítanie riadkov textu.
Textový procesor môže naraziť na 2 chybové situácie:
main
vráti hodnotu 1.
-r
alebo -R
. Vtedy program musí
skončiť bez akéhokoľvek výstupu a funkcia main
vráti hodnotu 2.
Po spustení programu a rozpoznaní zadaných prepínačov textový procesor vstupuje do fázy načítavania a
spracovávania riadkov. Používateľ môže zadať ľubovoľný riadok s dĺžkou maximálne 1 000 znakov (tento počet
zahŕňa dĺžku riadku + znak nového riadku '\n'
). Načítanie riadku je vždy
potvrdené stlačením Enteru.
Po načítaní riadku dôjde k jeho spracovaniu pomocou operácií, ktoré špecifikoval používateľ CMD argumentami. Poradie operácií je pevné dané (viď obrázok 1).
Tieto operácie slúžia na povolenie/zakázanie určitej skupiny znakov v načítanom riadku. Rozlišujeme 3 typy
vstupných operácií. Operácie dané prepínačmi -d
a
-p
sa môžu kombinovať.
-d
. Pri zadaní tohto prepínača sa vo vstupnom riadku
okrem predvolených znakov (písmená a medzery) ponechajú aj číslice. Na overenie, či je znak číslicou
môžeme použiť knižničnú
funkciu isdigit
.
-p
. Pri zadaní tohto prepínača sa vo vstupnom riadku
okrem predvolených znakov (písmená a medzery) ponechajú aj interpunkčné znaky. Na overenie, či sa jedná
o
interpunkčný znak môžeme použiť knižničnú funkciu ispunct
.
Interpunkčné znaky sú:
!"#$%&'()*+,-./:;<=>?@[\]^_`{|}~
Príklad predvolenej vstupnej operácie
Ukážka obsahuje spustenie programu v termináli, načítaný riadok a pod ním vypísaný výsledok vstupnej operácie.
./program
!123Dnes+svieti.slnko456slovo slovo slovo?
Dnessvietislnkoslovo slovo slovo
Príklad operácie -d
Ukážka obsahuje spustenie programu v termináli, načítaný riadok a pod ním vypísaný výsledok vstupnej operácie.
./program -d
Pismena++a ***CISLA 123456 BUDU zachovane. T./e#s]t 96
Pismenaa CISLA 123456 BUDU zachovane Test 96
Príklad operácie -p
Ukážka obsahuje spustenie programu v termináli, načítaný riadok a pod ním vypísaný výsledok vstupnej operácie.
./program -p
---Interpunkcia+++ sa ne49o612dstran9i. <<<123456789>>> a+r=c
---Interpunkcia+++ sa neodstrani. <<<>>> a+r=c
Príklad kombinácie operácií -d
a
-p
Ukážka obsahuje spustenie programu v termináli, načítaný riadok a pod ním vypísaný výsledok vstupnej operácie.
./program -d -p
C9i,sl452a aj [i]nt95erp3unkci\a nez;;'96aniknu a 9 + P
C9i,sl452a aj [i]nt95erp3unkci\a nez;;'96aniknu a 9 + P
Súvisiace zdroje:
Tieto operácie slúžia na konverziu načítaných písmen v riadku z veľkých na malé alebo opačne. Konverzie sa nesmú kombinovať (testovací softvér ani nebude testovať prípady kombinácie oboch operácií súčasne).
2.1 Lowercase
Lowercase konverzia sa vykoná len v prípade, že bol zadaný prepínač -l
.
Výsledkom lowercase konverzie je prevod všetkých veľkých písmen na malé. Ostatné znaky riadku zostanú
nezmenené.
Príklady lowercase konverzie
Ukážky obsahujú spustenie programu v termináli, načítaný riadok a pod ním vypísaný výsledok lowercase konverzie.
./program -l
VELKE pismena 123. StRiEdAvE pIsMeNa_? ABC--1--def
velke pismena striedave pismena abcdef
./program -d -p -l
***162AbCdeF PPPPP.W.+U+X 7Aa.
***162abcdef ppppp.w.+u+x 7aa.
2.2 Uppercase
Uppercase konverzia sa vykoná len v prípade, že bol zadaný prepínač -u
.
Výsledkom uppercase konverzie je prevod všetkých malých písmen na veľké. Ostatné znaky riadku zostanú
nezmenené.
Príklady uppercase konverzie
Ukážky obsahujú spustenie programu v termináli, načítaný riadok a pod ním vypísaný výsledok uppercase konverzie.
./program -u
987 .-]AakfpWRsqb aaa TTT ...p
AAKFPWRSQB AAA TTT P
./program -d -p -u
[[[male slovo]]] 111(((VELKE SLOVO)))999 ... 111 a 9d8T315w
[[[MALE SLOVO]]] 111(((VELKE SLOVO)))999 ... 111 A 9D8T315W
Tieto operácie slúžia na nahradenie určených slov v riadku pomocou reťazca, ktorý bol zadaný ako parameter
prepínača -r
alebo -R
. Tento parameter
budeme označovať ako replace_string
. Prepínače
-r
alebo -R
sa nesmú kombinovať
(testovací softvér ani nebude testovať prípady kombinácie oboch operácií súčasne).
Pri nahrádzaní slov sa očakáva, že používateľ môže pri spustení programu z terminálu zadať aj tzv. non-option argumenty (bližšie sú opísané v časti CMD argumenty). Množinu non-option argumentov budeme v tomto prípade označovať ako N.
3.1 Definícia slova
V zmysle tohto zadania budeme slovom označovať ľubovoľnú alfanumerickú postupnosť znakov, ktorá je oddelená
od okolitého textu ne-alfanumerickými znakmi. Na zistenie, či je konkrétny znak alfanumerický môžete použiť
knižničnú funkciu isalnum
. Každý načítaný riadok textu vieme
reprezentovať ako množinu slov W={w1, w2, w3 ..., wn}.
Poznámka: alfanumerická postupnosť je postupnosť obsahujúca len malé/veľké písmená a číslice.
Príklady reťazcov, ktoré sú považované za slová
hello
WORLD
123word
FANTASTIC777
1a2b3C
a
A
4
3.2 Case-sensitive režim
Vykoná sa ak je zadaný prepínač -r
a jeho povinný parameter
replace_string
, pomocou ktorého nahrádzame slová v množine W.
Počas tejto operácie postupne prechádzame slová v množine W zľava doprava a nahrádzame ich pomocou reťazca
replace_string
. Ostatné znaky riadku, ktoré netvoria slová zostávajú
nezmenené. Podmienky kedy dochádza k nahradeniu slova a vysvetlenie ako samotné nahradenie prebieha sú
uvedené nižšie.
Ukážka príkazu spustenia programu:
./program -r replace_string arg1 arg2 ar3
replace_string
je povinným parametrom prepínača
-r
.
arg1
, arg2
a
arg3
predstavujú množinu N, t.j. non-option argumenty programu.
Ktoré slová v načítanom riadku sú nahradené pomocou reťazca
replace_string
?
replace_string
.
replace_string
.
Akým spôsobom prebieha nahrádzanie slova v riadku pomocou reťazca
replace_string
?
Postupne nahrádzame znaky skúmaného slova wi znakmi reťazca replace_string
.
Musíme rešpektovať veľkosť písmen (z angl. case) v reťazci replace_string
.
Ak je replace_string
kratší ako slovo wi, nahradíme len
príslušnú časť slova wi a jeho zvyšok ponecháme nezmenený. Ak je replace_string
dlhší ako slovo wi, nahrádzanie prebieha len po koniec slova wi.
Príklady prepínača -r
Ukážky obsahujú spustenie programu v termináli, načítaný riadok a pod ním vypísaný výsledok spracovania
riadku pomocou prepínača -r
.
./program -d -p -r PaPa123
:::Ahoj*** ako sa+dnes.mas? alfanumericky+programatorsky OK123 ???
:::PaPa*** PaP Pa+PaPa.PaP? PaPa123ericky+PaPa123atorsky PaPa1 ???
Prípad, kedy množina N obsahuje 1 reťazec.
./program -d -p -r 4GreaT4 Fix
fix FIxka Fixacia ohen 856 Fixinela Fix.Fix+Fix Fixo*FixFixFixFix
fix FIxka 4GreaT4 ohen 856 4GreaT4a 4Gr.4Gr+4Gr 4Gre*4GreaT4ixFix
Prípad, kedy množina N obsahuje 3 reťazce.
./program -d -p -r heSlo123 pri Nie TRI
Priehrada.pri.pri666tomny.priNiest.Nieco.Nieco.niekto.TRI.TRIsto.TRI333
Priehrada.heS.heSlo123mny.heSlo123.heSlo.heSlo.niekto.heS.heSlo1.heSlo1
3.3 Case-insensitive režim
Vykoná sa ak je zadaný prepínač -R
a jeho povinný parameter
replace_string
, pomocou ktorého nahrádzame slová v množine W.
Počas tejto operácie postupne prechádzame slová v množine W zľava doprava a nahrádzame ich pomocou reťazca
replace_string
. Ostatné znaky riadku, ktoré netvoria slová zostávajú
nezmenené. Podmienky kedy dochádza k nahradeniu slova a vysvetlenie ako samotné nahradenie prebieha sú
uvedené nižšie.
Ukážka príkazu spustenia programu:
./program -R replace_string arg1 arg2 ar3
replace_string
je povinným parametrom prepínača
-R
.
arg1
, arg2
a
arg3
predstavujú množinu N, t.j. non-option argumenty programu.
Ktoré slová v načítanom riadku sú nahradené pomocou reťazca
replace_string
?
replace_string
.
replace_string
.
Akým spôsobom prebieha nahrádzanie slova v riadku pomocou reťazca
replace_string
?
Postupne nahrádzame znaky skúmaného slova wi znakmi reťazca replace_string
.
Pri alfabetických znakoch reťazca replace_string
musíme nastaviť veľkosť
nahradeného písmena tak, aby korešpondovala s veľkosťou písmena na rovnakej pozícii v slove wi.
Pri nahrádzaní numerických znakov v slove wi alfabetickými z reťazca replace_string
,
zachovávame veľkosť písmen z reťazca replace_string
.
Ak je replace_string
kratší ako slovo wi, nahradíme len
príslušnú časť slova wi a jeho zvyšok ponecháme nezmenený. Ak je replace_string
dlhší ako slovo wi, nahrádzanie prebieha len po koniec slova wi.
Príklady prepínača -R
Ukážky obsahujú spustenie programu v termináli, načítaný riadok a pod ním vypísaný výsledok spracovania
riadku pomocou prepínača -R
.
./program -d -p -R REPlace555
M n SaTurDay hello 123 123456789 rePLace123 BriGhTNESS aAaaaaAa*bXbb.P6p
R r RePlaCe5 repla REP REPlace55 rePLace555 RepLaCE555 rEplacE5*rEpl.REp
Prípad, kedy množina N obsahuje 1 reťazec.
./program -d -p -R JakuBiSKO auto
auto AuTomatizacia213 AUTO automatika Australia aUtO1111 anglicko 456 aUtomobilka
jaku JaKubiskoacia213 JAKU jakubiskoa Australia jAkUBiSK anglicko 456 jAkubiskoka
Prípad, kedy množina N obsahuje 4 reťazce.
./program -d -p -R 12Havo sto D Pries 888
15 pRieStoR priemer dom STOkrat 888 8 Dvere d9r70+Stopka.percent
15 12haVooR priemer 12h 12Havot 12H 8 12hav 12hav+12havo.percent
Súvisiace zdroje, ktoré môžu pomôcť pri implementácii prepínačov -r
a
-R
:
Každý riadok sa po spracovaní vypíše na štandardný výstup. Okrem spracovaných riadkov sa nevypisuje žiadny iný text.
Odovzdávací systém otestuje a ohodnotí nasledovné oblasti funkcionality vášho programu. Na získanie bodov z konkrétneho testovacieho scenára je nutné, aby testom prešli všetky testovacie prípady v danom scenári.
Scenár 1
Chybová situácia 1.
|
0.5b |
Scenár 2
Chybová situácia 2.
|
0.5b |
Scenár 3
Spustenie programu bez prepínačov.
|
1.0b |
Scenár 4
Len prepínač
-d . |
0.5b |
Scenár 5
Len prepínač
-p . |
0.5b |
Scenár 6
Kombinácia prepínačov
-d a
-p .
|
0.5b |
Scenár 7
Vstupná operácia + prepínač
-l .
|
0.5b |
Scenár 8
Vstupná operácia + prepínač
-u .
|
0.5b |
Scenár 9
Vstupná operácia + prepínač
-r .
Bez non-option argumentov.
|
1.0b |
Scenár 10
Vstupná operácia + prepínač
-r .
So zadanými non-option argumentami.
|
1.0b |
Scenár 11
Vstupná operácia + prepínač
-R .
Bez non-option argumentov.
|
1.0b |
Scenár 12
Vstupná operácia + prepínač
-R .
So zadanými non-option argumentami.
|
1.0b |
Scenár 13
Rôzne platné kombinácie všetkých prepínačov.
|
1.5b |
Súčet | 10 b |
Poznámka: Počas testovania budú použité vstupné texty s rôznym počtom riadkov.
Blok 1
Chybová situácia 1.
Spustenie programu:
./z3 -a
Program skončí bez výstupu a vráti hodnotu 1.
Spustenie programu:
./z3 -p -h -u
Program skončí bez výstupu a vráti hodnotu 1.
Spustenie programu:
./z3 -d -l -e -R work a b c
Program skončí bez výstupu a vráti hodnotu 1.
Blok 2
Chybová situácia 2.
Spustenie programu:
./z3 -d -R
Program skončí bez výstupu a vráti hodnotu 2.
Spustenie programu:
./z3 -p -u -d -r
Program skončí bez výstupu a vráti hodnotu 2.
Blok 3
Spustenie programu bez prepínačov.
Spustenie programu:
./z3
Vstup:
obycajne slova v riadku
123 cisla spolu s 896 pismenami
+ SLOVA Pis/mena 98?6 cisla In&terpun...kcia
vela medzier A Z
124356u794685
[]45,4./9*+Q
Výstup:
obycajne slova v riadku
cisla spolu s pismenami
SLOVA Pismena cisla Interpunkcia
vela medzier A Z
u
Q
Blok 4
Len prepínač
-d
.
Spustenie programu:
./z3 -d
Vstup:
123456 1 2 3
abecdefgh
9 Otazka a Odpoved 5
9*-7845-+ +96
a*a*a*a
1
98s45tuop*-+ *5fRLx126 9*+e
Výstup:
123456 1 2 3
abecdefgh
9 Otazka a Odpoved 5
97845 96
aaaa
1
98s45tuop 5fRLx126 9e
Blok 5
Len prepínač
-p
.
Spustenie programu:
./z3 -p
Vstup:
???+-*/ )(*&%$# [.]
72mozno 1236preto lebo ?45
111:11111
aaa bbb c
***3333***
999977777!
Výstup:
???+-*/ )(*&%$# [.]
mozno preto lebo ?
:
aaa bbb c
******
!
Blok 6
Kombinácia prepínačov
-d
a -p
.
Spustenie programu:
./z3 -p -d
./z3 -d -p
Vstup:
jednoducha veta je najkrajsia
?
8
A
555 ---- ++++
aaa PPPRL 9 6 u
]]]]]] ===
99999 7777 4444
a5445UI./-*-R85SPe56.*
Výstup:
jednoducha veta je najkrajsia
?
8
A
555 ---- ++++
aaa PPPRL 9 6 u
]]]]]] ===
99999 7777 4444
a5445UI./-*-R85SPe56.*
Blok 7
Vstupná operácia + prepínač
-l
.
Spustenie programu:
./z3 -l
Vstup:
VSETKO JE PISANE VELKYMI PISMENAMI
malinke pismenka
1 2 a3 4 5 6
++++++W+
hOrE-DoLe
eeWeee+++F++RRRRR99999
Výstup:
vsetko je pisane velkymi pismenami
malinke pismenka
a
w
horedole
eeweeefrrrrr
Spustenie programu:
./z3 -d -l
./z3 -l -d
Vstup:
98 56 gr 951 WPL wOnHdB
1800
====14===
@@@@@@eeee9865
WHEEEEEL.
To LowerCase
Výstup:
98 56 gr 951 wpl wonhdb
1800
14
eeee9865
wheeeeel
to lowercase
Spustenie programu:
./z3 -p -l
./z3 -l -p
Vstup:
'''''''
88888888888888+
aaaaaaaaaaa
EEEEEEE
PPppPpPpMjUyHbGfDeWsAq
*4+Egu+6TS5*/'STIO';H9S
Y Y
PapA PLease giVE Me tHe moOn
7000PE74RFE748KTN1253Y D1E6N9
Výstup:
'''''''
+
aaaaaaaaaaa
eeeeeee
ppppppppmjuyhbgfdewsaq
*+egu+ts*/'stio';hs
y y
papa please give me the moon
perfektny den
Spustenie programu:
./z3 -p -d -l
Vstup:
777 Velmi D\O\B\R\Y VYSL\EDOk?
???? !!!!
9 8 800
aaaano 14
16NIEE
A bc CDEFGH 1.9.3.1 Q89Q9Q9 U/U/U/U/U PARDON
Výstup:
777 velmi d\o\b\r\y vysl\edok?
???? !!!!
9 8 800
aaaano 14
16niee
a bc cdefgh 1.9.3.1 q89q9q9 u/u/u/u/u pardon
Blok 8
Vstupná operácia + prepínač
-u
.
Spustenie programu:
./z3 -u
Vstup:
1.6,9/3[L
dva krat dva
STO PLUS OSEM
CISLO 1963 T
$$$$ 123 SLOVO slovko
Výstup:
L
DVA KRAT DVA
STO PLUS OSEM
CISLO T
SLOVO SLOVKO
Spustenie programu:
./z3 -d -u
./z3 -u -d
Vstup:
1236 fymk PLEC wv5u1n96w U5ET5X5W5 w.h.y.g.sd fUY4GKpe59vnHX
999983
ERFGT 6581
963258 4 tools for good people
Výstup:
1236 FYMK PLEC WV5U1N96W U5ET5X5W5 WHYGSD FUY4GKPE59VNHX
999983
ERFGT 6581
963258 4 TOOLS FOR GOOD PEOPLE
Spustenie programu:
./z3 -p -u
./z3 -u -p
Vstup:
please lift me up
THERE IS NOTHING TO DO
So5meTIMES ? WE des4irE @ mORe7
.......9......
//-----w-#
The.World.Has.Totally.Changed.
Výstup:
PLEASE LIFT ME UP
THERE IS NOTHING TO DO
SOMETIMES ? WE DESIRE @ MORE
.............
//-----W-#
THE.WORLD.HAS.TOTALLY.CHANGED.
Spustenie programu:
./z3 -d -p -u
Vstup:
.z
p
985 475 26 15489658
--.-.-.-.-
AAA PPOOO LRPTKSJS
sfjsdklfj tert w qwe e asd asd
df5*46df(* 5g456g4 5@6h45,./s*-82 ,.1/sd+5
Výstup:
.Z
P
985 475 26 15489658
--.-.-.-.-
AAA PPOOO LRPTKSJS
SFJSDKLFJ TERT W QWE E ASD ASD
DF5*46DF(* 5G456G4 5@6H45,./S*-82 ,.1/SD+5
Blok 9
Vstupná operácia + prepínač
-r
. Bez non-option argumentov.
Spustenie programu:
./z3 -r KLADIvo
Vstup:
r pl KOW
WEWE457786786AFSF
dfg******1125663ERFGT PLOK
velmidlheslovo vodopad
uik 98955weqwe /././.qaWWPr
Výstup:
K KL KLA
KLADIvoF
KLADIvoT KLAD
KLADIvoheslovo KLADIvo
KLA KLADI KLADIv
Spustenie programu:
./z3 -d -p -r rU8
Vstup:
a B 9+7 pl W8s w.9.Y reg 489
word1 word2 word3
sh LOOOONG
F4SF4S6 ER4ERT54E6R d98sdf1iii
------? ...
Výstup:
r r r+r rU rU8 r.r.r rU8 rU8
rU8d1 rU8d2 rU8d3
rU rU8OONG
rU8F4S6 rU8ERT54E6R rU8sdf1iii
------? ...
Blok 10
Vstupná operácia + prepínač
-r
. So zadanými non-option argumentami.
Spustenie programu:
./z3 -d -p -r 123LEKvar 429 BI stro
Vstup:
karta BImetal+BIt 964 BI111-4299854 DIELO strom stromCEK/429friolk
111 222 555 444
STRO
stro
Bi
strojnyMechanik
Výstup:
karta 123LEKv+123 964 123LE-123LEKv DIELO 123LE 123LEKva/123LEKvar
111 222 555 444
STRO
123L
Bi
123LEKvarchanik
Blok 11
Vstupná operácia + prepínač
-R
. Bez non-option argumentov.
Spustenie programu:
./z3 -R AgnoStiC6
Vstup:
4685p
..66R6....
R Pl aHoj PKyHnBgVP psdkKJJyBfsZaQ
4SD6F5SDFu4F.SD.F.S
BIIGsmaaall
Výstup:
a
A
A Ag aGno AGnOsTiC6 agnoSTIc6fsZaQ
AGNOSTiC6DFS
AGNOstic6ll
Spustenie programu:
./z3 -d -p -R peer2PEER
Vstup:
1 123 54654654
.... **** -
a hj OP WSDR rtghnmj
lll.Repl5454RPiii.RTRPTRTPRTPwopl.
SiDF,SF,Sq54DFdd5F,54F,5F4,5FdddT4WAE,p45IRxprjR54b,5SW4P
Výstup:
p pee peer2PEE
.... **** -
p pe PE PEER peer2pe
pee.Peer2PEERPiii.PEER2PEERTPwopl.
PeER,PE,Peer2PeeRF,peE,pEe,pEer2PEERE,peeR2peerR54b,pEEr2
Blok 12
Vstupná operácia + prepínač
-R
. So zadanými non-option argumentami.
Spustenie programu:
./z3 -d -p -R waYTooG2D a 123 2Sa
Vstup:
anton ALGEBRA AAAAAAAAAAAAAAAA
1 12 123 12345678
2samaritan 2SAUDSKAarabia 2sA
AmERika+2SAlko.123
tramVAJ letisko.LAMPION
???????
Výstup:
wayto WAYTOOG WAYTOOG2DAAAAAAA
1 12 waY waYTooG2
waytoog2dn wAYTOOG2drabia waY
WaYToog+wAYtoo.waY
tramVAJ letisko.LAMPION
???????
Blok 13
Rôzne platné kombinácie všetkých prepínačov.
Spustenie programu:
./z3 -l -r Soul -d vel 33dub
Vstup:
VELKA NOC
3++3+Dubnica
duB
*****V.E=Lodrom
++++959/6
.... vE**Lecip klokan 33dU*bovc*ov 963 33
ve
33du
vel
Výstup:
Soula noc
Soulbnica
dub
Souldrom
9596
Soulcip klokan Soulbovcov 963 33
ve
33du
Sou
Spustenie programu:
./z3 -r 123456 -p -d -u NE
Vstup:
nedela
n
NEvolnost
nedobrovolnost
system
15
.netreba.neplnolety+nervy
VLOCKA=neoliT
nez
neboj
Výstup:
123456
N
123456OST
123456OVOLNOST
SYSTEM
15
.123456A.123456LETY+12345
VLOCKA=123456
123
12345
Spustenie programu:
./z3 -p -l -R Dubnica x mie POL
Vstup:
POL
polka
MIESTO
X
xx
XXX
X...X....X
MIERUMILOVNY
X12596523626 X4
9MI4E9nk1256a
brana LECO
Xorg.x8888.3257MIE,,74.. POLOVICA+XdeLEgaCIA
Výstup:
dub
dubni
dubnic
d
du
dub
d...d....d
dubnicalovny
d d
dubnic
brana leco
dubn.d.dub,,.. dubnicaa+dubnicacia
Nasledujúce zdroje vám môžu pomôcť pri riešení zadania. Odporúčame si tieto zdroje pozrieť/preštudovať. Na prístup k niektorým zdrojom potrebujete byť prihlásení vo vašom Google G-Suite STU konte.