Jste zde

Zajímavé úlohy pro programátory v C a C++ #10

Po delší době přináším další hádanku z oblasti programovacích jazyků C a C++. Tentokrát budeme řešit triviální věc nekonvenčním způsobem. Nic složitého to ale nebude a tak postačí dostatek důvtipu :).

Zadání

Vašim úkolem je napsat program v jazyce C nebo C++, který na standardní výstup vytiskne "Nazdar Karle!" (bez uvozovek). Cožééé? V klidu, jen mě to nechte dopsat... Aby to nebylo tak triviální, tak se v programu nesmí vyskytovat žádný středník :). Mezi další podmínky patří to, že program musí vyhovovat normě C99 či C++98, nesmí se spoléhat na žádné implementačně závislé či nedefinované chování, a při překladu nesmí vyhazovat varování (ukázka překladu: gcc -std=c99 -W -Wall -pedantic -o nazdar nazdar.c). Můžete použít cokoliv ze standardní knihovny (tj. #include <stdio.h> neporušuje podmínku o středníku), ale nesmíte vytvářet vlastní hlavičkové soubory.

No a pokud se sejde víc řešení, tak vítězí ten, jehož program bude nejkratší (ve smyslu počtu užitých znaků ve zdrojovém kódu).

Řešení

Nejčistější a nejkratším mně známým řešením je následující program v C99 (viz komentář od afriho):

#include<stdio.h>
int main(){if(puts("Nazdar Karle!")){}}

Jen poznamenám, že i v C99 je implicitní return 0; při návratu z main() (viz norma, 5.1.2.2.3.1).

Komentáře

No, to zas tak tezke nebylo...

main(){if(puts("Nazdar Karle!")){}}
popr.

main(){puts("Nazdar Karle!")X}
spolecne s gcc -DX=';', coz se pochopitelne s dalsimi -D da jeste zkratit na 'X' :)

Díky za odpověď. Ono to ani nebylo myšleno jako něco složitého, ale spíše jako zajímavost :). Jen bych doplnil, že by tam měl být ještě #include <stdio.h> a explicitně zmíněn návratový typ mainu, jinak gcc hlásí varování.

jasne, ja jsem jen liny psat :)

Neni to kratke, je to mirne obfuskovane, ale strednik tam neni.

#include \   
<stdio.h>                                                                   
#define \                                                                   
p(x) \                                                                      
putchar(x)                                                                  
#define P if                                                                
#define C \                                                                 
}}}}}}}}}}}}}                                                               
#define O {}                                                                
int main()                                                                      
{P(p('N')){P(p('a')){P(p('z'))                                              
{P(p('d')){P(p('a')){P(p('r'))                                              
{P(p(' ')){P(p('K')){P(p('a'))                                              
{P(p('r')){P(p('l')){P(p('e'))                                              
{P(p('!')){P(p('\n'))O C O} 

Hehe :). Díky za řešení.

Zveřejnil jsem řešení desátého úkolu.

Přidat komentář