Напишіть прямокутний блок тексту, який, розміщуючи в килимі Сьєрпінського , використовуючи однакові за розмірами блоки пробілів для порожніх частин, створює програму, яка виводить номер ітерації килима.
Наприклад, якщо ваш текстовий блок є
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
тому що це можна вважати нульовою ітерацією.
Це повинно працювати для всіх подальших ітерацій. (Принаймні теоретично, якщо припустити, що комп'ютер має пам'ять і все.)
Деталі
- Програми можуть не читати або отримувати доступ до інформації про свій вихідний код. Ставтесь до цього, як до суворої проблеми з королевою
- Вихід йде в stdout або подібну альтернативу. Виведіть лише номер та необов'язковий пропускний рядок. Введення немає.
- Текстовий блок може містити будь-які символи, які не вважаються термінаторами рядків . Текстовий блок може містити пробіли.
- "Порожній простір" на килимі повинен повністю складатися з символів пробілу .
- Ви можете припустити, що всі програми мають зворотний новий рядок.
Ви можете використовувати цей фрагмент стека для створення килима для заданого текстового блоку на будь-якій ітерації:
<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 переходить до подання, яке використовує найменші чіткі символи в їх текстовому блоці. Якщо все-таки зрівняли, відповідь, розміщений першими, виграє.