Matlab, 466 393 - 20% = 314,4 байта
Гольф: (Может сэкономить еще несколько байтов, в том числе благодаря помощи @ AndreasDeak!)
function q(W);function z=g(l,c);[x,y]=ndgrid(abs(-l:l));z=0*y;z(~x&~y)=c;z(x+y==l)=46;end;w=W-96;n=numel(w);R=n*26;C=1;A=zeros(2*R);for k=1:n;f=sort(factor(w(k)));C=C+max(f)+1;d=-1;r=R;for F=fliplr(f);v=-F:F;while norm(A(r+v,v+C));r=r+d;end;A(r+v,v+C)=g(F,W(k));d=-d;end;C=C+max(f);end;A=A(find(sum(A,2)),find(sum(A)));f=fopen([W,'.txt'],'w');for k=1:size(A,1);fprintf(f,[A(k,:),'\n']);end;end
Он также должен работать в Octave (opensource), но только с большим количеством предупреждений. Используйте эту версию, если вы хотите попробовать ее в октаве (вывод на консоль, а не в файл):
function q(W);function z=g(l,c);[x,y]=ndgrid(abs(-l:l));z=0*y;z(~x&~y)=c;z(x+y==l)=46;end;w=W-96;n=numel(w);R=n*26;C=1;A=zeros(2*R);for k=1:n;f=sort(factor(w(k)));C=C+max(f)+1;d=-1;r=R;for F=fliplr(f);v=-F:F;while norm(A(r+v,v+C));r=r+d;end;A(r+v,v+C)=g(F,W(k));d=-d;end;C=C+max(f);end;A=A(find(sum(A,2)),find(sum(A)));disp([A,'']);end
Разгромил и объяснил:
function q(W)
function z=g(l,c) %get a square matrix for one prime factor
[x,y]=ndgrid(abs(-l:l));
z=0*y;
z(~x&~y)=c; %character in the middle
z(x+y==l)=46; %dots
end;
w=W-96; %convert word to the corresponding indices
n=numel(w);
R=n*26; %keeps track of the main row
C=1; %keeps track of the current column
A=zeros(2*R); %make a 'canvas' matrix that is way to big
for k=1:n;
f=sort(factor(w(k))); %get all the factors of current character
C=C+max(f)+1; %update current column
d=-1; %search direction
r=R;
for F=fliplr(f);
v=-F:F;
while norm(A(r+v,v+C)); %go up or down until there is enough space to write the prime factor
r=r+d;
end;
A(r+v,v+C)=g(F,W(k)); %insert all the prime factors
d=-d;
end;
C=C+max(f);
end;
A=A(find(sum(A,2)),find(sum(A))); %truncate all the unneccessary padding
f=fopen([W,'.txt'],'w'); %write to file
for k=1:size(A,1);
fprintf(f,[A(k,:),'\n']);
end;
end
Запрашиваемое слово: (а здесь в виде файла: (сильно уменьшить): supercalifragilisticexpialidocious.txt )
, , ,
, , , , , ,
, , , , , ,
, , , , , ,
, , , , , ,
, , , , , ,
, , , , , ,
, , , , , ,
, , , , , ,
, , , , , , ,
, , , , , , , ,
, , , , , , , , , т. , , , ,
, , , , , , , , , , , , , , , , , , , , , , , , ,
, , , , , , , р . , л , р . , , , л , , , , Икс . , , , л , , , ,
, , , , , п . , , , , , , , , , , , , , , , , , , п . , , , , , , , ,
, , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , ,
, , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , ,
, , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , ,
, , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , ,
, s .. u .. p .. e .. r .. c ..a .. l .. i .. f .. r ..a .. g .. i .. l .. i .. s. . т .. я .. с .. е .. х .. р .. я ..а .. л .. я .. д .. о .. с .. я .. о .. ты .. с ,
, , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , ,
, , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , ,
, , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , ,
, , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , ,
, , , , , п . , , , , , , , , , , , , , , , , , , , , , , , , , , , , п . , , , , , , , день , , , , , , , ,
, , , , , , , , , л , , , ф. , , , , , , , л , , , , , , , , Икс . , , , , , л , , , , , , , , , , , ,
, , , , , р . , , , я , , , р . , , я , , , я , , , , , я , , , , я , , , я , , , , я , , , , ,
, , , , , , , , , , , , , , , , , , , , т. , , , , , , , , , , , , , , , , , ,
, , , , , , , , , , , , , , , , , , , , , , , , , , , , , , о , , , о , , , ,
, , , , , п . , , , , , , , , , , , , п . , , , , , , , , , , ,
, , , ты , , , , , Икс . , , , , , , , ты , ,
, , , , , , , , , , , , , , , ,
, , , , , , , , , , ,
, , , , , , , ,
, , , , , ,
, , , , , ,
, , , , , ,
, , , , , ,
, , ,