The Art of Writing Small Programs

Olly Betts

"I do believe that he takes too much pride in the brevity of his work"
— Mr. Talbot

Me

Olly self-portrait
  • Born in 1971
  • Grew up in England
  • 8-bit micro era

My First Computer

Sinclair ZX80

ZX81

Sinclair ZX81

ZX81 Numeric Constants

Numeric constants need 7 bytes!

Lessons Learned

Shaving bytes can still matter!

Xapian 1.2

Saving two bits per key gave 2.5% reduction in typical database size!

BBC Model A

Acorn BBC Micro

Acorn Archimedes

Acorn A3020

Mathematicians

"some of you may have had occasion to run into mathematicians and to wonder therefore how they got that way"
— Tom Lehrer

Third Year at University

Entrance to Whewhell's Court, Trinity College, Cambridge

K Staircase, Whewhell's Court

Rheolism

0d=d:IFdVDUd:a=POINT(32*POS,31-VPOS<<5):
RETURNELSEMODE9:GCOL-9:CLG:OFF:d=9:REPEA
TVDU30:REPEATGOSUBFALSE:IFPOS=28VDUPOS,1
5,VPOS,24;11,26:IF0ELSEIFa=0PRINT:UNTIL0
ELSEUNTILVPOS=25:v=ABSRNDMOD7:i=0:VDU489
5;3:REPEATm=9-INKEY6MOD3:FORr=TRUETO1:t=
rANDSGNt:IFt=rCOLOURv-15:VDUrEORm:i+=m=7
AND9-6*r:IF0ELSEFORn=0TO11:d=n/3OR2EORd:
GOSUBFALSE:IF1<<(n+i)MOD12AND975AND&C259
0EC/8^vVDU2080*ABSr;:t+=a:IF0ELSENEXT,:V
DU20:UNTILt*LOGm:UNTILVPOS=3

Rheolism

0d=d:IFdVDUd:a=POINT(32*POS,31-VPOS<<5):
RETURNELSEMODE9:GCOL-9:CLG:OFF:d=9:REPEA
TVDU30:REPEATGOSUBFALSE:IFPOS=28VDUPOS,1
5,VPOS,24;11,26:IF0ELSEIFa=0PRINT:UNTIL0
ELSEUNTILVPOS=25:v=ABSRNDMOD7:i=0:VDU489
5;3:REPEATm=9-INKEY6MOD3:FORr=TRUETO1:t=
rANDSGNt:IFt=rCOLOURv-15:VDUrEORm:i+=m=7
AND9-6*r:IF0ELSEFORn=0TO11:d=n/3OR2EORd:
GOSUBFALSE:IF1<<(n+i)MOD12AND975AND&C259
0EC/8^vVDU2080*ABSr;:t+=a:IF0ELSENEXT,:V
DU20:UNTILt*LOGm:UNTILVPOS=3

Rheolism

0d=d:IFdVDUd:a=POINT(32*POS,31-VPOS<<5):
RETURNELSEMODE9:GCOL-9:CLG:OFF:d=9:REPEA
TVDU30:REPEATGOSUBFALSE:IFPOS=28VDUPOS,1
5,VPOS,24;11,26:IF0ELSEIFa=0PRINT:UNTIL0
ELSEUNTILVPOS=25:v=ABSRNDMOD7:i=0:VDU489
5;3:REPEATm=9-INKEY6MOD3:FORr=TRUETO1:t=
rANDSGNt:IFt=rCOLOURv-15:VDUrEORm:i+=m=7
AND9-6*r:IF0ELSEFORn=0TO11:d=n/3OR2EORd:
GOSUBFALSE:IF1<<(n+i)MOD12AND975AND&C259
0EC/8^vVDU2080*ABSr;:t+=a:IF0ELSENEXT,:V
DU20:UNTILt*LOGm:UNTILVPOS=3

Rheolism

0d=d:IFdVDUd:a=POINT(32*POS,31-VPOS<<5):
RETURNELSEMODE9:GCOL-9:CLG:OFF:d=9:REPEA
TVDU30:REPEATGOSUBFALSE:IFPOS=28VDUPOS,1
5,VPOS,24;11,26:IF0ELSEIFa=0PRINT:UNTIL0
ELSEUNTILVPOS=25:v=ABSRNDMOD7:i=0:VDU489
5;3:REPEATm=9-INKEY6MOD3:FORr=TRUETO1:t=
rANDSGNt:IFt=rCOLOURv-15:VDUrEORm:i+=m=7
AND9-6*r:IF0ELSEFORn=0TO11:d=n/3OR2EORd:
GOSUBFALSE:IF1<<(n+i)MOD12AND975AND&C259
0EC/8^vVDU2080*ABSr;:t+=a:IF0ELSENEXT,:V
DU20:UNTILt*LOGm:UNTILVPOS=3

