Swift 2.3, 593 585 byte
var t = 0,g = UIGraphicsGetCurrentContext(),c = UIColor(hue:CGFloat(drand48()),saturation:1,brightness:1,alpha:1).CGColor
srand48(time(&t))
UIGraphicsBeginImageContext(CGSizeMake(5,5))
for x in 0..<3 {for y in 0..<5 {CGContextSetFillColorWithColor(g,drand48()>0.5 ? c : UIColor.whiteColor().CGColor)
var r = [CGRect(x:x,y:y,width:1,height:1)]
if x<2 {let m = x==0 ? 4 : 3;r.append(CGRect(x:m,y:y,width:1,height:1))}
CGContextFillRects(g,&r,r.count)}}
let i = UIGraphicsGetImageFromCurrentImageContext()
UIImagePNGRepresentation(i)!.writeToURL(NSURL(string:"/a/a.png")!,atomically:true)
Aggiornare
Swift 3, 551 byte
var t = 0,g = UIGraphicsGetCurrentContext()!,c = UIColor(hue:CGFloat(drand48()),saturation:1,brightness:1,alpha:1).cgColor
srand48(time(&t))
UIGraphicsBeginImageContext(CGSize(width:5,height:5))
for x in 0..<3 {for y in 0..<5 {g.setFillColor(drand48()>0.5 ? c : UIColor.white().cgColor)
var r = [CGRect(x:x,y:y,width:1,height:1)]
if x<2 {let m = x==0 ? 4 : 3;r.append(CGRect(x:m,y:y,width:1,height:1))}
g.fill(&r,count: r.count)}}
let i = UIGraphicsGetImageFromCurrentImageContext()!
try!UIImagePNGRepresentation(i)!.write(to: URL(string:"/a/a.png")!)
Sono al WWDC e ho appena ricevuto l'Xcode 8 beta con Swift 3. Apple ha fatto alcune delle chiamate CoreGraphics più "Swifty" e sono in grado di ridurre il numero di byte.
Codice Swift 2 Ungolfed:
var t = 0
srand48(time(&t))
UIGraphicsBeginImageContext(CGSizeMake(5,5))
let context = UIGraphicsGetCurrentContext()
let color = UIColor(hue: CGFloat(drand48()),saturation:1,brightness:1,alpha:1).CGColor
for x in 0..<3 {
for y in 0..<5 {
CGContextSetFillColorWithColor(context, drand48() > 0.5 ? color : UIColor.whiteColor().CGColor)
var rects = [CGRect(x:x,y:y,width:1,height:1)]
if x < 2 {
let mirror = x==0 ? 4 : 3
rects.append(CGRect(x: mirror, y: y, width: 1, height: 1))
}
CGContextFillRects(context, &rects, rects.count)
}
}
let image = UIGraphicsGetImageFromCurrentImageContext()
UIImagePNGRepresentation(image)!.writeToURL(NSFileManager.defaultManager().URLsForDirectory(.DocumentDirectory,inDomains:.UserDomainMask).first!.URLByAppendingPathComponent("a.png"), atomically:true)
Questa risposta presuppone che UIKit sia disponibile e utilizzi il framework Cocoa Touch.
Alcuni esempi di immagini di output:

So di non poter competere con la maggior parte delle altre risposte, ma volevo provarlo come una sfida personale. C'è sicuramente spazio per miglioramenti con questa risposta, ma penso che sarà difficile scendere sotto alcune centinaia di byte a causa della lunghezza dei nomi dei metodi di scrittura delle immagini UIKit e CoreGraphics. Ho scelto di scrivere un vero file PNG anziché i valori PPM come esercizio per me stesso, ma se avessi usato il formato PPM sarebbero state possibili risposte più brevi.
Ho già iniziano come una perdita dal dover dichiarare una variabile alle sementi srand48con time. Ho scelto questo arc4random()o arc4random_uniform()perché alla fine perderei più byte con quelli. Semino l'Rng da usare drand48per generare un colore casuale e scelgo quando scrivere un colore su un pixel.
CGSizevs CGSizeMakee CGRectvs CGRectMake:
Passo tra le funzioni API C incorporate e le loro estensioni Swift per trovare il costruttore più corto per ognuna. CGSizeMakefinisce per essere più corto di CGSize()e CGRectfinisce per essere più corto di CGRectMake():
CGSizeMake(5,5)
CGSize(width:5,height:5)
CGRect(x:x,y:y,width:1,height:1)
CGRectMake(CGFloat(x),CGFloat(y),1,1)
Avrei dovuto creare CGFloats xed ya causa della natura del ciclo for. Non sono davvero entusiasta del loop 2D e se l'uguaglianza controlla, ma stavo davvero lottando per trovare un modo più breve. C'è sicuramente spazio per radere qualche byte qui.
Chiamare CGContextFillRectscon una matrice di CGRectstrutture è più economico che chiamare CGContextFillRectdue volte con due valori diversi, quindi salvo qualche byte con la matrice e il puntatore.
Inoltre salvo 27 byte non chiamando UIGraphicsEndImageContext(). Mentre questo sarebbe normalmente un "bug" nel codice di produzione, non è necessario per questo programma giocattolo.
Colori:
Anche i colori sono un problema da affrontare, dal momento che sto creando UIColoroggetti ma devo scrivere un CGColortipo opaco su ogni pixel. Il codice più corto che ho trovato per creare un colore a caso è stato quello di utilizzare il UIColorcostruttore e ottenere il CGColorda quella UIColor. Lo stesso vale per il bianco. Se stavo usando il framework Cocoa anziché Cocoa Touch, potrei essere in grado di salvare alcuni byte utilizzando CGColorGetConstantColor(), ma sfortunatamente quel metodo non è disponibile in Cocoa Touch SDK.
Scrivere su un file:
La scrittura su un file richiede quasi 100 byte. Non sono sicuro di come fare per ottimizzare questo. Su alcuni sistemi a seconda delle tue autorizzazioni, potresti dover utilizzare la directory Documents che sarebbe ancora più lunga:
UIImagePNGRepresentation(i)!.writeToURL(NSFileManager.defaultManager().URLsForDirectory(.DocumentDirectory,inDomains:.UserDomainMask).first!.URLByAppendingPathComponent("a.png"), atomically:true)
Sicuramente aperto a ulteriori ottimizzazioni.
Modifica 1: salvato alcuni byte riorganizzando alcune dichiarazioni di variabili.