Напишите прямоугольный блок текста, который при размещении в ковре Серпинского , используя блоки одинакового размера для пустых порций, создает программу, которая выводит номер итерации ковра.
Например, если ваш текстовый блок
TXT
BLK
затем запустить программу
TXTTXTTXT
BLKBLKBLK
TXT TXT
BLK BLK
TXTTXTTXT
BLKBLKBLK
должен выводить, 1
потому что форма программы представляет первую итерацию ковра Серпинского.
Точно так же работает
TXTTXTTXTTXTTXTTXTTXTTXTTXT
BLKBLKBLKBLKBLKBLKBLKBLKBLK
TXT TXTTXT TXTTXT TXT
BLK BLKBLK BLKBLK BLK
TXTTXTTXTTXTTXTTXTTXTTXTTXT
BLKBLKBLKBLKBLKBLKBLKBLKBLK
TXTTXTTXT TXTTXTTXT
BLKBLKBLK BLKBLKBLK
TXT TXT TXT TXT
BLK BLK BLK BLK
TXTTXTTXT TXTTXTTXT
BLKBLKBLK BLKBLKBLK
TXTTXTTXTTXTTXTTXTTXTTXTTXT
BLKBLKBLKBLKBLKBLKBLKBLKBLK
TXT TXTTXT TXTTXT TXT
BLK BLKBLK BLKBLK BLK
TXTTXTTXTTXTTXTTXTTXTTXTTXT
BLKBLKBLKBLKBLKBLKBLKBLKBLK
должен вывести 2, потому что это форма второй итерации Серпинского ковра.
Запуск текстового блока как есть
TXT
BLK
должен выводить, 0
потому что это можно считать нулевой итерацией.
Это должно работать для всех дальнейших итераций. (По крайней мере, теоретически, если на компьютере есть память и все.)
подробности
- Программы не могут читать или получать доступ к информации об их исходном коде. Относитесь к этому как к строгой проблеме Куайна.
- Вывод идет в стандартный вывод или подобную альтернативу. Выведите только число и дополнительный завершающий перевод строки. Там нет ввода.
- Текстовый блок может содержать любые символы, которые не считаются символами конца строки . Текстовый блок может содержать пробелы.
- «Пустое пространство» в ковре должно состоять исключительно из символов пробела .
- При желании вы можете предположить, что все программы имеют завершающий перевод строки.
Вы можете использовать этот фрагмент стека, чтобы сгенерировать ковер для данного текстового блока на любой итерации:
<style>#o,#i{font-family:monospace;}</style><script>function c(e){e=e.split("\n");for(var n=new Array(3*e.length),t=0;t<n.length;t++){var l=t%e.length;n[t]=e[l]+(t>=e.length&&t<2*e.length?e[l].replace(/./g," "):e[l])+e[l]}return n.join("\n")}function f(){for(i=document.getElementById("i").value,n=parseInt(document.getElementById("n").value);n>0;)i=c(i),n--;document.getElementById("o").value=i}</script><textarea id='i'placeholder='code block...'rows='8'cols='32'></textarea><br>Iterations <input id='n'type='text' value='1'><br><br><button type='button'onclick='f()'>Generate</button><br><br><textarea id='o'placeholder='output...'rows='8'cols='32'style='background-color:#eee'readonly></textarea>
счет
Представление, начальный текстовый блок которого наименьший по площади (ширина умножается на высоту), является победителем. TXT\nBLK
Пример 3 на 2 на балл 6. ( в основном короткие выигрыши коды, поэтому кодовое поле для тега.)
Tiebreaker переходит к представлению, которое использует наименьшее количество отдельных символов в своем текстовом блоке. Если все еще связаны, ответ опубликовал первые победы.