Extra Rheolism

0MODE9:OFF:GCOL-9:CLG:REPEATs=s+VPOS:PRI
NTCHR$30s:REPEATSYS6,135TOi,p,d:PRINTTAB
(p=0)CHR$9;:IFPOS=22VDU3100;VPOS,21;6667
;:UNTIL0ELSEUNTILVPOS=25:v=ABSRNDMOD7:VD
U31:COLOUR3:REPEATm=9-INKEY(INKEYTRUEOR6
)MOD3:FORr=TRUETO1:t=rANDSGNt:IFt=rCOLOU
Rv-15:VDUrEORm:i+=m=7AND9-6*r:IF0ELSEFOR
n=0TO11:d=nDIV3OR2EORd:VDUd:IF1<<(n+i)MO
D12AND&C2590ECDIV8^vAND975t+=POINT(p*POS
,31-VPOS<<5):IFrVDUp,8:IF0ELSENEXT,:VDU2
0:UNTILt*LOGm:UNTILVPOS=3:Z

Extra Rheolism

0MODE9:OFF:GCOL-9:CLG:REPEATs=s+VPOS:PRI
NTCHR$30s:REPEATSYS6,135TOi,p,d:PRINTTAB
(p=0)CHR$9;:IFPOS=22VDU3100;VPOS,21;6667
;:UNTIL0ELSEUNTILVPOS=25:v=ABSRNDMOD7:VD
U31:COLOUR3:REPEATm=9-INKEY(INKEYTRUEOR6
)MOD3:FORr=TRUETO1:t=rANDSGNt:IFt=rCOLOU
Rv-15:VDUrEORm:i+=m=7AND9-6*r:IF0ELSEFOR
n=0TO11:d=nDIV3OR2EORd:VDUd:IF1<<(n+i)MO
D12AND&C2590ECDIV8^vAND975t+=POINT(p*POS
,31-VPOS<<5):IFrVDUp,8:IF0ELSENEXT,:VDU2
0:UNTILt*LOGm:UNTILVPOS=3:Z

Extra Rheolism

0MODE9:OFF:GCOL-9:CLG:REPEATs=s+VPOS:PRI
NTCHR$30s:REPEATSYS6,135TOi,p,d:PRINTTAB
(p=0)CHR$9;:IFPOS=22VDU3100;VPOS,21;6667
;:UNTIL0ELSEUNTILVPOS=25:v=ABSRNDMOD7:VD
U31:COLOUR3:REPEATm=9-INKEY(INKEYTRUEOR6
)MOD3:FORr=TRUETO1:t=rANDSGNt:IFt=rCOLOU
Rv-15:VDUrEORm:i+=m=7AND9-6*r:IF0ELSEFOR
n=0TO11:d=nDIV3OR2EORd:VDUd:IF1<<(n+i)MO
D12AND&C2590ECDIV8^vAND975t+=POINT(p*POS
,31-VPOS<<5):IFrVDUp,8:IF0ELSENEXT,:VDU2
0:UNTILt*LOGm:UNTILVPOS=3:Z

Extra Rheolism

0MODE9:OFF:GCOL-9:CLG:REPEATs=s+VPOS:PRI
NTCHR$30s:REPEATSYS6,135TOi,p,d:PRINTTAB
(p=0)CHR$9;:IFPOS=22VDU3100;VPOS,21;6667
;:UNTIL0ELSEUNTILVPOS=25:v=ABSRNDMOD7:VD
U31:COLOUR3:REPEATm=9-INKEY(INKEYTRUEOR6
)MOD3:FORr=TRUETO1:t=rANDSGNt:IFt=rCOLOU
Rv-15:VDUrEORm:i+=m=7AND9-6*r:IF0ELSEFOR
n=0TO11:d=nDIV3OR2EORd:VDUd:IF1<<(n+i)MO
D12AND&C2590ECDIV8^vAND975t+=POINT(p*POS
,31-VPOS<<5):IFrVDUp,8:IF0ELSENEXT,:VDU2
0:UNTILt*LOGm:UNTILVPOS=3:Z

Extra Rheolism

Demo…

Three things to take away

Tinkerability

The End

 Questions welcome, now (if time) or later

Links

 

Image credits: