C -> Brainfuck 556 байт
Виключаючи зайвий пробіл. Я міг би легко зберегти ще сотню, змінивши шрифтові дані d[]
з шестигранних на рядок у кавових позначках.
i,j,s,t,u,v,w,h;
char a[99],b[9999],k,d[]={0x6F,0x3B,0x5A,0xD5,0x7A,0x6A,0x5B,0x2F,0xD0,0x57,0xA1,0x1B,0xCF,0x4F,0x5F,0x6E,0x6D,0x4E,0x79,0x3A,0x1F,0x95,0x9F,0xA6,0x3D,0x76};
f(int z){
return d[a[j-1-t%(2*w*j)/w/2]-65]>>z&1?z=b[i*v/u],b[i++*v/u]=' ',z:' ';
}
main(){
for(scanf("%s",a);a[j];i++)a[j]-k?k++,b[i]='+':(b[i]='.',t+=(0xE7572B70967DB>>(a[j]*2-130)&3)+5,j++);
s=i/t+2;
u=t*(s-1);
v=i;
i=0;
w=2*s;h=2*s+1;
for(t=2*w*h*j;t--;)putchar(
t%(2*w*j)?
t/2/w/j%s?
t%s||!(t/4%s)?' ':f(t/s%4/2+t/2/w/j/s*2|7*(t/s%4==2))
:(
(t%s)&&(t/s+1&2)?f(4+t/2/w/j/s):' '
)
:10 //newline
);
}
Для цього використовується шрифт калькулятора (для низької ентропії - лише один байт на літеру) та дуже наївний компілятор Brainfuck, натхненний https://codegolf.stackexchange.com/a/35801/15599 (за винятком того, що я використовую плюс замість мінусу.) Перший for
цикл збирає текст у a
рядок b
, а також обчислює кількість штрихів, необхідних для малювання форматованого коду, використовуючи 13-значне шістнадцяткове магічне число (усі символи - 5-8 штрихів.)
Враховуючи загальну довжину програми та кількість обведення, обчислюється кількість символів на обведення (це може бути дуже мало, якщо символи однакові чи у порядку зростання, і дуже великі, якщо символи знаходяться у порядку зменшення.)
Більшість решти програми присвячена вирішенню питання про те, чи потрібно друкувати пробіл або один з штрихів. Якщо курсор знаходиться над квадратом обведення, функція f
викликається числом цього обведення як аргумент. Він повертає пробіл, якщо цей штрих не потрібен для поточної літери, або символ програми, якщо він є. Оскільки кількість символів, необхідних для завершення мистецтва ASCII, може бути більше, ніж символів у програмі, періодично вставляється пробіл, отже, обчислення b[i * v/u]
.
У шрифті є чотири одиночні штрихи та чотири подвійні штрихи, пронумеровані таким чином, які є або відсутні, або відсутні, залежно від літери.
6666 6666
3 7 2
3 7 2
3 7 2
3 7 2
5555 5555
1 7 0
1 7 0
1 7 0
1 7 0
4444 4444
Вихідні дані
Тест на http://copy.sh/brainfuck/
ABC
+ ++ +++ ++++ + ++
+ + +
+ + + +
+ + +
+ + +
++++ + ++ +++ ++++
+ + + +
+ + + +
+ + + +
+ + + +
++++ + ++ ++. +.+.
DEF
+ ++ ++ + ++++ +++ ++ + ++++
+ + +
+ + +
+ + + +
+ + +
++ + +++ ++++ + ++
+ + +
+ + + +
+ + +
+ + +
++++ + ++ ++. +.+.
GHIJK
+ + +++ ++ +++ +++ ++
+ + + + +
+ + + + +
+ + + + + +
++ +++ + + +++
+ + + + + + + +
+ + + + + + +
+ + + + + + + +
+++ + + ++. +. +.+ .+.
LMNOP
+ + +++ + + +++ + + +++ + + +++
+ + + + + + + +
+ + + + + + + +
+ + + + + + + + +
+ + +++
+ + + + + + + +
+ + + + + + + +
+ + + + + + + + +
+ . +.+ . + .+.
QRSTU
+ + +++ +++ +++ +++ ++
+ + + + + + + +
+ + + + + + +
+ + + + + + + +
+++ +++ + + +++ +++ +++
+ + + + +
+ + + + + +
+ + + + + +
+++ ++ +++ .+. +.+ .+.
VWXYZ
+ + +++
+ + + + + + + + +
+ + + + + + + + +
+ + + + + + + + +
+++ +++ + + +++ +++ ++
+ + + + + + + + +
+ + + + + + + +
+ + + + + + + +
+++ + + +++ +++ ++ .+. +.+ .+.
КОПІАБЛІ
у більшості рядків з літерами у довільному порядку (не висхідний) розмір букви набагато більший, а літери виглядають набагато краще. На жаль, розміри файлів стають досить великими. Я не можу завантажити повне слово UCOPYRIGHTABLE тут, COPYABLE - це приблизно найдовше слово, яке мені дозволено.
+ +++++++++ +++++++++++ + +++++++++ +++++++++++ ++ ++++++++ +++++++++++ +++ +.+++++ +++++++.+.+ ++++ ++++.+ +++++++++++
+ + + + + + + + + + +
+ + + + + + + + + + + +
+ + + + + + + + + + +
+ + + + + + + + + + + +
+ + + + + + + + + + +
+ + + + + + + + + + + +
+ + + + + + + + + + +
+ + + + + + + + + + + +
+ + + + + + + + + + +
+ + + + + + + + + + +
+ + + + + + + + + + + +
+++++++++ + +++++++++++ ++++++++++ +++++++++++ +++++++++++ ++++++++++ +++++++++++ + +++++++++ ++++++++++. +. ++++++++
+ + . + + + + + + + + +
+ + + + + + + + + + +
+ + + + + + + + + + + +
+ + + + + + + + + + +
+ + + + + + + + + + +
+ + + + + + + + + + + +
+ + + + + + + + + + +
+ + + + + + + + + + + +
+ + + + + + + + + + +
+ + + + + + + + + + + +
+ + + + + + + + + + +
+++++++++++ +++++++ +++ +++++++++++ ++++++++ ++ +++++++++++ +++++++++ + +++++++++++ ++++++++++ +++++++++++ +++++++++++ ++++++++++ ++++++++++.