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/
азбука
+ ++ +++ ++++ + ++
+ + +
+ + + +
+ + +
+ + +
++++ + ++ +++ ++++
+ + + +
+ + + +
+ + + +
+ + + +
++++ + ++ ++. +.+.
DEF
+ ++ ++ + ++++ +++ ++ + ++++
+ + +
+ + +
+ + + +
+ + +
++ + +++ ++++ + ++
+ + +
+ + + +
+ + +
+ + +
++++ + ++ ++. +.+.
GHIJK
+ + +++ ++ +++ +++ ++
+ + + + +
+ + + + +
+ + + + + +
++ +++ + + +++
+ + + + + + + +
+ + + + + + +
+ + + + + + + +
+++ + + ++. +. +.+ .+.
LMNOP
+ + +++ + + +++ + + +++ + + +++
+ + + + + + + +
+ + + + + + + +
+ + + + + + + + +
+ + +++
+ + + + + + + +
+ + + + + + + +
+ + + + + + + + +
+ . +.+ . + .+.
QRSTU
+ + +++ +++ +++ +++ ++
+ + + + + + + +
+ + + + + + +
+ + + + + + + +
+++ +++ + + +++ +++ +++
+ + + + +
+ + + + + +
+ + + + + +
+++ ++ +++ .+. +.+ .+.
VWXYZ
+ + +++
+ + + + + + + + +
+ + + + + + + + +
+ + + + + + + + +
+++ +++ + + +++ +++ ++
+ + + + + + + + +
+ + + + + + + +
+ + + + + + + +
+++ + + +++ +++ ++ .+. +.+ .+.
Copyable
с большинством строк с буквами в случайном порядке (не по возрастанию) размер букв намного больше, и буквы выглядят намного лучше. К сожалению, размеры файлов становятся довольно большими. Я не могу загрузить полное слово UCOPYRIGHTABLE здесь, COPYABLE - самое длинное слово, которое мне разрешено.
+ +++++++++ +++++++++++ + +++++++++ +++++++++++ ++ ++++++++ +++++++++++ +++ +.+++++ +++++++.+.+ ++++ ++++.+ +++++++++++
+ + + + + + + + + + +
+ + + + + + + + + + + +
+ + + + + + + + + + +
+ + + + + + + + + + + +
+ + + + + + + + + + +
+ + + + + + + + + + + +
+ + + + + + + + + + +
+ + + + + + + + + + + +
+ + + + + + + + + + +
+ + + + + + + + + + +
+ + + + + + + + + + + +
+++++++++ + +++++++++++ ++++++++++ +++++++++++ +++++++++++ ++++++++++ +++++++++++ + +++++++++ ++++++++++. +. ++++++++
+ + . + + + + + + + + +
+ + + + + + + + + + +
+ + + + + + + + + + + +
+ + + + + + + + + + +
+ + + + + + + + + + +
+ + + + + + + + + + + +
+ + + + + + + + + + +
+ + + + + + + + + + + +
+ + + + + + + + + + +
+ + + + + + + + + + + +
+ + + + + + + + + + +
+++++++++++ +++++++ +++ +++++++++++ ++++++++ ++ +++++++++++ +++++++++ + +++++++++++ ++++++++++ +++++++++++ +++++++++++ ++++++++++ ++++++++++.