<?xml version="1.0" encoding="utf-8"?> 
<rss version="2.0"
  xmlns:itunes="http://www.itunes.com/dtds/podcast-1.0.dtd"
  xmlns:atom="http://www.w3.org/2005/Atom">

<channel>

<title>Блоги: заметки с тегом CFR[]</title>
<link>https://blogengine.me/blogs/tags/cfr/</link>
<description>Автоматически собираемая лента заметок, написанных в блогах на Эгее</description>
<author></author>
<language>ru</language>
<generator>Aegea 11.0 (v4079e)</generator>

<itunes:subtitle>Автоматически собираемая лента заметок, написанных в блогах на Эгее</itunes:subtitle>
<itunes:image href="" />
<itunes:explicit>no</itunes:explicit>

<item>
<title>Сжатие инструкций для CFR[]</title>
<guid isPermaLink="false">124116</guid>
<link>https://bolknote.ru/all/szhatie-instrukciy-dlya-cfr/</link>
<pubDate>Mon, 06 Nov 2023 18:43:46 +0500</pubDate>
<author>Евгений Степанищев</author>
<comments>https://bolknote.ru/all/szhatie-instrukciy-dlya-cfr/</comments>
<description>
&lt;p&gt;&lt;a href="https://bolknote.ru/"&gt;Евгений Степанищев&lt;/a&gt;:&lt;/p&gt;
&lt;p&gt;&lt;a href="https://github.com/bolknote/png2cfr/"&gt;Выложил&lt;/a&gt; свою программу для перевода растра в инструкции для интерпретатора &lt;i&gt;CFR[]&lt;/i&gt;. Написана, к слову, на «Гоу». Что-то давно я не программировал на этом языке, вот и решил смазать свежим опытом уже начавшие ржаветь знания.&lt;/p&gt;
&lt;p&gt;Самая интересная часть там — про оптимизацию. Из-за наличия цикла для однократного повторения, в который можно что-то вкладывать, программу можно писать сильно по-разному. Можно прямолинейно — &lt;tt&gt;FFFFFFFFFFFFFF&lt;/tt&gt;, а можно упаковать в цикл — &lt;tt&gt;[F[FFF]]&lt;/tt&gt;, станет чуть короче.&lt;/p&gt;
&lt;div class="e2-text-picture"&gt;
&lt;img src="https://bolknote.ru/pictures/2023.11.06@2x.png" width="1000" height="120" alt="" /&gt;
&lt;div class="e2-text-caption"&gt;RR[CF][FF][CCC]CF[F[RRR]]FCC[FF]F[FRR]FFCC[FF][CC][F[RRR]]CC[FF]FF[FRR]F[CC][CF][CCC]CF[FC]C[F[RRR]][FF]FF[CCC][FRR][FCCFF[CCC]][F[RRR]][FF]FF[FRR][FF]FFF&lt;/div&gt;
&lt;/div&gt;
&lt;p&gt;Из-за того, что интерпретатор позволяет писать программы не более чем в 256 инструкций, инструкции приходится ужимать циклами, а чтобы не делать это вручную, хочется как-то автоматизировать.&lt;/p&gt;
&lt;p&gt;Я реализовал довольно очевидную идею — делаем две переменные, одна указывает на начало инструкций, вторая — на середину. Вырезаем подстроку между двумя этими индексами, ищем её сразу за правым индексом, если находим, заменяем на вырезанное, оборачивая в цикл и начинаем сканировать заново. Если не находим, сдвигаем сначала правый указатель к началу, повторяем поиск, потом левый к центру, повторяем поиск. Естественно по ходу надо отбрасывать куски, где не сбалансированы скобки, это совсем просто.&lt;/p&gt;
&lt;div class="e2-text-picture"&gt;
&lt;img src="https://bolknote.ru/pictures/2023.11.06.1@2x.jpg" width="1000" height="690" alt="" /&gt;
&lt;div class="e2-text-caption"&gt;Мои рассуждения на бумаге по порядку обхода картинки&lt;/div&gt;
&lt;/div&gt;
&lt;p&gt;Кроме того, у нас есть восемь вариантов обхода картинки — по двум направлениям из каждого угла, что, если нет симметрии, даёт восемь разных наборов инструкций, которые сжимаются по-разному. Я перебираю все восемь и вывожу самый короткий вариант.&lt;/p&gt;
&lt;p&gt;При этом немного смещается координаты отрисовки картинки. Её можно было бы возвращать обратно, но зачем? Интерпретатор и так рисует в центре холста, так что сдвиг — это не принципиально, только размер кодирующей последовательности увеличится.&lt;/p&gt;
</description>
</item>

<item>
<title>CFR[]</title>
<guid isPermaLink="false">124078</guid>
<link>https://bolknote.ru/all/cfr/</link>
<pubDate>Fri, 03 Nov 2023 19:09:08 +0500</pubDate>
<author>Евгений Степанищев</author>
<comments>https://bolknote.ru/all/cfr/</comments>
<description>
&lt;p&gt;&lt;a href="https://bolknote.ru/"&gt;Евгений Степанищев&lt;/a&gt;:&lt;/p&gt;
&lt;p&gt;Прикольную штуку увидел на «Хабре» — &lt;a href="https://habr.com/ru/news/769076/"&gt;минималистичный язык &lt;i&gt;CFR[]&lt;/i&gt;&lt;/a&gt; для рисования картинок. Тамошнему народу не очень-то понравилось, а я люблю такое.&lt;/p&gt;
&lt;p&gt;Синтаксис односимволный, &lt;tt&gt;C&lt;/tt&gt; — циклическая смена цвета (доступно семь цветов), &lt;tt&gt;F&lt;/tt&gt; — рисование со сдвигом по текущему направлению, &lt;tt&gt;R&lt;/tt&gt; — смена направления на 45° по часовой стрелке и пара &lt;nobr&gt;&lt;tt&gt;[ ]&lt;/tt&gt;&lt;/nobr&gt;, которая один раз повторяет вложенные инструкции.&lt;/p&gt;
&lt;div class="e2-text-picture"&gt;
&lt;img src="https://bolknote.ru/pictures/2023.11.03.png" width="2000" height="480" alt="" /&gt;
&lt;div class="e2-text-caption"&gt;RR[FCCF[CCC]]FFCCF[CCC][FCCFF[CCC]]FF[FRR]CCF[CCC][FCCFF[CCC]]FCCFF[CCC][FCCF[CCC]][F[RRR]][FFCCF[CCC]][FCCFF[CCC]]FCCF[CCC][FRR]CCF[CCC][FCCFF[CCC]]FCCFF[CCC][FCCF[CCC]][F[RRR]]CCF[CCC]FCCF[[CCC]FFCCF][CCC]FFCCF[CCC]FFF&lt;/div&gt;
&lt;/div&gt;
&lt;p&gt;Лучше всего таким способом рисовать какие-нибудь рекуррентные штуки, но мне было интересно побаловаться с растром. К сожалению, &lt;a href="https://web.archive.org/web/20231018232054/https://susam.net/cfr.html"&gt;интерпретатор&lt;/a&gt; на вход берёт не более 256 инструкций, поэтому особо не разгонишься.&lt;/p&gt;
&lt;p&gt;Состряпал небольшую программу, которой попереводил разные картинки в инструкции &lt;i&gt;CFR[]&lt;/i&gt;. В ограничение до обидного мало что влезает, но небольшие надписи писать можно.&lt;/p&gt;
</description>
</item>


</channel>
</rss>