Given a text, this program will output a Brainfuck program, that when executed will print the text back.
Writing Brainfuck in this style to print a sentence is pretty straightforward. Iterate over the sentence and do the following per character:
- Calculate the difference between the current character and the previous
- Write either as many
+
or-
as the difference between characters.+
if current character is higher than previous character,-
if lower than previous character- Write
.
to print current character
Hello, World!
++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++.
+++++++++++++++++++++++++++++.
+++++++.
.
+++.
-------------------------------------------------------------------.
------------.
+++++++++++++++++++++++++++++++++++++++++++++++++++++++.
++++++++++++++++++++++++.
+++.
------.
--------.
-------------------------------------------------------------------.
The code
def brainturing_printer_generator(text)
ords = text.chars.map(&:ord)
("+" * ords.first + ".\n") + ords
.zip(ords[1..-1])
.take(ords.size - 1)
.map {|prev, curr| (curr > prev ? "+" : "-") * (curr - prev).abs}
.join(".\n") + ".\n"
end
print brainturing_printer_generator("Hello, World!")