<?xml version="1.0"?>
<feed xmlns="http://www.w3.org/2005/Atom" xml:lang="ru">
		<id>http://wbex.ru/index.php?action=history&amp;feed=atom&amp;title=JavaScript_DHTML%2FSecurity%2FBrainfuck_Converter_Interpreter</id>
		<title>JavaScript DHTML/Security/Brainfuck Converter Interpreter - История изменений</title>
		<link rel="self" type="application/atom+xml" href="http://wbex.ru/index.php?action=history&amp;feed=atom&amp;title=JavaScript_DHTML%2FSecurity%2FBrainfuck_Converter_Interpreter"/>
		<link rel="alternate" type="text/html" href="http://wbex.ru/index.php?title=JavaScript_DHTML/Security/Brainfuck_Converter_Interpreter&amp;action=history"/>
		<updated>2026-04-04T18:12:26Z</updated>
		<subtitle>История изменений этой страницы в вики</subtitle>
		<generator>MediaWiki 1.30.0</generator>

	<entry>
		<id>http://wbex.ru/index.php?title=JavaScript_DHTML/Security/Brainfuck_Converter_Interpreter&amp;diff=3662&amp;oldid=prev</id>
		<title> в 09:59, 26 мая 2010</title>
		<link rel="alternate" type="text/html" href="http://wbex.ru/index.php?title=JavaScript_DHTML/Security/Brainfuck_Converter_Interpreter&amp;diff=3662&amp;oldid=prev"/>
				<updated>2010-05-26T09:59:55Z</updated>
		
		<summary type="html">&lt;p&gt;&lt;/p&gt;
&lt;table class=&quot;diff diff-contentalign-left&quot; data-mw=&quot;interface&quot;&gt;
				&lt;tr style=&quot;vertical-align: top;&quot; lang=&quot;ru&quot;&gt;
				&lt;td colspan=&quot;1&quot; style=&quot;background-color: white; color:black; text-align: center;&quot;&gt;← Предыдущая&lt;/td&gt;
				&lt;td colspan=&quot;1&quot; style=&quot;background-color: white; color:black; text-align: center;&quot;&gt;Версия 09:59, 26 мая 2010&lt;/td&gt;
				&lt;/tr&gt;&lt;tr&gt;&lt;td colspan=&quot;2&quot; style=&quot;text-align: center;&quot; lang=&quot;ru&quot;&gt;&lt;div class=&quot;mw-diff-empty&quot;&gt;(нет различий)&lt;/div&gt;
&lt;/td&gt;&lt;/tr&gt;&lt;/table&gt;</summary>
			</entry>

	<entry>
		<id>http://wbex.ru/index.php?title=JavaScript_DHTML/Security/Brainfuck_Converter_Interpreter&amp;diff=3663&amp;oldid=prev</id>
		<title>Admin: 1 версия</title>
		<link rel="alternate" type="text/html" href="http://wbex.ru/index.php?title=JavaScript_DHTML/Security/Brainfuck_Converter_Interpreter&amp;diff=3663&amp;oldid=prev"/>
				<updated>2010-05-26T07:27:09Z</updated>
		
		<summary type="html">&lt;p&gt;1 версия&lt;/p&gt;
