git @ Cat's Eye Technologies Circute / master script / circute.js
master

Tree @master (Download .tar.gz)

circute.js @masterraw · history · blame

/*
 * This file was AUTOMATICALLY generated from an ALPACA description.
 * EDIT AT YOUR OWN RISK!
 */


function in_nbhd_pred(pf, x, y, pred, nbhd) {
  var count = 0;
  for (var i = 0; i < nbhd.length; i++) {
    if (pred(pf.get(x+nbhd[i][0], y+nbhd[i][1]))) {
      count++;
    }
  }
  return count;
}

function in_nbhd_eq(pf, x, y, stateId, nbhd) {
  return in_nbhd_pred(pf, x, y, function(x) { return x === stateId; }, nbhd);
}

function evolve_playfield(pf, new_pf) {
  pf.map(new_pf, evalState, -1, -1, 1, 1);
}
function loadMapper(c) {
  if (c === ' ') return 'Space';
  if (c === '#') return 'Spark';
  if (c === '-') return 'Tail';
  if (c === '=') return 'Wire';
  if (c === 'N') return 'NAND';
};
function dumpMapper(s) {
  if (s === 'Space') return ' ';
  if (s === 'Spark') return '#';
  if (s === 'Tail') return '-';
  if (s === 'Wire') return '=';
  if (s === 'NAND') return 'N';
};
function eval_Space(pf, x, y) {
var id;
return 'Space';
}

function eval_NAND(pf, x, y) {
var id;
return 'NAND';
}

function eval_Wire(pf, x, y) {
var id;
if (((((((pf.get(x+-1,y+0)==='Spark')||(pf.get(x+1,y+0)==='Spark'))||(pf.get(x+0,y+-1)==='Spark'))||(pf.get(x+0,y+1)==='Spark'))||((pf.get(x+0,y+1)==='NAND')&&((pf.get(x+-1,y+1)==='Wire')||(pf.get(x+1,y+1)==='Wire'))))||((pf.get(x+0,y+-1)==='NAND')&&((pf.get(x+-1,y+-1)==='Wire')||(pf.get(x+1,y+-1)==='Wire'))))) {
  return 'Spark';
}
return 'Wire';
}

function eval_Spark(pf, x, y) {
var id;
if (((((((pf.get(x+-1,y+0)==='Tail')||(pf.get(x+1,y+0)==='Tail'))||(pf.get(x+0,y+-1)==='Tail'))||(pf.get(x+0,y+1)==='Tail'))||(((pf.get(x+0,y+1)==='NAND')&&(pf.get(x+-1,y+1)==='Spark'))&&(pf.get(x+1,y+1)==='Spark')))||(((pf.get(x+0,y+-1)==='NAND')&&(pf.get(x+-1,y+-1)==='Spark'))&&(pf.get(x+1,y+-1)==='Spark')))) {
  return 'Tail';
}
return 'Spark';
}

function eval_Tail(pf, x, y) {
var id;
if (true) {
  return 'Wire';
}
return 'Tail';
}

function evalState(pf, x, y) {
  var stateId = pf.get(x, y);
  if (stateId === 'Space') return eval_Space(pf, x, y);
  if (stateId === 'NAND') return eval_NAND(pf, x, y);
  if (stateId === 'Wire') return eval_Wire(pf, x, y);
  if (stateId === 'Spark') return eval_Spark(pf, x, y);
  if (stateId === 'Tail') return eval_Tail(pf, x, y);
}