International Shortest C Contest

Aus MARJORIE-WIKI
Wechseln zu: Navigation, Suche

Der International Shortest C Contest (kurz ShoCC) ist ein Programmierwettbewerb für am kreativsten verkürzte C-Programme. Ziel des Wettbewerbs ist gerade nicht ein lehrbuchmäßig lesbarer Programmcode: stattdessen soll durch Einsatz von Wissen über die Spezifikation der Programmiersprache und mögliche Seiteneffekte von Programmierstatements ein besonders kurzes Programm geschrieben werden. Der ShoCC steht damit dem Geist des International Obfuscated C Code Contest nahe.

Der Contest wurde 1995 von der Unix AG der Universität Kaiserslautern unter Nils Magnus und Peter Conrad ins Leben gerufen.

1. Wettbewerb[Bearbeiten]

Aufgabe des ersten Wettbewerbs war es, ein Programm zu schreiben, welches zwei Zahlen einliest und als Ausgabe eine (je nach Wahl der beiden Grenzen auf- oder absteigend sortierte) Liste aller Zahlen zwischen diesen beiden Argumenten erzeugt. Die kürzesten Einsendungen lösten diese Aufgabe in jeweils 69 Zeichen:

 [01] main(a,y,d)int*y;{for(a=atoi(y[1]);o(a),d=atoi(y[2])-a;)a+=(d|1)%2;}
 [02] main(c,v,x)int*v;{for(c=atoi(v[1]);o(c),x=atoi(v[2])-c;c+=(x|1)%2);}
 [03] main(a,v)int*v;{for(a=atoi(*++v);o(a),*v=atoi(v[1])-a;a+=*v>>31|1);}
 [04] main(i,v,j)int*v;{for(i=atoi(v[1]);o(i),j=atoi(v[2])-i;i+=(j|1)%2);}
 [05] main(c,d){int*v=d;for(c=atoi(v[1]);o(c),d=atoi(v[2])-c;c+=d>>31|1);}
 [06] main(d,O,_)int*O;{for(_=atoi(O[1]);o(_),d=_-atoi(O[2]);_-=d>>-1|1);}
 [07] main(a,v)int*v;{for(a=atoi(v[1]);o(a),*v=atoi(v[2])-a;a+=*v>>31|1);}
 [08] main(a,b)int*b;{for(a=atoi(*++b);o(a),*b=atoi(b[1])-a;a+=(*b|1)%2);}
 [09] main(a,b)int*b;{for(a=atoi(b[1]);o(a),*b=atoi(b[2])-a;a+=*b>>31|1);}
 [10] main(J,_)int*_;{for(J=atoi(*++_);o(J),*_=atoi(_[1])-J;J+=(*_|1)%2);}
 [11] main(i,b,j)int*b;{for(i=atoi(b[1]);o(i),j=i-atoi(b[2]);i-=j>>31|1);}
 [12] main(k,j,i)int*j;{for(k=atoi(j[1]);o(k),i=atoi(j[2])-k;k+=(i|1)%2);}
 [13] main(n,a,e)int*a;{for(n=atoi(a[1]);o(n),e=atoi(a[2])-n;n+=e>>31|1);}
 [14] a;main(c,d)int*d;{for(a=atoi(d[1]);o(a),c=atoi(d[2])-a;a+=(c|1)%2);}
 [15] main(n,c,d)int*c;{for(n=atoi(c[1]);o(n),d=atoi(c[2])-n;n+=d>>31|1);}
 [16] main(d,a)int*a;{for(d=atoi(a[1]);o(d),*a=atoi(a[2])-d;d+=(*a|1)%2);}
 [17] *p;main(i,x){for(i=atoi((p=x)[1]);o(i),x=atoi(p[2])-i;x>0?i++:i--);}
 [18] main(c,v,d)int*v;{for(c=atoi(v[1]);o(c),d=atoi(v[2])-c;c+=d>>31|1);}
 [19] main(c,v,d)int*v;{for(c=atoi(v[1]);d;o(d>0?c++:c--))d=atoi(v[2])-c;}

Die bisher kürzeste bekannte Lösung benötigt 66 Zeichen und wurde nach dem Wettbewerb aus den besten Ideen der Einsender destilliert:

 *v;main(a,b){for(a=atoi(1[v=b]);o(a),b=atoi(v[2])-a;a+=(b|1)%2);}

Sonderpreise für die most obfuscated solutions (am wenigsten durchschaubare Lösungen) wurden für vier Einsendungen vergeben:

 [01] main(b,v,a)char**v;{b=atoi(v[2]);o(b+((a=atoi(v[1]))^b&&sprintf(*v,"%s %d %d",*v,a,b+(b>a?-1:1))&&system(*v),0));}
 [02] #define m(x,y)x=atoi(y[(int*)b]),
      main(a,b,i){a-3?(o(i),(i-b)&&main(a,b,i+a)):(m(i,1)m(b,2)main(i<b?1:-1,b,i));}
 [03] *p;main(i,x){for(i=atoi((p=x)[1]);o(i),x=atoi(p[2])-i;x>0?i++:i--);}
 [04] main(c,v,i)int*v;{c-i?main(v?atoi(v[1]):c+2*(o(c),c<i)-1,0,v?atoi(v[2]):i):o(c);}

Weblinks[Bearbeiten]

Info Sign.svg Dieser Wikipedia-Artikel wurde, gemäß GFDL, CC-by-sa mit der kompletten History importiert.