&lt;p&gt;&lt;b&gt;Новая страница&lt;/b&gt;&lt;/p&gt;&lt;div&gt;==Brainfuck Converter/Interpreter in JavaScript==&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
   &lt;br /&gt;
  &amp;lt;!-- start source code --&amp;gt;&lt;br /&gt;
   &lt;br /&gt;
    &amp;lt;source lang=&amp;quot;html4strict&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;html&amp;gt;&lt;br /&gt;
  &amp;lt;head&amp;gt;&lt;br /&gt;
    &amp;lt;!--&lt;br /&gt;
      CryptoMX Tools&lt;br /&gt;
      Copyright (C) 2004 - 2006 Derek Buitenhuis&lt;br /&gt;
      This program is free software; you can redistribute it and/or&lt;br /&gt;
      modify it under the terms of the GNU General Public License&lt;br /&gt;
      as published by the Free Software Foundation; either version 2&lt;br /&gt;
      of the License, or (at your option) any later version.&lt;br /&gt;
      This program is distributed in the hope that it will be useful,&lt;br /&gt;
      but WITHOUT ANY WARRANTY; without even the implied warranty of&lt;br /&gt;
      MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the&lt;br /&gt;
      GNU General Public License for more details.&lt;br /&gt;
      You should have received a copy of the GNU General Public License&lt;br /&gt;
      along with this program; if not, write to the Free Software&lt;br /&gt;
      Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA  02111-1307, USA.&lt;br /&gt;
    --&amp;gt;&lt;br /&gt;
    &amp;lt;title&amp;gt;Brainfuck Converter/Interpreter&amp;lt;/title&amp;gt;&lt;br /&gt;
    &lt;br /&gt;
    &amp;lt;!-- bf.js --&amp;gt;&lt;br /&gt;
    &amp;lt;script&amp;gt;&lt;br /&gt;
