10 Jan
2017
Начал отпуск с того, что всю ночь играл в TIS-100 (игра про ассемблер и обработку сигналов).
Прошел первые десять уровней, проспал весь день, а сейчас снова засел, но уже не могу ни одного уровня пройти =( Мой мозг отказывается придумывать, как можно сделать умножение с помощью сложения, стека и операции сравнения с нулем.
впрочем, я не знаю, как там именно это делается в TIS, но на брейнфаке это делается двумя циклами (а цикл это не более чем jump if zero)
ну то есть if not zero, мать его
SilverDragon, вот как-то так выглядит. А как оно делается на брейнфаке?
AFAIK, ууу, не, на почти спящую голову я с этим не разберусь. На брейнфаке примерно так
+++++>+++++< 5x5 for example
<[->>+<<]>> move 5 to the 3rd cell as you cannot quite copy stuff directly in brainfuck cause origin cell gets zeroed
[->+<<<+>>] copy 5 to the 1st cell (back) and add to 4th cell (accumulator) 3rd cell gets zeroed in the process
<- reduce the second factor by one so now on the first step we have 5 by 4 and 5 total on the second 5 by 3 and 10 total etc
] end loop
ууу, в брейнфаке я ни на какую голову не разберусь =)
но в игре одно умножение я еще могу сделать, проблема в том, чтобы система продолжала произвольные числа дальше перемножать, и правильно отрабатывала умножение на ноль. Лучше уже на завтра оставлю =)
но брейнфак же легкий. Машину Тьюринга знаешь? с лентой с ячейками и "курсором" который по ней бегает
+ добавить 1 к ячейке под курсором
- отнять 1 от ячейки под курсором
< курсор влево
. вывести значение под курсором
, ввести значение в ячейку под курсором
[ маркер для прыжка
] прыгнуть к парному маркеру если под курсором не ноль
О, дошло =)