Advertisement
leomaster

Text to Brainfuck - JavaScript

Apr 22nd, 2018
194
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
  1. function BfGen(input) {
  2.     function StringBuilder() {
  3.         var sb = {};
  4.  
  5.         sb.value = '';
  6.         sb.append = (txt) => sb.value += txt;
  7.  
  8.         return sb;
  9.     }
  10.  
  11.     function closest (num, arr) {
  12.         var arr2 = arr.map((n) => Math.abs(num-n))
  13.         var min = Math.min.apply(null, arr2);
  14.         return arr[arr2.indexOf(min)];
  15.     }
  16.  
  17.     function buildBaseTable(arr) {
  18.         var out = StringBuilder();
  19.         out.append('+'.repeat(10));
  20.         out.append('[')
  21.         arr.forEach(function(cc) {
  22.             out.append('>');
  23.             out.append('+'.repeat(cc/10));    
  24.         });
  25.         out.append('<'.repeat(arr.length));
  26.         out.append('-');
  27.  
  28.         out.append(']');
  29.         return out.value;
  30.     }
  31.  
  32.     var output = StringBuilder();
  33.  
  34.     var charArray = input.split('').map((c) =>c.charCodeAt(0));
  35.     var baseTable = charArray.map((c) => Math.round(c/10) * 10).filter((i, p, s) => s.indexOf(i) === p);
  36.  
  37.     output.append(buildBaseTable(baseTable));
  38.  
  39.     var pos = -1;
  40.     charArray.forEach(function (charCode) {
  41.         var bestNum = closest(charCode, baseTable);
  42.         var bestPos = baseTable.indexOf(bestNum);
  43.  
  44.         var moveChar = pos < bestPos? '>' : '<';
  45.         output.append(moveChar.repeat(Math.abs(pos - bestPos)))
  46.         pos = bestPos;
  47.  
  48.         var opChar = baseTable[pos] < charCode? '+': '-';
  49.         output.append(opChar.repeat(Math.abs(baseTable[pos] - charCode)));
  50.         output.append('.');
  51.         baseTable[pos] = charCode;
  52.     });
  53.  
  54.     console.log(output.value)
  55.     console.log('Length of BF code: ' + output.value.length);
  56.     console.log('Score: ' + output.value.length / input.length);
  57. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement