Nördtäfvlan 2002
- Minst C-källkod vinner. Överblivet whitespace (typ en massa fula radbryt, inklusive det sist i filen som många
editorer her dit i onödan) räknas inte.
- Ska kompilera&länka med en på joshua.helgo.net installerad gcc med valfri mängd varningar. Inga konstiga
kompilatorväxlar som tillåter extra mycket dumheter. Att klara pedant-optioner är coolt men inte nödvändigt.
- Ingen inline-assembler.
- Ska såklart gå att köra med korrekt resultat för alla vettiga indata (ovettiga indata får ge vilket
resultat som helst).
- Får inte ge t.ex. segmentation fault för något giltigt indata (inte ens "teoretiskt", d.v.s. fel som
egentligen är fel fast de inte råkar uppstå i praktiken). Läcka minne är helt ok.
- Det går att allokera drygt 100MB sammanhängande minne om man är tvungen.
- Man får inte förutsätta att minne/variabler är initierade.
- Man får förutsätta Intel 32-bitars-arkitektur och liten endian (och allt annat man kan hitta på joshua).
- Om inget annat anges är det talbas 10 som gäller för in och utmatning.
- Ingen inläsning av filer från disk annat än de som man själv skapat under samma programkörning
- Även om man kan får man inte tjuvkika på andras bidrag utan tillstånd.
- Vid varje uppgift får man en poäng som är det antal bytes som man är sämre än
vinnaren/vinnarna. Färst totalpoäng vinner. Felaktigt/inget bidrag i en uppgift ger samma
poäng som det sämsta bidraget + 7 + spott och spe.
- Användande av goto är en styggelse.
Här kan man kolla längden på källkoden (om den är på en rad), och
här kan man fixa en md5-checksumma (räcker som "inskickad kod", om
man sen kan uppvisa källkod som ger den checksumman).
Här kan man göra både och. Den plockar också bort onödiga radbryt.
Uppgift 1 (deadline 2002-12-07 17:00):
Ett program som genererar alla primtal upp till och med det från
kommandoraden angivna (positiva hel)talet, i ordning. Högst ett tal per rad, valfri mängd whitespace. Indataområde 2 - åtminstone 11 miljoner
Highscore: Adam&John, 87 bytes. Adam, 92 bytes. John, 101 bytes.
John, 101 bytes:
main(int i,int**a){int m=atoi(*++a),b;for(;i<=m;i++){for(b=2;b<i;b+=i%b?1:m);b>i?:printf("%d\n",i);}}
Uppgift 2 (deadline 2002-12-13 17:00):
Ett program som faktoriserar ett tal till dess primfaktorer. Indatamängd, inmatning och
utskrift samma som uppgift 1. Primfaktorerna behöver inte skrivas ut i någon särskild
ordning.
Highscore: John, 77 bytes. Adam, 80 bytes.
John, 77 bytes:
main(int p,int**v){int f=atoi(*++v);while(f>1)f%p?p++:printf("%d\n",p,f/=p);}
Uppgift 3 (deadline 2003-12-04 20:30):
Ett program som givet ett (från kommandoraden angivet) datum på ISO-8601-format
(YYYY-[M]M-[D]D) skriver ut veckodagen på svenska (enligt den gregorianska kalendern).
Indataområde 1582-10-15 (som nog var en fredag) till åtminstone 100000-12-31.
Adam knäcker John med 162 bytes mot 172, och vinner pokalen. John har ett tjuvknep för att trimma Adams program ytterligare en
byte. Best-in-show, på 161 bytes:
main(int y,int**b){int m,d;printf("%sdag\n","fre\0lör\0sön\0mån\0tis\0ons\0tors"+(d-=m<sscanf(b[1],"%d-%d%d",&y,&m,&d)?y--:y-2,23*m/9-d+6+y/4-y/100+y/400)%7*4);}