Problem hidden
|This problem was hidden by Editorial Board member probably because it has incorrect language|version or invalid test data, or description of the problem is not clear.|

WI_TRIGR - Zastępowanie trójznaków

Współczesność przyzwyczaiła nas do sytuacji, w której wszystkie komputery na całym świecie posługują się tą samą konwencją kodowania znaków graficznych. Można zaryzykować twierdzenie, że wszelkie używane w tej chwili systemy reprezentacji znaków wywodzą się ze standardu nazywanego ASCII i co najmniej zestaw znaków o kodach dziesiętnych od 32 do 127 jest wszędzie taki sam.

Taki stan rzeczy różni się diametralnie od sytuacji, która panowała na rynku sprzętu komputerowego jeszcze w połowie lat sześćdziesiątych ubiegłego wieku. W tamtych czasach prawie każdy producent komputerów używał własnego standardu kodowania, przy czym gdyby różnice sprowadzały się tylko do różnic w kodach, byłby to problem o niewielkiej wadze. Gorzej, że poszczególne systemy różniły się znacząco także zestawami znaków (czyli alfabetami), co oznaczało, że znaki używane w jednym standardzie nie występowały w drugim i odwrotnie.

Najlepszym przykładem tej sytuacji może być używany przez firmę IBM system o wielce skomplikowanej nazwie EBCDIC (ang. Extended Binary Coded Decimal Interchange Code). We wczesnych wersjach tego standardu (co może wydać się nam niewiarygodne) nie występowały znaki '[' i ']' (nawiasy kwadratowe) oraz '{' i '}' (nawiasy klamrowe).

Nietrudno sobie wyobrazić wywołane tym komplikacje, ale zainteresujemy się tylko jedną z nich, której sedno zawarte jest w następującym pytaniu: „jak można programować w języku C, jeśli na klawiaturze naszego komputera nie ma w ogóle ani nawiasów klamrowych, ani kwadratowych?”.

Otóż można. Specjalnie dla poradzenia sobie z tym problemem wprowadzono do definicji języka C przedziwną konstrukcję, nazywaną „trigraph”, co możemy spróbować przetłumaczyć jako „trójznak”. Istota pomysłu jest następująca: nieszczęśliwy programista, któremu przypadło w udziale pisanie programu w  języku C na komputerze, który cierpi na niedostatek koniecznych znaków, będzie przy pisaniu programu używał specjalnych, zdefiniowanych w standardzie języka, trzyznakowych kombinacji, a preprocesor, w ramach swoich normalnych czynności, będzie je zamieniał na znaki potrzebne do poprawnej konstrukcji programu. Do dzisiaj każdy szanujący się kompilator języka C potrafi operować trójznakami i co więcej, nadal dostępne są narzędzia, które potrafią przerobić klasyczny program w języku C na program z trójznakami i odwrotnie.

Zdefiniowano dziewięć trójznaków: oto one i ich znaczenia:

 

trójznak równoważnik
??= #
??/ \
??' ^
??( [
??) ]
??! |
??< {
??> }
??- ~

 

 

 

 

 

 

 

 

 

A tak wyglądałby program „Hello world!” zapisany w C przy użyciu trójznaków:

 

??=include <stdio.h>

int main(int argc, char *argv ??(??))??<

puts(”Hello world!”);

return 0;

??>

 

Prawda, że ładny?

Polecenie: napisz program, który wczyta ze standardowego wejścia program w języku C, zapisany z użyciem trójznaków i wypisze na standardowe wyjście ten sam program, ale zapisany klasycznie.

 

Dane wejściowe: pewna (nieznana z góry) liczba linii tekstu (każda o nieznanej z góry długości), składającego się na program w języku C zawierający trójznaki

Dane wyjściowe: program w języku C po zamianie trójznaków na znaki klasyczne

Przykład:

Wejście:

??=include <stdio.h>

int main(int argc, char *argv??(??))

??<

puts(”Hello world!”);

return 0;

??>

 

Wyjście:

#include <stdio.h>

int main(int argc, char *argv[] )

{

puts(”Hello world!”);

return 0;

}

 


Dodane przez:Sławomir Wernikowski
Data dodania:2009-09-11
Limit czasu wykonania programu:0.200s
Limit długości kodu źródłowego50000B
Limit pamięci:1536MB
Cluster: Cube (Intel G860)
Języki programowania:DOC C CSHARP CPP C99 JAVA PAS-GPC PAS-FPC PDF PS
Pochodzenie:Konkurs o nagrodę Dziekana WI ZUT w Szczecinie (2009)
© Spoj.com. All Rights Reserved. Spoj uses Sphere Engine™ © by Sphere Research Labs.