BF_ARRAY_LEN = 4000;&lt;br /&gt;
arr = new Array(BF_ARRAY_LEN);  &lt;br /&gt;
function push(el, stack)&lt;br /&gt;
{&lt;br /&gt;
  stack[stack.length] = el;&lt;br /&gt;
  return stack;&lt;br /&gt;
}&lt;br /&gt;
function peek(stack)&lt;br /&gt;
{&lt;br /&gt;
  return stack[stack.length-1];&lt;br /&gt;
}&lt;br /&gt;
function pop(stack)&lt;br /&gt;
{&lt;br /&gt;
  return stack.slice(0,stack.length-2);&lt;br /&gt;
}&lt;br /&gt;
function evalBF(codestr, outputField)&lt;br /&gt;
{&lt;br /&gt;
  outputField.value = &amp;quot;&amp;quot;;&lt;br /&gt;
  for (i=0; i&amp;lt;BF_ARRAY_LEN; i++) arr[i] = 0;&lt;br /&gt;
  ptr = 0;&lt;br /&gt;
  loopstack = Array();&lt;br /&gt;
  i = 0;&lt;br /&gt;
  while (i &amp;lt; codestr.length)&lt;br /&gt;
  {&lt;br /&gt;
  switch (codestr.charAt(i))&lt;br /&gt;
  {&lt;br /&gt;
  case &amp;quot;[&amp;quot;:&lt;br /&gt;
    if (arr[ptr]!=0) loopstack = push(i,loopstack);&lt;br /&gt;
    else i = codestr.indexOf(&amp;quot;]&amp;quot;,i);&lt;br /&gt;
    i++;&lt;br /&gt;
    break;&lt;br /&gt;
  case &amp;quot;]&amp;quot;:&lt;br /&gt;
    i = peek(loopstack);&lt;br /&gt;
    loopstack = pop(loopstack);&lt;br /&gt;
    break;&lt;br /&gt;
  case &amp;quot;+&amp;quot;:&lt;br /&gt;
    arr[ptr]++;&lt;br /&gt;
    i++;&lt;br /&gt;
    break;&lt;br /&gt;
  case &amp;quot;-&amp;quot;:&lt;br /&gt;
    arr[ptr]--;&lt;br /&gt;
    i++;&lt;br /&gt;
    break;&lt;br /&gt;
  case &amp;quot;&amp;lt;&amp;quot;:&lt;br /&gt;
    ptr--;&lt;br /&gt;
    i++;&lt;br /&gt;
    break;&lt;br /&gt;
  case &amp;quot;&amp;gt;&amp;quot;:&lt;br /&gt;
    ptr++;&lt;br /&gt;
    i++;&lt;br /&gt;
    break;&lt;br /&gt;
  case &amp;quot;.&amp;quot;:&lt;br /&gt;
    outputField.value += String.fromCharCode(arr[ptr]);&lt;br /&gt;
    i++;&lt;br /&gt;
    break;&lt;br /&gt;
  case &amp;quot;,&amp;quot;:&lt;br /&gt;
    input = prompt(&amp;quot;BF program input:&amp;quot;,&amp;quot;&amp;quot;);&lt;br /&gt;
    arr[ptr] = input.charCodeAt(0);&lt;br /&gt;
    i++;&lt;br /&gt;
    break;&lt;br /&gt;
  default:&lt;br /&gt;
    i++;&lt;br /&gt;
    break;&lt;br /&gt;
  }&lt;br /&gt;
  }&lt;br /&gt;
}&lt;br /&gt;
function strTimes(str,times)&lt;br /&gt;
{&lt;br /&gt;
  endstr = &amp;quot;&amp;quot;;&lt;br /&gt;
  for (var i=0; i&amp;lt;times; i++) endstr += str;&lt;br /&gt;
  return endstr;&lt;br /&gt;
}&lt;br /&gt;
function printDifference(diff,poschar,negchar)&lt;br /&gt;
{&lt;br /&gt;
  str = &amp;quot;&amp;quot;;&lt;br /&gt;
  if (diff&amp;gt;0)&lt;br /&gt;
  for (var b=0; b&amp;lt;diff; b++) str += poschar;&lt;br /&gt;
  else&lt;br /&gt;
  for (var b=0; b&amp;lt;-diff; b++) str += negchar;&lt;br /&gt;
  return str;&lt;br /&gt;
}&lt;br /&gt;
function writeBins(numBins,diff)&lt;br /&gt;
{&lt;br /&gt;
  str = strTimes(&amp;quot;+&amp;quot;,diff) + &amp;quot;[&amp;quot;;&lt;br /&gt;
  for (var i=1; i&amp;lt;numBins; i++)&lt;br /&gt;
  {&lt;br /&gt;
  str += &amp;quot;&amp;gt;&amp;quot; + strTimes(&amp;quot;+&amp;quot;,i+1);&lt;br /&gt;
  }&lt;br /&gt;
  str += strTimes(&amp;quot;&amp;lt;&amp;quot;,numBins-1) + &amp;quot;-]&amp;quot;;&lt;br /&gt;
  str += strTimes(&amp;quot;+&amp;quot;,diff);&lt;br /&gt;
  return str;&lt;br /&gt;
}&lt;br /&gt;
function findClosestBin(val,bins,currbin)&lt;br /&gt;
{&lt;br /&gt;
  var minBin = 0;&lt;br /&gt;
  for (var b=1; b&amp;lt;bins.length; b++)&lt;br /&gt;
  {&lt;br /&gt;
  if (Math.abs(val-bins[b]) &amp;lt; Math.abs(val-bins[minBin])) minBin = b;&lt;br /&gt;
  }&lt;br /&gt;
  if (Math.abs(val-bins[minBin]) &amp;gt; Math.abs(val-bins[currbin])) return currbin;&lt;br /&gt;
  return minBin;&lt;br /&gt;
}&lt;br /&gt;
function text2BF(textstr, numBins)&lt;br /&gt;
{&lt;br /&gt;
  if (numBins&amp;lt;=0) return &amp;quot;error: too few bins&amp;quot;;&lt;br /&gt;
  var bins = new Array(numBins);&lt;br /&gt;
  var diff = Math.floor(127/numBins);&lt;br /&gt;
  for (var i=0; i&amp;lt;numBins; i++) bins[i] = (i + 1) * diff;&lt;br /&gt;
  var codestr = writeBins(numBins,diff);&lt;br /&gt;
  var i = 0;&lt;br /&gt;
  var currbin = 0;&lt;br /&gt;
  var newbin = 0;&lt;br /&gt;
  while (i &amp;lt; textstr.length)&lt;br /&gt;
  {&lt;br /&gt;
  c = textstr.charCodeAt(i);&lt;br /&gt;
  newbin = findClosestBin(c,bins,currbin);&lt;br /&gt;
  codestr += printDifference(newbin-currbin,&amp;quot;&amp;gt;&amp;quot;,&amp;quot;&amp;lt;&amp;quot;);&lt;br /&gt;
  codestr += printDifference(c-bins[newbin],&amp;quot;+&amp;quot;,&amp;quot;-&amp;quot;);&lt;br /&gt;
  codestr += &amp;quot;.&amp;quot;;&lt;br /&gt;
  currbin = newbin;&lt;br /&gt;
  bins[newbin] = c;&lt;br /&gt;
  i++;&lt;br /&gt;
  }&lt;br /&gt;
  return codestr;&lt;br /&gt;
}&lt;br /&gt;
function smartText2BF(textstr, binField)&lt;br /&gt;
{&lt;br /&gt;
   var bestbin = 1;&lt;br /&gt;
   var results = new Array(16);&lt;br /&gt;
   var beststr = &amp;quot;&amp;quot;;&lt;br /&gt;
   var resultstr = &amp;quot;&amp;quot;;&lt;br /&gt;
   for (var i=1; i&amp;lt;=16; i++)&lt;br /&gt;
   {&lt;br /&gt;
   var str = text2BF(textstr, i);&lt;br /&gt;
   results[i-1] = str.length;&lt;br /&gt;
   &lt;br /&gt;
   if (results[i-1] &amp;lt; results[bestbin-1])&lt;br /&gt;
   {&lt;br /&gt;
     beststr = str;&lt;br /&gt;
     bestbin = i;&lt;br /&gt;
   }&lt;br /&gt;
   resultstr += i + &amp;quot;: &amp;quot; + results[i-1] + &amp;quot;\n&amp;quot;;&lt;br /&gt;
   }&lt;br /&gt;
   binField.value = bestbin;&lt;br /&gt;
   return beststr;&lt;br /&gt;
}&lt;br /&gt;
    &amp;lt;/script&amp;gt;&lt;br /&gt;
  &amp;lt;/head&amp;gt;&lt;br /&gt;
  &amp;lt;body&amp;gt;&lt;br /&gt;
    &amp;lt;form&amp;gt;&lt;br /&gt;
      Input:&amp;lt;br&amp;gt;&lt;br /&gt;
      &amp;lt;textarea name=&amp;quot;codestr&amp;quot; rows=&amp;quot;4&amp;quot; cols=&amp;quot;50&amp;quot; wrap=&amp;quot;hard&amp;quot;&amp;gt;&amp;lt;/textarea&amp;gt;&amp;lt;br&amp;gt;&amp;lt;br&amp;gt;&lt;br /&gt;
      Bins (1-10): &amp;lt;input name=&amp;quot;numBins&amp;quot; value=&amp;quot;5&amp;quot; size=&amp;quot;1&amp;quot; type=&amp;quot;text&amp;quot;&amp;gt;&lt;br /&gt;
      &amp;lt;input value=&amp;quot;Text2BF&amp;quot; onclick=&amp;quot;bfout.value = text2BF(codestr.value, numBins.value)&amp;quot; type=&amp;quot;button&amp;quot;&amp;gt;&lt;br /&gt;
      &amp;lt;input value=&amp;quot;Smart Text2BF&amp;quot; onclick=&amp;quot;bfout.value = smartText2BF(codestr.value, numBins)&amp;quot; type=&amp;quot;button&amp;quot;&amp;gt;&lt;br /&gt;
      &amp;lt;input value=&amp;quot;Interpret&amp;quot; onclick=&amp;quot;evalBF(codestr.value,bfout)&amp;quot; type=&amp;quot;button&amp;quot;&amp;gt;&amp;lt;br&amp;gt;&amp;lt;br&amp;gt;&lt;br /&gt;
      Output:&amp;lt;br&amp;gt;&lt;br /&gt;
      &amp;lt;textarea name=&amp;quot;bfout&amp;quot; rows=&amp;quot;6&amp;quot; cols=&amp;quot;50&amp;quot;&amp;gt;&amp;lt;/textarea&amp;gt;&amp;lt;br&amp;gt;&lt;br /&gt;
    &amp;lt;/form&amp;gt;&lt;br /&gt;
  &amp;lt;/body&amp;gt;&lt;br /&gt;
&amp;lt;/html&amp;gt;&lt;br /&gt;
           &lt;br /&gt;
       &amp;lt;/source&amp;gt;&lt;/div&gt;</summary>
		<author><name>Admin</name></author>	</entry>

	</feed>