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

Od Petr Zemek, 2010-02-28

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).

Obsah tohoto pole je soukromý a nebude veřejně zobrazen.

Filtrované HTML (využíváno)

  • Povolené HTML značky: <a href hreflang> <em> <strong> <cite> <code> <ul type> <ol start type> <li> <dl> <dt> <dd> <h2 id> <h3 id> <h4 id> <table>
  • Zvýraznění syntaxe kódu lze povolit přes následující značky: <code>, <blockcode>, <bash>, <c>, <cpp>, <haskell>, <html>, <java>, <javascript>, <latex>, <perl>, <php>, <python>, <ruby>, <rust>, <sql>, <text>, <vim>, <xml>, <yaml>.
  • Řádky a odstavce se zalomí automaticky.
  • Webové a e-mailové adresy jsou automaticky převedeny na odkazy.
CAPTCHA
3 + 4 =
Vyřešte tento jednoduchý matematický příklad a vložte výsledek. Např. pro 1+3 vložte 4.
Nějak se mi tady rozmohl spam, takže poprosím o ověření.

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í.

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}