Code Poems: nel codice e nell'esecuzione

Ideazione tradizionale

Alejandro Corredor, Ars Poetica, 2012(?)

// width=200 height=560

// Recoding of:
// Alejandro Corredor, Ars Poetica, 2012(?)
// by Antonio Belluscio

let silence = "                  ";
let idea = "This is'nt p0etry.";
let draft;
let poem = new Array(idea.length);

function setup() {
//    createCanvas(200,510); // ???????????
  draft = idea;
  Write();
  ReThink();
}

function draw() {
  ReWrite();
}

function Write() {
  pprint(draft);
}

function ReThink() {
  for (let decomp = 0; decomp < draft.length; decomp++) {
    poem[decomp] = draft.substring(decomp, decomp + 1);
  }
}

function ReWrite() {
  let seek = int(random(0, poem.length));
  poem[seek] = " ";
  let poetry = join(poem, "");
  pprint(poetry);
  if (poetry == silence) {
    pprint(".");
    noLoop();
  }
}

// CONSOLE SIMULATION THROUGH A "PRE" HTML ELEMENT

let outputPre;
let preWidth = 160; // without padding
let preHeight = 530;
//let preHeight = "100%";

function pprint(textLine) {
//    return;
  if (outputPre == undefined) {
    noCanvas();
    outputPre = createElement("pre", "");
    outputPre.position(0, 0);
    outputPre.size(preWidth, preHeight);
    outputPre.style("font-size","12px");
    outputPre.style("padding","15px 20px");
    outputPre.style("margin","0");
    outputPre.style("background-color","#000");
    outputPre.style("color","#fff");
    outputPre.style("overflow-y","scroll");
    outputPre.style("cursor","pointer");
    outputPre.style("user-select","none");
    outputPre.mouseClicked(regenerate);
  }
  outputPre.html(textLine + "<br>", true);
}

function regenerate() {
  if (outputPre) {
    outputPre.html("");
  }

  draft = idea;
  Write();
  ReThink();
  loop();
}

Il codice/poema produce risultati diversi a ogni esecuzione.
 
Per rieseguire il codice della simulazione di questa pagina è possibile cliccare sul risultato ottenuto.
 
Sul Web Editor è presente il sorgente in p5.js della simulazione. La "traduzione" e il tentativo di ottenere un risultato simile a quello che si ottiene in Processing hanno ovviamente fatto perdere un po' il senso al codice originario e vengono segnalati a puro scopo didattico.

Per chi fosse interessato a far eseguire il codice/poema in Processing, il "testo" è:

String silence="                  ";
String idea="This is'nt p0etry.";
String draft;
String[]poem=new String[idea.length()];
void setup(){
 draft=idea;
 Write();
 ReThink();
}
void draw(){
ReWrite();
}
void Write(){
println (draft);
}
void ReThink(){
for(int decomp=0;decomp<draft.length();decomp++)
{poem[decomp]=draft.substring(decomp,decomp+1);}
}
void ReWrite(){
 byte seek=byte(random(0,poem.length));
 poem[seek]=" ";
 String poetry=join(poem,"");
 println(poetry);
 if(poetry.equals(silence)){
 println("."); noLoop();}
}