12. mai 2018

En visuell «quine» for Processing

Det er et lite påskeegg i TED-foredraget som jeg holdt forrige helg, og det er en visuell quine for Processing.

En quine er et ikke-tomt dataprogram som ikke tar noen input og som produserer en kopi av sin egen kildekode som den eneste output. Standardtermen for slike programmer i litteraturen for beregnbarhetsteori og datavitenskap er «selv-repliserende programmer», «selv-reproduserende programmer» og «selv-kopierende programmer».

Ved denne definisjonen er ikke mitt program streng tatt en quine, fordi output er ikke kildekoden til programmet, men en visualisering av kildekoden. Dette programmet visualiserer bare seg selv. Uansett, er det moro.

Her er koden hvis du er interessert! PS. Hvis du førsøker, må du lagre programmet med navnet “SelfDrawingSketch.pde”, ellers vil det ikke funke.

String[] lines;
PFont font;
int counter;
float currentWidth, currentHeight;

void setup() {
  size(600, 800);
  lines = loadStrings("SelfDrawingSketch.pde");
  font = createFont("SourceCodePro-Regular", 12);
  textFont(font);
  stroke(0, 255, 0, 60);
  fill(255);
}

void draw() {
  background(30);
  counter = 0;
  currentWidth = 40;
  currentHeight = g.textLeading;
  for (int i=0; i<lines.length; i++) {
    textAlign(RIGHT);
    text(i+1, currentWidth-20, currentHeight);
    textAlign(LEFT);
    line(40, currentHeight, 40 + textWidth(lines[i]), currentHeight);
    for (int j=0; j<lines[i].length(); j++) {
      char c = lines[i].charAt(j);
      if (counter < frameCount) {
        text(c, currentWidth, currentHeight);
        counter++;
      }
      currentWidth += textWidth(c);
    }
    currentWidth = 40;
    currentHeight += g.textLeading;
  }
}
av Roger Antonsen